見出し画像

o1に頼り切って、Googleスプレッド関数を考えてもらう。


はじめに


OpenAIのo1というモデルが使えるようになりました。どのような特徴があるのかよくわからないのですが、コードの作成が得意なようですので、試してみました。

題材としては、Googleスプレッドシート上で、GPTのAPIを使用できるスクリプトを作成してもらいます。

プロンプト

googleスプレッドシートで、=GPT("任意のプロンプト")というgpt関数を使用できる、スクリプトを書いてください。

o1の思考

思考時間20秒

OK, let's break this down: we need a Google Sheets script using Google Apps Script to integrate OpenAI's GPT API, handle authentication, and make API calls.

関数の定義

Google SheetsのGpt関数を構築して、OpenAI APIの応答を返す処理を記述する。APIキーは安全に扱う。

Google Apps Scriptの制約

Custom functionsの制約を理解する

カスタム関数が外部リクエストを送信できないので、Google Sheetsでの使用は制限的です。カスタムメニューを作成し、UrlFetchAppを利用する関数を呼び出す方法がある。

探し続ける

カスタム関数からURLfetchAppを呼び出す方法がないか検討している。ドキュメントを見ていて気づく。認証を必要とするサービスには送信できないと。

検討中の方向性

アプリスクリプトサービスやURL取得メソッドの承認が必要ないオープンAIAPIの利用を考えている。

統合APIの設定

OpenAIのAPIキーをスクリプトプロパティに格納し、例外処理とレート制限対策を施す方法を示している。

APIキーの設定を話し合う

ユーザーにAPIキーを入力してもらう方法を考えているけれど、カスタム関数では難しい。スクリプトを初めて実行するときにAPIキーを保存する方法もあるが、現時点では上記の方法を使ってFunctionを記述することに決めている。

APIキーの注入

Google Sheetsでこのスクリプトを使う場合、ユーザーは'YOUR_OPENAI_API_KEY'を実際のOpenAI APIキーで置き換える必要がある。APIキーはスクリプトプロパティに保存することで、より安全に扱える。

「スクリプトを更新中...」
OpenAIのAPIキーをスクリプトプロパティに追加し、JavaScriptでアクセスしてGPT関数を実装している。

以上、o1の思考部分でした。微妙に口語体が混じるのが面白いです。

o1の回答

Googleスプレッドシートで=GPT("任意のプロンプト")という関数を使用するためには、Apps Scriptを使用してOpenAIのAPIと連携する必要があります。以下の手順でスクリプトを設定してください。

手順1: Apps Scriptエディタを開く

  1. スプレッドシートのメニューから拡張機能 > Apps Scriptをクリックします。

手順2: スクリプトを貼り付ける

以下のスクリプトをコピーして、エディタに貼り付けます。

function GPT(prompt) {
  var apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
  if (!apiKey) {
    return "エラー: スクリプトプロパティにOpenAIのAPIキーが設定されていません。";
  }
  
  var url = 'https://api.openai.com/v1/chat/completions';
  
  var data = {
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": prompt}],
    "temperature": 0.7
  };
  
  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Bearer ' + apiKey
    },
    'payload' : JSON.stringify(data)
  };
  
  try {
    var response = UrlFetchApp.fetch(url, options);
    var json = JSON.parse(response.getContentText());
    var reply = json.choices[0].message.content.trim();
    return reply;
  } catch (e) {
    return "エラー: " + e.toString();
  }
}

注)使用する際にはモデル名をgpt-4o-miniに変更してください。

手順3: OpenAIのAPIキーを設定する

  1. Apps Scriptエディタで、ファイル > プロジェクトのプロパティをクリックします。

  2. スクリプトのプロパティタブを選択します。

  3. 新しいプロパティをクリックし、以下のように入力します。

    • 名前: OPENAI_API_KEY

    • : あなたのOpenAI APIキー

  4. 保存をクリックします。

手順4: スクリプトの権限を承認する

  1. スクリプトエディタで、保存アイコンをクリックしてスクリプトを保存します。

  2. 実行ボタン(▶️アイコン)をクリックし、GPT関数を選択します。

  3. 認証が求められたら、指示に従って権限を許可します。

手順5: スプレッドシートで関数を使用する

  1. スプレッドシートに戻り、セルに=GPT("あなたのプロンプト")と入力します。

  2. エンターキーを押すと、GPTからの応答がセルに表示されます。

注意点:

  • API使用料: OpenAIのAPIを使用するため、使用量に応じて料金が発生します。APIキーの管理と使用量には注意してください。

  • 制限事項: カスタム関数は実行時間に制限があり、長い応答や複雑なプロンプトの場合、タイムアウトする可能性があります。

これで、Googleスプレッドシートで=GPT("任意のプロンプト")を使用できるようになります。

動作確認

実際にGoogleスプレッドシートで使用したところうまく動きました(1回しか試していませんが・・)。

感想

私が普段使用しているGPT関数より出来が良い気がします・・・。特にAPIキーの取り扱いがよいと思います。

o1の思考でもAPIキーの設定に大きく思考を割いていることから、このプログラムの課題をいち早く認識していることがわかります。

また、スクリプトの設定手順も教えてくれるので、非常に親切です。

性能が良いのかどうかは、まだよくわかりませんが、これからも試してゆきたいと思います。

この記事が気に入ったらサポートをしてみませんか?