概要
面白いですね、ChatGPT。
GoogleスプレッドシートからGAS(Google Apps Script)で作成した関数経由でChatGPTのベースであるGPT-3のAPIに問い合わせる処理を実行していたところ、Exceeded maximum execution time(行 0)が発生しました。
という#ERROR!
になりました。
本記事では、このエラーについてまとめておきます。
本記事の目的
- 概要
- GPT-3(ChatGPTのベース)のAPIをGoogleスプレッドシート経由で試す
- でもGPT関数がエラーになる
- そもそも従量課金される処理をセルに関数入力するのは危ない?
- まとめ
- 参考情報、関連記事等
GPT-3(ChatGPTのベース)のAPIをGoogleスプレッドシート経由で試す
ChatGPT(GPT-3)は、ビックリするくらい自然なやり取りができますね。
GPT-3は、ChatGPTのベースになっている言語生成モデルです。
自然な言語リクエストに基づいてある程度の処理を任せられます。これが一般的なアプリケーションのUI/UXに組み込まれていくと、今まで人間が行っていた"調査"や"要約"といった作業がある程度は不要になりそうです。
そんなGPT-3を使ってみるため、GoogleスプレッドシートからGASで定義した関数経由でGPT-3のAPIに問い合わせる処理を試しています。
参考にしている関数は、GPT-3 and Google Sheetsです。スプレッドシート上でGPT()という関数を使って、自由な文章でGPT-3に問い合わせが可能です。
このGPT関数は、GPT-3に対して指定した文字列による問合せを行い、その応答を返してくれます。
GASにGPT関数のコードをコピーしてAPIキーを自分のものに差し替えてから、スプレッドシート上のセルでGPT()を使用すれば良いだけなので簡単です。
使い方を解説しているサイトは多いので、本記事では省略します。
でもGPT関数がエラーになる
このGPT関数を使ってみたところ、頻繁にExceeded maximum execution time(行 0)が発生しました。
という#ERROR!
が発生し、結果がセルに表示されないことがあるようです。
原因はGASの制限
GASでは、カスタム関数の実行時間が30秒を超えると、上記のエラーが発生するようです。このGPT関数も該当します。
つまり、GPT-3のAPIへの問合せとその応答までにかかる時間(正確にはGPT関数の実行時間)が、30秒以内に収まらないとエラーになるという訳です。
2023年2月5日現在、私が試す限りでは、GPT関数の実行時のレスポンスはそんなに速くないので、簡単にこの制限を超えてしまいます。
エラーになった後、GPT関数を再度実行して制限内に処理が完了すれば、正常に結果が得られます。
ただ主観ですが、負荷状況?や、リクエスト内容によっては、時間がかかりやすく、30秒に収まりにくいケースも多そうです。
GPT-3を提供するOpenAIのAPI稼働状況は、OpenAI Statusから確認できます。GPT-3だけでなく、他のAPIも含めた稼働状況です。APIのレスポンス時間までは読み取れませんが…。
GPT関数の実行に時間がかかる原因が、OpenAIのAPI側、GAS側、あるいは他の何かなのかは不明です。
この制限に関するリファレンス
この制限は、Google サービスの割り当て | Google Developersに記載されています。
項目 | 無料Googleアカウント | Google Workspaceアカウント |
---|---|---|
スクリプトのランタイム | 6分/実行 | 6分/実行 |
カスタム関数のランタイム | 30秒/実行 | 30秒/実行 |
有償のGoogle Workspaceアカウントであっても、この制限は変わらないようです。
GASの制限でエラーになってもAPIのクレジットは消費される
このエラーにより、スプレッドシートに結果が表示されないにもかかわらず、GPT-3側ではリクエストが発生したものとしてクレジットが消費されています。
負荷状況?や、リクエスト内容によっては、再実行しても同じエラーになることが多いです。
クレジットを節約するには、むやみに再実行しない方が良いでしょう。
対処案
エラーを回避する方法として、以下のような案が考えられます。
カスタム関数を使用せずスクリプト実行する
スプレッドシートのセルに直接GPT()のカスタム関数を入力するのをやめて、GASから実行する方法です。
この場合、カスタム関数ではないので、スクリプトのランタイムが6分に収まれば良いです。
ただ、1回のスクリプト実行で複数のリクエストを実行したい場合には、6分の制限の方を超えてしまうケースがあるので、スクリプトの分割実行やトリガー活用等の工夫が要りそうです。
Googleスプレッドシート以外からGPT-3にアクセスする
GASの制限を回避するという意味では、GASのようなクラウド上のリソースでなく、手元のPC上でAPIにアクセスする環境を用意するのも良いでしょう。
例えば、試していませんが、ExcelのマクロからGPT-3にアクセスする方法もありそうです。
(今後)ChatGPT APIを利用する
今後、ChatGPT APIがリリースされる予定のようです(GPT-3でなくChatGPTのAPI)。
サブスクリプション形態かどうかは不明ですが、ChatGPTをAPI経由で利用できるのでしょう。
対話的なやり取りという意味ではスプレッドシートからの利用にはあまり向かないかもしれませんが、うまく会話の流れを活かせるように実行できれば面白そうです。
(参考)ChatGPT Plus
ちなみに、ChatGPT Plusは既にリリースされており、月額20ドルのサブスクリプションサービスです。これはAPIではないです。
ChatGPT Plusでは、レスポンスがある程度保証されるようです。
- General access to ChatGPT, even during peak times
- Faster response times
- Priority access to new features and improvements
※日本では、2023年2月5日現在、ChatGPT Plusは提供されていませんが、今後提供されるでしょう。
Introducing ChatGPT Plus
ChatGPT Plus | OpenAI Help Center
Web画面のChatGPTを使用する
Web画面のChatGPTの方はクレジットを消費しないので、スプレッドシートやAPIを使用する必要性が無い場合は、これを使用すれば良いでしょう。
そもそも従量課金される処理をセルに関数入力するのは危ない?
正確に確認できていませんが、そもそもGoogleスプレッドシート上のセルに入力された関数は、既に実行済みであっても、スプレッドシートを開き直したり時間を置いてアクセスし直した際?に、セルに入力されていた関数が一斉に再実行(セルの再計算)されてしまうことがあるように思われます。数式に使用される値が変更されない限りは、セルの再計算は実行されないと思っていたのですが…。
つまり、対象のスプレッドシートにGPT関数を入力したセルが多数ある場合、APIに対するリクエストが無駄に発生してしまうことになります。
あっという間にFree trialのクレジットを消費してしまうことになるのでご注意を。
GPT関数を使う場合は、実行を終えたら値のみコピペし直して関数部分を削除したり、あるいはIF文と組み合わせる等して再実行されないよう何か工夫しておいた方が良さそうです。
まとめ
Googleスプレッドシート経由でGPT-3を使った際の"Exceeded maximum execution time"のエラーについてまとめてみました。
GPT-3もGASも、今後機能のアップデート等があると思いますので、注目していきたいと思います。