見出し画像

Open Interpreter をエラーで中断させない方法+ログを保存する方法 (改修済みソース・ファイル付)

2023年9月6日にローンチされた Open Interpreter は、Advanced Data Analysis(旧Code Interpreter)登場以来の衝撃と、AI系エンジニア界隈で専らの評判ですが、既に利用された方はご承知の通り、いくつかの問題を抱えています。以下は私が個人的に私が問題だと感じた点です。

  1. Syntax(構文)エラーで頻繁にプログラムが終了してしまう

  2. Pythonのライブラリをインストールする際に、実行環境を間違えて、頻繁に“!pip”コマンドを使用して終了してしまう

  3. 大量のコード等の表示直後にフリーズする場合がある

  4. ターミナルでは古い対話が消えて一部しか残らないため、対話内容を確認しにくい 

これらの問題により、Open Interpreterが複数のステップによる計画を立てても、その途中で処理が終了してしまうことが非常に多く、多くのケースでは、Advanced Data Analysis (旧Code Interpreter)にコードを書かせて、それを実行した方が早くも目標が達成できるのが現状です。

エラーで中断させない方法

しかし、これらの問題も、その多くはプロンプトに一手間加えるだけで解決します。

1つ目のSyntax(構文)エラーで頻繁にプログラムが終了してしまう問題は、エラーメッセージで終了した時に必ずそのエラーメッセージをメモ帳か何かにメモしておいて、次回の指示でそのエラーへの注意を促すことで解決します。

例えば、上記のように、「SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape」というエラーが出た場合は、改めて interpreter コマンドでinterpreterを実行した後、当初のプロンプトに加えて、

「“前回、以下のエラーメッセージが出たので、注意して。” SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape “」

という文言を加えれば、次回は同じエラーが発生しないように、手を打ってくれます。

1.     そのエラーが回避できても、2つ目に挙げた「Pythonのライブラリをインストールする際に、実行環境を間違えて、頻繁に“!pip”コマンドを使用して終了してしまう」問題が発生する場合がありますが、それに対しても、事前に

「なお、ライブラリのインストール時のコマンドは”!pip”ではなく”pip”で始まるので、間違えないように」

 という文言を加えておくことで回避できるようです。

3つ目の、「大量のコード等の表示直後にフリーズする場合がある」問題も、事前に

「また、ファイルの内容を表示すると、ターミナルがメモリ超過でフリーズするので、内容の表示は最小限にして」

という文言を加えることで回避できます。また、ターミナルのメモリ設定を変更すれば、この文言を加えなくてもこの問題は解決するようです。私は、Visual Studio Codeを使用しており、以下のように、管理 → 設定 の検索フォームから「メモリ」で検索して表示される以下の画面で、下部にあるScrollbackの数値を1000から10000に変えたところ改善されました。

最後の「ターミナルでは古い対話が消えて一部しか残らないため、対話内容を確認しにくい」という問題は、直接エラーを回避する方法とは関係ありませんが、過去のエラーを確認できないと、次回AIに同じエラーで躓かないように指示しようにも出来ませんので、大きな影響があります。
しかし、Open Interpreterは、ChatGPTのようにチャットのページ上に逐次保存されないというだけで、チャットが終わる前までは一時メモリに全て保存しており、あるコマンドを打つことによって、それをファイルに保存することが出来ます。次章ではその方法について説明します。

ログを保存する方法

先に述べた通り、Open Interpreterは、対話の内容を一時メモリに保存しており、、以下のように終了前に %save_message というコマンドを打つことで、それまでの対話内容を全て保存することが出来ます。 


また、以下のようにコマンドに続いてパスを指定すれば、保存先を指定することも出来ます。

なお、ログのファイル形式は、jsonで、ファイル名を含めてxxxx.jsonという形のパスにしないと、直前のディレクトリ(フォルダ)が、ファイル名とみなされてしまうようなので気をつけてください。

パスを指定しない場合は、ターミナルを起動した時に最初に表示されるディレクトリ=interpreterが実行されるディレクトリになります。(interpreter.pyのあるディレクトリではありません)

以上のように標準でログ機能がありますので、最後の問題も一応これで解決するのですが、このログは、OpenAIとの通信の都合でUnicodeエスケープされており、以下のように日本語のメッセージが文字化けして全く読めないという大きな欠点があります。

また、現状、Open Interpreterは構文エラーなどで頻繁に終了してしまうため、その場合は、ログを保存出来ず、やはり画面に残った対話以外は参照できない、ということになってしまいます。
 
