技巧

思维链提示词与自洽性

思维链提示词让模型在回答之前逐步推理。它何时有用,推理模型何时让它变得多余,以及自洽性。

译自英文原文。代码、提示词和模型输出保留英文。

思维链(Chain-of-Thought,CoT)提示词要求模型在给出最终答案之前,先把推理过程写出来。这一想法由 Google 的 Wei 等人在 2022 年提出,他们表明,带有中间步骤的解题示例可以提升算术和逻辑问题上的结果。

为什么写出步骤会有帮助

语言模型每次生成一个 token,并以此前的全部内容为条件。如果它必须立刻作答,答案就是在没有任何中间工作的情况下预测出来的。如果它先写出步骤,这些步骤就成为预测答案所依据的上下文的一部分。在纸面上推理,就是工作记忆。

零样本思维链

最简单的形式是加一句指令,要求先推理。

A warehouse ships 240 orders a day. 15% need gift wrap, which adds
4 minutes each. How many staff hours a day does gift wrap take?

Work through the problem step by step, then give the final answer
on its own line as "Answer: <number> hours".

有两个细节很重要。要求在答案之前给出推理,并为答案设定一个固定的标记,方便你的代码找到它。

少样本思维链

这里的示例除了结果,还展示了推理过程,模型便会模仿这种方法。

Q: A plan costs $12 a month or $120 a year. How much does the yearly
plan save over 2 years?
Reasoning: Monthly for 2 years is 12 x 24 = $288. Yearly for 2 years
is 120 x 2 = $240. The difference is 288 - 240 = $48.
Answer: $48

Q: {{question}}
Reasoning:

当任务有你希望被遵循的特定流程时,就用这种方式。

结构化推理

对于由代码读取的答案,用标签或字段把思考与结果分开。

Think through the eligibility rules inside <reasoning> tags.
Then give the decision inside <decision> tags as "approve" or "reject".

在 JSON 中,把推理字段放在结论字段之前。字段是按顺序生成的,所以位于结论之后的推理无法影响结论。参阅结构化输出提示词。

推理模型改变了建议

许多当前的模型在响应之前会在内部推理,通常由名为 thinking、reasoning effort 或 extended thinking 的设置控制。对于这些模型:

  • 不要再加“一步一步地思考”。 它们本来就在这样做,这条指令可能让输出变长却不会更好。
  • 描述目标和约束,让模型自己选择方法。
  • 用服务商提供的控制项来决定花费多少推理,而不是靠提示词的措辞。
  • 当需要有人核对答案时,仍然要求在输出中给出简短的理由。

对于不在内部推理的更小、更快的模型,以及任何你需要在响应中看到推理过程的场合,显式的思维链仍然有用。

思维链何时有用,何时没用

任务 有用吗?
多步算术或逻辑 有用
需要运用多条规则的决策 有用
调试:从症状找出原因 有用
简单的分类或提取 很少;还会增加成本
创意写作 没用
在提供的文本中查找某个事实 没用

成本是实实在在的:推理是输出 token,通常比输入 token 定价更高,还会增加延迟。

关于解释的提醒

写出来的推理是一种看似合理的说明,并不是答案如何产生的可靠记录。模型可能先得出结论,再写出一段听起来正确的理由。请把推理当作需要验证的东西,尤其是在决策会影响到人的时候。

自洽性

自洽性由 Wang 等人在 2022 年提出,建立在思维链之上。启用采样,把同一个推理提示词运行多次,使路径各不相同,然后取出现次数最多的最终答案。

  1. 将 CoT 提示词发送 N 次(例如 5 次),温度设为大于零。
  2. 从每个响应中提取最终答案。
  3. 返回出现次数最多的答案。

不同的推理路径会犯不同的错误,但正确的路径往往会趋于一致。投票可以过滤掉偶尔的失误。

适用于: 问题只有一个可以精确比较的正确答案(数字、标签、是或否),并且准确率值得付出 N 倍的成本。

不适用于: 答案是无法投票的自由文本,或者单次调用已经足够可靠。如果票数平分,就把它当作问题有歧义或提示词规格不足的信号。

从推理到流水线

当问题的步骤事先已知,不要让一个提示词把它们全部推理一遍。给每一步一个单独的提示词,这就是提示词链。当步骤取决于模型必须去获取的信息时,把推理与工具结合起来:这就是 ReAct 提示词。

先检查提示词

推理无法修复一个不清楚的问题。目标含糊或规则冲突的 CoT 提示词,会认真地推理出错误的答案。在花 token 做推理之前,先用 PromptFlowEngine 提示词分析器过一遍。