常用接入术语
这些名称在使用场景上有重叠,但协议和客户端配置仍需分别确认。本文使用 OpenAI 兼容方式接入 OpenHands。
| 名称 | 常见含义 | 使用提示 |
|---|---|---|
| Claude中转 | 通常指把 Anthropic 协议请求转发到可用 Claude 模型的接入方式 | 适合 Claude Code 或支持 Anthropic 协议的客户端 |
| Claude中转站 | 通常指提供密钥、额度和 Claude 路由管理的平台 | 关注模型权限、额度和密钥隔离 |
| API中转 | 泛指通过兼容接口转发不同模型请求 | 客户端只需替换端点和密钥 |
| API中转站 | 提供统一 API 接入、模型选择和用量管理的服务 | OpenHands 本文使用此类 OpenAI 兼容接入 |
接入架构
| 环节 | 职责 | 注意事项 |
|---|---|---|
| 代码仓库 | 提供任务上下文和待修改文件 | 首次联调使用测试仓库 |
| OpenHands | 分析任务并调用终端与编辑工具 | 执行权限应限制在工作区 |
| KingFlow AI | 验证密钥并把请求路由到目标模型 | *ase **L 填写到 /v1 |
| 目标模型 | 生成计划、工具调用和代码修改建议 | 模型 ID 以控制台为准 |
| 任务结果 | 返回解释、改动和验证信息 | 人工检查差异后再提交 |
接入优势
- OpenAI 兼容接口可直接填写到 OpenHands 的 Advanced 设置,不需要修改 OpenHands 源码。
- 一个 KingFlow 密钥可按权限调用已开通模型,便于在不同 LLM Profile 之间切换。
- 控制台可集中查看调用量,并为不同环境使用独立密钥和额度。
- OpenHands 会产生多轮模型请求,统一端点便于排查状态码、模型权限和余额问题。
开始前的准备
- 在 KingFlow AI 控制台创建以 sk- 开头的 API Key,并确认余额、套餐或模型分组可用。
- 复制目标模型的完整模型 ID。OpenHands 中需要在前面增加 openai/ 前缀。
- 准备已经能正常启动的 OpenHands 实例,并确认服务器可以访问 KingFlow API 域名。
- 准备一个可丢弃或已提交到 Git 的测试仓库,避免首次联调直接修改生产代码。
- 关闭仓库中的真实密钥和客户数据访问,先验证最小任务。
验证 KingFlow 基础接口
curl https://api.**nju**shen.com/v1/chat/completions \
-H "Authorization: *earer sk-你的密钥" \
-H "Content-Type: application/json" \
-d '{
"model": "<KingFlow控制台中的完整模型ID>",
"messages": [{"role": "user", "content": "只回复 OPENHANDS_READY"}],
"stream": false
}' 配置 OpenHands 模型
- 登录 OpenHands,打开 Settings,然后进入 LLM 页面。
- 开启 Advanced,以显示 Custom Model 和 *ase **L 字段。
- Custom Model 填写 openai/加完整模型 ID,例如 openai/控制台模型ID。
- *ase **L 填写 https://api.**nju**shen.com/v1,不要再追加 chat/completions。
- API Key 粘贴 KingFlow 密钥,然后点击 S**e Changes。
- 如果后端支持配置校验,OpenHands 会在保存时验证模型、端点和密钥。
- 新建会话以使用最新配置;旧会话需要重启后才会采用新的 LLM 设置。
| 字段 | 填写内容 | 说明 |
|---|---|---|
| LLM Provider | Advanced 自定义配置 | 通过 OpenAI 兼容**接入 |
| Custom Model | openai/完整模型ID | openai/ 是 LiteLLM 提供商前缀 |
| *ase **L | https://api.**nju**shen.com/v1 | 保留 /v1,不追加具体接口路径 |
| API Key | sk-你的密钥 | 只保存到受控的 OpenHands 配置 |
| Profile Name | KingFlow 编码模型 | 名称应能区分用途和环境 |

