Appearance
Kimi K2.6/K2.5 的 Thinking 模式默认开启,在生成最终回答前进行深度推理,推理过程存放在 reasoning_content 字段。本文介绍如何控制 thinking 开关、如何在流式输出中读取推理过程,以及 Preserved Thinking 跨轮保留思路的高级用法。
Kimi K2 思考模式(Thinking)
支持的模型
| 模型 | Thinking 默认状态 | 可关闭 |
|---|---|---|
| kimi-k2.6 | 默认启用 | ✅ |
| kimi-k2.5 | 默认启用 | ✅ |
| kimi-k2-thinking | 始终启用 | ❌ |
| moonshot-v1 系列 | 不支持 | — |
与 DeepSeek R1 对比:两者都有 thinking 能力,但 Kimi K2.6 是多模态模型,且 thinking 可选开关;DeepSeek R1 thinking 不可关闭。
基础用法
Thinking 默认开启,无需额外配置,reasoning_content 字段会出现在回复中:
python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("MOONSHOT_API_KEY"),
base_url="https://api.moonshot.cn/v1",
)
response = client.chat.completions.create(
model="kimi-k2.6",
messages=[{"role": "user", "content": "证明 √2 是无理数"}],
)
message = response.choices[0].message
print("推理过程:", message.reasoning_content)
print("最终答案:", message.content)禁用 Thinking
对于简单任务,可禁用 thinking 减少 token 消耗和延迟:
python
response = client.chat.completions.create(
model="kimi-k2.6",
messages=[{"role": "user", "content": "你好"}],
extra_body={"thinking": {"type": "disabled"}},
)流式输出处理
thinking 模式下生成量大,强烈建议使用流式输出:
python
stream = client.chat.completions.create(
model="kimi-k2.6",
messages=[{"role": "user", "content": "解一道复杂的数学题:..."}],
stream=True,
max_tokens=16000, # thinking 模式建议至少 16000
)
reasoning = []
content = []
for chunk in stream:
delta = chunk.choices[0].delta
if delta.reasoning_content:
reasoning.append(delta.reasoning_content)
print("[思考]", delta.reasoning_content, end="", flush=True)
elif delta.content:
content.append(delta.content)
print(delta.content, end="", flush=True)
print("\n\n=== 最终答案 ===")
print("".join(content))Preserved Thinking(跨轮保留思路)
多轮工具调用场景中,可以将上一轮的推理内容传给下一轮,让模型延续思路:
python
# 启用 Preserved Thinking
response = client.chat.completions.create(
model="kimi-k2.6",
messages=messages,
extra_body={"thinking": {"type": "enabled", "keep": "all"}},
)
# 关键:将 reasoning_content 原样保存到 messages 中
assistant_msg = response.choices[0].message
messages.append({
"role": "assistant",
"content": assistant_msg.content,
"reasoning_content": assistant_msg.reasoning_content, # 必须保留
"tool_calls": assistant_msg.tool_calls,
})注意:启用 keep: "all" 会保留所有历史轮次的 reasoning_content,会显著增加 token 消耗。仅在需要深度多步推理的 Agent 场景使用。
Thinking 模式下的工具调用约束
启用 thinking(默认)时:
tool_choice只能是"auto"或"none",不能指定具体工具- 每轮工具调用后,assistant 消息中的
reasoning_content必须原样传入下一轮,否则报错 - 不兼容内置的
$web_search工具(使用 $web_search 时必须禁用 thinking)
常见问题
Q: thinking 模式会增加多少费用?
A: reasoning_content 消耗的 token 也会计入计费。复杂推理任务可能产生大量 reasoning_content,建议用 token 预估接口 估算。
Q: 如何只看最终答案,不需要推理过程?
A: 推理过程在 reasoning_content 字段,最终答案在 content 字段,读取 content 即可,reasoning_content 可以忽略。
Q: kimi-k2.6 的 thinking 和 OpenAI o1 的 thinking 有什么区别?
A: 主要差异:1)kimi-k2.6 的 thinking 可以关闭;2)多模态支持(图片/视频);3)多轮工具调用时需要保留 reasoning_content(OpenAI o1 不需要)。
Kimi K2.6/K2.5 支持思考模式(Thinking),通过 thinking.type="enabled" 开启,模型会在 reasoning_content 中返回中间推理过程。支持 Preserved Thinking(跨轮次保留推理)。本文覆盖开关方式、流式处理和最佳实践。
使用 Kimi K2 思考模式
什么是思考模式
思考模式(Thinking)让 kimi-k2.6 在给出最终回答前,先进行深度推理——这个推理过程会出现在响应的 reasoning_content 字段中。
与 DeepSeek R1 类似:DeepSeek R1 也通过
reasoning_content字段返回思考过程。两者的 API 用法基本相同,主要差异在开启方式和模型特性上。
开启思考模式
typescript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.MOONSHOT_API_KEY,
baseURL: "https://api.moonshot.cn/v1",
});
const completion = await client.chat.completions.create({
model: "kimi-k2.6",
messages: [
{ role: "user", content: "证明 √2 是无理数。" },
],
// @ts-ignore — Kimi 扩展参数,OpenAI SDK 类型定义中没有
thinking: {
type: "enabled", // 开启思考模式
budget_tokens: 8192, // 思考过程最多使用的 token 数(可选)
},
temperature: 1.0, // 思考模式必须用 1.0
} as any);
const message = completion.choices[0].message;
console.log("思考过程:", (message as any).reasoning_content);
console.log("最终回答:", message.content);python
from openai import OpenAI
client = OpenAI(
api_key="MOONSHOT_API_KEY",
base_url="https://api.moonshot.cn/v1",
)
completion = client.chat.completions.create(
model="kimi-k2.6",
messages=[
{"role": "user", "content": "证明 √2 是无理数。"},
],
thinking={
"type": "enabled",
"budget_tokens": 8192,
},
temperature=1.0,
)
message = completion.choices[0].message
print("思考过程:", message.reasoning_content)
print("最终回答:", message.content)关闭思考模式
typescript
thinking: {
type: "disabled",
}
// temperature 对应改为 0.6流式输出下的思考内容
流式输出时,reasoning_content 也会分块推送:
typescript
const stream = await client.chat.completions.create({
model: "kimi-k2.6",
messages: [{ role: "user", content: "分析这道难题..." }],
stream: true,
thinking: { type: "enabled" },
temperature: 1.0,
} as any);
let reasoning = "";
let content = "";
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta as any;
if (delta?.reasoning_content) {
reasoning += delta.reasoning_content;
process.stdout.write(`[思考] ${delta.reasoning_content}`);
}
if (delta?.content) {
content += delta.content;
process.stdout.write(delta.content);
}
}Preserved Thinking(跨轮次保留推理)
多轮对话中,可以将前几轮的 reasoning_content 保留,让模型在下一轮中继续使用之前的思考:
typescript
// 第一轮
const response1 = await client.chat.completions.create({
model: "kimi-k2.6",
messages: [{ role: "user", content: "分析这个问题的第一步。" }],
thinking: { type: "enabled", keep: "all" },
temperature: 1.0,
} as any);
const message1 = response1.choices[0].message as any;
// 第二轮:把第一轮的 reasoning_content 也带进去
const response2 = await client.chat.completions.create({
model: "kimi-k2.6",
messages: [
{ role: "user", content: "分析这个问题的第一步。" },
{
role: "assistant",
content: message1.content,
reasoning_content: message1.reasoning_content, // ← 保留上轮思考过程
} as any,
{ role: "user", content: "继续分析第二步。" },
],
thinking: { type: "enabled", keep: "all" },
temperature: 1.0,
} as any);注意:
reasoning_content同样会计入 token 消耗。开启 Preserved Thinking 后,token 消耗会随轮次增加。
思考 token 预算
budget_tokens 控制思考过程最多使用多少 token:
| 场景 | 建议 budget_tokens |
|---|---|
| 简单问题 | 1024~2048 |
| 中等复杂推理 | 4096~8192 |
| 复杂数学/代码 | 16384~32768 |
| 超复杂任务 | 不设上限 |
与非思考模式的选择
| 场景 | 推荐模式 |
|---|---|
| 简单对话、翻译、摘要 | 非思考模式(temperature=0.6,更快更省) |
| 数学证明、复杂推理 | 思考模式(temperature=1.0) |
| 代码生成(复杂) | 思考模式 |
| Agent 任务(工具调用) | 视任务复杂度选择 |
常见问题
Q: 思考模式和非思考模式的 temperature 要求不同?
A: 是的。kimi-k2.6/k2.5 在思考模式下必须用 temperature=1.0,非思考模式必须用 temperature=0.6。设置其他值会报错。最简单的做法是不设置 temperature,让 API 使用模式对应的默认值。
Q: reasoning_content 会计费吗?
A: 会。reasoning_content 的 token 同样计入输出 token 费用。如果使用 Preserved Thinking,上一轮的 reasoning_content 在下一轮请求时计入输入 token。
Q: Kimi 思考模式和 DeepSeek R1 有什么区别?
A: 接口格式基本相同(都用 reasoning_content),主要差异在模型能力和定价上。Kimi K2.6 是多模态模型,支持图片/视频输入;DeepSeek R1 聚焦文本推理。