Code Interpreter動作予想図とトークン上限との闘い再び?

1.まずは動作の全体イメージから

まず簡略化したらこんなイメージではないかと。

LLM本体はステートレス(状態・情報を保持しない)のがポイントかと思っている。

簡略版

実際はもっと細かいと思ったので修正

Plugin部は、CodeInterpreter以外のPluginも同様と思われる。その先も。

少し細かい版

OpenAIの公式ドキュメント見てたら、ちょっと違ったのでさらに修正

なんと、pluginに使う条件を書いておいて、それを読んだGPT自体が使用を判断するそうな。そしてpluginの結果を受け取ってから最終回答を作成するとのこと。たしかにコード実行がエラーの時は、もう一度コード生成>実行の動きをするから、納得できる。

かなり細かい版

2.例:ファイル読込と要約フロー詳細

この例で何を検証したかというと、GPTと実行環境間のデータの受け渡しについてです。具体的にやりたいことは、以下の2回に分けて指示を出す。
 例1.1 事前にアップロードしたファイル内容の読み込み
 例1.2 読み込んだ内容の要約
これ、「一回のファイル読み込んで要約して」、ではうまく出来なかったんです。
※エラー修正は自動でやるけど、それ以外は基本ユーザーの入力に戻ってくるのかも。

まずは基本フローは以下のような感じ

リクエスト処理プロセスで、「過去履歴+今回指示」のトークンを作って投げているイメージ。

フロー

例1.1:事前にアップロードしたファイルを読み込む時のフロー

GPTでファイル読込のためのコード生成後、SandBoxで実行する。
ファイルの内容をGPTで使いたいので、「内容の表示」もコード中にいれるようにGPTへ指示する必要がある。

ファイル内容読込と表示

補足1.1:変数に読み込むだけではダメな理由

最初、実行環境の変数に内容を読み込めばよいと考えたが、変数の内容はGPT4は見れないので、トークン履歴に内容を格納するために、「ユーザへの表示」が必要。

SandBoxからGPT4はNG

例1.2:さっき読み込んだファイル内容の要約時のフロー

トークン履歴に表示された「ファイル内容」に対しての要約を指示する。

要約指示

補足1.2:GPTが要約した結果を変数やファイルに入れることは可能

「要約した内容をファイルに保存して」が可能でした。
「要約してコード生成する」作業が一連の文章作成作業なので、コードの中に要約結果をいれることが出来ます。

要約してコード生成

3.これって何に使えるの?

以上のことから、以下の手順でトークン上限を超えるファイルの要約が出来ます。出来ました。

1.ファイルをアップロード
2.code interpreterで、トークン上限以内の文字数で、ファイルを分割保存
3.分割したファイルの読み込み
4.要約して内容をサマリファイルに追記
5.3~4を分割されたファイル分繰り返し
6.サマリファイルを最後に読み込んで表示

ただし、分割ファイル数分の、3と4の指示を手動で繰り返す必要があります(笑)。そして、ファイル内容を表示させて行くので、途中でトークン上限を超えます。でも、コードと変数とファイルは不変なんです!。これをうまく使えば、トークン上限を超えても、エラーを回避出来ます。



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