見出し画像

Open Interpreter 0.1.10 改修版ソース 付マニュアル API利用料90%以上削減可

割引あり

API利用は想像以上にコストがかかる

2023年9月6日にローンチされ、Advanced Data Analysis(旧Code Interpreter)登場以来の衝撃と、AI系エンジニア界隈で専らの評判のOpen Interpreter (以下OI)は、その後も急ピッチで開発が進み、当初0.1.4だったバージョンも0.1.10 へとアップデートされました。

多数の新機能が追加され、O Iを他のアプリに組み込むことが容易になり、100以上の新たなLLMがサポートされ、ファイルでの設定カスタマイズや、支出制限、チャットの再開などが出来るようになりました。

いくつかのバグも改修され、その結果、かなり高い確率でタスクを完了できるようになり、実用性は大きく向上しました。

しかし、その結果、新たな問題が浮上しました。

それは、GPT-4のAPI利用料が非常に高くつく、というコスパの問題です。

 以下は、私が今回の改造をしていた期間の利用料金推移です。開発のための利用ですから、通常はここまで行かないと思いますが、これは後に詳述するトークン削減機能を早期に実装した上での数字で、もしこの機能がなければ、少なくとも2倍以上、場合によっては3倍のコストがかかるという恐ろしいことになっていました。

何故このようにChatGPTでの利用ではありえない程API利用料がかかるかと言えば、基本的にはOpenAIの課金システムでは、同じGPT-4の利用でもChatGPTでは月々$20の固定料金なのに対して、API経由での利用では1000トークンあたりいくらの従量課金となっているからです。

ChatGPTでは固定料金ですから、何らかの作業の完了に何時間かかろうが、その出費は月$20で済みます。しかし、API利用では従量課金のため、それによってどの程度のコストがかかるのかを把握していないと、後で請求書を見て腰を抜かす、ということになりかねません。
利用料が想定以上にかかる原因は他にもあります。ChatGPTなどのAIサービスでは、学習モデルに何かメッセージを送る時は、必ず対話内容を良く理解するために、毎回それまでの全ての対話内容を最新のメッセージとともに送信しています。
それは、以下のグラフのように対話の回数とともに増えていくため、それにともなってトークンの総量。利用料がかさんで行くというわけです。

一回の対話で双方500トークンずつ、計1000トークン使用した場合を想定

また、OIは一応 Ctrl+Cで強制終了させることが出来ますが、-y オプションを付けてAuto Run(自動運転)モードにしている場合は、強制終了させない限り、永遠に動き続けるリスクがあります。
私が試用している間にも、コードを実行→失敗→コードを修正→コードを実行 というサイクルを永遠に続ける無限ループに陥ったことが何回かあり、すぐ完了すると期待してしばらく目を離したところ、完了せずにひたすらAPI利用料を消費し続けていた、ということになりがちです
OIは、現状PC等のローカル環境を操作できる非常に稀なAIシステムであり、その点は非常に優れていますが、OpenAIのAPIを使用する限り、コスパ的にも優れているとは言い難い状況となっているのです。

その他の問題

この件以外にも、現状OIには以下のような問題が見受けられます。

● 学習モデル(GPT等)からのレスポンスが返らず、タイムアウトになった時にそのまま固まって反応しなくなってしまう

● ターミナルの高さが低い場合、メッセージの行数がその幅を越えると上限に激しく振動してしまう(※ただし、Windows のVSCodeターミナル以外では確認していない現象です。他の環境では起きないかもしれません)

● ログが改行なしのjson形式でのみ保存され、しかも、日本語は文字化けしているので、実行結果を後から確認しにくい。

● Auto Runモードでもしばしばユーザーに同意を求められるケースがあり、全自動で処理できない。

 ● コード実行の同意を求められた場合、半角の”y”しか”yes”として受け付けないため、日本語でチャットをしている場合は、かな漢字モードから英数モードに切り替えが必要となる。

 これらの問題から、利用をやめてしまった方もいると想像しますが、当記事に添付されている私の改造ソースファイルでは多数の独自機能を追加することで、全ての問題を解決し、より快適に利用できるようにしました。以下では、改造版に追加した独自機能を解説いたします。

Open Interpreter 0.1.10 改造版の独自機能

メッセージ(トークン)削減機能 ※簡易版には含まれません

