見出し画像

【記事修正】生成AI「Claude」を表計算に召喚 Googleスプレッドシート用 Claude関数 これでスプシもAI対応さ! ソースコードも公開中

こんにちは!
ノーリーです。ClaudeChatGPT使ってますか?

折角の生成AIを表計算で使いませんか?
OpusもSonnetもHaikuも、呼び出し自在になります。

Googleスプレッドシートに、Claude関数

できるだけコストかからないように、キャッシュ機能つけておきました。

インストール方法として、ライブラリ機能を使う方法を紹介しましたが、問題があることが判明しました。
改めて、スプレッドシートファイルを公開してそのコピーを作る方式に変更することにしました。
お詫びして訂正いたします。

この記事は、大阪のIT専門学校「清風情報工科学院」の校長・平岡憲人(ノーリー)がお送りします。
清風情報工科学院では、情報処理系の講師を急募しております。
ご興味のある方はこちらの記事を御覧ください。


1.「CLAUDE関数」でできること

プロンプトを与えて、生成AIからの回答を引き出し表示すること。
モデル、回答の長さを変更可能。

そのまま使いたいかたはライブラリ登録で使えます。
ソースコードを公開いたしますので、自分のGoogleスプレッドシートのスクリプトエディタに張り付けても使えます。

必要なもの

・Claude のAPIキー

※ソフトは無料ですが、Claudeの利用料がかかります。

処理内容

Claude関数からプロンプトをAnthropicのAPIに送り、生成される回答を表示する。
その際、モデル名、最長トークン数を指定する。
プロンプトはテキストのみの前提。
Claudeには、毎分5回までというリクエスト制限がある。
リクエスト制限にかかりにくい様に、また、APIのコスト上昇を抑えるため、一度リクエストしたプロンプトとは10日間キャッシュに保管するようにしている。
キャッシュにあるリクエストなら、API呼び出しはせずキャッシュの値を返す。

お断り

このソフトは無保証です。
問題があれば、この記事のコメントに書いて下さい。
対処するかもしれませんが、しないかもしれません。
また、APIの利用によって利用料金が発生します。
当方は、この利用料についても一切責任を持ちません。

2.インストール方法

Googleスプレッドシートには、ライブラリ機能というものがあり、人が作った関数を、自分のスプレッドシートで利用することができる。
これを使って「Claude関数」をインストールする方法は次の通り。

インストール方法を改めます。
ライブラリを使う方法は良くないと判明しました。
もっと、簡単な方法が見つかりました。
後ほど修正します。

(1)Googleスプレッドシートを開く

次のGoogleスプレッドシートを開いて下さい。

すると「閲覧のみ」で開きます。

ファイルメニューから「コピーを作成」をクリック。

ファイルの名前と保存先が聞かれますので、好きな名前をつけて下さい。
そして、「コピーを保存」をクリック。

自分のGoogleドライブにコピーが保存されます。
コピーが自動的に開きます。

(2)ClaudeのAPIキーを入力する

コピーが開くと、APIキーがないというエラー表示が出ます。

そこで、CLAUDEのAPIキーを取得して、APIキーをスクリプトプロパティに設定します。

まず、Claudeの開発者コーナーのAPIキーサービスから、APIキーを取得します。
具体的な方法は次の記事を参照のこと。

このAPIキーを、Apps Scriptに設定します。
まずApps Scriptの開発画面を開きます。
メニューの拡張機能>Apps Scriptを開く。

Apps Scriptの開発画面が開いたら、画面の左側のメニューの一番下の歯車アイコンをクリック。

プロジェクト設定画面になる。
一番下までスクロール。

一番下までスクロールすると、「スクリプトプロパティ」が出てくる。

スクリプトプロパティ

「スクリプトプロパティを追加」をクリック。

プロパティに「CLAUDE_API_KEY」、値にClaudeのAPIキーの値を入力。

プロパティと値を入力したら「スクリプトプロパティを保存」をクリック

プロパティと値を入力したら「スクリプトプロパティを保存」をクリック。

これで、設定完了。
「Apps Script」画面は閉じてよいです。

3.使い方

Claude君

Googleスプレッドシート上での使い方は以下の通りです。

構文
=CLAUDE(プロンプト, [モデル名], [最長トークン数])

プロンプト: Claudeに渡すプロンプト(テキスト)
モデル名: Claudeの大規模言語モデル名
  例  claude-3-opus-20240229
     claude-3-sonnet-20240229
     claude-3-haiku-20240307
  省略時 claude-3-haiku-20240307
最長トークン数: 4096までの数字
  省略時 100

モデル名やトークン数については次の記事をご覧ください。

