跳到主要内容
注册

用 OpenAI 兼容 provider 接入 Kilo Code

Kilo Code 是开源的编程 Agent,可在 VS Code、JetBrains IDE 和终端里使用,费用走你接入的供应商。它的 7.x 版本在 VS Code 扩展和 kilo CLI 之间共用同一个配置文件 kilo.jsonc,并且紧跟 OpenCode:按其发布说明,7.8.0 合入了 OpenCode 1.18.21 至 1.18.26 的改动。新建一个 Provider API 为 OpenAI Compatible、指向 https://api.router.one/v1 的自定义 provider,一把 Key 就能在模型选择器里用上 Claude、GPT、Gemini、Grok 与 DeepSeek 聊天模型;之后每一轮 Agent 调用、子 Agent 任务、会话标题和上下文压缩摘要,都会以 POST /v1/chat/completions 发到 Router One,并出现在控制台 → 日志里。网关在大陆可直连,支付宝或银行卡即可充值。Custom provider 对话框负责 base URL、Key 和模型 ID;上下文上限、图片输入以及在后台运行的辅助模型,都要写进 kilo.jsonc。按 Kilo Code 7.8.1(VS Code 扩展与 CLI,2026 年 9 月 25 日发布)的文档与发布说明核对(2026-09-29),并于 2026-10-09 按 7.8.8(2026 年 10 月 7 日发布)复核。

安装 Kilo Code,并创建专用 Key

从 VS Code Marketplace 安装 Kilo Code;7.8.8(2026 年 10 月 7 日发布)同时覆盖 VS Code 扩展和 kilo CLI,JetBrains 插件单独发版(10 月 8 日发布 7.1.9)。然后为 Kilo 单独创建一把 Router One Key,并设置 maxSpend 消费上限。Agent 任务每一轮模型调用都是一次请求,包括只把工具结果交回模型的那些轮次;子 Agent、标题和上下文压缩还会各自产生请求,所以一个长任务可能在你不再输入的情况下产生很多次计费请求。这个上限就是硬性止损;专用 Key 还能让你在控制台 → 日志里只筛出 Kilo 的请求。

把 Kilo Code 配置到 Router One base URL

打开设置(齿轮图标),进入 Providers 标签页,拉到列表底部点 Custom provider。Provider ID 填 router-one 之类的标识,它会成为每个模型引用的前半段(router-one/<模型 ID>);再填显示名称,Provider API 选 OpenAI Compatible,Base URL 填 https://api.router.one/v1,并粘贴 Key。URL 和 Key 有效后,Kilo 会请求 GET /v1/models(7.8.3 起也可以点 Fetch models 手动拉取),给出一个可搜索的列表。列表包含目录中的全部 ID,也包括图像生成模型,所以只添加聊天模型,最好选详情页标明支持工具调用的,因为 Kilo 的 Agent 依靠工具调用工作;也可以手动填入 /models 上的精确 ID。点 Submit 后,这些模型就会出现在模型选择器里。对话框里没有上下文上限和图片输入的字段,Kilo 文档要求把它们写进 kilo.jsonc。下面的文件在那里定义了同一个 provider,Key 从环境变量读取:

~/.config/kilo/kilo.jsonc
{
  "$schema": "https://app.kilo.ai/config.json",
  "model": "router-one/anthropic/claude-sonnet-5",
  "small_model": "router-one/anthropic/claude-haiku-4.5",
  "provider": {
    "router-one": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Router One",
      "options": {
        "baseURL": "https://api.router.one/v1",
        "apiKey": "{env:ROUTER_ONE_API_KEY}"
      },
      "models": {
        "anthropic/claude-sonnet-5": {
          "name": "Claude Sonnet 5",
          "tool_call": true,
          "attachment": true,
          "modalities": { "input": ["text", "image"], "output": ["text"] },
          "limit": { "context": 1000000, "output": 32000 }
        },
        "anthropic/claude-haiku-4.5": {
          "name": "Claude Haiku 4.5",
          "tool_call": true,
          "limit": { "context": 200000, "output": 16000 }
        }
      }
    }
  }
}

为每个 Router One 模型设置 limit.context 与 limit.output

