在 Kilo Code 中配置 OpenAI 兼容 Provider:从自定义端点连接到模型调优实战
【免费下载链接】kilocodeKilo is the all-in-one agentic engineering platform. Build, ship, and iterate faster with the most popular open source coding agent.项目地址: https://gitcode.com/GitHub_Trending/ki/kilocode
导读
Kilo Code 内置了 OpenAI、Anthropic、Google 等官方模型提供商的深度集成,但真实项目中你往往需要接入自建推理服务(Ollama、LM Studio)、聚合网关或非官方云厂商(Together AI、Perplexity、Anyscale 等)——这些服务大多暴露的是 OpenAI Chat Completions 兼容 API。本文以 OpenAI-Compatible Provider 官方文档 为骨架,结合仓库源码 provider-options.ts 与 Custom Models 指南,完整讲解如何在 Kilo Code 的 VSCode 界面和 CLI 配置文件中接入任意 OpenAI 兼容端点,并深入模型级参数(token 限额、工具调用、变体)、自动模型检测与常见故障排查。读完后你将能独立配置并调优一个自定义 OpenAI 兼容 Provider,并在团队或企业中安全地复用这套配置。
什么是 OpenAI 兼容 Provider
OpenAI 兼容 Provider 指任何实现了 OpenAI API 标准的服务端——即提供/v1/chat/completions(Chat Completions)或/v1/models等标准端点、请求与响应遵循 OpenAI 协议的服务。Kilo Code 支持这类端点意味着你可以:
- 接入本地模型:通过 Ollama、LM Studio 等工具运行的开源模型(这两个工具在 ollama.md 与 lmstudio.md 中有独立章节)。
- 接入云厂商:Perplexity、Together AI、Anyscale 等。
- 接入任何其他暴露 OpenAI 兼容端点的服务:企业内网网关、自建代理、团队共享推理集群等。
本文聚焦于官方 OpenAI API(其有独立的 openai.md 配置页)之外的兼容 Provider。
重要警告:Azure OpenAI GPT-5 部署不要使用通用兼容 ProviderAzure GPT-5 会拒绝通用 OpenAI 兼容 Provider 发送的
max_tokens参数,它期望的是max_completion_tokens,需要 Azure 专属处理。请改用 Kilo Code 原生的azureProvider;当你的 Azure 部署名与在 Kilo 中选择的模型名不一致时,通过模型的id字段映射(详见下文“用 id 字段映射模型名”一节)。
VSCode 图形界面配置
创建自定义 Provider
- 打开设置(齿轮图标),进入Providers选项卡。
- 滚动到底部,点击Custom provider按钮。
- 在自定义 Provider 对话框中填写以下字段:
| 字段 | 说明 |
|---|---|
| Provider ID | 唯一标识符(如my-provider),建议使用小写字母、数字、连字符或下划线,它将作为provider_id/model_id格式中的provider_id |
| Display name | 在 UI 中显示的可读名称 |
| Provider API | 选择OpenAI Compatible(面向 OpenAI Chat Completions 兼容端点);OpenAI 与 xAI 模型请用OpenAI Responses;Anthropic 与 MiniMax 模型请用Anthropic Messages |
| Base URL | Provider 的 API 端点(如https://api.your-provider.com/v1)。当 URL 有效且暴露 OpenAI 兼容的 models 端点时,Kilo 会自动拉取可用模型列表 |
| API key | 你的 API 密钥。可选——若认证通过自定义请求头处理,可留空 |
| Models | 手动添加模型,或从自动拉取的列表中选择(见下文“自动模型检测”) |
| Headers(可选) | 以键值对形式添加的自定义 HTTP 请求头 |
- 点击Submit保存,该 Provider 的模型即出现在模型选择器中。
如需更精细的模型配置(token 限额、工具调用、变体等),可直接编辑kilo.jsonc配置文件——见下文 CLI 一节,或参阅 Custom Models 指南。
自动模型检测(Automatic Model Detection)
配置自定义 OpenAI 兼容 Provider 时,Kilo Code 会自动从你的 Provider 的/v1/models端点检测可用模型:
- 输入有效的Base URL和API Key后,Kilo Code 会查询该端点并弹出可搜索的模型选择器,列出所有可用模型。
- 支持模糊搜索:例如输入
gpt4o能匹配到gpt-4o-mini。 - 可逐个勾选模型加入 Provider 配置。
- 之后可编辑已有的自定义 Provider增删模型。
这一机制免去了手动查询和录入模型 ID 的繁琐。若自动检测失败(例如 Provider 不支持/v1/models端点),仍可手动输入模型 ID 兜底。
CLI 配置文件接入
在kilo.json配置文件中定义自定义 Provider(配置文件位于~/.config/kilo/kilo.json或项目根目录./kilo.json)。Provider 键(如"vllm")是你自己选择的标识符,可任意命名。
必须定义至少一个模型;建议设置name与limit(上下文窗口与最大输出 token),以便 Agent 正确管理上下文:
{ "provider": { "vllm": { "npm": "@ai-sdk/openai-compatible", "models": { "qwen35": { "name": "Qwen 3.5", "limit": { "context": 262144, "output": 16384, }, }, }, "options": { "apiKey": "none", "baseURL": "http://my.url:8000/v1", }, }, }, }随后用provider-id/model-id格式设置默认模型:
{ "model": "vllm/qwen35", }配置字段详解
npm— API 协议包。面向 OpenAI Chat Completions 兼容端点使用@ai-sdk/openai-compatible(省略时的默认值);@ai-sdk/openai对应 OpenAI Responses 端点;@ai-sdk/anthropic对应 Anthropic Messages 端点。models— 模型 ID 到模型定义的映射。每个模型应包含name与包含context、outputtoken 数的limit。若limit.context或limit.output省略,默认值为0,会限制上下文管理能力(详见下文“token 限额”)。options.baseURL— Provider API 端点的基础 URL。Azure OpenAI GPT-5 应改用provider.azure。options.apiKey— API 密钥。若 Provider 不需要认证,可填任意非空字符串(如"none")。
通过环境变量注入 API Key
除了将密钥写入配置文件,也可以用env字段指定要读取的环境变量:
{ "provider": { "my-provider": { "env": ["MY_PROVIDER_API_KEY"], "models": { "my-model": { "name": "My Model", "limit": { "context": 128000, "output": 4096 }, }, }, "options": { "baseURL": "https://api.my-provider.com/v1", }, }, }, }这样密钥只存在于环境变量中,便于 CI 与多机部署场景复用同一份配置文件。此外,在受信任配置中apiKey还支持{env:VAR}与{file:...}引用语法(例如"apiKey": "{env:MY_PROVIDER_API_KEY}"),但注意:该语法只在受信任配置位置生效(全局配置~/.config/kilo、通过KILO_CONFIG/KILO_CONFIG_CONTENT传入的配置、组织/MDM 托管配置)。提交到仓库的项目级kilo.json无法解析{env:VAR}——引用会被忽略并记录警告,这是为了防止恶意仓库通过打开即窃取你的密钥。{file:...}在项目配置中仍然可用,但只能引用项目根目录内的文件(越界绝对路径、../遍历与符号链接逃逸都会被拒绝)。
完整端点 URL 支持(Full Endpoint URL)
Kilo Code 支持在 Base URL 字段填写完整的端点 URL,提供更大的配置灵活性:
标准 Base URL 格式:
https://api.provider.com/v1完整端点 URL 格式:
https://api.provider.com/v1/chat/completions https://custom-endpoint.provider.com/api/v2/models/chat该增强能力允许你:
- 连接端点结构非标准的 Provider;
- 使用自定义 API 网关或代理服务;
- 对接要求特定端点路径的 Provider;
- 集成企业或自托管 API 部署。
注意:使用完整端点 URL 时,请确保 URL 指向你所用 Provider 正确的 chat completions 端点。
源码视角:OpenAI 兼容 Provider 的请求是如何构建的
理解了配置字段后,不妨看一下底层实现,这能帮你定位排查方向。在 packages/core/src/v1/config/provider-options.ts 中,Kilo Code 为不同npm包定义了各自的请求“降级器”(Lowerer)。@ai-sdk/openai-compatible对应openaiCompatible实现(第 128–140 行):
const openaiCompatible: Lowerer = { provider(options) { return { ...direct(options, ["baseURL"]), url: string(options.baseURL) } }, request(options) { const result = clone(options) if (options.reasoningEffort !== undefined) { result.reasoning_effort = options.reasoningEffort delete result.reasoningEffort } return result }, }从中可以确认两点实现事实:
baseURL被提取为请求 URL,其余选项(含自定义headers)原样透传;若配置了reasoningEffort,会被转换为 OpenAI 协议中的reasoning_effort请求字段——这就是在兼容端点上开启“思考强度”控制的通道。- 同一文件中,多个官方 SDK 包(
@ai-sdk/cerebras、@ai-sdk/deepinfra、@ai-sdk/groq、@ai-sdk/mistral、@ai-sdk/togetherai、@ai-sdk/xai、@openrouter/ai-sdk-provider等)共享同一个openaiCompatible实现(第 151–159 行),说明这些服务本质上都走 OpenAI Chat Completions 协议——这也解释了为什么自定义 Provider 能与它们使用相同的配置形态。
此外,packages/core/src/plugin/provider/openai-compatible.ts 中的插件会在检测到@ai-sdk/openai-compatible包时默认开启includeUsage,并动态加载createOpenAICompatible工厂构造 SDK 实例,保证请求/响应的用量统计可用。
模型级参数调优(Token 限额、工具调用与变体)
在 CLI 配置中,provider.<provider_id>.models.<model_id>下的模型字段(其 Schema 定义见 packages/core/src/v1/config/provider.ts)支持以下可选配置:
| 字段 | 类型 | 说明 |
|---|---|---|
name | string | 模型选择器中显示的名称 |
id | string | 实际发送给 Provider 的 API 模型 ID,默认取配置键 |
tool_call | boolean | 模型是否支持工具/函数调用(Kilo 的文件编辑、终端等工具依赖此开关) |
reasoning | boolean | 模型是否支持扩展思考(extended thinking) |
temperature | boolean | 模型是否支持 temperature 参数 |
attachment | boolean | 模型是否支持文件附件 |
modalities | object | 支持的输入/输出内容类型{ input, output },数组元素可取text、image、audio、video、pdf |
limit | object | token 限额{ context, output, input? } |
cost | object | 每百万 token 定价{ input, output, cache_read?, cache_write? } |
options | object | 任意 Provider 特定的模型选项 |
headers | object | 请求中附加的自定义 HTTP 头 |
provider | object | 覆盖{ npm?, api? }—— 该模型的 AI SDK 包或基础 API URL |
variants | object | 具名变体配置(如不同的思考强度) |
当模型 ID 与内置目录(Kilo 内置了 models.dev 的快照并每小时刷新)中的条目匹配时,你的配置值会合并覆盖在默认值之上,只需写明想覆盖的字段即可。
token 限额(limit)与上下文管理
limit对象控制 Kilo 如何管理模型的上下文窗口与输出长度,单位为token:
| 子字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
context | number | 否 | 模型总上下文窗口大小(如 128K 模型填131072),用于判断何时应压缩对话历史 |
output | number | 否 | 单次响应最大生成 token 数,会以max_tokens或等价参数发给 Provider,默认上限 32,000 |
input | number | 否 | 可选的更严格输入限额;部分 Provider 有低于完整上下文窗口的输入 token 上限,设置后按此值而非context触发压缩 |
"limit": { "context": 131072, "output": 16384 }Kilo 按以下顺序解析限额:你的配置→内置目录(模型 ID 匹配时使用目录默认值)→回退为 0。
当context与output均为0(自定义/本地模型未设置限额且不在目录中)时,会产生实质性副作用:
- 上下文压缩被禁用:
context: 0时溢出检测被跳过,对话将无限增长直到 Provider 拒绝请求; - 输出回退为 32,000 token:
output: 0时使用内部默认值 32,000(可通过KILO_EXPERIMENTAL_OUTPUT_TOKEN_MAX环境变量调整); - 无上下文用量追踪:依赖上下文大小的用量指标被跳过。
对于自定义与本地模型,务必设置与实际能力相符的
limit.context与limit.output,否则自动上下文管理将被关闭。
变体(variants)与推理控制示例
可以在模型下定义具名变体以切换请求参数。例如 MiniMax 的 OpenAI 兼容 Chat Completions API 支持可选的布尔字段reasoning_split,可把它设到变体上控制思考内容的返回格式:
"variants": { "thinking": { "reasoning_split": true, }, }true时 MiniMax 将思考内容单独放在reasoning_content与reasoning_details中返回——该设置只改变响应格式,不改变模型是否思考。不支持的 Provider(包括使用 Anthropic Messages API 的 MiniMax)请勿设置。
用 id 字段映射模型名
当配置中的模型键与 Provider 期望的名称不一致时,使用id字段。例如 LM Studio 本地模型:
{ "model": "lmstudio/my-local-llama", "provider": { "lmstudio": { "models": { "my-local-llama": { "id": "meta-llama-3.1-8b-instruct", "name": "Llama 3.1 8B (Local)", }, }, }, }, }此处my-local-llama是你在配置与模型选择器中使用的键,meta-llama-3.1-8b-instruct才是实际发给 LM Studio API 的模型标识。同样的手法用于 Azure:用原生azureProvider,当部署名与模型键不同时把部署名填进id。切勿将 Azure GPT-5 系列部署配置在openai-compatible下,因为该 Provider 发送max_tokens,而 Azure GPT-5 期望max_completion_tokens:
{ "model": "azure/gpt-5.5", "provider": { "azure": { "options": { "apiKey": "{env:AZURE_API_KEY}", "resourceName": "my-azure-resource", }, "models": { "gpt-5.5": { "id": "my-gpt-5-5-deployment", "name": "GPT-5.5 on Azure", "reasoning": true, "tool_call": true, "temperature": false, "limit": { "context": 400000, "output": 128000, }, }, }, }, }, }若想配置完整 Azure 端点而非资源名,可将resourceName替换为baseURL(如"baseURL": "https://my-resource.openai.azure.com/openai");两者同时配置时 Kilo Code 使用baseURL并忽略resourceName,以避免发送冲突的 Azure SDK 选项。
Provider 级选项:超时控制
Provider 级options中值得特别关注的是超时相关配置(定义于 provider.ts 的Info.optionsSchema):
| 选项 | 类型 | 说明 |
|---|---|---|
timeout | number \| false | 完整请求超时(毫秒),覆盖等待响应头与响应体首字节的时间。默认300000(5 分钟),设false禁用。数据开始到达后超时不再生效,因此慢速流式响应不会被切断——响应中途的停滞请用chunkTimeout |
headerTimeout | number \| false | 等待响应头的超时时间(毫秒),Provider 集成可能设置默认值,设false禁用 |
chunkTimeout | number | 流式 SSE 块之间的超时(毫秒)。窗口内无新块到达则中止请求并重试,用于捕获 TCP 连接存活但 SSE 流停止的静默掉线。对流式不稳定的 Provider,建议15000–30000(15–30 秒) |
{ "provider": { "openai": { "options": { "apiKey": "{env:OPENAI_API_KEY}", "baseURL": "https://my-proxy.example.com/v1", "timeout": 300000, }, }, }, }常见故障排查
- "Invalid API Key":再次核对 API 密钥是否输入正确;若认证走自定义请求头,确认 Headers 键值对无误。
- "Model Not Found":确认使用了所选 Provider 的有效模型 ID;必要时在模型定义中通过
id字段映射真实模型标识。 - 连接错误:核实 Base URL 是否正确、Provider 的 API 是否可达(本地模型请确认推理服务已启动且监听在配置的地址上)。
- Azure GPT-5 拒绝
max_tokens:Azure GPT-5 部署必须使用 Kilo Code 原生azureProvider。通用 OpenAI 兼容自定义 Provider 会发送max_tokens,而 Azure GPT-5 期望max_completion_tokens因而拒绝请求。 - 模型不出现在模型选择器中:确认 Provider 凭据有效(API key 或本地服务运行中)、模型键与
"model": "provider/model-key"一致,可运行kilo models列出全部可用模型以确认 Provider 处于激活状态。 - 模型行为异常或对话无限增长:检查
tool_call: true是否已为需要工具的模型开启;确认limit.context与limit.output已设置(若对话不压缩,多半是limit.context为0即未设置)。 - 结果不符合预期:尝试切换不同的模型进行对比。
结语
借助 OpenAI 兼容协议这一事实标准,Kilo Code 能以统一的配置形态接入本地推理、云厂商与自建网关。从 VSCode 界面几步即可完成接入并享受自动模型检测;需要精细控制时,kilo.json中的npm/options/models/variants组合提供了从 token 限额到变体参数的完整调优空间。配置完成后,请始终以你所接入 Provider 的官方文档为准,核对端点路径、模型 ID 与认证方式的最新变化。
【免费下载链接】kilocodeKilo is the all-in-one agentic engineering platform. Build, ship, and iterate faster with the most popular open source coding agent.项目地址: https://gitcode.com/GitHub_Trending/ki/kilocode
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考