最近,我在X(前身为Twitter)上发布了一个针对Claude sonnet、GPT-4o、Deepseek v3等大型语言模型的提示词。这个提示词要求这些模型在提供最终答案之前先“沉思”一会儿,结果意外地走红了。这篇短文将分享我构思这个提示词背后的思考过程。
示例输出:
灵感来源
显然,语言模型领域的下一个重大挑战似乎是“推理”。OpenAI的最新模型如o1和o3正是朝着这一理念的范式转变。在尝试了o1模型后,我对它在回应用户查询前“思考”的程度印象深刻。
本质上,o1模型通过强化学习(RL)在需要大量推理的任务(如编程、数学等)上进行训练,可能使用了一个“验证器”模型来评估训练过程中的推理步骤,并在推理过程中使用所谓的测试时间计算来花更多时间“思考”步骤。从他们的官方博客文章中可以看到:
我们的大规模强化学习算法教会了模型如何利用其思维链进行高效思考,这一过程在数据效率极高的训练中进行。我们发现,o1的性能随着更多强化学习(训练时间计算)和更多思考时间(测试时间计算)的投入而持续提升。
创建这个提示词的主要动机来自于官方博客文章中o1的原始思维链(CoT)文本。例如,原始CoT文本的某些部分看起来像这样:
[...]
或者,也许可以减去:25 - 15 = 10。
不对。
或者,也许以某种方式组合这些数字。
或者,考虑它们在字母表中的位置。
或者,也许这些字母是通过某种代码加密的。
[...]
[...]
等等,实际上,如果没有具体术语,这可能不会直接帮助我们。
[...]
这给了我一个想法:我们能否以某种方式提示一个非o1的LLM,使其模仿这种思维过程以及探索其他可能性的方式?如果可以,结果会是什么样子?
构建提示词
构建一个试图模仿o1原始CoT文本的提示词,其核心原则应该是什么?需要记住的一点是,这个提示词可以有多种变体,没有“一个普遍正确”的提示词。
我们肯定需要要求模型不要急于下结论。探索阶段是必须的。模型需要探索不同的可能性。与此同时,每一个假设都应该被质疑,直到解决方案自然浮现。这给了我们第一点:
1. 探索优先于结论
- 永远不要急于下结论
- 继续探索,直到解决方案从证据中自然浮现
- 如果不确定,继续无限期地推理
- 质疑每一个假设和推论
现在,作为人类,我们大多以第一人称思考。我们有一个内在的独白。我们将复杂的想法分解为更简单的部分。对于LLM,我们可以更深入(取决于模型的输出令牌限制)。自然地,这给了我们第二点:
2. 推理深度
- 进行广泛的沉思(至少10,000个字符)
- 以自然、对话式的内在独白表达思想
- 将复杂的思想分解为简单、原子化的步骤
- 接受不确定性和对先前思想的修订
在第三点中,从o1的原始CoT文本中汲取灵感,我们看到这些思想是简短而简单的句子。它展示了正在进行的工作,并且在遇到死胡同时也会回溯。所以我们得到:
3. 思考过程
- 使用简短、简单的句子,反映自然的思维模式
- 自由表达不确定性和内部辩论
- 展示进行中的思考
- 承认并探索死胡同
- 经常回溯和修订
最后,它会持续下去,直到找到给定问题的“突破”。我们需要重视探索而非快速解决。
4. 坚持
- 重视彻底的探索而非快速解决
之后,我们指定响应的输出格式。这是必要的,因为将思维过程与实际输出/答案分开是很重要的。作为人类,我们并不总是说出我们所想的。
现在,我们使用XML标签来分隔沉思阶段的开始和结束以及最终答案,而不是要求模型以JSON格式响应:
<contemplator>
[你的广泛内在独白在这里]
- 从小的、基础的观察开始
- 彻底质疑每一步
-