Skip to content

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 聚焦文本推理。