kimi-code/docs/zh/configuration/providers.md
7Sageer 61f7d0e7a2
fix(kosong): make OpenAI-compatible thinking work without reasoning_key (#78)
* fix(kosong): make OpenAI-compatible thinking work without reasoning_key

Reasoning field names (reasoning_content / reasoning_details / reasoning)
are protocol facts, not user preferences. Treating reasoning_key as a
required user-set field meant any path that didn't go through the catalog
— hand-written config.toml in particular — silently lost thinking content
and broke strict gateways like DeepSeek.

Demote reasoning_key to an internal protocol constant with an explicit
override:

- Inbound (stream + non-stream): scan reasoning_content,
  reasoning_details, reasoning in order; first string value wins. An
  explicit reasoning_key restricts the scan to that one field.
- Outbound: serialize ThinkPart back as reasoning_content by default.
  An explicit reasoning_key writes to that field instead.
- reasoning_effort auto-injection no longer requires reasoning_key;
  presence of ThinkPart in history is enough.

Catalog plumbing is unchanged — explicit values from the catalog still
win, the default just stops being undefined.

Manually verified end-to-end against the real DeepSeek API with a
hand-written config.toml that does not set reasoning_key: thinking
content renders, no 400, multi-turn conversations work.

* fix(kosong): normalize blank reasoning_key to unset

ModelAliasSchema accepts `reasoning_key = ""` (z.string().optional()).
A blank value used to disable the default field scan and route both
inbound reads and outbound writes through an empty property name.
Trim and treat empty as undefined at the provider boundary so the
default protocol behavior applies.

* fix(kosong): preserve caller-pinned reasoning_effort during auto-inject

When the history contains ThinkPart, generate() injects
reasoning_effort='medium' and then assigns it onto createParams,
which used to silently overwrite a value the caller set via
withGenerationKwargs({ reasoning_effort: 'high' }). Skip auto-inject
when an explicit reasoning_effort already lives in kwargs.
2026-05-26 19:28:25 +08:00

7.5 KiB
Raw Permalink Blame History

平台与模型

Kimi Code CLI 通过统一的供应商抽象对接多家 LLM 平台。每个供应商负责一种 API 协议,模型则在供应商之上声明自己的名称、上下文长度和能力。本页介绍当前支持的所有供应商类型,以及如何在 ~/.kimi-code/config.toml 中配置它们。

概述

providers 表里的 type 字段决定使用哪一种实现。目前支持的类型有:

类型 协议 典型平台
kimi OpenAI 兼容chat completions 风格) Kimi Code、Moonshot AI 开放平台
anthropic Anthropic Messages Claude API
openai OpenAI Chat Completions OpenAI 及其兼容服务
openai_responses OpenAI Responses API OpenAI 较新的 Responses 接口
google-genai Google GenAI Gemini API
vertexai Google GenAI on Vertex Google Cloud Vertex AI

所有供应商默认以流式方式与模型交互thinking、视觉、工具调用等能力按模型名前缀自动匹配无需在配置里手写。

API 密钥可以写在 api_key 字段,也可以放在 [providers.<name>.env] 子表里。优先级为 api_key > 子表键 > 若均未配置,启动时将报错。Kimi Code CLI 不会从 shell 环境变量自动取后备值——仅在终端里 export KIMI_API_KEY 不会让某个供应商自动获得凭证,需要显式写入 config.toml(详见 配置覆盖:供应商凭证)。api_keyoauth 在同一个供应商上互斥同时设置会在解析模型时报错OAuth 由内置登录流程自动注入,无需手写。

[providers.<name>.env] 子表可以在 config.toml 内直接提供凭证或端点覆盖,这些值仅对当前供应商生效,不会泄漏到全局 shell 环境:

[providers.my-anthropic.env]
ANTHROPIC_API_KEY = "sk-ant-xxxxx"
ANTHROPIC_BASE_URL = "https://my-proxy.example.com"

切换供应商最常见的方式有两种:在 TUI 里用 /model 斜杠命令选择已配置的模型,或者直接编辑 config.toml 调整 [providers.*][models.*] 表。完整字段说明见 配置文件

/connect 与模型目录

除了在 config.toml 中手写 [providers.*][models.*] 表,你也可以在 TUI 中运行 /connect 斜杠命令,从 模型目录model catalog添加供应商。模型目录记录了已知的供应商和模型以及它们的上下文长度、输出长度和能力。/connect 会引导你选择供应商、选择模型、输入 API 密钥,然后把对应的 [providers.<name>][models.<alias>] 写入 config.toml

CLI 已经内置了默认的模型目录,因此 /connect 无需联网即可使用。如果想换用别的来源,可以传入以下参数:

  • /connect --refresh:在打开选择器之前,从 models.dev 拉取最新模型目录。
  • /connect --url=<catalog-url>:从自定义地址读取模型目录(格式需与默认目录一致),只接受 http://https:// 的 URL。

