Kimi_K3工具调用怎么配置?
Kimi K3 的 Chat Completions API 原生支持工具调用(Tool Calling),但要求请求中必须显式传入符合 OpenAI 格式的 tools 数组并设置 tool_choice,否则模型默认返回纯文本响应。该功能自 2026 年 7 月起已在 Kimi API 中可用,支持函数定义、参数校验和工具结果回传。
工具调用的核心配置要求
要正确触发 Kimi K3 的工具调用模式,需在请求中同时满足以下条件:
- 传入
tools数组,每个元素使用 OpenAI 兼容的 JSON Schema 格式,字段名必须为type、function、name、description、parameters、properties、required等标准键,不得替换为中文或自定义键。 - 设置
tool_choice为"auto"或指定函数名。若设为null或省略,模型不会进入工具调用状态。 - 避免使用
"array"类型的顶层parameters以及"anyOf"/"oneOf"复合结构。Kimi K3 不支持这些类型,遇到时会静默降级为文本响应且不报错。
以下是一个正确的工具定义示例:
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市天气",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
}
}
}
响应解析与 follow-up 请求构造
成功触发工具调用后,Kimi K3 的响应体中一定包含 tool_calls 数组,每个元素包含 id、function.name 和 function.arguments(JSON 字符串,需手动解析为对象)。若响应中只有 content 字段,说明工具未被调用,需回溯检查 tools 是否传入、schema 是否合规、model 是否为 kimi-k3。
构造 follow-up 请求时,需将原始 messages 数组追加两条消息:
- 第一条:
role="assistant",content=null,tool_calls为原始响应中的数组。 - 第二条:
role="tool",content为工具执行结果,tool_call_id必须与原始tool_calls[0].id完全一致(大小写和符号均不可错),否则返回 400 错误。
与 Codex 等框架的兼容层方案
Codex 默认使用 Responses 协议,而 Kimi K3 只响应 Chat Completions 协议中的 tools 字段。因此需要在本地部署兼容层(如 CC Switch 或自建 proxy)完成协议转换:
- 兼容层接收 Codex 的 Responses-style 请求,提取其中的
functions字段。 - 将其重构成 OpenAI-style
tools数组,并注入到转发给 Kimi API 的 Chat Completions 请求中。 - 接收 Kimi 响应后,若含
tool_calls,则将其映射回 Responses 协议的function_call字段,再返回给 Codex。
需注意:不要在 Codex 的 config.toml 中直接设置 wire_api = "responses" 配合 base_url = "https://api.moonshot.cn/v1",这会导致 Codex 向 Kimi 发送 /v1/responses 请求,而 Kimi 不存在该路径,必然返回 404。
本文信息基于原始资料记录时的状态,模型版本、产品功能、API 行为可能继续变化,实际情况以月之暗面最新公开信息为准。