OpenHandsをローカルLLMで動かしてみます。
OpenHandsの準備
https://github.com/All-Hands-AI/OpenHands/のQuick Startに従って、dockerを動かすだけです。
Rootless dockerでも動作します。
/var/run/docker.sockを使ってOpenHandsがdockerを制御するようでしたので、今回は、KVM上でUbuntu24.04を動作させ、その中でAllHandsを動作させました。
ollamaの準備
ローカルLLMについては
ollamaで動作させます。
ollamaもdockerイメージが
https://hub.docker.com/r/ollama/ollamaで配布されているのでそれをそのまま利用します。
こちらもrootless dockerでも動作します。
$ docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
を実行するとollamaが立ち上がります。
$ docker exec -it ollama bash
でdocker内に入って、ollamaを実行すると
root@xxxxxxxx:/# ollama
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
stop Stop a running model
pull Pull a model from a registry
push Push a model to a registry
list List models
ps List running models
cp Copy a model
rm Remove a model
help Help about any command
Flags:
-h, --help help for ollama
-v, --version Show version information
Use "ollama [command] --help" for more information about a command.
となり、ollamaが実行できることが確認できます。
ollamaのモデルの準備
試している環境ではGPUメモリが8GBなので、小さめのLLMを探してきます。
以下のものを試してみましたが、hhao/qwen2.5-coder-tools:7bがかろうじて動く程度で、ほかはOpenHandsで使うには適切ではないLLMでした。
hhao/qwen2.5-coder-tools:7b 1fbf62f22cd4 4.7 GB
codegemma:7b 0c96700aaada 5.0 GB
llama3.2:3b a80c4f17acd5 2.0 GB
codellama:7b 8fdf8f752f6e 3.8 GB
qwen2.5-coder:3b e7149271c296 1.9 GB
opencoder:1.5b 8573dfc23c16 1.4 GB
opencoder:8b cd882db52297 4.7 GB
もっと良いLLMがあるかもしれませんが、ここでは
hhao/qwen2.5-coder-tools:7bを使って進めます。runすると
/# ollama run hhao/qwen2.5-coder-tools:7b
>>> Send a message (/? for help)
と表示され、OpenHandsからアクセスできる状態になりました。試しにメッセージを入れてみると、
>>> Pythonでhelloと出力するスクリプトを作成してください
```python
print("hello")
```
とか
>>> rustでhelloと出力するコードを書いて、ビルドして実行する方法を書いてください
```json
{
"name": "create_file",
"arguments": {
"filename": "main.rs",
"content": "fn main() {\n println!(\"Hello\");\n}"
}
}
```
のように出力されました。日本語でも動きそうです。OpenHandsから呼び出すときにollama runが実行されている必要はありません。
OpenHandsの設定
KVM内からollamaにアクセスできることを確認します。
curl http://host.ip.address:11434/api/generate -d '{
"model": "hhao/qwen2.5-coder-tools:7b",
"prompt":"Write a bash script that prints hello"
}'
json形式の応答が返ってくれば、動作しています。
docker run -it --rm -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.29-nikolaik \
-e LOG_ALL_EVENTS=true \
-e LOG_JSON=false \
-e LOG_LEVEL=DEBUG \
-e DEBUG=true \
-e OLLAMA_API_BASE=http://host.ip.address:11434 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.29
host.ip.addressは適切な値に書き換えてください。
KVM内のブラウザでlocalhost:3000にアクセスします。
左下の⚙アイコンをクリックして、
Custom model: ollama/hhao/qwen2.5-coder-tools:7b
Base URL: http://host.ip.address:11434
API Key: なんでもOK
Agent: CodeActAgent
と設定します。
これで動くようになります。指示として例えば
Could you write a bash script that just prints "こんにちは" ?
を入力すると動き始め、下図のようになりました。
ただ、ファイルはつくれたもののその後はうまく動作しなくなってしまいました。
OpenHandsを活用するには、もっと賢いLLMが必要なようです。