Kilo 按以下顺序确定模型的上限:先看你的配置,再看它内置的 models.dev 快照(只对认识的 ID 有效),都没有时两项都记为 0。自定义 provider 的目录 ID 在快照里都找不到,所以不写 limit 时两项都是 0,Kilo 文档列出了后果:上下文压缩被关闭,对话会一直增长,直到某次请求因为太长被拒绝;单次回复上限退回 32,000 tokens;上下文用量也不再统计。limit.context 按 /models 上该模型详情页的窗口填写;详情页显示的是取整后的缩写(1.05M、200K),请换算成整数并往小取:anthropic/claude-sonnet-5、openai/gpt-5.6-sol 与 deepseek-v4-flash 填 1000000,anthropic/claude-haiku-4.5 填 200000。limit.output 填你允许的最长回复。Kilo 会把它作为 max_tokens 发送(Router One 的 Chat Completions 接受它作为输出上限),并默认封顶 32,000,这个上限可用 KILO_EXPERIMENTAL_OUTPUT_TOKEN_MAX 环境变量调整。可选的 limit.input 能让压缩在窗口用满之前触发。窗口越大,Kilo 能发出的提示词越长:在套餐下,单次请求的输入超过模型的长上下文门槛时会多扣套餐次数(见 /pricing)。

声明图片输入与工具调用

对于在快照里找不到的模型,Kilo 默认只支持文本输入和文本输出,所以在你声明图片输入之前,粘贴的截图不会发给 Router One 的模型。给模型加上 input 含 image 的 modalities,并设置 attachment: true,而且只对详情页标明支持图片输入的 ID 这样做:deepseek-v4-flash 这类只支持文本的 ID 会收到 HTTP 400,错误信息含 has no chat candidate that supports requested capabilities: vision。对详情页标明支持工具调用的 ID 设置 tool_call: true。Kilo 的 Agent 通过工具调用来改文件、执行命令,如果网关返回 HTTP 400,错误信息含 has no chat candidate that supports requested capabilities: tool_calling,说明所选 ID 不支持工具调用,请换模型。想在选择器里用短名称时,id 字段可以指定实际发给 API 的模型名:键名为 sonnet、id 为 anthropic/claude-sonnet-5 的模型,选用时写成 router-one/sonnet。

辅助模型:标题、子 Agent 与上下文压缩

有三类后台请求可能跑在你没有手动选择的模型上。小模型负责生成会话标题和提交信息,并改写提示词。请把 small_model 设为更便宜的 Router One ID:不设置时,Kilo 会先在当前 provider 上找小型变体,找不到且你登录了 Kilo Gateway 时改用 Gateway 上的 kilo-auto/small,这些请求就不会到达 Router One;未登录时则复用主模型(见 Kilo 的模型选择文档)。task 工具启动的子 Agent 继承父会话的模型,除非 subagent_model 或 agent.<名称>.model 指定了别的模型;你也可以为单个子 Agent 任务指定不同的模型或推理强度。上下文压缩摘要在设置了 agent.compaction.model 时使用它,否则使用当前会话的模型。这些请求都会在控制台 → 日志里按各自的模型 ID 列出,据此就能看清一个任务的钱花在了哪里。

Agent 与按 Agent 设置默认模型

Kilo 内置的 Agent 有 code(默认)、ask、plan(与旧版扩展的 Architect 模式类似)和 debug;orchestrator 已弃用,因为拥有完整工具权限的 Agent 现在可以自己启动子 Agent。可以在 Settings → Models 里为每个 Agent 设置默认模型,也可以在 kilo.jsonc 里写 agent.<名称>.model,全局默认模型则用顶层的 model 键。在 VS Code 和 CLI 里,优先级依次是:当前会话或草稿里给该 Agent 选的模型、按 Agent 的配置、全局默认,然后是组织推荐的模型(个人账户则是最近用过且可用的模型),最后才是 Kilo 的 Auto Free 档位,它通过 Kilo Gateway 路由到免费模型;新会话从配置开始,所以把全局 model 设为 Router One 的 ID,新开的 Agent 就不会落到那里(按 Kilo 的模型选择文档,2026-10-09 核对;7.8.8 把「上次选中的模型」排到了配置之后)。router-one provider 下的所有模型都走同一把 Key,给 plan 或 ask 配便宜模型、给 code 配强模型,在控制台 → 日志里并排可见。

Provider API 的其他选项:Responses 与 Anthropic Messages

