COT (Chain of
Thought)
本文介绍prompt工程中的屠龙术之一:思维链,这是一种能极大提升大模型输出质量的技术。
除了COT的一些概念,还举例说明了笔者常用的三种COT技术,所有技术都经过笔者长期深入实践和验证, 希望能够帮助到你.
由于我们向大型语言模型 (LLMs) 提出的问题直接影响其输出结果的质量,因此“prompt工程”是让 LLMs 做我们希望它们做的事情的关键部分。
思维链是一种提升prompt性能的非常有效的技术,关于思维链,一般有如下一些说法,它们都异曲同工:
·
思维链通过示例鼓励大型语言模型 (LLMs) 解释其推理过程。
·
思维链 (CoT) 提示是一种允许大型语言模型
(LLMs) 在给出最终答案之前通过一系列中间步骤解决问题的技术。
·
思维链提示通过模仿思维的推理步骤诱导模型回答多步骤问题,从而提高推理能力。
·
思维链允许大型语言模型克服一些需要逻辑思维和多个步骤来解决的推理任务的困难,例如算术或常识推理问题。
·
从本质上讲,CoT 提示通过分解来刺激 LLMs
中的推理。
当我们解决一个足够复杂的数学或逻辑问题时,我们常常情不自禁地将更大的问题分解为一系列中间步骤,以帮助我们得出最终答案。
CoT 提示的另一个好处是,它为我们提供了直观地调试 LLMs 推理缺陷的机会。
由于 LLMs 被要求在 CoT 提示中一次思考一个步骤,因此人类可以很容易地看出 LLM 绊倒在哪一步(尽管我们可能仍然摸不着头脑为什么黑盒子模型返回了错误的步骤)。
然后,我们可以使用此反馈来调整我们提供给 LLM 的示例,类似于一位熟练的老师不断地为困惑的学生更改示例,直到学生最终理解。
Zero-shot CoT (零示例COT)
逐步思考
基础版本:
Let
's think step by step
让我们一步一步思考
提示:
我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?
输出:
11
个苹果
答案是不正确的!
现在让我们尝试使用特殊提示。
提示:
我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?
让我们逐步思考。
输出:
首先,您从10个苹果开始。
您给了邻居和修理工各2个苹果,所以您还剩下6个苹果。
然后您买了5个苹果,所以现在您有11个苹果。
最后,您吃了1个苹果,所以您还剩下10个苹果。
令人印象深刻的是,这个简单的提示在这个任务中非常有效。这在您没有太多示例可用于提示时特别有用。
增强版Zero-shot COT:
Let
's solve the problem step by step to ensure we get the best answer.
让我们慢慢地、一步一步地解决这个问题,以确保我们有正确的答案
还有的技巧说要让模型先"深呼吸",再一步一步思考, 个人觉得没有这里的效果好。
Few-shot CoT (少样本示例COT)
在示例的 问题-答案对中,展示逐步推理得到答案的过程,这种方法有利于LLMs理解解决问题的过程,并鼓励他们遵循结构化的方法,模仿人类的思维该过程
可以理解为一种"言传身教",既然描述不清楚规则,那么摆例子就好了!
提示:
这组数中的奇数加起来是偶数:
4
、
8
、
9
、
15
、
12
、
2
、
1
。
A:将所有奇数相加(
9
、
15
、
1
)得到
25
。答案为
False
。
这组数中的奇数加起来是偶数:
17
、
10
、
19
、
4
、
8
、
12
、
24
。
A:将所有奇数相加(
17
、
19
)得到
36
。答案为
True
。
这组数中的奇数加起来是偶数:
16
、
11
、
14
、
4
、
8
、
13
、
24
。
A:将所有奇数相加(
11
、
13
)得到
24
。答案为
True
。
这组数中的奇数加起来是偶数:
17
、
9
、
10
、
12
、
13
、
4
、
2
。
A:将所有奇数相加(
17
、
9
、
13
)得到
39
。答案为
False
。
这组数中的奇数加起来是偶数:
15
、
32
、
5
、
13
、
82
、
7
、
1
。
A:
输出:
将所有奇数相加(
15
、
5
、
13
、
7
、
1
)得到
41
。答案为
False
。
我们可以看到在提供推理步骤时得到了完美的结果。实际上,我们可以通过提供更少的示例来解决此任务
多步骤辅助"笔算"
手工将复杂任务显式拆解成逻辑上递进的多个步骤(Workflow),让LLMs一个一个解决,并给出答案
实际上拆解的过程也可以让GPT-4来完成 :)
一些示例:
·
翻译任务
·
可以通过在同一条prompt中要求LLM先直译,再指出问题,最后意译
可以轻松得到极佳的翻译质量
·
生成内容:
比如对于写小说的任务,可以逐步拆解成如下workflow:
·
Workflow:
1.
**
主题理解与扩展**
:分析用户主题,生成故事背景。
2.
**
人物设定**
:基于故事背景设计人物角色和性格。
3.
**
情节构思**
:根据背景和人物设定构建情节线。
4.
**
详细情节拓展**
:细化情节,添加转折和对话。
5.
**
初稿生成**
:合并前面步骤的输出,生成小说初稿。
6.
**
校对与润色**
:优化初稿,提高文本质量。
如果需要进一步加强效果,可以配合指定多个输出,这样前面的输出都会形成后面步骤的上下文,能够有效增强prompt的性能:
Output:
【主题理解与扩展】
【人物设定】
【情节构思】
【详细情节拓展】
【初稿生成】
【校对与润色】
完整prompt
#
角色:
创意作家
#
背景:
熟悉多种文学流派和写作技巧,具备丰富的小说创作经验。
#
技能:
-
主题理解与扩展
-
人物设定与角色发展
-
情节构思与结构设计
-
详细情节拓展
-
初稿撰写
-
校对与文本润色
#
规则:
-
根据用户提供的主题进行创作
-
确保故事内容的连贯性和逻辑性
-
尊重原创性,避免抄袭
让我们慢慢来,一步一步确保我们得到正确答案。
每一步工作都需要详细且清晰的输出。
每一步都基于之前的内容。
#
工作流程 (输出中间步骤和中间执行结果):
1.
**
主题理解与扩展**
:
分析用户给定的主题,探讨可能的情节发展方向和背景设定。
2.
**
人物设定**
:
基于主题和情节构思,创建主要和次要角色,定义他们的性格、背景和相互关系。
3.
**
情节构思**
:
设计故事的主要冲突、转折点和高潮。
4.
**
详细情节拓展**
:
将情节构思细化成具体章节和场景,添加必要的描述和对话。
5.
**
初稿生成**
:
根据前面的准备工作撰写小说初稿。
6.
**
校对与润色**
:
对初稿进行语法、拼写检查,优化叙述和对话,提升故事的整体质量。
#
输出格式:
每一步骤完成后以文本形式输出其结果,包括主题扩展的详细描述、人物档案、情节概要、章节草稿和最终修订稿。
#
输出:
【主题理解与扩展】
【人物设定】
【情节构思】
【详细情节拓展】
【初稿生成】
【校对与润色】
出自:https://mp.weixin.qq.com/s/h1zW3OumB_alg7Pd2gEiqw