运行最小代码任务
请只在当前测试仓库中完成以下任务:
1. 新建文件 connection_check.py
2. 写一个函数 add(a, *),返回两个参数之和
3. 增加两个简单测试用例并运行
4. 不安装新依赖,不访问外部网络
5. 最后列出修改文件和测试结果| 检查点 | 预期结果 | 验证方式 |
|---|---|---|
| 模型响应 | 会话正常开始并生成任务计划 | 无认证或模型不存在错误 |
| 文件工具 | 只创建 connection_check.py 和测试文件 | 检查 Git diff 与工作区范围 |
| 终端工具 | 测试命令成功执行 | 输出包含通过结果和退出码 |
| 最终消息 | 列出改动与验证结果 | 内容与实际文件一致 |
| 平台记录 | KingFlow 控制台出现调用记录 | 模型、密钥和用量符合预期 |
创建和切换 LLM Profile
- 在 Settings 的 LLM 页面保存当前配置,OpenHands 会创建可用的 LLM Profile。
- 为不同用途创建独立配置,例如规划模型、日常编码模型和复核模型。
- 在新会话中选择默认 Profile;支持的版本可在会话中通过模型选择器切换。
- 切换后先发送短测试消息,确认新模型可用,再继续长任务。
| 任务阶段 | 模型选择 | 用途 |
|---|---|---|
| 规划 | 较强模型 | 拆解复杂任务和确定修改范围 |
| 实现 | 成本适中的编码模型 | 完成常规编辑和测试 |
| 复核 | 较强模型 | 检查差异、边界条件与潜在回归 |
自托管环境变量示例
# 示例环境变量,请替换为自己的值
LLM_MODEL=openai/<KingFlow控制台中的完整模型ID>
LLM_API_KEY=sk-你的密钥
LLM_*ASE_**L=https://api.**nju**shen.com/v1
LLM_NUM_RETRIES=4
LLM_RETRY_MIN_WAIT=5
LLM_RETRY_MAX_WAIT=30重试参数
| 变量 | 示例值 | 作用 |
|---|---|---|
| LLM_NUM_RETRIES | 4 | 临时错误的最大重试次数 |
| LLM_RETRY_MIN_WAIT | 5 | 首次重试前最短等待秒数 |
| LLM_RETRY_MAX_WAIT | 30 | 单次重试最长等待秒数 |
| LLM_RETRY_MULTIPLIER | 2 | 退避等待时间的增长倍数 |
密钥和执行安全
- KingFlow API Key 只用于模型调用,不写入仓库、镜像、提示词、截图或前端资源。
- 开发、测试和生产环境使用不同密钥,并为每把密钥设置独立额度和有效期。
- OpenHands 具有运行命令和修改文件的能力,应限制工作区、容器权限和网络访问。
- 首次任务使用测试仓库,完成后** Git diff,确认没有越界文件、隐藏配置或无关改动。
- 日志记录状态码、耗时和调用量即可,不记录完整密钥、敏感提示词或仓库机密。
- 发现异常调用后立即停用旧密钥,创建新密钥并更新 OpenHands 配置。
上线检查清单
- KingFlow 基础接口已经返回 OPENHANDS_READY。
- Custom Model 使用 openai/加完整模型 ID。
- *ase **L 为 https://api.**nju**shen.com/v1。
- API Key 已保存到受控配置,仓库中没有密钥。
- 新会话已完成最小代码任务并通过测试。
- Git diff 只包含预期文件和预期内容。
- KingFlow 控制台的模型、密钥和调用量符合预期。
- 生产环境已配置密钥隔离、额度限制和日志脱敏。
常见故障排查
| 现象 | 常见原因 | 处理方法 |
|---|---|---|
| 保存配置失败 | *ase **L、密钥或模型格式错误 | 核对 /v1、sk- 密钥和 openai/ 前缀 |
| 返回 401 | 密钥错误、停用或未保存 | 重新创建密钥并保存新 Profile |
| 返回 404 | 模型 ID 不存在或当前分组不可用 | 从控制台复制完整模型 ID |
| 返回 429 | 额度不足或请求频率过高 | 检查余额和限额,等待后退避重试 |
| 返回 503 | 模型通道暂时不可用 | 稍后有限重试或切换可用模型 |
| 新配置未生效 | 会话仍使用旧 Profile | 重启旧会话或新建会话 |
| 工具调用格式错误 | 模型工具能力不足或不兼容 | 改用更适合编码**的模型 |
| 任务循环过久 | 指令范围不清或验证目标缺失 | 停止会话,缩小任务并写明验收条件 |
| 意外修改无关文件 | 工作区或任务边界过宽 | 撤销测试改动并限制目录和权限 |




















