Claude 思维链(CoT)提示词写法:让推理更准确
思维链(Chain of Thought,简称 CoT)提示词的核心只有一句话:让 Claude 在给出最终答案之前,先把中间推理步骤写出来。模型把"思考"显式生成在上下文里,就能在后续 token 上参考自己刚算出的中间结论,多步推理、数学计算、逻辑判断的准确率因此明显提升。下面讲清三种写法、参数细节和可运行代码。
为什么 CoT 能让推理更准确
Claude 是自回归模型,每个 token 都依赖前面已生成的内容。如果你直接要它输出答案,它没有"演算空间",容易在心算阶段出错。而当你要求它"一步步思考",推理链条就成了上下文的一部分,后面的结论建立在前面写出的步骤之上,相当于给模型一块草稿纸。
CoT 最能见效的场景:多步算术与单位换算、需要分类讨论的逻辑题、代码 bug 定位、合同/规则的条件判断、需要权衡多个因素的决策。对于简单的事实问答或纯改写任务,CoT 收益有限,反而拉长输出、增加 Token 成本——这类省钱思路可参考 Claude API 省钱方法。
写法一:零样本 CoT(最简单)
不给示例,只在指令里加一句触发语,让模型自发展开推理。常用触发语:
- 请一步步思考后再给出答案
- 先列出推理过程,再写最终结论
- Think step by step(英文触发同样有效)
关键技巧是明确"先推理、后结论"的顺序,并要求把答案放在最后。下面用 Python 官方 SDK(anthropic)调用 Claude Opus 4.8:
from anthropic import Anthropic
client = Anthropic() # 读取环境变量 ANTHROPIC_API_KEY
resp = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{
"role": "user",
"content": (
"一个仓库有 1250 件货,先发出 38%,又补进 240 件,"
"再发出剩余的四分之一。最终库存是多少?\n"
"请一步步列出计算过程,最后单独用一行写:答案:X"
),
}],
)
print(resp.content[0].text)
模型会先算 1250×38%=475、剩 775、补到 1015、再发出 253.75……把每一步写出来,最后给"答案:761.25"。如果你只问"最终库存是多少",出错概率会高得多。SDK 的安装与鉴权见 Anthropic Python SDK 安装与配置。
写法二:少样本 CoT(给推理范例)
当任务格式固定、推理套路明确时,零样本不够稳,可在提示词里放 1-3 个"问题 + 完整推理 + 答案"的范例,让模型照着同样的步骤推理。这本质上是 Few-shot 与 CoT 的结合,详细的示例编排技巧见 Claude Few-shot 示例怎么用。要点:
- 范例里的推理粒度要和你期望的一致——你示范几步,模型就跟几步。
- 范例覆盖典型情形,尤其是容易出错的边界情况。
- 范例和真实问题用相同的字段名和格式,模型才好对齐。
写法三:结构化 CoT(推荐用于生产)
生产环境最大的痛点是:推理过程和最终答案混在一起,难以程序化提取。解决办法是用 XML 标签把"思考区"和"答案区"分开。Claude 对 XML 标签的遵循度很高,这也是官方推荐的组织方式,更多标签用法见 Claude 提示词 XML 标签用法详解。
请按以下格式回答:
<thinking>
在这里写出完整的推理过程,可以分多步。
</thinking>
<answer>
在这里只写最终答案,简洁明确。
</answer>
拿到响应后,用正则或简单字符串切割提取 <answer> 里的内容给下游使用,<thinking> 部分保留用于调试或日志。这样既享受了 CoT 的准确率,又不污染最终输出。把这段格式约定放进系统提示词更稳定,配置方法见 Claude 系统提示词怎么设置。
Node.js(@anthropic-ai/sdk)的结构化 CoT 示例:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic(); // 读取 ANTHROPIC_API_KEY
const msg = await client.messages.create({
model: "claude-opus-4-8",
max_tokens: 1024,
system:
"你是严谨的逻辑分析助手。回答时先在 内推理," +
"再在 内给出结论, 内不要重复推理。",
messages: [
{
role: "user",
content:
"三个人 A、B、C,只有一人说真话。A 说 B 撒谎," +
"B 说 C 撒谎,C 说 A、B 都撒谎。谁说真话?",
},
],
});
const text = msg.content[0].text;
const answer = text.match(/([\s\S]*?)<\/answer>/)?.[1].trim();
console.log(answer);
关键参数与调用细节
无论哪种写法,都通过 Messages API(POST /v1/messages)发起,鉴权头为 x-api-key 和 anthropic-version。和 CoT 相关的几个参数:
| 参数 | 建议与说明 |
|---|---|
| max_tokens | CoT 会显著拉长输出,务必预留足够额度(如 1024 起),否则推理写一半就被截断。 |
| temperature | 需要确定性推理时调低(如 0.0–0.3);需要发散探索多条思路时再调高。 |
| system | 把"先思考后回答"的格式约定固定在系统提示词里,比每次写进用户消息更稳定。 |
| stop_sequences | 可设为 </answer>,让模型写完答案即停,节省尾部 Token。 |
各参数完整含义见 Claude Messages API 全部参数说明。模型选择上,复杂多步推理优先用 Claude Opus 4.8,日常推理用 Claude Sonnet 4.6 更划算,选型对比见 Claude 模型选型指南。
三个常见踩坑
- 把答案放在了推理前面:模型先写结论就失去了 CoT 的意义,一定要求"先过程、后结论"。
- max_tokens 太小:推理被截断,连答案都没输出。CoT 任务请放宽额度。
- 简单任务也强加 CoT:徒增延迟和成本,按任务复杂度取舍。
常见问题
CoT 和 Claude 的"扩展思考"模式是一回事吗?
不完全一样。本文讲的 CoT 是通过提示词让模型把推理写进正文输出,任何模型、任何调用方式都能用,你能直接看到并提取这段推理。部分模型还提供独立的扩展思考能力,由专门字段控制。两者目的相同——给模型演算空间——具体能力与开关请以 Anthropic 官网为准。
用了 CoT 还是算错,怎么办?
先检查是否把答案放到了推理之前;再适当降低 temperature 提升确定性;仍不稳就改用少样本 CoT,给出和错误情形相近的正确推理范例。对数值计算,最稳的做法是结合 Tool Use 工具调用,让模型把算式交给真实计算器执行,避免心算误差。
CoT 会不会增加幻觉?
恰当使用通常降低幻觉,因为推理被显式化、更易自查与人工核对。但如果模型在推理中编造前提,错误也会被"看似合理"地放大。建议在提示词里要求它对不确定的步骤明确标注,更多防幻觉方法见 Claude 避免幻觉的 5 个方法。