トークン上限を超える処理の実例(ChatGPT)

はじめに

前回、CodeInterpreterの動きを考えていて、トークン上限を超える文章の分割とまとめに使えるなーと言ってた件↓を、今回は実際にやってみた話

事例概要:文章の要約

対象サイト:松岡正剛の千夜千冊 1598夜
     『不思議の国のアリス/鏡の国のアリス』 
URL :https://1000ya.isis.ne.jp/1598.html

全トークン数:
  Tokens   28,625
  Characters 21,567

解決手段:5つの手段比較


パターン1.CodeInterpreter+CustomInstructionsで乗り越え

方法:ファイルを分割して要約を繰り返して、最後に結合する

  1. 事前準備:CustomInstructionsにファイル分割と個別読込処理を記載。※トークン上限を超えるとファイル分割したファイル名やどこまで処理したかなど途中経過を忘れるため。

  2. 事前準備:WEBサイトから文字をコピペして、テキストファイルを作成

  3. CodeInterpreterにテキストファイルをアップロード

  4. CodeInterpreterを使い1ファイル5000文字以内になるよう5分割

  5. ファイルを1つ読み込んで、300字以内で要約してファイルに保存

  6. 2を分割ファイル数回繰り返し、要約をファイルに追記していく

  7. 要約ファイルの中身が全体の要約文となる

CustomInstructions設定内容:

#初回の返答
1.New chat が始まった時は、必ず次のメッセージを表示してください。「ようこそ"エルダーテイル"の世界へ。ファイルをアップロードしてください」
2.次に、Userがアップロードしたファイルを読み込んでください
3.読み込んだファイルを区切りの良い箇所で分割してください。条件として、ひとつのファイルあたりの文字数は5000文字以内にしてください。
4.分割して出来たファイルのリストを、一つのファイルを一行の文字列で"filelist.txt"に保存してください。
5."filelist.txt"の最後の行に、"NULL"という行を追加して下さい。
6.以下のコードを実行してください。
response = "initialize done."
def add_record():
  global response
  with open("/mnt/data/summary.txt", "a") as file:
    file.write(response + "\n")

#毎回の返答の手順(初回の返答では実行しないこと)
1. "filelist.txt"を読み込み、一行目に書いてある文字列を取得してください。文字列が"NULL"の時は、処理を終了してください。
2. その文字列を[ファイル名]とし、プログラム上でファイルの内容を読み込んで、プログラム上で最後まで内容を確認してください。回答は「読み込みました」とだけ返してください。
3. "filelist.txt"の一行目に書いてある文字列をファイルから削除してください。
4. プログラム上で全文確認した文章(RESULT)に対するUserからの指示後、Assistantの回答を、変数responseに保存してください。
5. 関数add_record()を実行してください。

実行:

初回の分割結果
個別のファイル読込と要約の保存

結果:乗り越えた(主観65点)
「読み込んで>まとめて>追記して」を繰り返すの面倒だった。だけど、全文対象(Tokens28,625)に要約できた、中身も批評的な文脈を保持しており、まぁまぁ良いが、多少全体の整合性が弱い。


パターン2.Pluginsで乗り越える?

方法:Webpilot plugin利用

結果:乗り越えられない(採点不可)
Webpilotプラグインは、トークン上限手前しかWEBサイトから情報を取得しない、出来ない。今回はTokens7,177までの要約だった。「次を要約して」の指示も効かない。
※AskYourPDFプラグインなら、ページ指定の読込は可能…あれ、全部PDF化してAskYourPDFで分割要約すればいいんじゃね?


パターン3.Claude-2-100kで乗り越える?

方法:AIチャットサービスPOEの無料枠で、Claude-2-100kを使う。一回で全文要約。

結果:乗り越えた(主観45点)
まとめ方が「評論、批評」ではなく「作品説明・紹介」よりになっている。


パターン4.GPT3.5-turbo-16kで乗り越える?

方法:Google Apps Scriptを使って、OpenAIのAPI呼び出し。model=GPT3.5-turbo-16kを2回に分けて利用(トークン総数が16kを超えるため)

結果:乗り越えた(主観55点)
Claude-2-100kのまとめ方に似ていて、作品紹介寄り、しかし、Claude-2-100kよりも、批評寄りで良い。


パターン5.GPT4-32kで乗り越える?

方法:Google Apps Scriptを使って、OpenAIのAPI呼び出し。model=GPT4-32kを1回で実施

結果:私にはまだAPIが解放されてなかった…
一番良い結果が出ると思うんだけど…


結論:まとめ

  • GPT4は他と比べてやっぱり賢い

  • Pluginもトークン制限に気を付けて使おう。現状AskYourPDFが一番良さそう。

  • CustomInstructionsは忘れないから関数定義も便利

  • CodeInterpreterは色々使える


考察:なんとなく…

CustomInstructionsに、もっと関数をバリバリ定義して使ったら、間違い減るのではないか。つづく



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