今回は、話題のOpen InterpreterをCode Llamaを使ってローカル環境で使ってみようという話です。
Open Interpreter(以下、OI)は、自然言語による対話からPythonやTypeScriptなどのプログラミングコードを生成し、実行する環境も整備してくれるオープンソースのソフトウェアです。OpenAIのChatGPTや、MetaのCode LlamaのLLMに基づいて動作します。
An open-source, locally running implementation of OpenAI’s Code Interpreter.
ここまで聞くと、ChatGPTの「Advanced Data Analysis」とよく似てるなーと思いますが、それのオープンソース版だと思ってもらえればいいかもしれません。ただ、このソフトはAdvanced Data Analysisと違ってローカル環境で動くことです。ChatGPTのAPIを利用することでGPT-3.5などを使って生成する場合、当たり前ですがインターネット環境は必須です。その点、Code Llamaを利用した場合は、完全にローカル環境で動作するため、ネット接続がない環境でも動作させることが可能です。
そのため、OIとCode Llamaの組み合わせを使えば、ブラウザの制御やファイル操作などのさまざまな作業を、チャット形式で生成し実行できます。しかもローカル環境で、です。
今回は、「ローカルで動かす」という部分にフォーカスしてOIを利用してみようと思います。さて、そもそもちゃんと動作してくれるんでしょうか。
環境は手近にあった、ロクなGPUのないショボショボPCを利用しました。この時点で大分「ちゃんと動作する感」がしませんが、まぁそのなんだ、こまけぇこたぁいいんだよ!
WSLのUbuntu上にDockerコンテナでOI用の環境を構築して、そのコンテナ内でOIをいじってみます。これでOIが何らかのライブラリをインストールしたり、あるいはファイルを削除するなどしても、コンテナ内に限定された出来事になります。
入力したプロンプトによっては、環境構築のためにOIが勝手に各種のライブラリをインストールするらしいです。そのため、Dockerコンテナを構築してほかの環境を汚さないよう対処します。
とりあえずOIが動く程度の準備をざっくりします。
FROM python:3.10-bookworm
RUN apt-get update && \
apt-get upgrade -y && \
rm -rf /var/lib/apt/lists/*
RUN pip install open-interpreter==0.1.4
RUN pip install numpy matplotlib pandas
WORKDIR /root
これだけです。Dockerfileを任意の場所に保存したら、コンテナを構築してログインしてみます。
コンテナにログインしたら、コマンドを1つ実行するだけです。
interpreter --local
--local
というオプションが、「ローカル環境で動かすぜ!」という指定です。このオプションを指定した場合、Code Llamaの仕様を指定する選択肢が出現します。
$ cd foropeninterpreter
$ docker run -it --rm -v $(pwd):/root foropeninterpreter /bin/sh
# interpreter --local
[?] Parameter count (smaller is faster, larger is more capable): 7B
> 7B
13B
34B
[?] Quality (smaller is faster, larger is more capable): Small | Size: 2.6 GB, Estimated RAM usage: 5.1 GB
> Small | Size: 2.6 GB, Estimated RAM usage: 5.1 GB
Medium | Size: 3.8 GB, Estimated RAM usage: 6.3 GB
Large | Size: 6.7 GB, Estimated RAM usage: 9.2 GB
See More
[?] Use GPU? (Large models might crash on GPU, but will run more quickly) (Y/n):
--local
オプション指定で出現する選択肢で、使いたいモデルを指定します。パラメータが小さいほど応答速度が速くなりますが、パラメータが大きいほど返答のクオリティが向上します。ここでは「7B」「Small」「GPUあり」という、最小構成を選択しています。早く試したかったので・・・。
Model found at /root/.local/share/Open Interpreter/models/codellama-7b-instruct.Q2_K.gguf
[?] Local LLM interface package not found. Install `llama-cpp-python`? (Y/n):
llama-cpp-python
が存在しない場合、インストールする?と聞かれるのでインストールします。改行キーを押すだけでOKです。
Collecting llama-cpp-python
Downloading llama_cpp_python-0.2.11.tar.gz (3.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 4.2 MB/s eta 0:00:00
Installing build dependencies ... done
Getting requirements to build wheel ... done
Installing backend dependencies ... done
Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: numpy>=1.20.0 in /usr/local/lib/python3.10/site-packages (from llama-cpp-python) (1.26.0)
Collecting diskcache>=5.6.1
Using cached diskcache-5.6.3-py3-none-any.whl (45 kB)
Requirement already satisfied: typing-extensions>=4.5.0 in /usr/local/lib/python3.10/site-packages (from llama-cpp-python) (4.8.0)
Building wheels for collected packages: llama-cpp-python
Building wheel for llama-cpp-python (pyproject.toml) ... done
Created wheel for llama-cpp-python: filename=llama_cpp_python-0.2.11-cp310-cp310-manylinux_2_36_x86_64.whl size=1011305 sha256=366014b9f9538230fb02b80d45f1e1c0652f6a64a0cf5497e1cbffa8d6ab4d65
Stored in directory: /root/.cache/pip/wheels/dc/42/77/a3ab0d02700427ea364de5797786c0272779dce795f62c3bc2
Successfully built llama-cpp-python
Installing collected packages: diskcache, llama-cpp-python
Successfully installed diskcache-5.6.3 llama-cpp-python-0.2.11
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[notice] A new release of pip is available: 23.0.1 -> 23.2.1
[notice] To update, run: pip install --upgrade pip
Finished downloading Code-Llama interface.
▌ Model set to TheBloke/CodeLlama-7B-Instruct-GGUF
Open Interpreter will require approval before running code. Use interpreter -y to bypass this.
Press CTRL-C to exit.
>
あとは自動的に処理が進んで、OIの実行環境ができあがります。すげー。
環境構築が終わったので、早速使ってみましょう。
> Create a Python function to generate a Fibonacci sequence.
「フィボナッチ数列を生成するPythonの関数を作って」とお願いしました。なお、今回は英語でお願いしてますが、日本語でも同じ結果を出力してくれました。
Let's start with creating a function that generates a Fibonacci sequence. We can use a recursive approach to
generate the sequence. Here is an example of how we can define such a function:
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
Would you like to run this code? (y/n)
実行が終わると上記のようにPythonのコードを生成してくれます。「このコードを実行しますか?」と聞かれるので「y」を入力してみます。
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
it's likely that there was a syntax error in the code. Let me try to identify the issue and fix it.
The function definition is missing a colon after the def keyword. It should be:
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
Would you like to run this code? (y/n)
「文法エラーがあるようです、修正してみます・・・今度はどうですか?」って、修正前同じコードを出してんじゃねぇ!「実行します?」とか聞いてきますが、当たり前のように、「文法エラーがあるようです・・・」となります。ドジっ子ちゃんか。
まぁ、このあたりは入力が悪かったかもしれません。「関数を生成しろ」とお願いしているので、出力結果をそのまま実行できるようなコードじゃないんですよね。さらに選択しているモデルは「7B」「Small」です。もうちょっと上位のモデルを選択すればまた違った出力になるでしょう。
「実行する?」という質問に対し「n」を入力することで、別の依頼を入力できる状態に戻ります。
終了する場合は「Ctrl+C」です。
OIはCode Llamaを使うことで、完全ローカルでの動作が可能です。とりあえずOIの雰囲気や操作感を体験してみるには手っ取り早くて良い・・・のですが、生成される結果はちょーっと首をひねりたくなるというか、まだまだだよねという印象です。環境のせいで最軽量のモデルを実行してこの結果だったので、上位のモデルではまた違った結果になると期待したいところです。
ChatGPTv4を使ったケースがX(旧Twitter)などで上がっていますが、そちらだといい感じの結果が返ってきているようです。Code Llamaもそこまで進化してくれるとありがたいのですけどね。
お読みいただきありがとうございました。