以上のように、エラーで停止してしまう問題も打ち込むプロンプトを工夫することである程度回避できますし、ログも英語で対話すれば文字化けもしませんので、工夫次第では大きな問題なく、使用できるようにはなっていますが、それらの工夫が必要なのは、不便だと言わざるを得ません。
そこで、私は、Open Interpreterを改修することによって、これらの問題を抜本的に解決いたしました。次章では、そのOpen Interpreter改修版について説明します。


Open Interpreter 0.1.4 改修版について

当記事の末尾には、改修したinterpreter.py (※ver. 0.1.4の改修版です)と独自に追加したconfig.pyを同梱したzipファイルのダウンロード・リンクがあります。

Interpreter.py はOpen Interpreterの本体です。オリジナルでは、ログの保存先の指定等は、コマンドのパラメータとして指定する設計になっていますが、改修版ではその機能を残しつつ、config.pyの設定でも指定できるようにしました。以下は、その設定方法です。

 log_path = ""

 log_pathを設定しない場合や存在しないディレクトリを指定した場合は、interpreterの実行ディレクトリに保存されます。パスの末尾はPCの場合は” \\” WEBサーバーの場合は”/”にしてください。

例:"c: \\desktop\\work\\"
(※パスの中の\は二重にしてください。そうしないとエラーになります) 

 log_name = "log"

 ログの拡張子を除いたファイル名を指定します。”%save_message” コマンドでログを保存する場合、拡張子を含むファイル名は、”log.json”になります。この設定は、この後説明するテキストモードにも適用されます。テキストモードがONの場合は、”log.txt”に自動保存されます。

text_mode = "on"
 

改修版には、”%save_message” コマンドで保存されるログ機能とは別に、テキストファイルとしてコマンドなしでもチャット開始から自動保存する機能があります。 text_modeでは、その機能を有効、無効を設定します。onであれば有効。それ以外であれば、offとなります。 %save_messageコマンドは常に有効ですので、ここをonにすると、json形式でもtxt形式でも保存可能です。   daily = "on"   dailyをonに設定すると、ファイル名が、ファイル名_yyyymmdd という日付を加えた形式になります。(yyyyは年、mmは月、ddは日) これは改修版独自の機能ですが、%save_message コマンドでも指定できるようにしてあります。コマンドで有効にする場合は、以下のように、ファイル名(またはパス)の後に半角スペースを開けて”-d”と打ち込むと、ここでの設定がoffになっていてもonとして扱われます。  


%save_message ファイル名(またはパス) –d 

テキストモードによるログは以下のような形になります。 

オリジナルのソースの場所

なお、当ソースはWindows 11上のVisual Studio Codeのターミナル上でしか動作確認しておりません。Windowsでは、一般的に Pythonがインストールされたフォルダ\Lib\site-packages\interpreter にOpen Interpreterのファイルが一式入っています。そこにconfig.pyを新たに加えるとともに、 interpreter.pyを改修版のファイルで上書きしてください。

その他の追加・改修された機能

 json形式ログの文字化け解消

先述した通り、オリジナルの %save_message によるログでは日本語が文字化けしてしまうのですが、改修版では、以下のように文字化けを解消したログも、元のファイル名 + “_ja.json” というファイル名で保存するように変更されています。 

その他、ログの保存とは別に以下のような改修も行っています。

 構文エラーで中断するバグの改修

オリジナルでは、Syntax Error(構文エラー)等のエラーが発生してOpen Interpreter が終了し、処理が中断することが頻繁にありましたが、当改修版では、そのバグを改修しており、以下のようにSyntax Errorでも停止せずに、そのエラーを踏まえて先に進めるようになっています。

全角yでも半角yとして認識させる改修

また、以下のようにコードの実行許可を求められた時に、オリジナルでは、半角のyしかyとして受け付けませんが、全角のyでも受け付けるように改修しました。これにより、日本語のかな漢字変換モードで操作中でもモードを切り替えずに処理を継続できます。

エラー対策はまだ万全ではないと思われますが、これらの改修により、ほとんどエラーで終了することはなくなり、目標を達成する確率が格段に高まっています。
ただし、その副作用として解決不能な問題に直面した時に同じ処理を何度も繰り返して無限ループに陥ってしまう危険性が増しました。”interpreter –y” でコード実行の確認をスキップさせた場合は、ご注意ください。


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

以下はファイル比較ソフト(DF)でオジリナルのソースと、改修版のソースを比較したものです。左がオリジナル、右が改修版です。

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

なお、同梱したソース・ファイルならびに本記事の内容に従った操作によって生じたいかなる損害にも責任は負いません。また、無料での提供ですので、サポートも一切できかねます。あらかじめでご了承ください。
 

ここから先は

355字 / 1ファイル

¥ 100

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