
告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度1. 先把目标定清楚让 OpenHands 默认走 TaoTokenOpenHands 是一个能自己写代码、跑命令、改文件的智能体框架你可以把它理解成一个“会动手的编程助手”。它默认会去连某个模型供应商但默认配置往往需要你手动改一堆东西。这篇要做的是让 OpenHands 启动后默认就用 TaoToken 作为供应商Base URL 指向https://taotoken.net/apiKey 从环境变量里读整个过程在 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_KEYsk-你的KeyWindows PowerShell 用$env:TAOTOKEN_API_KEYsk-你的Key想持久化的话Linux/macOS 可以写进~/.bashrc或~/.zshrcWindows 可以用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 URLdocker run -it --rm \ --pullalways \ -e SANDBOX_RUNTIME_CONTAINER_IMAGEdocker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \ -e LOG_ALL_EVENTStrue \ -e LLM_API_KEY$TAOTOKEN_API_KEY \ -e LLM_BASE_URLhttps://taotoken.net/api \ -e LLM_MODELanthropic/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 结尾不要带/v1OpenHands 会自己拼路径带了反而 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引用就行。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度