OIでは、学習モデルとの対話を、messages.json というファイルに保存し、毎回同一チャットの対話を全て学習モデルに送信することで、学習モデルは過去の対話(脈絡)に沿った形で返答ができるようになっています。

基本的な仕組みはChatGPTでも同じであり、この仕組みは、対話や生成物の精度を高める上で重要なのですが、messages.jsonは、チャットを終了するか、チャットをリセットしない限り増え続けるため、それが、API利用料が高くなる最大の原因になっています。

しかし、過去の全ての対話が送信されないと学習モデルは処理は継続できないかというと、全くそんなことはありません。

例えば、OIはタスクの実行の前に必要となるモジュールがインストール済みかどうかを事前に確認し、インストール済みでなければ、インストールのためのコードを生成、コードが生成されたら、ユーザーにインストールへの同意を求め、同意を得たらコードを実行、というルーチンとなることが多いですが、一度インストールが完了してしまえば、以後その記録を参照する必要はないため、これらの記録がなかったとしても、その後の処理や対話には大きな影響はありません。

そこで、最初にユーザーがOIに下した命令文や直近でOIが生成したコード等の重要なメッセージ以外をほとんど削除することでAPIの利用料の大幅削減を図るのが、このメッセージ削減機能です。

以下は、この機能のインジケータで、Reduction Rateというのがトークンの削減率を示しています。削減範囲の設定によって削減率が変化しますし、学習モデルによる返答内容も毎回変わるため一概には言えませんが、1分程度の処理でも以下のように60%以上の削減率となることが多いようです。

その削減率は、チャットが長くなればなるほど高くなるため、理論上99.9%以上の削減も可能です。これはAPI利用料の削減が99.9%以上可能であることを意味します。
 
タイマー機能
一定の時間を経過すると、自動的に処理を停止してログを保存する機能です。これにより、様々な原因による無限ループを回避できるため、全自動モード中にOIから離れた後に何らかの事情で長時間OIに戻れなくなったとしても安心です。
 
タイムアウト発生時のリトライ機能
何らかの原因でGPT等の学習モデルからのレスポンスが返らず、タイムアウトになったまま固まってしまうことがありますが、処理中なのかタイムアウトなのか判断できずに時間を浪費してしまいがちです。
また、タイムアウトと判断したとしても標準ではリトライさせる方法はなく、強制終了させた場合、それまでの時間が無駄になります。さらに、固まった状態では対話の保存が出来ないため、標準の過去の対話履歴から再開する機能も使えません。
しかし、改造版では学習モデルへのリクエスト時に一定の時間を経過したらタイムアウトと判断し、自動的に再リクエストをする設計にしたため、かなりの高確率で、この問題を回避できるようになっています。

 メッセージの表示ブレ防止機能 ※簡易版には含まれません
メッセージの表示ブレとは、どういう現象のことなのかピンと来ない方は以下のツイートに貼った動画を見てください。
https://twitter.com/Ai_All_Site/status/1712656158325137839
他の環境では発生しないのかもしれませんが、少なくともWindowsのVSCode上ではこの問題が発生します。おそらくこの現象は、OIが使用しているrichという外部モジュールにおいて、日本語等の二バイト文字の文字幅と行数の計算を行う上でのバグがあり、その結果、想定していない表示になっているのだと思っています。
試行錯誤の結果、この表示ブレはrichモジュールに送るメッセージのブロックを分割すれば回避できることがわかったため、改造版ではターミナルの高さに応じてメッセージを分割してrichにブロックを渡すように変更しました。ただ、この副作用として、ブロック間に空行が入るようになり、特にコードブロックでは背景色が消えて見苦しかったことから、その問題も解決するためにrichモジュールの改修も行いました。(メッセージブロックでは技術上の問題で空行が入ったままになっており、行間が2行になるケースがあります。)
 
ログ(json)の日本語文字化け解消機能
以下は、標準のjson形式のログファイルです。これは学習モデルとの通信にも使われている関係でjson形式となっていますが、日本語は以下のようにUnicodeでエスケープされて、文字化けして全く読めなくなっています。仮に読めたとしても改行されていないため、ログとしては非常に読みにくいという問題があります。

改造版では、以下のようにUnicodeエスケープを解除して文字化けを回避するとともに改行したjsonも同時に記録します。

