メインコンテンツへスキップ
見出し画像

Open Interpreterにstreamモードが追加されたので試す

    Open Interpreterは、ChatGPTに搭載されているAdvanced Data Analysis(旧 Code Interpreter)のOSS版みたいな感じのものです。登場から3週間立ちましたが、ずっとTwitterで見かけるほどには話題だと思います。

    詳細な使い方などは下記の界隈でも有名な方々の記事が参考になると思います。

    今回はアップデートでstreamモードが追加されたのでこれを試します。

    試す

    まずは最新の状態にアップデートしましょう。

    > git pull
    
    > pip install --upgrade open-interpreter   

    実行コード

    import interpreter
    interpreter.auto_run = True
    
    while True:
        user_message = input("Enter a message: ")
    
        for chunk in interpreter.chat(user_message, display=False, stream=True):
            print(chunk)

    実行結果

    > python test-oi.py
    
    Enter a message: こんにちは
    {'message': 'こんにちは'}
    {'message': '、'}
    {'message': '何'}
    {'message': 'を'}
    {'message': 'お'}
    {'message': '手'}
    {'message': '伝'}
    {'message': 'い'}
    {'message': 'で'}
    {'message': 'き'}
    {'message': 'ます'}
    {'message': 'か'}
    {'message': '?'}
    
    Enter a message: test.txtという名前のファイルを作ってください
    {'language': 'shell'}
    {'code': 'touch'}
    {'code': ' test'}
    {'code': '.txt'}
    {'executing': {'code': 'touch test.txt', 'language': 'shell'}}
    {'active_line': 1}
    {'active_line': None}
    {'end_of_execution': True}
    {'message': '`'}
    {'message': 'test'}
    {'message': '.txt'}
    {'message': '`'}
    {'message': 'と'}
    {'message': 'いう'}
    {'message': '名'}
    {'message': '前'}
    {'message': 'の'}
    {'message': 'ファ'}
    {'message': 'イ'}
    {'message': 'ル'}
    {'message': 'を'}
    {'message': '作'}
    {'message': '成'}
    {'message': 'し'}
    {'message': 'ました'}
    {'message': '。'}
    {'message': '他'}
    {'message': 'に'}
    {'message': '何'}
    {'message': 'か'}
    {'message': 'お'}
    {'message': '手'}
    {'message': '伝'}
    {'message': 'い'}
    {'message': 'で'}
    {'message': 'き'}
    {'message': 'る'}
    {'message': 'こ'}
    {'message': 'と'}
    {'message': 'が'}
    {'message': 'あり'}
    {'message': 'ます'}
    {'message': 'か'}
    {'message': '?'}
    
    Enter a message: 

    これの何が嬉しいのかというと、リアルタイムでテキストを受け取ることができることです。
    今回の例では文章が少ないのであまり恩恵はありませんが、auto_modeで複雑な処理を頼むと、長い処理が溜まってからしか結果を取得することが出来ませんでした。

    しかもタイプ別に受け取れるのはかなり嬉しい。
    外部アプリに結合して使うときにかなり便利ですね。

    ちなみに `display=False` を外すとこんな感じです。

    > python test_oi.py
    
    Enter a message: こんにちは
    {'message': 'こんにちは'}
    {'message': '、'}
    {'message': '何'}
    {'message': 'か'}
    {'message': 'お'}
    {'message': '手'}
    {'message': '伝'}
    {'message': 'い'}
    {'message': 'で'}
    {'message': 'き'}
    {'message': 'る'}
    {'message': 'こ'}
    {'message': 'と'}
    {'message': 'が'}
    {'message': 'あり'}
    {'message': 'ます'}
    {'message': 'か'}
    {'message': '?'}
                                                                                                                                                                                  
      こんにちは、何かお手伝いできることがありますか?   
    
    Enter a message:       

    key説明

    message: テキストメッセージです。
    code: コード部分です。基本的にコードはこのcodeキーに格納されますが、LLMの出力結果によっては稀にmessageに含まれることもあります。
    language: コードを実行する言語を指定します。
    executing: 実行するコードと言語が含まれます。基本的にcode、language、executingの順に出力され、executingの中身は上記のcodeとlanguateになります。
    active_line: 実行コードのどの行がいま実行されているのかを示しています。
    output: コードを実行した出力結果です。エラーが出たときもこのキーに設定されます。
    end_of_execution: コードの実行処理が終わったときに出力されます。

    Enter a message: pandasをインストールしてください
    {'message': 'Python'}
    {'message': 'の'}
    {'message': 'パ'}
    {'message': 'ン'}
    {'message': 'ダ'}
    {'message': 'ス'}
    {'message': 'ラ'}
    {'message': 'イ'}
    {'message': 'ブ'}
    {'message': 'ラ'}
    {'message': 'リ'}
    {'message': 'ー'}
    {'message': 'を'}
    {'message': 'イン'}
    {'message': 'スト'}
    {'message': 'ール'}
    {'message': 'します'}
    {'message': '。'}
    {'message': '以下'}
    {'message': 'の'}
    {'message': 'コ'}
    {'message': 'ード'}
    {'message': 'を'}
    {'message': '実'}
    {'message': '行'}
    {'message': 'します'}
    {'message': ':\n\n'}
    {'message': '```'}
    {'message': 'shell'}
    {'message': '\n'}
    {'message': 'pip'}
    {'message': ' install'}
    {'message': ' pandas'}
    {'message': '\n'}
    {'message': '```'}
    {'message': ' \n\n'}
    {'message': 'この'}
    {'message': 'コ'}
    {'message': 'マ'}
    {'message': 'ン'}
    {'message': 'ド'}
    {'message': 'を'}
    {'message': '実'}
    {'message': '行'}
    {'message': 'する'}
    {'message': 'た'}
    {'message': 'め'}
    {'message': 'の'}
    {'message': '許'}
    {'message': '可'}
    {'message': 'を'}
    {'message': '得'}
    {'message': 'ら'}
    {'message': 'れ'}
    {'message': 'て'}
    {'message': 'います'}
    {'message': 'か'}
    {'message': '?'}
    
    Enter a message: お願いします
    {'language': 'shell'}
    {'code': 'pip'}
    {'code': ' install'}
    {'code': ' pandas'}
    {'executing': {'code': 'pip install pandas', 'language': 'shell'}}
    {'active_line': 1}
    {'output': 'Requirement already satisfied: pandas in /opt/anaconda3/envs/open-interpreter/lib/python3.10/site-packages (2.1.0)\n'}
    {'output': 'Requirement already satisfied: numpy>=1.22.4 in /opt/anaconda3/envs/open-interpreter/lib/python3.10/site-packages (from pandas) (1.25.2)\n'}
    {'output': 'Requirement already satisfied: python-dateutil>=2.8.2 in /opt/anaconda3/envs/open-interpreter/lib/python3.10/site-packages (from pandas) (2.8.2)\n'}
    {'output': 'Requirement already satisfied: pytz>=2020.1 in /opt/anaconda3/envs/open-interpreter/lib/python3.10/site-packages (from pandas) (2023.3.post1)\n'}
    {'output': 'Requirement already satisfied: tzdata>=2022.1 in /opt/anaconda3/envs/open-interpreter/lib/python3.10/site-packages (from pandas) (2023.3)\n'}
    {'output': 'Requirement already satisfied: six>=1.5 in /opt/anaconda3/envs/open-interpreter/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n'}
    {'active_line': None}
    {'end_of_execution': True}
    {'message': 'P'}
    {'message': 'andas'}
    {'message': 'ラ'}
    {'message': 'イ'}
    {'message': 'ブ'}
    {'message': 'ラ'}
    {'message': 'リ'}
    {'message': 'ー'}
    {'message': 'は'}
    {'message': '既'}
    {'message': 'に'}
    {'message': 'イン'}
    {'message': 'スト'}
    {'message': 'ール'}
    {'message': 'され'}
    {'message': 'て'}
    {'message': 'い'}
    {'message': 'る'}
    {'message': 'よ'}
    {'message': 'う'}
    {'message': 'です'}
    {'message': '。'}
    {'message': 'これ'}
    {'message': '以上'}
    {'message': 'の'}
    {'message': 'ア'}
    {'message': 'ク'}
    {'message': 'シ'}
    {'message': 'ョ'}
    {'message': 'ン'}
    {'message': 'は'}
    {'message': '必'}
    {'message': '要'}
    {'message': 'あり'}
    {'message': 'ま'}
    {'message': 'せ'}
    {'message': 'ん'}
    {'message': '。'}
    {'message': '他'}
    {'message': 'に'}
    {'message': '何'}
    {'message': 'か'}
    {'message': 'お'}
    {'message': '手'}
    {'message': '伝'}
    {'message': 'い'}
    {'message': 'で'}
    {'message': 'き'}
    {'message': 'る'}
    {'message': 'こ'}
    {'message': 'と'}
    {'message': 'は'}
    {'message': 'あり'}
    {'message': 'ます'}
    {'message': 'か'}
    {'message': '?'}
    Enter a message: 

    おまけ

    Open InterpreterとLive2Dモデルを結合した 美少女OPInterpreterというのを作ってたりしますので見てもらえたら嬉しいです。

    開発者向けにOpen Interpreterの使い方を書いた記事も公開していますので参考にしてみてください。

    python編

    ターミナル編


     
     
    ポーランド在住AI VTuber & Agent developer。 AIツールやAIキャラに関してのキャッチアップ多め。

    あなたへのおすすめ