文档
Junie CLI
Junie CLI 通过 JSON 文件配置自定义端点,而不是通过设置界面。只需在 $JUNIE_HOME/models/kunavo.json 中写入九行配置,再运行 junie --model custom:kunavo,即可通过一个密钥调用 Claude 和 GPT——同时将辅助请求指向低成本端点。
Junie CLI 在 $JUNIE_HOME/models/ 中通过 JSON 配置文件接收自定义端点,其中 baseUrl 是完整端点 URL,fasterModel 决定辅助流量的去向。
{
"id": "claude-sonnet-5",
"baseUrl": "https://api.kunavo.com/v1/chat/completions",
"displayName": "Kunavo",
"providerName": "Kunavo",
"apiType": "OpenAICompletion",
"apiKey": "${KUNAVO_API_KEY}",
"fasterModel": {
"id": "claude-haiku-4-5"
}
}baseUrl 就是完整的端点,包含路径。 JetBrains 对此说明得很明确:“baseUrl 将用作完整的端点 URL——Junie 不会向其追加路径”,并要求“将其设置为所选 apiType 的完整端点”。因此,此字段既不是源站地址,也不是大多数客户端需要的 /v1 根路径,而应填写 https://api.kunavo.com/v1/chat/completions。如果只填写到 https://api.kunavo.com/v1,这是原本正确的配置最容易出现 404 的原因。apiKey 和 extraHeaders 的值可以引用 $${VAR_NAME},JetBrains 对失败情况有明确说明:“如果被引用的环境变量未设置,配置文件将无法加载,Junie 会报告错误并指出缺少的变量。”启动 Junie 前,请先导出 KUNAVO_API_KEY——配置文件会在加载时读取,而非首次请求时读取,因此,如果 shell 中未保留该导出变量,配置文件会从 /model 中消失,而不是导致 401。fasterModel 用于指定 Junie 将未经你要求而发送的任务交给哪个模型处理。 JetBrains 将其描述为“用于摘要上下文或分类任务等内部辅助任务的模型”,并指出,如果未明确设置 primaryModel 或 fasterModel,“它们会继承顶层属性”。因此,如果配置文件中没有 fasterModel 块,日常辅助任务就会按主模型的费率计费。上方的一行覆盖设置就是完整解决方案;这也是为什么它放在最简配置中,而不是放在附录里。curl 是你可以在十秒内自行确认的部分;Junie 基于此配置的具体行为,则取决于你与 JetBrains。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 Junie CLI 设置页面。分步操作
- 在
/app/keys创建密钥并复制——它只会显示一次。在启动 Junie 的 shell 中将其导出为KUNAVO_API_KEY,也可以在文件中直接填写密钥;JetBrains 指出,“不含任何$${...}引用的值会按原样使用”。 - 将上面的 JSON 保存为你账户的
$JUNIE_HOME/models/kunavo.json,或保存为可与仓库共享的.junie/models/kunavo.json。去掉.json的文件名就是配置文件 ID,因此下方的选择器会显示custom:kunavo。 - 将
id设为你实际需要的模型 ID。它被描述为“API 端点所需的模型标识符”,因此可直接填写下表中的 Kunavo slug;ID 由端点解析,而不是由 Junie 解析。 - 启动 Junie 并选择配置:
junie --model custom:kunavo,或在交互式会话中使用/model命令。自定义模型会“显示在内置服务商之后的模型选择列表中”。 - 给它一个需要编辑文件的任务,而不是只发问候语。Junie 是代理式客户端,几乎所有操作都依赖工具调用,因此首次运行时让它读写内容,比只收到一条回复能提供更多信息。
已于 2026年9月21日 对照 JetBrains 的 Junie 自定义 LLM 页面 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 Junie CLI 中使用。
# 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 输入 / 输出 | 它在 Junie CLI 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 用于常规工作的 primaryModel——也就是编辑文件的任务 |
claude-opus-5 | $3.50 / $17.50 | 按会话固定的计划模型,避免关键规划出错造成高昂代价 |
claude-haiku-4-5 | $0.70 / $3.50 | 用于总结上下文、分类任务的 fasterModel 角色 |
gpt-5-6-sol | $2.00 / $12.00 | 来自另一模型系列的第二意见——使用另一配置文件,但共用同一密钥 |
Kunavo 支持的另外两种 apiType
apiType 指的是请求格式,而不是供应商;Junie 接受四种值:OpenAICompletion、OpenAIResponses、Google 和 Anthropic。Kunavo 提供三种路由,因此其余三种值中有两种在此有对应的 baseUrl。由于 Junie 不会追加路径,更改格式时必须同时修改 URL:
"apiType": "OpenAICompletion"搭配https://api.kunavo.com/v1/chat/completions——即上方的配置文件,也是本页推荐的选项,因为这是三种路由中使用最广泛的一种。"apiType": "Anthropic"搭配https://api.kunavo.com/v1/messages——Kunavo 会在该路径上响应 Messages 格式。"apiType": "OpenAIResponses"搭配https://api.kunavo.com/v1/responses。
对于给定模型,哪种 Junie 驱动方式最好,这正是需要通过运行时测试来回答、无法仅凭阅读文档回答的问题,因此除了首行所述之外,本页不对它们进行排序。请选择一种方式,确保 URL 与 apiType 相匹配;如果设置了密钥的配置返回 401,请明确填写凭证,而不要猜测 Junie 使用的请求头:JetBrains 仅以否定方式说明了 apiKey:“如果省略,请求将不带 Authorization 请求头发送”,但从未说明设置该值时使用什么方案。extraHeaders 被描述为“每个请求都要包含的额外 HTTP 请求头”,并使用相同的 $${VAR} 引用,因此 "extraHeaders": {"Authorization": "Bearer $${KUNAVO_API_KEY}"} 是无歧义的格式。
常见问题
如何向 Junie CLI 添加自定义 Provider?
Junie CLI 从 JSON 配置文件读取自定义 Provider,而不是通过设置界面添加。对于你的账户,将文件放在 $JUNIE_HOME/models/;对于项目,则放在项目内的 .junie/models/。去掉 .json 扩展名后的文件名就是配置文件 ID。必填键为 id、baseUrl 和 apiType;apiKey、displayName、providerName、extraHeaders、extraBody、temperature、maxContextLength、primaryModel 和 fasterModel 均为可选。之后使用 `junie --model custom:<id>` 或 /model 命令选择它——自定义模型会显示在内置 Provider 之后的列表中。
Junie CLI 的 baseUrl 需要 /v1 还是完整路径?
需要填写完整路径。JetBrains 指出,baseUrl 会用作完整端点 URL,Junie 不会追加路径,并要求你将其设置为所选 apiType 对应的完整端点。对于连接 Kunavo 的 OpenAICompletion 配置文件,地址应为 https://api.kunavo.com/v1/chat/completions——而不是源站,也不是 Kilo Code 等客户端需要的 /v1 根路径。JetBrains 自家文档中的两个示例配置文件也都包含完整路径,原因相同。
为什么 Junie 提示配置文件因缺少环境变量而无法加载?
因为 apiKey 和 extraHeaders 的值支持 ${VAR_NAME} 引用;JetBrains 说明,如果引用的环境变量未设置,配置文件就会加载失败,Junie 会报错并指出缺失的变量。变量会在配置文件加载时解析,因此你会看到配置文件从模型列表中消失,而不是请求失败。请在启动 Junie 之前导出该变量,或将引用替换成字面值。
Junie CLI 能否通过 Kunavo 这样的网关使用自己的 BYOK 密钥?
BYOK 页面和自定义配置文件是两种不同的接入方式。JetBrains 的 BYOK 页面介绍了如何通过 /account 或欢迎页面上的“Use your own API key”连接指定的 Provider——OpenAI、Anthropic、Google、xAI、OpenRouter 或 GitHub Copilot;页面还说明,所有用量均由 Provider 计费,无需订阅 JetBrains AI。Kunavo 等不在列表中的端点,应作为自定义 LLM 配置文件接入,也就是本页介绍的 JSON 文件。自带密钥是 Junie CLI 的功能:JetBrains 的插件文档指出,Junie 插件不支持此功能。
为什么 Junie 调用了我没有选择的模型?
Junie 将配置文件分为两个角色;文档说明,fasterModel 用于内部辅助任务,例如总结上下文或分类任务。如果没有定义该区块,JetBrains 说明这些角色会继承顶层属性——因此辅助请求会使用主模型,并按其费率计费。如本页配置文件所示,将 fasterModel.id 设为较便宜的 ID 即可调整;两个角色都会继承顶层的 baseUrl、apiType 和 apiKey,因此只需更改 ID。
Kunavo 测试过 Junie CLI 吗?
没有。2026 年 9 月 21 日检查的是 JetBrains 自己的 Custom LLMs 文档——字段名称、顺序、接受的 apiType 值以及完整端点规则均引自该文档。Kunavo 尚未安装 Junie CLI、指定构建版本或通过它发送请求,因此不对客户端中的流式交互、工具往返或模型路由作出任何声明。你可以单独确认的只有端点和密钥是否可用,本页中的 curl 命令即可完成检查。