对话框的 Provider API 列表里还有 OpenAI Responses 和 Anthropic Messages:前者通过 @ai-sdk/openai 发送 POST /v1/responses,后者使用 @ai-sdk/anthropic。在 Router One 上,Responses 只适用于模型详情页列出 POST /v1/responses 的 ID,即 GPT 系列、DeepSeek 与 Grok 对话模型;Claude 系列 ID 发到那里会收到 HTTP 400 model '<id>' must be called via /v1/messages or /v1/chat/completions,Gemini 的 ID 在那里同样不提供。Anthropic Messages 适用于 Claude 系列与 DeepSeek V4 的 ID,Base URL 填 https://api.router.one/v1,因为这个包会自己拼上 /messages。OpenAI Compatible 用一条配置就能覆盖全部聊天模型,所以本指南用它;如果另外添加这两种,请各用一个 Provider ID,让模型列表互不干扰。

哪些功能不经过 Router One

行内自动补全在 Kilo 里有单独的 provider 设置,不属于这套配置。代码库索引需要 embedding 供应商,而 Router One 没有 embeddings 端点(POST /v1/embeddings 返回 404),所以请把索引指向提供 embeddings 的供应商;索引在你手动启用之前一直是关闭的。Kilo Gateway 上的模型(例如 kilo-auto 各档位)通过 Kilo 计费,不走你的 Router One Key。Kilo 也接受以 /chat/completions 结尾的完整端点地址(给路径特殊的网关用),但 Router One 遵循标准布局,带 /v1 的 base URL 就够了。

Kilo Code 该填哪个模型 ID?

从 /models 页复制精确的模型 ID,保留大小写、连字符和版本后缀,不要用展示名称代替。打开该模型的详情页,核对支持的 API 端点、上下文窗口和工具调用等能力,再与 Kilo Code 当前选择的 provider 和功能对应。模型出现在目录里,不等于当前客户端能调用它的所有功能。建议为每个客户端或应用单独建 API Key,并设置 maxSpend 消费上限。

Kilo Code 用的是哪种 API 协议?

OpenAI 兼容描述的是接口格式,不能据此推断 Chat Completions(/v1/chat/completions)、Responses(/v1/responses)和 Anthropic Messages(/v1/messages)可以互换。先核对工具当前版本、provider 配置和实际请求路径,再查模型详情与 API 兼容性事实页。一次普通对话成功,也不能证明服务端工具、历史状态或文件编辑功能都受支持。

在请求日志里核对 Kilo Code 的调用

先在 Kilo Code 发出一次简单文本请求,再到控制台 → 日志按时间、模型和 request_id 找到这条记录,核对 Token、花费、总耗时和状态码。成功后再分别验证流式输出、工具调用和多轮历史。失败时保留实际请求路径、完整错误消息及 request_id;没有对应日志时,要么请求没到达网关(客户端配置或网络问题),要么网关在调用模型之前就拒绝了它——Key 问题的 401、余额不足或 Key 达到 maxSpend 上限的 402、Key 或账户自身限额触发的 429,或模型 ID、端点不对的 400 / 404;在输出任何内容之前就失败的流式请求也可能没有日志。看客户端收到的状态码和错误消息就能区分是哪一种;先确认这一点,再判断是不是网关或上游故障。

常见问题

Kilo Code 的不同 Agent 能配不同模型吗?

能。在 Settings → Models 里为 code、ask、plan、debug 分别设置默认模型,或在 kilo.jsonc 里写 agent.<名称>.model;在同一会话或草稿里,Kilo 会记住你给每个 Agent 选的模型;新会话从配置开始。router-one provider 下的所有模型都走同一把 Router One Key,日常改动用便宜模型、规划用强模型,在控制台 → 日志里按各自的模型 ID 并排可见。

为什么长会话从不压缩,最后因为太长而失败?

因为模型没有设置 limit.context。自定义 provider 的 ID Kilo 一个也不认识,窗口于是记为 0,上下文压缩随之关闭,对话会一直增长到某次请求因为太长被拒绝;7.8.3(2026 年 10 月 1 日发布)起,供应商报错说明请求超出上下文长度时,Kilo 会先压缩再重试(见其发布说明),但仍不会提前压缩。在 kilo.jsonc 里给每个模型加上 limit.context(详情页窗口换算成整数并往小取)和 limit.output,Kilo 就会在窗口用满之前压缩。

