🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 先把目标定清楚:让 OpenHands 默认走 TaoToken
OpenHands 是一个能自己写代码、跑命令、改文件的智能体框架,你可以把它理解成一个“会动手的编程助手”。它默认会去连某个模型供应商,但默认配置往往需要你手动改一堆东西。这篇要做的,是让 OpenHands 启动后默认就用 TaoToken 作为供应商,Base URL 指向https://taotoken.net/api,Key 从环境变量里读,整个过程在 10 分钟内跑通,并且能复现。
适合谁看:手里有 Docker、想快速把 OpenHands 跑起来、又不想在供应商配置上折腾太久的人。产物很明确——一个能启动的 OpenHands 容器,加上一次成功的模型调用验证。我试过把 Key 直接写进配置文件,结果换机器就失效,所以下面统一用环境变量,这样换环境只要改一个值。
在动手前,先去 TaoToken 官网 注册账号,拿到 API Key。注册流程不复杂,邮箱验证后进控制台就能创建 Key。这个 Key 后面会写进环境变量,不要提交到 Git,也不要用在公开的脚本里。
2. 操作步骤:从拿 Key 到 docker run 启动
2.1 拿 Key 并写入环境变量
登录后进 API Keys 页面,创建一个新 Key,复制出来。然后在本机终端里写入环境变量。Linux/macOS 用:
export TAOTOKEN_API_KEY="sk-你的Key"Windows PowerShell 用:
$env:TAOTOKEN_API_KEY="sk-你的Key"想持久化的话,Linux/macOS 可以写进~/.bashrc或~/.zshrc,Windows 可以用setx。注意setx只对新开的终端生效,当前窗口还得用$env:临时设一次。
2.2 准备 OpenHands 的运行目录
OpenHands 需要一个工作目录来放它改动的代码。建一个空目录,后面挂载进容器:
mkdir -p ~/openhands-workspace cd ~/openhands-workspace这个目录就是智能体的“工作台”,它在里面读写文件、跑命令。挂载进去之后,容器里的改动会落到宿主机,方便你检查结果。
2.3 docker run 启动命令
OpenHands 官方镜像叫docker.all-hands.dev/all-hands-ai/openhands,运行时需要把 Docker socket 挂进去,因为它要起子容器来执行命令。下面这条命令把 Key 通过环境变量传进去,同时指定模型和 Base URL:
docker run -it --rm \ --pull=always \ -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \ -e LOG_ALL_EVENTS=true \ -e LLM_API_KEY=$TAOTOKEN_API_KEY \ -e LLM_BASE_URL=https://taotoken.net/api \ -e LLM_MODEL="anthropic/claude-3-5-sonnet-20241022" \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/.openhands-state:/.openhands-state \ -v ~/openhands-workspace:/workspace \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ docker.all-hands.dev/all-hands-ai/openhands:0.20几个参数说明一下。LLM_API_KEY读的是刚才设的环境变量,LLM_BASE_URL指向 TaoToken 的 API 地址,LLM_MODEL是模型名,这里用 Claude 3.5 Sonnet 举例,你也可以换成别的。-v /var/run/docker.sock是让 OpenHands 能起沙箱容器,-v ~/openhands-workspace:/workspace是工作目录挂载。-p 3000:3000把 Web 界面暴露到本机 3000 端口。
启动后浏览器打开http://localhost:3000,能看到 OpenHands 的界面。如果容器起不来,先看日志里有没有Cannot connect to the Docker daemon,那说明 socket 没挂对。
2.4 在界面里确认默认供应商
进界面后,点设置图标,看 LLM 配置那一栏。如果环境变量生效,Base URL 应该已经填好https://taotoken.net/api,模型名也是你传进去的那个。这里不用再手动改,直接保存即可。如果显示为空,说明环境变量没传进容器,回去检查docker run里的-e参数拼写。
3. TaoToken 接入与配置的细节
TaoToken 在这里扮演的是默认供应商角色,OpenHands 所有模型请求都走https://taotoken.net/api。这个地址是 OpenAI 兼容风格的接口,OpenHands 内部用 LiteLLM 做适配,所以只要 Base URL 和 Key 对,就能通。
配置上有几个点容易踩坑。第一,Base URL 结尾不要带/v1,OpenHands 会自己拼路径,带了反而 404。第二,模型名要写全,比如anthropic/claude-3-5-sonnet-20241022,只写claude-3-5-sonnet可能匹配不到。第三,Key 不要有多余空格,复制的时候容易带上换行。
如果你想把配置固化下来,可以在~/.openhands-state里找配置文件,但更推荐用环境变量,因为容器重建后配置还在。想了解完整的接入方式,可以看 TaoToken 接入文档,里面有不同语言的示例。
另外,OpenHands 的沙箱运行时镜像版本要和主镜像匹配,上面用的0.20-nikolaik对应 OpenHands 0.20。版本不匹配会出现沙箱起不来的情况,日志里会报镜像找不到。
4. 验证一次模型调用,以及失败分支
4.1 用 curl 直接验证 Key 和 Base URL
在启动 OpenHands 之前,可以先单独验证 TaoToken 的接口通不通。用 curl 发一个最小请求:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-3-5-sonnet-20241022", "messages": [{"role": "user", "content": "回复两个字:通了"}], "max_tokens": 16 }'如果返回 JSON 里有choices字段,内容包含“通了”,说明 Key 和地址都没问题。这一步能省掉很多在 OpenHands 里排查的时间。
4.2 在 OpenHands 里跑一次真实任务
回到 OpenHands 界面,新建一个会话,输入一个简单任务,比如“在 /workspace 下创建一个 hello.py,打印 hello”。点运行后,观察它是否调用模型、是否生成文件。如果界面里能看到模型返回的思考过程,并且/workspace/hello.py真的出现了,说明默认供应商配置生效。
4.3 常见失败分支
返回 401,一般是 Key 错了或者没传进容器。先在宿主机echo $TAOTOKEN_API_KEY确认有值,再看docker run里有没有-e LLM_API_KEY。返回 404,多半是 Base URL 写成了https://taotoken.net/api/v1,去掉/v1即可。返回 400 且提示模型不存在,检查模型名拼写,或者去 模型对话页面 看当前可用的模型列表。
还有一种情况是容器起来了但界面打不开,先docker logs openhands-app看有没有端口冲突,3000 被占用的话换成-p 3001:3000。
5. 限制、成本与模型选择
OpenHands 本身不产生费用,费用来自模型调用。TaoToken 按实际用量计费,具体价格以官网为准,不同模型差异较大。Claude 3.5 Sonnet 适合复杂代码任务,但单价偏高;如果只是跑简单脚本,可以换成更便宜的模型,比如anthropic/claude-3-5-haiku-20241022或者 GPT 系列里的小模型。
模型选择上,OpenHands 对模型的工具调用能力有要求,太小的模型可能无法正确解析函数调用,导致任务卡住。建议先用中等能力的模型跑通流程,再根据任务复杂度调整。长期使用的话,可以看看 Coding Plan,适合高频调用的场景。
限制方面,OpenHands 的沙箱容器会占用本机 Docker 资源,跑大任务时注意内存和磁盘。另外,模型调用有速率限制,具体阈值以官网文档为准。如果遇到 429,降低并发或者换时间段重试。
最后一个小技巧:把docker run命令存成一个start-openhands.sh脚本,Key 从环境变量读,这样每次启动只要bash start-openhands.sh,不用重新拼一长串参数。脚本里别写死 Key,用$TAOTOKEN_API_KEY引用就行。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度