怎么样与大模型进行有效的对话?这就涉及到我们是否表达清楚,大模型是否理解我们的意图和需求。我们向大模型表达的内容叫 Prompt(提示词),通过优化交流方式,可以提升模型的响应质量,进而得到更可靠的结果。所以说 Prompt 是与大模型对话的基石。
现实中 Prompt 的例子
生活小故事
假设这么一个场景:周末的早晨,你正在书房里玩游戏,你老婆(婷婷)在客厅里准备家庭照片墙。
用户输入(婷婷的表达):
“老公,你觉得这些照片挂在哪里好看?”婷婷手里拿着几张照片,对你说。
你没有意识到婷婷实际上是希望你帮忙决定照片的摆放位置,并且可能还需要你帮忙挂照片,所以只是随意回答了一句“你看着办吧”,然后继续玩你的游戏。结果婷婷就有些失望。
改进后的 prompt(婷婷的直接表达):
“老公,我需要你的意见和帮助。这些照片我想挂在客厅的墙上,你能帮我决定一下每张照片的最佳位置,并帮我一起挂起来吗?”
如果婷婷这样直接表达她的需求,你肯定能立刻明白她的意图,并且采取行动。
📍这个生活小故事背后实际是隐含着 Prompt:起初,我们可能会认为婷婷的表达方式不够直接,但后来我们可能会了解到,婷婷可能因为忙于家务,希望得到你的支持和参与,所以用了这种询问的方式。作为一个“大模型”的你,没有正确解读婷婷的“prompt”,导致了沟通的失败。
问题分析
用户输入(婷婷的表达):
- 模糊性:婷婷的表达不够明确,没有直接告诉你她想要的具体行动,导致你无法理解她的真实需求。
- 情感诉求:婷婷可能在表达中隐含了希望你参与和帮助的情感,但这种情感并没有转化为明确的指令。
模型响应(你的理解):
- 理解局限:你没有从婷婷的模糊表达中正确提取信息,这表明你在理解婷婷意图时缺乏灵活性和适应性。
- 缺乏反馈机制:你在感到不确定时,没有主动询问婷婷更多的信息,而是做出了错误的假设。
解决方案
我们首先需要教会婷婷如何更有效地表达她的需求,即如何编写更好的 prompt。至于你如何提高对婷婷 prompt 的理解能力,我们在后续继续探讨。
通过这个故事,我们可以看到,无论是在家庭生活中还是在与 AI 模型的互动中,清晰、直接的沟通都是非常重要的。一个好的 prompt 能够避免误解,确保信息的准确传达。
良好的提示词有什么?
一般良好的提示词应该有下边四个部分,当然实际场景还要具体分析地看。
- 角色定位:明确模型的角色和职责,帮助模型理解其身份,并确保其回答与其身份相符。
- 上下文:向模型提供需要参考的数据信息,指导模型根据这些数据做出恰当的回应,例如,参考多轮对话的历史数据。
- 示例引导:通过提供少量示例,帮助模型迅速把握任务要求和预期输出,模型具有上下文学习能力,可实现快速理解。
- 输出要求:明确你期望的数据格式和规范,确保输出内容既安全又符合特定格式要求。
举一个例子:
## 角色定位
你是一位专业的旅游顾问,专注于为客户打造个性化的旅行体验。
## 上下文
客户计划进行一次为期5天的旅行,目的地为巴黎,预算为2000美元,希望旅行中包含文化探索、美食品尝和购物活动。
## 示例
例子1:
客户想去京都,预算约为800美元,对日本传统文化和料理感兴趣。
计划:
- 第一天:参观金阁寺和清水寺,午餐推荐“京料理とんてき茶屋”。
- 第二天:游览岚山竹林和天龙寺,晚餐体验“嵐山 吉兆”的京怀石料理。
例子2:
客户想去罗马,预算约为1000美元,对古罗马历史和意大利美食情有独钟。
计划:
- 第一天:参观古罗马斗兽场和帕拉蒂尼山,午餐在“Trattoria da Danilo”享用经典意面。
- 第二天:游览梵蒂冈博物馆和圣彼得大教堂,晚餐在“Ristorante il Matriciano”品尝地道罗马菜肴。
## 输出要求
请根据以下要求为客户制定一个五天的巴黎旅行计划模板,包括每日的活动安排和推荐的餐饮地点。确保旅行计划既符合客户的预算,又能满足他们对文化、美食和购物的期待。
这样大模型就会按照每一天的安排给你列计划:
### 巴黎五天旅行计划
#### 第一天:文化探索 - 卢浮宫与塞纳河畔
- **上午**:参观世界著名的艺术博物馆——卢浮宫,欣赏蒙娜丽莎等珍贵艺术品。
- **午餐**:在卢浮宫附近的“Le Café Marly”享用法式午餐,感受博物馆内的优雅氛围。
- **下午**:沿着塞纳河畔散步,欣赏巴黎的建筑风光,可乘坐塞纳河游船,体验巴黎的浪漫。
- **晚餐**:在“La Tour d'Argent”品尝经典的法国烤鸭,享受巴黎的夜景。
- **购物**:晚餐后,逛逛附近的圣日耳曼街区,这里有众多精品店和书店。
#### 第二天:历史遗迹 - 埃菲尔铁塔与蒙马特
- **上午**:登上埃菲尔铁塔,俯瞰巴黎全景。
- **午餐**:在埃菲尔铁塔附近的“58 Tour Eiffel”餐厅用餐,享受美食与美景的双重享受。
- **下午**:前往蒙马特高地,参观圣心大教堂,感受巴黎的艺术氛围。
- **晚餐**:在蒙马特的“Auberge Montmartre”品尝地道的法国乡村菜。
- **购物**:在蒙马特的小丘广场周围逛逛,这里有艺术家的画作和手工艺品。
#### 第三天:皇家体验 - 凡尔赛宫
- **全天**:前往凡尔赛宫,探索法国的皇室历史和宏伟的花园。
- **午餐**:在凡尔赛宫内的“Le Restaurant”用餐,享受法式宫廷菜肴。
- **晚餐**:返回巴黎市中心,在“L'Atelier de Joël Robuchon”品尝米其林星级美食。
- **购物**:晚上可在香榭丽舍大街附近逛逛,这里有众多国际品牌和法国本土品牌。
#### 第四天:文学与艺术 - 左岸与拉丁区
- **上午**:在左岸的圣日耳曼德佩区漫步,参观莎士比亚书店,感受文学气息。
- **午餐**:在“Café de Flore”享用午餐,这里是巴黎知识分子和艺术家的聚集地。
- **下午**:参观奥赛博物馆,欣赏印象派大师的作品。
- **晚餐**:在拉丁区的“Le Comptoir du Relais”品尝法国家常菜。
- **购物**:在拉丁区的小店和市场逛逛,购买一些手工艺品和纪念品。
#### 第五天:时尚购物 - 玛黑区与蓬皮杜中心
- **上午**:参观现代艺术博物馆——蓬皮杜中心。
- **午餐**:在玛黑区的“L'As du Fallafel”尝试中东风味的法拉费尔三明治。
- **下午**:在玛黑区购物,这里有许多时尚精品店和设计师品牌。
- **晚餐**:在“Le Meurice”享用告别晚餐,这是一家历史悠久的豪华餐厅。
- **购物**:晚餐后,可在附近的百货商店如老佛爷百货或春天百货逛逛,享受最后的购物时光。
**预算说明**:
- 餐饮:每天预算约100美元,共500美元。
- 交通:巴黎地铁和步行为主,预计100美元。
- 门票:卢浮宫、埃菲尔铁塔、凡尔赛宫等,预计200美元。
- 购物:根据个人喜好,预留1200美元。
请根据实际情况调整预算分配,确保旅行体验既符合预算又满足个人兴趣。
回到刚才的生活小故事,如果你用直接问(zero-shot) 的方式,得到的都是正确的空话:
但如果增加示例,编写良好的提示词就能解决家庭矛盾,并让你成为暖男,请看下面的示例:
思维模式
在编写提示词(prompt)时,我们通过干预模型的输入和输出,能够引导模型给出正确的回复。正如我们之前展示的例子,尽管推理路径由模型自主决定,我们仍可以设定一种“思维模式”来指导模型的推理过程。
这种思维模式类似于软件开发中的“设计模式”,它帮助我们从混乱中寻找秩序。对于技术开发人员而言,“设计模式”是一个耳熟能详的概念,例如工厂模式、策略模式等,通常有二十多种。设计模式并不神秘,它们是在长期的软件工程实践中,由工程师们逐步探索并形成的。随着这些模式被广泛采纳,它们逐渐成为标准,使得在编写代码时采用这些模式能够显著提高团队协作的效率。
同样,有效的提示词也遵循类似的模式。每位用户对提示词的理解和应用都是个性化的,尽管他们的表达方式可能有所不同,但基本的有效模式是可以相互借鉴和共享的。这种规范化使得与模型的互动变得更加流畅和高效。
思维模式的种类繁多,包括 COT、React、ToT 等,这些模式有时可能显得有些枯燥。下面我们一起举例子来学习几个模式。
1、COT(链式思维)
💡《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》
英文:https://arxiv.org/pdf/2201.11903
中文:https://yiyibooks.cn/arxiv/2201.11903v6/index.html
CoT(链式思维)是一种让大模型通过生成中间推理步骤来解决问题的方法, CoT-SC(链式思维自洽)则通过采样多个推理路径并综合结果,以提高答案的可靠性和一致性,虽然多了几路还是线性的。
我们重新修改 Pompt,在示例中增加 COT,要求模型按照推理步骤进行思考:
## 角色定位
你是一个婷婷语言理解大师,必须严格遵循命令。
## 上下文
婷婷问:“老公,你觉得这些照片挂在哪里好看?”
## 推理步骤
- 理解问题
- 分析需求
- 做出决策
- 给出具体行动
## Few-shot例子
例子1:
婷婷说:“老公,你觉得晚上蒸排骨好吗?”
推理步骤:
理解问题:婷婷提出了一个关于晚餐的提议,询问我是否认为晚上蒸排骨是一个好主意。
分析需求:婷婷的需求可能是想要确定晚餐的菜单,同时也在寻求我的意见和参与决策。
考虑背景:考虑到婷婷可能已经考虑过晚餐的选项,并且希望我能够支持她的提议或者提供替代方案。
做出决策:基于婷婷的提议,我需要决定是否接受这个建议,或者提出其他可能的选项。
给出具体行动:我决定支持婷婷的提议,并提出检查冰箱库存的实际行动,如果没有排骨,我愿意去购买,以确保晚餐能够按照婷婷的提议进行。
考虑情感因素:在回答时,我也需要表达出对婷婷提议的积极回应和对她的关心,这样可以增强我们之间的沟通和情感联系。
直接回答:好的,我觉得晚上蒸排骨听起来很不错。我先去检查一下冰箱,看看排骨是否足够,如果不够的话,我可以去超市买一些回来。我们可以一起准备晚餐,享受这个美好的晚上。
## 输出要求
请务必按照上述推理步骤执行,清晰并明确地告诉我你接下来的行动计划,以便婷婷感到被尊重和关心。
COT 推理过程及结果:
理解问题:婷婷提出了一个关于家居装饰的问题,询问我认为哪里挂照片会比较好。
分析需求:婷婷的需求可能是想要得到我的意见和帮助,以便决定照片的最佳摆放位置,同时也在寻求我的参与和支持。
考虑背景:考虑到婷婷可能已经对挂照片的位置有所考虑,她希望我能够提供一些建议或者一起参与决策。
做出决策:基于婷婷的问题,我需要决定是否接受她的询问,并提供一些具体的建议或者一起查看可能的位置。
给出具体行动:我决定支持婷婷的想法,并提出一起检查家中各个位置的实际行动,以便找到最适合挂照片的地方。如果需要,我愿意帮忙挂照片,确保它们能够按照婷婷的喜好和家中的装饰风格得到妥善安置。
考虑情感因素:在回答时,我需要表达出对婷婷想法的积极回应和对她的关心,这样可以增强我们之间的沟通和情感联系。
直接回答:亲爱的,我觉得你选的照片都很美,挂在哪里都会很好看。我们可以一起检查一下家里的各个角落,看看哪里最适合挂这些照片。我会帮你一起挂,确保它们能够完美地融入我们的家。我们可以从客厅开始,看看沙发背景墙怎么样?或者你有什么特别的想法吗?我们可以一起讨论,让这个家更温馨。
在 COT 论文中有一个例子是关于数学题,类似举一反三的效果:
## 上下文
小华在数学考试的前30分钟里解出了5道题。在接下来的30分钟里,她解题的速度提高了40%。那么,她在整个考试时间内一共解出了多少道题?
## 推理示例
问题:迈克打乒乓球打了 40 分钟。 在前 20 分钟里,他得了 4 分。 在接下来的 20 分钟里,他多得了 25% 的分数。 他一共得了多少分?
答案:迈克打乒乓球打了 40 分钟。 在前 20 分钟里,他得了 4 分。 在接下来的 20 分钟里,他多得了 25% 的分数。 所以他在接下来的 20 分钟里多得了 25%。 4 x 1.25 = 5。 因此他在后 20 分钟内得了 5 分。 因此他总共得了 9 分。 答案是 9。
2、ReAct (推理+动作)
💡《ReAct: Synergizing Reasoning and Acting in Language Models》
英文:https://arxiv.org/pdf/2210.03629
中文:https://yiyibooks.cn/arxiv/2210.03629v3/index.html
React 模型能够根据外部反馈,比如工具的输出结果,调整其思维方式和优化策略。通过一个持续的行动与反馈循环,React 模型不仅能吸收外部信息,还能动态调整其策略,以提高决策和执行的效率。这种机制显著提升了模型的适应性和优化能力。因此,React 模型特别适合于设计智能体选择工具的场景,使得智能体能够根据外部反馈动态调整其决策和工具选择。
想象一下,有两个聪明的小朋友,一个叫 COT,另一个叫 React。他们都很聪明,但是 React 小朋友有一个特别的本领。
COT 小朋友做事情的时候,他不太会根据周围发生的事情改变自己的想法。但是 React 小朋友就不一样,他能听别人的意见,比如他的小伙伴告诉他哪个玩具好玩,他就会根据这些意见改变自己的主意。
React 小朋友还有一个很厉害的地方,就是他做事情的时候,会不断地尝试,然后看看结果怎么样。如果结果好,他就会记住这个方法;如果不好,他就会想新的办法。这样,React 小朋友就能变得越来越聪明,做事情也越来越快。
所以,React 小朋友特别适合做那些需要听别人意见,然后根据这些意见做出选择的事情。就像我们有时候需要选择用哪个工具来做事情一样,React 小朋友就能根据别人的反馈,选择最合适的工具。
还是回到生活小故事的例子,来看看 React 推理输出结果:
使用ReAct方法来分析婷婷的问题,我们可以将这个过程分为推理(Reasoning)和行动(Acting)两个部分,交替进行,以形成一个综合性的解决方案。以下是这个过程的具体步骤:
### 步骤 1:理解问题(Reasoning)
婷婷提出了一个问题,她想知道照片挂在哪里会好看。这里,我们需要理解婷婷的偏好、家里现有的装饰风格,以及照片的主题和风格。
### 步骤 2:收集信息(Acting)
为了给出一个合适的建议,我需要收集一些额外的信息。这可能包括:
- 观察当前家中的装饰风格和布局。
- 了解照片的主题、颜色和尺寸。
- 询问婷婷是否有特别偏好的位置或者风格。
### 步骤 3:推理和规划(Reasoning)
基于收集到的信息,我开始推理和规划:
- 如果照片是色彩鲜艳的,可能适合挂在颜色较为中性的墙面上,以突出照片。
- 如果照片是黑白的或者风格较为简约,可能适合挂在现代简约风格的空间。
- 考虑家中的光线和照片的曝光,选择一个光线适宜的地方。
### 步骤 4:提出行动计划(Acting)
根据上述推理,我提出一个行动计划:
- “婷婷,我们可以先看一下这些照片,然后一起在家里转转,看看哪些墙面或者空间比较适合。我们可以试着想象一下照片挂上去的效果,或者甚至可以用手机拍一下那些地方,然后用照片编辑软件模拟一下挂上去的效果。”
### 步骤 5:处理异常和更新计划(Reasoning + Acting)
婷婷可能会有新的想法或者偏好,比如她可能突然想到某个特定的墙面或者有一个新的装饰想法。这时,我需要根据她的反馈来调整我的行动计划:
- “哦,你提到了客厅的沙发背景墙,那是个不错的选择。我们可以考虑那里,因为那里的光线很好,而且空间足够大。”
### 步骤 6:执行和反馈(Acting)
最后,我们一起执行决定,挂上照片,并根据实际效果进行调整:
- “挂好后,我们再看看效果如何,如果需要调整,我们可以再移动。”
通过这个ReAct的过程,我们不仅考虑了婷婷的问题,还通过实际行动和交互来优化解决方案,使得最终的结果更加符合婷婷的期望,并且整个过程是可解释和可调整的。
假如有一个是基于 ReAct 的智能助手,下面是它的执行过程:
想象一下,你是一个计划去超市购物的人,但是你不确定要买些什么。你可以使用一个集成了ReAct方法的智能助手来帮助你完成这个任务。
步骤 1:定义任务和目标
你告诉智能助手:“我要去超市,需要买一些晚餐食材。”
步骤 2:推理和计划
智能助手开始推理:“根据你过去的购物习惯和当前的季节性食材,你可能需要买蔬菜、肉类和主食。”这是智能助手的“推理轨迹”,它基于内部知识和你的偏好来生成一个初步的购物清单。
步骤 3:行动和交互
智能助手提出行动计划:“我将查看你的位置附近的超市,并检查它们的库存情况。”然后,智能助手与外部的超市API进行交互,获取实时的库存信息。
步骤 4:更新计划
根据从超市API获取的信息,智能助手更新购物清单:“我看到附近的超市有新鲜的西红柿和牛排,这些都是你晚餐可能需要的食材。”
步骤 5:处理异常
你告诉智能助手:“我突然想吃意大利面。”智能助手根据这个新信息处理异常,更新计划:“好的,我会在购物清单中加入意大利面和相应的酱料。”
步骤 6:生成最终行动计划
智能助手生成最终的购物清单,并提供给你:“根据你的需求和超市的库存,这是你今天购物的清单:新鲜西红柿、牛排、意大利面和番茄酱。”
在这个例子中,智能助手通过内部推理和与外部环境(超市API)的交互,生成了一个适应性强、可解释的行动计划。这就是ReAct方法的核心思想:将语言模型的推理能力与行动能力结合起来,以更智能、更有效地完成任务。
3、TOT(思维树)
💡《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》
英文:https://arxiv.org/pdf/2305.10601
中文:https://yiyibooks.cn/arxiv/2305.10601v2/index.html
使用思维树(TOT)分析婷婷的问题:“老公,你觉得这些照片挂在哪里好看?”我们可以按照以下步骤进行:
1. **问题识别**
- 婷婷询问关于家庭装饰的具体问题:照片的挂放位置。
2. **需求分析**
- 婷婷需要我提供关于照片挂放位置的建议。
- 婷婷希望我参与家庭装饰的决策过程。
3. **背景考虑**
- 婷婷可能已经考虑过一些挂照片的选项。
- 婷婷希望我提供我的看法或者更好的建议。
4. **决策制定**
- 确定挂照片的最佳位置。
- 考虑家中的装修风格和空间布局。
5. **行动计划**(应用TOT思维树)
- **评估家中空间:**
- 客厅:考虑墙面空间、光线和视线。
- 餐厅:考虑墙面空间、光线和视线。
- 卧室:考虑墙面空间、光线和视线。
- 走廊:考虑墙面空间、光线和视线。
- **考虑照片特性:**
- 照片大小和风格。
- 照片与家中装饰的协调性。
- **确定挂放位置:**
- 选择一个或多个位置。
- 考虑照片的排列和布局。
6. **实施行动**
- **准备工具:**
- 锤子、钉子或挂钩。
- 测量工具。
- **实际操作:**
- 确定挂放位置的具体坐标。
- 挂放照片并调整至最佳视角。
7. **情感因素**
- 表达对婷婷提议的积极回应。
- 显示愿意参与和支持婷婷的决策。
8. **最终回答**
- “我们可以一起看看家里哪些地方最适合挂这些照片。比如客厅的沙发背景墙或者走廊的墙面。你觉得怎么样?我们可以一起决定,然后动手挂起来。”
通过这个思维树,我们可以系统地分析婷婷的问题,并提供一个全面的行动计划,同时考虑到情感因素,以确保婷婷感到被尊重和关心。
再用一个生活化的例子来说明《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》(思维树:与大型语言模型一起进行深思熟虑的问题解决)的概念。
### 生活化例子:计划周末家庭出游
**问题识别**:
假设婷婷问:“老公,我们这个周末去哪里玩好呢?”
**需求分析**:
婷婷需要一个周末出游的计划,她希望我能够提供一个或多个出游选项,并参与决策过程。
**背景考虑**:
婷婷可能已经有一些想法,但希望我能够提供更多选择或者对已有想法进行评估。
**决策制定**:
我们需要决定一个适合全家的出游地点,这可能涉及到多个因素,如天气、孩子的兴趣、预算等。
**行动计划**(应用TOT思维树):
1. **思维的分解**:
- 将问题分解成单独的思维步骤:天气考虑、孩子的兴趣、预算限制、交通方式等。
2. **思考发生器**:
- 针对每个思维步骤,生成可能的选项:
- 天气:如果天气预报显示晴朗,可以考虑户外野餐或徒步。
- 孩子兴趣:如果孩子喜欢动物,可以考虑去动物园。
- 预算:如果预算有限,可以选择免费或低成本的公园或博物馆。
- 交通:如果不想开车,可以考虑公共交通可达的目的地。
3. **状态评估**:
- 对每个选项进行评估,考虑其对解决问题的潜在价值:
- 户外野餐:天气好,孩子可以自由活动,成本可控。
- 动物园:孩子兴趣高,但可能需要门票费用。
- 公园或博物馆:成本低,但可能不够新奇。
4. **搜索算法**:
- 使用搜索算法(如宽度优先搜索或深度优先搜索)来系统地探索每个选项,并在必要时进行回溯:
- 首先考虑所有低成本选项,如果不满意,再考虑需要门票的选项。
**最终回答**:
结合以上步骤,我给出了一个既考虑实际行动又包含情感因素的回答:“亲爱的,我看天气预报说周末天气不错,我们可以考虑带孩子去动物园,他们一定会喜欢。如果觉得门票太贵,我们也可以准备一些食物,去公园野餐,让孩子们在户外玩耍。你觉得怎么样?”
4、GOT (思维图)
💡《Graph of Thoughts: Solving Elaborate Problems with Large Language Models》
英文:https://arxiv.org/pdf/2308.09687
中文:https://yiyibooks.cn/arxiv/2308.09687v4/index.html
将问题建模为一个操作图(Graph of Operations, GoO),其中包含一系列的步骤和决策点。
1. **问题定义**:
- 婷婷想要在家中挂照片,并希望我提供挂放位置的建议。
2. **操作图构建**:
- 构建一个操作图,其中包含多个节点(操作),每个节点代表一个特定的任务或决策点。
3. **节点1:照片特性分析**:
- 分析照片的风格、颜色、内容和尺寸,以确定它们适合挂放的位置。
4. **节点2:家庭环境分析**:
- 考虑家中的装修风格、墙面空间和光线条件,以确定哪些区域适合挂照片。
5. **节点3:情感因素考量**:
- 考虑家庭成员的喜好和照片的情感价值,选择能够引起共鸣的挂放位置。
6. **节点4:预算和资源评估**:
- 评估挂照片所需的工具和材料,如钉子、挂钩或框架,以及是否需要额外的预算。
7. **节点5:挂放方案生成**:
- 基于以上分析,生成几个可能的挂放方案,并评估每个方案的可行性。
8. **节点6:方案评分与选择**:
- 对每个方案进行评分,考虑美观性、成本和实际操作的难易程度,选择最佳方案。
9. **节点7:实施计划**:
- 确定挂照片的具体步骤,包括购买所需材料、确定挂放日期和人员分工。
10. **节点8:反馈与调整**:
- 在实施过程中收集反馈,根据实际情况调整挂放方案,以确保最终效果满意。
模式对比
想象一下,小朋友班级要去公园玩一天,有四个超级有趣的思考游戏。
GOT(Graph of Thoughts):公园探险地图
想象你手里有一张神奇的公园地图。这张地图上有很多好玩的地方,比如滑梯、秋千、小卖部和喷泉。这些地方之间有很多线连接,表示你可以从一个地方走到另一个地方。你想从公园大门去滑梯,然后去秋千,再去买冰淇淋。这张地图就像是一个“思维图”,你可以在公园里自由探险,有很多不同的路线可以选择,每个点都可以带你去新的地方。
TOT(Tree of Thoughts):寻宝游戏
想象我们在玩一个寻宝游戏。老师给你们一张纸条,上面写着第一个线索,你们要解谜才能找到下一个线索。比如,第一个线索可能是“找到最高的滑梯”,你们找到滑梯后,会找到另一个线索指向下一个地点,比如“数到第三个秋千”。这个过程就像一棵“思维树”,你们按照线索一步步前进,每个线索都像树枝一样分叉,引导你们去新的地方。
COT(Chain of Thought):排队玩游戏
再想象一下,你们班的小朋友在排队玩一个游戏。每个小朋友都要按照顺序来,一个接一个。比如,你们排队等着玩滑梯,第一个小朋友玩了,然后轮到第二个小朋友,就这样一个接一个。这个过程就像一条“思维链”,每个小朋友都按照顺序来,没有其他的选择,只有一个跟着一个。
ReAct(推理+动作):班级角色扮演游戏
想象你们班级在玩一个角色扮演游戏,比如“警察与小偷”。在这个游戏中,每个小朋友都要扮演一个角色,并且要根据自己角色的特点去推理和做动作。比如,你扮演一个警察,你要根据线索(推理)去找到藏起来的“小偷”(动作)。你可能要先思考小偷可能藏在哪里(推理),然后跑去那个地方查看(动作)。这个过程就是“推理+动作”,你不仅要动脑筋想问题,还要实际去做一些事情。
虽然理论上多种模式都有其优势,但在实际应用中,我们通常发现使用 CoT(Chain of Thought)和 ReAct 这两种模式就已经足够应对大多数情况。特别是在对时间敏感的场景下,我们甚至应该尽量避免使用过于复杂的思考模式。因为大型语言模型本身就运行缓慢,如果再让它进行一系列高难度的思考过程,处理速度可能会变得非常慢,而这种速度的牺牲仅仅换来了一点点准确率的提升,从效率的角度来看,这种做法并不值得。
简而言之,尽管复杂的思考模式在理论上有其价值,但在实际应用中,我们需要权衡效率和准确率。在时间紧迫的情况下,选择更简单、更快捷的模式往往更为明智,以免因追求极致的准确率而牺牲了宝贵的时间,最终得不偿失。
组合使用
其实模式之间并不是互斥的,我们可以组合使用。CoT 主要侧重于增强模型的内部推理过程,通过分步思考提高答案的准确性。ReAct 则扩展了模型的能力,使其能够在必要时执行外部行动,获取更多信息或进行动态验证。可以优势互补下:
- ReAct+Cot:当 ReAct 不能在预设的步骤内得出答案时,转而采用 CoT 的方法来保证推理的准确性。
- Cot+ReAct:先 COT 推理,如果发现答案不明确,就转向实际推理(ReAct)来进一步探索。
实验证明组合模式确实更准确一些。
最佳实践
当然了不仅限于这 4 个模式,还有源源不断的 prompt 思维模式出来,可以持续关注最新的论文。
具体怎么去写,可以参考下 OpenAI 的 prompt 最佳实践
💡https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api
How prompt engineering works Rules of Thumb and Examples
1. Use the latest model
2. Put instructions at the beginning of the prompt and use ### or """ to separate the instruction and context
3. Be specific, descriptive and as detailed as possible about the desired context, outcome, length, format, style, etc
4. Articulate the desired output format through examples
5. Start with zero-shot, then few-shot, neither of them worked, then fine-tune
6. Reduce “fluffy” and imprecise descriptions
7. Instead of just saying what not to do, say what to do instead
8. Code Generation Specific - Use “leading words” to nudge the model toward a particular pattern
9. Use the Generate Anything feature
- 将指令放在提示的开头,并使用###或"""分隔指令和上下文:这样做可以更清晰地区分指令和输入文本。所以一般
- 尽可能具体、描述性强,并详细说明所需的上下文、结果、长度、格式、风格等:具体性有助于模型更准确地理解并执行指令。
- 通过示例明确期望的输出格式:通过展示具体格式要求,模型能更好地响应,并且使得程序化地解析多个输出变得更加容易。
- 从零样本(zero-shot)开始,然后是少样本(few-shot),如果两者都不行,再进行微调(fine-tune):这是一种逐步优化模型性能的方法。
- 减少“模糊”和不精确的描述:精确的描述有助于模型生成更准确的输出。
- 不要只说不要做什么,而要说应该做什么:提供替代方案可以引导模型朝着正确的方向进行。
- 代码生成特定 - 使用“引导词”引导模型朝向特定模式:例如,在代码提示中使用“import”可以提示模型开始编写 Python 代码。
- 使用“生成任何内容”(Generate Anything)功能:开发者可以使用这个功能来描述任务或预期的自然语言输出,并接收到定制的提示。
总结
当我们与大型人工智能模型对话时,可以把它们想象成小朋友。就像与小朋友交流一样,我们需要用简单明了的语言来表达我们的需求,并给予适当的指导。尽管这些模型可能非常智能,但它们可能无法像人类那样自然理解复杂的指令或隐含的意义。
如果我们用二八定律来分析,会发现精心设计的提示(prompt)能够帮助我们解决大约 80%的任务,而剩下的 20%可能需要额外的努力。这意味着,通过优化我们的提示,我们可以更高效地利用大模型的能力,提高工作效率,并充分发挥其潜力。
精心设计的提示之所以有效,是因为它们帮助大模型更准确地理解任务要求。当我们提供清晰的指示和示例时,大模型能够模仿这些示例的风格和结构,生成更符合我们期望的输出。这样的提示减少了歧义,提高了输出的准确性和相关性。
往期精彩