📗
【GAS】スプレッドシート上で「Gemini」を使ってみる。
この記事では、スプレッドシート上でGemini(Google)を使ってテキスト生成をする「カスタム関数」 を作ります。
今回作るもの
こんな感じで使えるカスタム関数を作ります。
準備:用意するもの
- Google Cloud Pladformのアカウント
- Google AI StudioのAPIキー(APIキーを発行する)
手順
- Google App Scriptを作成する
- APIキーを設定する
-
コード.gs
にコードを記載する - スプレッドシートから関数を使う
1)Google App Scriptを作成する
まず「拡張機能」にある「App Script」をクリックして、App Scriptを作成します。
2)APIキーを設定する
左のメニューバーから「プロジェクトの設定」を選択します。下の方にある「スクリプト プロパティ」にAPIキーを設定します。
コード.gs
にコードを記載する
3)コード.gs
に下記コードを貼り付けて保存します。
/**
* Gemini APIを使用してチャット応答を生成します。
*
* @param {string} userPrompt ユーザーからの入力テキスト
* @param {string} systemPrompt システムプロンプト(省略可)
* @param {"gemini-1.5-flash"|"gemini-1.5-pro"|"gemini-1.0-pro"} model 使用するモデル
* @param {number=} temperature 応答のランダム性(0.0-2の範囲、省略可)
* @param {number=} maxToken 最大トークン数(省略可)
* @return {string} AIからの応答テキスト
* @customfunction
*/
function ChatAIGemini(userPrompt="", systemPrompt="", model, temperature, maxToken) {
// 対応モデル
const validModels = [
"gemini-1.5-flash",
"gemini-1.5-pro",
"gemini-1.0-pro"
];
// バリデーション
if (userPrompt === "" || !userPrompt) throw new Error("プロンプトを入力してください");
if (model === "" || !model) throw new Error("モデルを指定してください");
if (!validModels.includes(model)) throw new Error(`無効なモデルです。以下から選択してください: ${validModels.join(", ")}`);
// APIのセットアップ
const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
// メッセージの作成
const messages = [];
if (systemPrompt !== "") messages.push({'role': 'user', 'parts': [{'text': systemPrompt}]});
messages.push({'role': 'user', 'parts': [{'text': userPrompt}]});
// リクエストの作成
const headers = {
'Content-Type': 'application/json',
};
// リクエストボディの作成
const requestBody = {
'contents': messages
};
// generationConfigの作成(指定されたパラメータのみ含める)
const generationConfig = {};
if (temperature !== "") generationConfig.temperature = temperature;
if (maxToken !== "") generationConfig.maxOutputTokens = maxToken;
if (Object.keys(generationConfig).length > 0) requestBody.generationConfig = generationConfig;
// リクエストの実行
const response = UrlFetchApp.fetch(apiUrl, {
'method': 'POST',
'headers': headers,
'payload': JSON.stringify(requestBody)
});
// レスポンスの解析
const responseBody = response.getContentText();
const responseJson = JSON.parse(responseBody);
// レスポンスの構造を確認してエラーハンドリング
if (responseJson.candidates && responseJson.candidates[0] && responseJson.candidates[0].content) {
const text = responseJson.candidates[0].content.parts[0].text;
return text;
} else {
throw new Error("Geminiからの応答が不正な形式です: " + JSON.stringify(responseJson));
}
}
4)スプレッドシートから関数を使う
=ChatAIGemini(B2,C2,"gemini-1.5-pro")
参考ページ
- Gemini Models
- Gemini APIキー発行
- Gemini ドキュメント
- Gemini APIリファレンス
Discussion