📗

【GAS】スプレッドシート上で「GPT」を使ってみる。

2024/11/07に公開

この記事では、スプレッドシート上でGPT(OpenAI)を使ってテキスト生成をする「カスタム関数」 を作ります。

今回作るもの

こんな感じで使えるカスタム関数を作ります。

準備:用意するもの

  1. Open AIのアカウント
  2. Open AIのAPIキー(APIキーを発行する

手順

  1. Google App Scriptを作成する
  2. APIキーを設定する
  3. コード.gs にコードを記載する
  4. スプレッドシートから関数を使う

1)Google App Scriptを作成する

まず「拡張機能」にある「App Script」をクリックして、App Scriptを作成します。

2)APIキーを設定する

左のメニューバーから「プロジェクトの設定」を選択します。下の方にある「スクリプト プロパティ」にAPIキーを設定します。

3)コード.gs にコードを記載する

コード.gsに下記コードを貼り付けて保存します。

/**
 * OpenAI APIを使用してチャット応答を生成します。
 *
 * @param {string} userPrompt ユーザーからの入力テキスト
 * @param {string} systemPrompt システムプロンプト(省略可)
 * @param {"gpt-4o"|"gpt-4o-mini"|"gpt-4"|"gpt-4-turbo"|"gpt-3.5-turbo"} model 使用するモデル
 * @param {number=} temperature 応答のランダム性(0-1の範囲、省略可)
 * @param {number=} maxToken 最大トークン数(省略可)
 * @return {string} AIからの応答テキスト
 * @customfunction
 */
function ChatAIOpenAI(userPrompt="", systemPrompt="", model="gpt-3.5-turbo", temperature, maxToken) {
    // 対応モデル
    const validModels = [
        "gpt-4o",
        "gpt-4o-mini",
        "gpt-4",
        "gpt-4-turbo",
        "gpt-3.5-turbo"
    ];
    // バリデーション
    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('OPENAI_API_KEY');
    const apiUrl = 'https://api.openai.com/v1/chat/completions';
    // メッセージの作成
    const messages = [];
    if (systemPrompt !== "") messages.push({'role': 'system', 'content': systemPrompt});
    messages.push({'role': 'user', 'content': userPrompt});
    // リクエストボディの作成
    const requestBody = {
        'model': model,
        'messages': messages
    };
    // オプショナルパラメータが指定されている場合のみ追加
    if (temperature !== "") requestBody.temperature = temperature;
    if (maxToken !== "") requestBody.max_tokens = maxToken;
    // リクエストの作成
    const headers = {
        'Authorization':'Bearer '+ apiKey,
        'Content-type': 'application/json',
    };
    // リクエストの実行
    const response = UrlFetchApp.fetch(apiUrl, {
        'method': 'POST',
        'headers': headers,
        'payload': JSON.stringify(requestBody)
    });
    // レスポンスの解析
    const json = JSON.parse(response.getContentText());
    return json.choices[0].message.content;
}

4)スプレッドシートから関数を使う

=ChatAIOpenAI(B2,C2,"gpt-4o-mini")

参考ページ

Discussion