文档
OpenHands
OpenHands 会通过 LiteLLM 路由所有模型调用,因此端点配置需要两个相互匹配的字段:带有 openai/ 前缀的模型 ID,以及保留 /v1 的 base URL。正确设置这两个值后,Advanced 选项卡就能通过同一个密钥连接到 Claude 和 GPT。
Settings → LLM → Advanced 需要填写三个字段 — Custom Model、Base URL、API Key — 模型 ID 带有 openai/ 前缀,基础 URL 保留 /v1。
# Settings → LLM → Advanced (toggle "Advanced" on first)
Custom Model openai/claude-sonnet-5
Base URL https://api.kunavo.com/v1
API Key sk-kn-...
# The "openai/" prefix is the provider, not a vendor: it tells OpenHands to
# speak the OpenAI Chat Completions protocol to the Base URL above. The model
# id after the slash is Kunavo's, and resolves at Kunavo.
#
# Keep the /v1. It belongs to the openai/ prefix — a litellm_proxy/ model
# takes the bare origin instead, which is the opposite convention./v1,也保留 openai/ 前缀——这是同一个决定的两个部分。 OpenHands 的设置页面只说“如果你的提供商有专用 Base URL,请在此处填写”,因此单看字段本身无法确定格式。前缀可以确定。其 Configure a Model 页面规定,OpenAI 兼容服务器使用 openai/<served-model-id>,并称模型 ID“通常取自其 GET /v1/models 端点”;该页面为此路由展示的唯一有效值中,Base URL 以 /v1 结尾——这是 LM Studio 教程中的 http://host.docker.internal:1234/v1。对比之下便能证明:文档中 litellm_proxy/ 模型的 Base URL 为 https://your-litellm-proxy.com,完全没有 /v1。将两者混用——用不带路径的源站地址搭配 openai/,或在 litellm_proxy/ 下使用 /v1——是导致 404 而非 401 的常见原因。openai/ 示例都是本地服务器——LM Studio、Ollama、vLLM、SGLang。其文档没有展示远程 OpenAI 兼容网关的实际示例,因此上文引述的是前缀规则和值的格式,而不是专门针对这种情况撰写的页面。如果 OpenHands 日后发布相关文档,应以该页面为准。curl 是你可以在十秒内确认的部分;客户端的行为则取决于你和 OpenHands。LLM_EMBEDDING_MODEL 和 LLM_EMBEDDING_DEPLOYMENT_NAME 留空,并继续使用当前为任何向量索引或音频步骤提供支持的提供商。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 OpenHands 设置页面。分步操作
- 在
/app/keys创建密钥并复制——它只会显示一次。 - 打开 Settings → LLM,然后开启 Advanced 开关。三个字段会按以下顺序显示:Custom Model、Base URL、API Key。
- 输入带前缀的模型 ID——使用
openai/claude-sonnet-5,而不是claude-sonnet-5。Kunavo 提供的 ID 可通过GET /v1/models获取;OpenHands 自己的文档也建议从该处获取自定义 ID。 - 将
https://api.kunavo.com/v1粘贴到 Base URL,并将密钥填入 API Key,然后点击 Save Changes。OpenHands 文档说明,保存本地配置文件前会先通过后端验证配置,验证失败时会阻止保存,因此此处出现的错误代表真实拒绝,而非仅仅是显示问题。 - 检查后端能够访问的地址,而不是浏览器能够访问的地址。base URL 必须能从运行 Agent Server 的机器解析——文档明确指出,如果 Agent Canvas 在 Docker 中运行,
127.0.0.1指的是容器。Kunavo 这样的公共端点最简单;前面有企业代理的情况则不同。 - 开始一个新对话,并让它执行读取和编辑文件的任务。OpenHands 指出,已保存的 LLM 设置适用于新对话,而旧对话必须先重启;执行涉及工具的任务,比单纯问候更能验证这组配置是否可用。
已于 2026年9月21日 对照 OpenHands 的语言模型(LLM)设置页面 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 OpenHands 中使用。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."字段中应填写哪个模型 ID
每个文本模型都可通过模型 ID 访问——实时列表见 GET /v1/models,包含价格的目录见模型页面。费率单位为每 1M token 的美元,格式为输入 / 输出。
| 模型 ID | Kunavo 输入 / 输出 | 它在 OpenHands 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 日常工作模型——填写为 openai/ |
claude-opus-4-8 | $3.50 / $17.50 | OpenHands 自己的索引表中列在 Claude 系列首位的模型 |
claude-haiku-4-5 | $0.70 / $3.50 | 用于常规编辑的低成本配置,可在对话中途切换回来 |
gpt-5-6-sol | $2.00 / $12.00 | 使用同一个密钥和同一个 Base URL 接入第二个系列 |
gpt-6-astra | $4.00 / $20.00 | 当计划屡屡偏离方向时,用作第三种意见 |
调试前值得了解的三个边界
OpenHands 的组成部分比单进程 CLI 更多,其中有两个看起来像 LLM 端点,实际上却不是。以下信息来自其自身文档,查阅日期见上文:
- 沙盒不是模型。 OpenHands 会在 agent-server 沙盒中运行你的工作,并通过网络调用模型;这是两个彼此独立、凭证也各自独立的接口。在此处配置密钥,只能用于模型调用。它与沙盒能够访问什么无关;沙盒网络问题也不会表现为身份验证错误。
- ACP 代理完全独立于此配置。 Agent Canvas 可以将任务委派给 Claude Code、Codex 或 Gemini CLI,作为 ACP 代理运行;Configure a Model 页面说明这些代理“自行管理模型访问权限”——因此 LLM 配置不会重定向这些子进程。如果你原以为会看到密钥的使用流量,但实际没有,请检查当前运行的是哪个代理。OpenHands 与 Claude Code 对比详细说明了这种区别,包括决定优先使用哪种凭据的规则。
- 配置文件,以及最多 10 个的限制。 保存配置后会生成一个 LLM 配置文件;最近保存的配置文件会成为新对话的活动配置文件;也可以在对话中途切换配置文件,而不会丢失上下文——这正是同一个密钥可以灵活用于低价和高价模型的机制。文档将每个账户的配置文件数量限制为 10 个。Provider Connection 可以一次保存提供商、API 密钥和可选的 base URL,供多个配置文件使用;同一页面还指出,该面板只在本地 agent-server 后端上可用,在 OpenHands Cloud 后端上会隐藏。
常见问题
如何将 OpenHands 指向自定义 API 端点?
打开 Settings → LLM 并开启 Advanced 开关。OpenHands 将此功能说明为“设置自定义模型及其他一些 LLM 设置”的方式。界面会按以下顺序显示三个字段:Custom Model、Base URL、API Key。输入带提供商前缀的模型 ID——对于兼容 OpenAI 的端点,格式为 openai/<model-id>——将端点填入 Base URL,粘贴密钥,然后点击 Save Changes。保存的配置会成为一个 LLM 配置文件,并应用于新对话;旧对话必须重启后才能使用该配置。
OpenHands 的 Base URL 末尾需要加 /v1 吗?
对于带 openai/ 前缀的模型,需要。设置页面本身只说,如果提供商有特定的 base URL,就应填写,因此仅凭该页面无法确定格式——前缀才是关键。OpenHands 的 Configure a Model 页面规定,兼容 OpenAI 的服务器应使用 openai/<served-model-id>,并从其 GET /v1/models 端点获取模型 ID;该页面为此路由展示的唯一实际 Base URL,位于 LM Studio 演练中,是 http://host.docker.internal:1234/v1。litellm_proxy/ 模型则相反:其文档中的 base URL 是不带 /v1 的纯代理源站地址。因此,Kunavo 的值应为 https://api.kunavo.com/v1。
为什么 OpenHands 不允许保存我的 LLM 配置文件?
OpenHands 会先根据后端验证本地配置文件,然后才持久保存;其文档说明,验证失败时(举例包括 API 密钥无效或模型不可用),保存会被阻止,并显示错误信息。因此,保存受阻代表真实拒绝。请先在客户端之外确认究竟哪一部分有问题:使用同一个密钥,对端点的 /v1/models 发起一次 curl 请求;如果两项配置正确,会返回 JSON;密钥错误时会返回 401,URL 错误时会返回 404。不支持验证的旧版后端会跳过检查并正常保存。
OpenHands 能通过兼容 OpenAI 的端点使用 Claude 模型吗?
可以。openai/ 前缀指的是线路协议,而不是供应商:OpenHands 会向你配置的 base URL 发送符合 OpenAI 格式的聊天补全请求,并将斜杠后面的 ID 原样传递,因此 Claude ID 会在该端点解析,而不是在 OpenHands 内部解析。请记住,OpenHands 非常依赖工具调用,其文档也指出它需要强大的模型才能正常工作,因此这里不适合选你能找到的最便宜的 ID。
Kunavo 是否在 OpenHands 中测试过此配置?
没有。2026 年 9 月 21 日核对的是 OpenHands 自己的文档——字段名称、顺序、前缀规则和 base URL 格式均引自该文档。Kunavo 尚未使用 OpenHands 通过其端点运行对话,因此不对身份验证、流式传输、工具往返或固定版本客户端内部的模型路由作任何声明。你可以单独确认的一点是端点和密钥是否有效,本页上的 curl 命令可以做到这一点。