引言

试用 OpenHands 完成任务。

过程

模型选择

openhands 默认的多种模型提供商基本都是国外的,包括 OpenAI、Anthropic、Google 等。但是国内使用非常麻烦,正好 11 月 12 号阿里开源了 qwen2.5-coder, 可以使用看一下效果。

这里使用 ollama 来启动 qwen2.5-coder:32b。

1
2
ollama server
ollama run qwen2.5-coder:32b

然后再用 nginx 反向代理 ollama 的 11434 端口到 0.0.0.0:11435。

测试:

1
curl -X POST http://localhost:11435/v1/chat/completions -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "你好"}]}'

这一步是因为如果用 docker 启动 OpenHands 的话,不使用 network=host, 是没有办法将 localhost 或者 127.0.0.1 映射到 docker 容器中的 ip 的,除此之外也考虑到其他软件的使用,所以这一步还是推荐做一下。

下载和配置 OpenHands

OpenHands 的下载相当简单,直接使用 docker 拉取镜像即可。如果遇到端口冲突可以修改 3000 端口为自定义端口 (前面的是真实端口)。

1
2
3
4
5
6
7
8
9
10
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.13-nikolaik

docker run -it --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.13-nikolaik \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
-e LOG_ALL_EVENTS=true \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.13

在 web 界面选择 Advanced Options, 配置如下:

  1. Custom Model 选择 ollama/qwen2.5-coder:32b
  2. Base URL 选择 http://[ip]:11435
  3. API Key 留空
  4. Agent 选择 CodeActAgent
  5. Security Analyzer (Optional) 选择 None

实际体验中发现他会自动调用网页浏览器来获取信息,所以建议网络设置成 host 而不是 bridge。

1
2
3
4
5
6
7
8
docker run -it --pull=always \
--network host \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.13-nikolaik \
-v /var/run/docker.sock:/var/run/docker.sock \
-e LOG_ALL_EVENTS=true \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.13

结论

成功是成功了,但是效果只能说一般,首先是运行太慢,其次是生成代码的效果一般。

我先后使用了 7b 和 32b,7b 是直接无法做到对于工作区的操作,32b 的效果要好一些,但是依然效果非常有限。

所以最终还是选择了 openrouter.ai 的 claude-3-5-sonnet-20241022 api 来完成任务。

后续 (20241206), 非常非常贵!!! 上次一次构建花了我 40 块钱的样子,完成度也就和 blot.new 差不多,但是那个免费啊…

引用

  1. GitHub - All-Hands-AI/OpenHands: 🙌 OpenHands: Code Less, Make More
  2. 🤖 LLM 后端 | OpenHands
  3. ollama
  4. YouTube