実施例

実施例

律儀に働いてくれます。

4.ソースコード

このプログラムは、自由に使うことができます。
改変も自由です。
CC BY-SA 表示 - 継承 4.0 国際 に従って下さい。

言語は、JavaScriptです。

function CLAUDE(prompt, model = "claude-3-haiku-20240307", max_tokens = 100) {
  /**
   * CLAUDEモデルを使用してテキスト生成を行う関数
   *   2024/4/20  Version 1.0  HIRAOKA Norito  CC BY-SA  表示 - 継承 4.0 国際
   *                https://note.com/norito_hiraoka/
   * 
   * @param {string} prompt - 生成のためのプロンプトテキスト
   * @param {string} model - 使用するCLAUDEモデルの名前(デフォルト: "claude-3-haiku-20240307")
   * @param {number} max_tokens - 生成するトークンの最大数(デフォルト: 100)
   * @return {string} 生成されたテキスト
   * @throws {Error} APIキーが設定されていない場合にエラーをスロー
   */
  try {
      // APIキーを取得する
    const apiKey = PropertiesService.getScriptProperties().getProperty("CLAUDE_API_KEY");
    
    // APIキーが設定されていない場合、エラーをスローし、設定方法を表示する
    if (!apiKey) {
      throw new Error("APIキーが設定されていません。以下の手順に従って、APIキーを設定してください。\n\n" +
                      "1. Anthropicの開発者ウェブサイトにアクセスし、アカウントを作成またはログインしてください。\n" +
                      "2. APIキーを取得するコーナーに生き、新しいAPIキーを生成してください。\n" +
                      "3. Google Apps Scriptエディタで、「プロジェクトの設定」を選択してください。\n" +
                      "4. 「スクリプトプロパティ」タブを選択してください。\n" +
                      "5. 新しいプロパティを追加し、プロパティを「CLAUDE_API_KEY」、値を取得したAPIキーに設定してください。\n" +
                      "6. 「スクリプトプロパティを保存」をクリックしてプロパティを保存してください。\n\n" +
                      "APIキーを設定後、再度スクリプトを実行してください。");
    }
  
    // キャッシュキーを生成する
    const cache = CacheService.getScriptCache();
    const cacheKey = prompt + "_" + model + "_" + max_tokens;
    
    // キャッシュからデータを取得する
    const cachedResult = cache.get(cacheKey);
    
    // キャッシュにデータがある場合、キャッシュされた結果を返す
    if (cachedResult) {
      return cachedResult;
    }
    
    // APIのURLを設定する
    const apiUrl = "https://api.anthropic.com/v1/messages";
    
    // APIリクエストのペイロードを作成する
    const payload = {
      "model": model,
      "max_tokens": max_tokens,
      "messages": [
        {"role": "user", "content": prompt}
      ]
    };
    
    // APIリクエストのオプションを設定する
    const options = {
      "method": "POST",
      "headers": {
        "Content-Type": "application/json",
        "X-API-Key": apiKey,
        "anthropic-version": "2023-06-01"
      },
      "payload": JSON.stringify(payload)
    };
    
    // APIリクエストを送信し、レスポンスを取得する
    const response = UrlFetchApp.fetch(apiUrl, options);
    const json = JSON.parse(response.getContentText());
    
    // APIレスポンスのステータスコードが200以外の場合、エラーをスローする
    if (response.getResponseCode() !== 200) {
      throw new Error("API returned status code " + response.getResponseCode());
    }
    
    // APIレスポンスから結果を取得する
    const result = json.content[0].text;
    
    // 結果をキャッシュに保存する(10日間)
    cache.put(cacheKey, result, 864000);
    
    // 結果を返す
    return result;
  } catch (error) {
    // エラーが発生した場合、エラーメッセージをコンソールに出力し、エラーメッセージを返す
    console.error("Error in CLAUDE function: " + error.message);
    return error.message;
  }
}

ソースコードには、コメントをつけておきました。
読んでいただけば、処理の流れはわかると思います。

Windows環境で動作確認しています。
Macでも動くと思いますが、確認していません。

動作などに問題がありましたら、コメントにてお知らせ下さい。

5.まとめ

以上、「Claude関数」の簡単な説明でした。
役に立ったら「いいね」お願いします!

本校・清風情報工科学院では、生成AIを活用した教育に取り組んでいます。
昨年度は、IT教育の主にシステム開発のところに使っていました。
今年度は、画像生成や日本語教育でも使っていきます。
ご興味がある方、本校で教鞭をおとりになりませんか?

清風情報工科学院では、情報処理系の講師を急募しております。
こちらの記事を御覧ください。


よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます! (