完全自動化機能
起動時のコマンド interpreter に –y オプションを付けると、以下のようなコード実行前のメッセージが表示されなくなり、大部分は自動的に処理されるようになりますが、それは、通常OIが行っている学習モデルからコードを受け取った時の確認をAuto Runモードではオフにしているからです。

それとは別に学習モデル自身の判断で通常のメッセージとして同意を求めてくるケースがあり、この場合は、OIのAuto Runモードが反応しないため、完全な全自動にはなっていません。改造版では、事前に設定した以下のような同意メッセージを自動返信することで完全自動化に成功しました

かな変換モードから英数モードへの変更を不要とする機能
コード実行の同意を求められた場合、半角の”y”しか”yes”として受け付けないため、日本語の場合は、かな漢字モードから英数モードに切り替えが必要となる問題に関しては単純に全角のyでもyesと判断されるようにすることで解決しています。


Open Interpreter 0.1.10 改造版の設定方法

改造版では多数の独自機能を追加していますが、基本的にOI標準の機能は、そのまま使えるようにしてあります。

独自機能については、全てconfig.yamlというファイルで設定できるようになっています。

以下では、各機能、および、その設定方法について説明します


Open Interpreter 0.1.10 改造版のファイル構成

当パッケージには、以下のファイルを同梱しています。自動的にインストールするインストーラーはありませんので、手動で以下のファイルをコピーペーストして反映させてください。

ファイルによってフォルダが異なりますが、Open Interpreter 0.1.10 hh改造版フォルダ中の site-packagesフォルダを丸ごとコピーして、オリジナルのsite-packagesフォルダにペーストして上書きすれば、一括で変更できるはずです。

なお、site-packagesフォルダは、一般的に、Pythonがインストールされているフォルダのサブディレクトリにあります。

例えば、python.exeのパスが、

C:\Users\YourName\AppData\Local\Programs\Python\Python311\python.exe

であるなら、site-packagesは、

C:\Users\YourName\AppData\Local\Programs\Python\Python311\site-packages

になります。(OIのある Interpreterフォルダの親フォルダ)

なお、config.yaml は、当パッケージの中では、site-packagesと並列して置かれていますが、実際のコピー先は別フォルダになりますので注意してください。

コピー先のフォルダは、Interpreterフォルダから6階層上LocalフォルダにあるOpen Interpreterというフォルダの中の同名のOpen Interpreterフォルダがコピー先になります。

C:\Users\YourName\AppData\Local\Programs\Python\Python311\site-packages\interpreter

interpreterのパスが上記だった場合、

C:\Users\YourName\AppData\Local\ Open Interpreter\ Open Interpreter

が、コピー先です。

このフォルダには、チャットを再開する時に使われるcoversationsフォルダがあり、そこにはデフォルトのconfig.yamlがあるはずで、もしなければフォルダを間違えています。

何故かinterpreterの中にもconfig.yamlがありますが、そちらは使われていないようです。

 

 

改修箇所・ライセンスについて

改修箇所には私の氏名(Hiroshi Hashimoto)を書いています。今回のバージョンに関しては、開発者の Killian Lucas氏にならってMITライセンスとしていますが、著作権を放棄するものではありませんので、私が追加・変更したコードが残ったソースを再配布する場合は、私の氏名を消さないようにお願い致します。

 なお、同梱したソース・ファイルならびに本記事の内容に従った操作によって生じたいかなる損害にも責任は負いません。ご利用は自己責任でお願いします。また、無料版の場合、サポートも一切できかねます。また、Windows11のVSCode上でしか動作確認をしておらず、VSCodeであっても、Docker等の特殊な環境での動作も検証していませんので、他の環境での不具合は有料版であってもサポートできかねます。 あらかじめでご了承ください。

 

おわりに

Open Interpreterの開発者であるKillian Lucas氏に、この場を借りて感謝の意を述べさせてもらいます。このような革命的かつ実用的なソフトウェアをオープンソースとして提供してくださったことに、深く感謝するとともに、間接的、微力ながらこのような素晴らしいプロジェクトに関われたことに大変嬉しく思っております。ありがとうございました。

Open Interpreter 0.1.10 改修ソース・ファイル・マニュアル (Open Interpreter 0.1.10 hh改造版 Ver. 1.0 同梱) 

©橋本博史 (Hiroshi Hashimoto)
連絡先:hashimo.gigantes@gmail.com


ここから先は

0字 / 1ファイル

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