OpenHands 是 MIT 协议的开源编程 Agent,但它这一年把门牌全换了:仓库从 All-Hands-AI/OpenHands 迁到 github.com/OpenHands/OpenHands,文档域名从 docs.all-hands.dev 一个 308 跳到 docs.openhands.dev,社区从 Discord 挪到了 Slack。主仓库的门面现在是 Agent Canvas——一个自托管的 Agent 控制台,npm 包 @openhands/agent-canvas 与 Docker 镜像 ghcr.io/openhands/agent-canvas 同为 1.15.0。命令行那条线是 PyPI 上的 openhands 1.16.0,硬锁 Python 3.12。真正干活的 Agent Server 由 OpenHands/software-agent-sdk 提供,镜像标签 ghcr.io/openhands/agent-server:1.26.0-python。四个仓库、三条版本号,第一次装的人基本都会被绕晕,先把这几个数字记住会省很多事。
然后是最容易被问错的问题。OpenHands 官方对宿主机的要求只有一句话:现代处理器加至少 4GB 内存。它不做推理——它做编排,用 LiteLLM 把请求发出去,在 Docker sandbox 里执行命令,默认沙箱镜像是 nikolaik/python-nodejs:python3.12-nodejs22。所以「OpenHands 需要多大显存」严格来说问错了对象,该问的是:你打算让哪个模型接这个活,那个模型要多大显存。
官方文档现在明确把 Qwen3.6-35B-A3B 列为本地首选:Apache-2.0,35B 总参、3B 激活的 MoE,256 个专家每次路由 8 个再加 1 个共享,40 层里每 4 层插一层全注意力、其余走 Gated DeltaNet 线性注意力,原生 262,144 上下文、YaRN 可拉到 1,010,000,SWE-bench Verified 73.4。文档给的硬件门槛是「量化版至少 24GB 显存,全精度要多卡」。下面把这句话拆成能直接下单的配置。
01 —
Qwen3.6-35B-A3B 各权重版本与显存占用
OpenHands 本体(CLI 1.16.0 / Agent Canvas 1.15.0 / agent-server 1.26.0)不占显存,下面这张表才决定你租哪张卡。体积按 Hugging Face 仓库实际文件大小计。
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| Qwen/Qwen3.6-35B-A3B(bf16 safetensors) | 35B 总参 / 3B 激活 | bf16 71.9GB(67.0GiB) | 262K 原生,YaRN 至 1.01M | 官方原始权重。vLLM/SGLang 起码两卡张量并行,OpenHands 文档给的示例就是 --tensor-parallel-size 2;Qwen 自己的示例用 --tp-size 8。 |
| Qwen/Qwen3.6-35B-A3B-FP8 | 35B-A3B | FP8 37.5GB(34.9GiB) | 262K | 官方 FP8 量化,单张 48GB 卡就塞得下。但原生 FP8 算力要 Ada / Hopper 这代才有,Ampere 上 vLLM 会走 Marlin 反量化路径,能跑,拿不到那份加速。 |
| unsloth UD-Q8_0 GGUF | 35B-A3B | Q8_0 36.9GB(34.4GiB) | 262K(KV 另计) | 近无损档,走 llama.cpp / Ollama / LM Studio 后端。48GB 单卡放得舒服,不用碰张量并行那套麻烦。 |
| unsloth UD-Q4_K_M GGUF | 35B-A3B | Q4_K_M 22.1GB(20.6GiB) | 32K 起(官方最低 22000) | 24GB 单卡的现实解。权重压满 20.6GiB,剩下的空间只够 32K 上下文,视觉塔就别再开了。 |
| unsloth UD-IQ4_XS GGUF | 35B-A3B | IQ4_XS 17.7GB(16.5GiB) | 128K 可行 | 同样一张 24GB 卡,想要长上下文就换这个。省下的 4GiB 正好装 128K 的 KV——Qwen3.6 只有 10 层是全注意力,FP16 下每 token 的 KV 约 20KB,128K 也就 2.5GB。 |
| mmproj-F16(视觉塔,可选) | 视觉编码器 | +0.9GB | — | Qwen3.6 自带视觉,能读截图和 UI。纯代码任务用 vLLM 的 --language-model-only 直接跳过,把这块显存让给 KV cache。 |
02 —
按配置选卡:NexGPU 上的四种起法
价格是每 GPU 每小时挂牌价,按秒计费,停机即停算力费用。
24GB 单卡跑 Q4_K_M,32K 上下文,Ollama / LM Studio 起步
RTX 3090 24GB$0.193/卡·时
官方门槛就是 24GB,GGUF Q4 走 llama.cpp 后端不吃 FP8 算力,3090 是这条线上最便宜的 24GB 卡。
Q4 / IQ4 加 128K 上下文,或用 vLLM 单卡常驻给小组共用
RTX 5090 32GB$0.723/卡·时
32GB 装下 20.6GiB 权重、0.9GB 视觉塔和 128K 的 KV 还有余量,而且有原生 FP8,能直接吃官方 FP8 权重。
Q8_0 或官方 FP8 单卡,把 262K 上下文吃满
RTX A6000 48GB$0.817/卡·时
34~35GiB 的权重加上 262K 约 5GB 的 KV,48GB 一张卡走得完,省掉张量并行的全部配置成本。
bf16 原生权重,做评测、跑基准或给整个团队供服务
A100 SXM4 80GB ×2$1.088/卡·时(双卡 $2.176/时)
71.9GB 权重必须两卡起,正好对上文档里的 --tensor-parallel-size 2;想一张卡搞定就上 H200 141GB $6.660/卡·时,262K 全开也不用算显存。
03 —
四步把 OpenHands 接到你自己的模型上
在 NexGPU 实例上从零到 Agent 跑起来大约十几分钟,绝大部分时间花在拉权重。
- 01
起模型服务
在 GPU 实例上用 vLLM 把 Qwen3.6-35B-A3B 暴露成 OpenAI 兼容端点。vLLM 需要 0.19.0 以上,SGLang 需要 0.5.10 以上。--enable-prefix-caching 对 Agent 这种反复重发同一段长 system prompt 的场景收益特别大;tool-call-parser 一定要给 qwen3_coder,不然工具调用解析不出来。NexGPU 的 2000+ 预置镜像里 vLLM 和 PyTorch 都是现成的,不用自己配 CUDA。
vllm serve Qwen/Qwen3.6-35B-A3B --host 0.0.0.0 --port 8000 --api-key mykey --tensor-parallel-size 2 --served-model-name Qwen3.6-35B-A3B --enable-prefix-caching --enable-auto-tool-choice --tool-call-parser qwen3_coder - 02
装 OpenHands
CLI 走 uv,锁 Python 3.12。--mount-cwd 会把当前目录挂进 Docker sandbox,Agent 就在这个目录里改代码;也可以用 SANDBOX_VOLUMES=$PWD:/workspace:rw 自己指定。想要网页控制台就改跑 Agent Canvas 的 Docker 镜像,端口 8000,UI 在 /canvas。
uv tool install openhands --python 3.12 && openhands serve --mount-cwd - 03
把模型指过去
关键在那个 openai/ 前缀——OpenHands 通过 LiteLLM 调用,自建端点必须写成 openai/<served-model-name>,漏了前缀就报模型不存在,这是本地部署第一大坑。如果 OpenHands 在容器里而模型在宿主机,Base URL 要换成 http://host.docker.internal:8000/v1,并给 docker run 加上 --add-host host.docker.internal:host-gateway。
export LLM_MODEL=openai/Qwen3.6-35B-A3B LLM_BASE_URL=http://127.0.0.1:8000/v1 LLM_API_KEY=mykey - 04
无头跑,把结果收成 JSONL
--headless 强制 always-approve,Agent 不会停下来问你,正好塞进 CI;官方明说这个模式下 --llm-approve 不可用,所以务必配合沙箱使用。加 --json 之后每个 action / observation 事件输出一行 JSON,下游解析成功失败很方便。
openhands --headless --json -t "给 src/parser.py 补齐单元测试并跑通" > run.jsonl
一个月要花多少:算给你看
按一个五人小组共用一台推理机来算。RTX 5090 32GB 跑 vLLM 加 Qwen3.6-35B-A3B 的 IQ4_XS 权重,工作日开 8 小时、一个月 22 天,就是 176 小时:176 × $0.723 = $127.25。权重加镜像按 60GB 存着,60 × $0.414 = $24.84/月。合计 $152.09,摊到五个人每人不到 $31,比一个人的云端 API 账单还低。要跑一次 bf16 原生权重的基准复现,双卡 A100 SXM4 80GB 开 6 小时:6 × 2 × $1.088 = $13.06,跑完停机,算力费用立刻归零。想再省,同一套活压到 RTX 3090 24GB 上跑 Q4_K_M,176 小时只要 176 × $0.193 = $33.97,代价是上下文卡在 32K、视觉塔要关掉。最后一句提醒:计算和存储是两笔账,实例一停算力就不再计费,存储要到你销毁卷才停——跑完基准记得把那份 71.9GB 的 bf16 权重清掉,不然它就是每月 71.9 × $0.414 = $29.77 的静默支出。无最低消费、无开通费、不用申请配额。
04 —