/connect 只能配置上表列出的供应商类型;不在目录范围内的供应商类型,请按下面各小节的说明,在 config.toml 中手写配置。

对通过 /connect 配置的供应商,/logout 同样有效:它会从 config.toml 中删除对应的 [providers.<name>] 配置块。

kimi

kimi 通过 OpenAI 兼容协议对接 Moonshot AI。

  • 默认 base_urlhttps://api.moonshot.ai/v1
  • 环境变量:KIMI_API_KEYKIMI_BASE_URL
  • 额外能力:支持视频上传
[providers.kimi]
type = "kimi"
base_url = "https://api.moonshot.ai/v1"
api_key = "sk-xxxxx"

Kimi Code 托管服务在 OAuth 登录后会自动配置 base_url 与凭证,无需手动填写;详见 OAuth 与凭证注入环境变量

anthropic

anthropic 用于对接 Claude API。标准 Claude 模型会自动启用视觉、工具调用及 Thinking如支持。若使用自定义或尚未覆盖的模型需在 [models.<alias>] 中显式声明 capabilities

Thinking 可通过 /model/settings 或配置控制。

  • 默认 base_url:跟随 Anthropic SDK 默认值
  • 环境变量:ANTHROPIC_API_KEYANTHROPIC_BASE_URL
  • 默认 max_tokens:按模型自动设置。如需覆盖(例如测试或为尚未识别的别名指定值),在模型别名上设置 max_output_size(详见 config-files.md)。已识别别名的覆盖值会被限制在服务端允许的上限内。
[providers.anthropic]
type = "anthropic"
api_key = "sk-ant-xxxxx"

[models."claude-opus-4-7"]
provider = "anthropic"
model = "claude-opus-4-7"
max_context_size = 200000
# 可选:在测试时降低输出预算,或为本 CLI 尚未识别的模型指定一个值。
# 省略则使用上述按模型推导出的默认值。
# max_output_size = 32000

openai

openai 对应 OpenAI Chat Completions 协议,也可用来连接任何兼容该协议的第三方服务(自行覆盖 base_url 即可。thinking、视觉、工具调用等能力按模型名自动推断。

第三方推理模型DeepSeek、Qwen、One API 等网关托管服务)开箱即用:思考内容会以约定字段 reasoning_content 回传给服务端,且当对话历史中已有思考片段时会自动注入 reasoning_effort,避免严格校验的网关返回错误。如果你的网关使用非标准字段名,可以在模型别名上设置 reasoning_key 覆盖 —— 详见 config-files.md

  • 默认 base_urlhttps://api.openai.com/v1
  • 环境变量:OPENAI_API_KEYOPENAI_BASE_URL
[providers.openai]
type = "openai"
base_url = "https://api.openai.com/v1"
api_key = "sk-xxxxx"

openai_responses

openai_responses 对应 OpenAI 较新的 Responses API。它始终以流式方式工作能力按模型名自动推断。

  • 默认 base_urlhttps://api.openai.com/v1
  • 环境变量:OPENAI_API_KEYOPENAI_BASE_URL
[providers.openai-responses]
type = "openai_responses"
base_url = "https://api.openai.com/v1"
api_key = "sk-xxxxx"

google-genai

google-genai 用于直连 Google Gemini API。thinking、视觉及多模态能力按模型名自动推断。

  • 环境变量:GOOGLE_API_KEY
[providers.gemini]
type = "google-genai"
api_key = "xxxxx"

vertexai

vertexaigoogle-genai 共用同一份实现,type = "vertexai" 时切换到 Vertex AI 的访问路径。

认证遵循 Google Cloud 的标准流程:通过 gcloud auth application-default login 或设置 GOOGLE_APPLICATION_CREDENTIALS 指向服务账号 JSON 完成鉴权(这一步是 Google SDK 的通用机制,与 Kimi Code 配置无关)。项目与区域必须写在 [providers.vertexai.env] 子表中——直接 export GOOGLE_CLOUD_PROJECTexport GOOGLE_CLOUD_LOCATION 不会被 CLI 读取。GOOGLE_CLOUD_LOCATION 缺失时CLI 会尝试从 base_url 自动推断。API 密钥(VERTEXAI_API_KEYGOOGLE_API_KEY)同样写在子表内。

[providers.vertexai]
type = "vertexai"

[providers.vertexai.env]
GOOGLE_CLOUD_PROJECT = "my-gcp-project"
GOOGLE_CLOUD_LOCATION = "us-central1"
gcloud auth application-default login   # 一次性
kimi

OAuth 与凭证注入

部分平台(如 Kimi Code 托管服务)使用 OAuth 而非静态 API 密钥。凭证由内置的 kimi-oauth 工具链在运行时注入,登录流程会自动负责写入与刷新,普通配置文件无需手工配置这部分内容。