深度思考
深度思考(Deep Thinking / Reasoning)是部分大模型提供的增强推理能力。模型在回答前会先进行内部"思考",输出推理过程后再给出最终答案,适合数学、逻辑、代码分析等复杂任务。
启用方式: 无需额外配置或开关,只需将 model 参数设为支持深度思考的模型(如 deepseek-r1)即可自动启用。模 型会在回答前先输出思考过程(reasoning_content),再输出最终回答(content)。
适用模型
深度思考能力仅部分模型支持,目前支持的模型包括 deepseek-r1 等推理模型。具体支持情况请参考接入大模型中的模型列表。
备注
使用不支持深度思考的模型时传入相关参数不会报错,但不会产生思考内容。
使用方式
协议说明
以下示例基于 Chat Completions 协议(cURL 标签展示了原始 HTTP 请求)。深度思考功能同样适用于其他协议,包括 CloudBase SDK 和 Anthropic SDK 兼容协议,使用方式一致——只需指定支持深度思考的模型即可。各协议的接入方式请参考接入方式文档。
- CloudBase SDK
- OpenAI SDK
- cURL
const model = ai.createModel("cloudbase");
const result = await model.generateText({
model: "deepseek-r1",
messages: [{ role: "user", content: "证明 √2 是无理数" }]
});
// 通过 rawResponses 获取思考内容
const rawResponse = result.rawResponses[0];
const message = rawResponse.choices[0].message;
console.log("思考过程:", message.reasoning_content);
console.log("最终回答:", result.text);
非流式调用:
const OpenAI = require("openai");
const client = new OpenAI({
apiKey: "<YOUR_API_KEY>",
baseURL: "https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/cloudbase"
});
const completion = await client.chat.completions.create({
model: "deepseek-r1",
messages: [{ role: "user", content: "证明 √2 是无理数" }]
});
const message = completion.choices[0].message;
console.log("思考过程:", message.reasoning_content);
console.log("最终回答:", message.content);
流式调用:
const stream = await client.chat.completions.create({
model: "deepseek-r1",
messages: [{ role: "user", content: "证明 √2 是无理数" }],
stream: true
});
let reasoning = "";
let answer = "";
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta;
// 思考过程
if (delta?.reasoning_content) {
reasoning += delta.reasoning_content;
process.stdout.write(`[思考] ${delta.reasoning_content}`);
}
// 最终回答
if (delta?.content) {
answer += delta.content;
process.stdout.write(delta.content);
}
}
curl -X POST 'https://<ENV_ID>.api.tcloudbasegateway.com/v1/ai/cloudbase/chat/completions' \
-H 'Authorization: Bearer <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"model": "deepseek-r1",
"messages": [
{"role": "user", "content": "证明 √2 是无理数"}
]
}'
输出格式
启用深度思考后,模型返回两部分内容:
| 字段 | 说明 | 用途 |
|---|---|---|
reasoning_content | 思考过程 | 展示给用户看(可折叠),帮助理解模型推理逻辑 |
content | 最终回答 | 实际使用的结果 |
非流式响应示例:
{
"choices": [{
"message": {
"role": "assistant",
"reasoning_content": "用户问的是 28 的质因数分解。我需要逐步分解:28 ÷ 2 = 14,14 ÷ 2 = 7,7 是质数。所以 28 = 2² × 7。",
"content": "28 的质因数分解为 2² × 7。\n\n分解步骤:\n1. 28 ÷ 2 = 14\n2. 14 ÷ 2 = 7\n3. 7 是质数,停止\n\n因此 28 = 2 × 2 × 7 = 2² × 7"
},
"finish_reason": "stop"
}]
}
前端展示建议
思考过程通常较长,建议以可折叠的方式展示:
function ThinkingMessage({ reasoning, content }) {
const [expanded, setExpanded] = useState(false);
return (
<div className="message">
{reasoning && (
<div className="thinking-block">
<button onClick={() => setExpanded(!expanded)}>
{expanded ? "▼" : "▶"} 思考过程
</button>
{expanded && (
<pre className="thinking-content">{reasoning}</pre>
)}
</div>
)}
<div className="answer">
<ReactMarkdown>{content}</ReactMarkdown>
</div>
</div>
);
}
多轮对话中的注意事项
使用深度思考模型进行多轮对话时,不要将 reasoning_content 追加到 messages 历史中:
const messages = [];
async function chat(userMessage) {
messages.push({ role: "user", content: userMessage });
const completion = await client.chat.completions.create({
model: "deepseek-r1",
messages
});
const choice = completion.choices[0].message;
// ✅ 正确:只追加 content
messages.push({
role: "assistant",
content: choice.content
});
// ❌ 错误:不要追加 reasoning_content
// messages.push({
// role: "assistant",
// content: choice.reasoning_content + choice.content
// });
return {
reasoning: choice.reasoning_content,
answer: choice.content
};
}
注意
将思考过程追加到 messages 会导致:
- 输入 Token 快速膨胀(思考过程通常很长)
- 模型回复质量下降
- 可能出现格式异常
适用场景
| 场景 | 推荐 | 原因 |
|---|---|---|
| 数学证明 / 推理 | ✅ 推荐 | 需要严谨的逐步推理 |
| 代码 Bug 分析 | ✅ 推荐 | 需要追踪执行流程 |
| 复杂逻辑判断 | ✅ 推荐 | 需要考虑多种条件 |
| 简单问答 | ❌ 不推荐 | 增加不必要的延迟和成本 |
| 实时对话 | ❌ 不推荐 | 思考过程导致首字延迟较高 |
| 创意写作 | ⚠️ 视情况 | 短文案不需要,长篇规划可能有帮助 |
成本与性能
| 指标 | 深度思考模型 | 普通模型 |
|---|---|---|
| 首字延迟 | 较高(需完成思考) | 较低 |
| 输出 Token | 较多(含思考内容) | 较少 |
| 回答准确性 | 较高(复杂任务) | 一般 |
| 计费 | 思考 Token 也计费 | 仅回答内容计费 |
提示
根据任务复杂度选择模型:简单任务用 deepseek-v4-flash,复杂推理任务用 deepseek-r1。