粘贴的截图为什么没有发给模型?

Kilo 把不认识的模型当作只支持文本。在 kilo.jsonc 里给该模型加上 input 含 image 的 modalities 和 attachment: true,并且只对详情页标明支持图片输入的 ID 这样做;只支持文本的 ID 会返回 HTTP 400,错误信息含 has no chat candidate that supports requested capabilities: vision。

日志里为什么有我没发过的请求?

标题、提交信息、子 Agent 任务和上下文压缩摘要都是独立的模型请求。标题和提交信息用 small_model 指定便宜的 Router One ID,子 Agent 用 subagent_model 或 agent.<名称>.model,上下文压缩用 agent.compaction.model;之后这些请求都会记在对应模型的 ID 下。small_model 未设置且登录了 Kilo Gateway 时,标题和提交信息请求会发往 kilo-auto/small,不会到达 Router One。

{env:ROUTER_ONE_API_KEY} 引用为什么没有生效?

Kilo 只在受信任的配置里解析 {env:…} 和 {file:…}:全局的 ~/.config/kilo 配置、通过 KILO_CONFIG 或 KILO_CONFIG_CONTENT 传入的配置,以及组织托管的配置。提交在仓库里的项目级 kilo.json 中,这类引用会被忽略并给出警告,provider 就不会带上 Key。请把 provider 定义,至少是其中的 Key,放在全局配置文件里。

Base URL 要不要带 /v1?

填 https://api.router.one/v1——这是 Kilo 文档里的标准写法。Kilo 也接受以 /chat/completions 结尾的完整端点地址(给路径特殊的网关用),但 Router One 遵循标准布局,带 /v1 的 base URL 就够了。

我用的是旧版 Kilo Code,这些设置在哪里?

7.x 之前的版本在 API Provider → OpenAI Compatible 下直接提供同样三个字段:Base URL、API Key 和 Model ID,填写的值与上文相同。本指南里 kilo.jsonc 的上限、small_model 与按 Agent 的设置,描述的都是 7.x。

本指南对应哪个 Kilo Code 版本?

VS Code 扩展与 kilo CLI 的 Kilo Code 7.8.1(2026 年 9 月 25 日发布),核对日期为 2026-09-29,依据 Kilo 关于 OpenAI 兼容 provider、自定义模型、模型选择和 Agent 的文档,并于 2026-10-09 按 7.8.8(2026 年 10 月 7 日发布)复核。JetBrains 插件有自己的版本线(10 月 8 日发布 7.1.9)。

Kilo Code 能通过网关用哪些模型?

选用当前目录中同时支持 Kilo Code 所用端点和所需功能的模型。精确 ID、当前单价与能力以 /models 及模型详情为准;不要仅按 GPT、Claude 等系列名判断兼容性。客户端能列出模型,只说明它从自身配置或 GET /v1/models 读到了这个 ID,仍需验证实际调用。

能列出模型,但调用报 400 或 404,怎么办?

先记录实际请求路径和错误消息,再核对精确模型 ID。400 可能是参数、工具类型或模型与端点不匹配;404 可能是请求路径或资源不存在,不能直接判定模型下线。若错误提示 must be called via,按它指明的端点调整客户端 provider,或换用支持当前端点的模型。不要在所有工具里统一增删 /v1 或 /chat/completions。

中国大陆能直连吗?

能。网关在大陆可直连、无需 VPN,配置与全球环境完全一致。

报 401/402/403/429 怎么排查?

先看客户端收到的响应:状态码、错误消息和 X-Request-ID 响应头。401(Key 缺失、不存在、已吊销或已过期)、402(钱包余额不足,或这把 Key 达到 maxSpend 上限)以及 Key 或账户自身限额触发的 429,都在调用任何模型之前被拒绝,不会出现在控制台 → 日志里;模型 ID 或端点写错导致的 400 / 404 也一样。401 查 Key 是否完整传入、在控制台 → API 密钥里是否仍有效;402 充值或调高这把 Key 的 maxSpend;403 请保留完整错误消息。429 请退避后重试;日志里能查到的 429 是网关重试之后上游仍返回的。保留 request_id,再按错误码速查页逐项排查。