📗

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

2024/11/07に公開

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

今回作るもの

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

準備:用意するもの

手順

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

1)Google App Scriptを作成する

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

2)APIキーを設定する

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

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

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

/**
 * Anthropic APIを使用してチャット応答を生成します。
 *
 * @param {string} userPrompt ユーザーからの入力テキスト
 * @param {string} systemPrompt システムプロンプト(省略可)
 * @param {"claude-3-5-sonnet-latest"|"claude-3-5-haiku-latest"|"claude-3-opus-latest"|"claude-3-sonnet-20240229"|"claude-3-haiku-20240307"} model 使用するモデル
 * @param {number=} temperature 応答のランダム性(0.1-1.0の範囲、省略可)
 * @param {number=} maxToken 最大トークン数(デフォルト4096)
 * @return {string} AIからの応答テキスト
 * @customfunction
 */
function ChatAIAnthropic(userPrompt="", systemPrompt="", model, temperature, maxToken=4096) {
    // 対応モデル
    const validModels = [
        "claude-3-5-sonnet-latest",
        "claude-3-5-haiku-latest",
        "claude-3-opus-latest",
        "claude-3-sonnet-20240229",
        "claude-3-haiku-20240307"
    ];

    // バリデーション
    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('ANTHROPIC_API_KEY');
    const apiUrl = 'https://api.anthropic.com/v1/messages';
    // メッセージの作成
    const messages = [];
    if (systemPrompt !== "") messages.push({'role': 'user', '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 = {
        'x-api-key': apiKey,
        'anthropic-version': '2023-06-01',
        'Content-type': 'application/json',
    };
    // リクエストの実行
    const response = UrlFetchApp.fetch(apiUrl, {
        'method': 'POST',
        'headers': headers,
        'payload': JSON.stringify(requestBody)
    });
    // レスポンスの解析
    const responseBody = response.getContentText();
    const responseJson = JSON.parse(responseBody);
    const content = responseJson.content[0].text;
    return content;
}

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

=ChatAIAnthropic(B2,C2,"claude-3-haiku-20240307")

参考ページ

Discussion