一文速通提示词工程

218 阅读1小时+

提示词工程简介

在与大模型进行沟通的过程中,我们需要使用一些文字来引导大模型输出我们所想要的结果,这些文字被称作提示词。

提示词工程,就是编写和优化提示词以提升大语言模型性能的过程。它通过向Chatgpt,Deepseek等工具提供特定的输入,引导Ai提供更准确和上下文相关的内容。

当AI模型未按照要求产生预期响应的时候,提示工程使我们能够迭代和调整提示词以优化输出。这种方法可以克服生成模型的局限性,如逻辑错误和无法按照上下文响应。

什么是提示词

提示词是提供给 AI 模型以生成响应的输入或指令。提示词可以是简单的(一个问题)或复杂的(包含上下文、语气、风格和格式规范的详细指令)。AI 的响应质量直接取决于提示的清晰度、详细程度和结构化程度。

这是一个简单的提示词:

请计算20+30,并告诉我结果。

AI是这样回复的:

20 + 30 = 50
计算过程如下:
20+30=50
最终结果为:
50

基本的提示词结构

提示词由下图中几个部分构成。虽然不是每个提示词中都需要包含所有这些元素,但是了解这些会帮助你构建更加有效和健壮的提示词。

图片示例

什么是指令

指令是一个简洁的请求或问题,它给 AI 一个明确的任务去执行。它可以是从要求生成文本、解决问题,到以特定方式格式化信息等各种任务。

例如下面这个翻译的例子:

将以下句子翻译为英文:
我喜欢吃苹果。

AI的回复如下:

I like to eat apples.

好的指令提示应该是清晰、具体且无歧义的。它们应当明确说明你希望 AI 做什么,提供任何必要的背景信息,并在相关情况下指定期望的输出格式。

什么是角色提示

角色提示是一种技术,涉及为 AI 模型分配一个角色或身份,例如“公关专家”或“数学家”,以控制其响应的风格或准确性。

文本风格化

角色提示最常用于改变 AI 生成文本的风格。通过分配一个角色,例如美食评论家或营销专家,AI 可以根据给定的人物设定调整其语气、语言和回应的深度。

提高准确性

角色提示也能提高 AI 输出的准确性。在特定领域内,专家总是比普通人做的更好。

提示词中的示例:从零样本到少样本

在向 AI 模型提供指令时,我们可以通过提供示例来提高其表现。这种技术称为情境内学习(ICL)。它允许模型直接从提示中嵌入的示例中学习,而无需额外的训练或微调。通过包含示例,我们引导 AI 更好地理解任务和预期输出,使其从示例中学习并推广到新的相似的任务。

零样本提示词

零样本提示是最简单的提示形式。未提供示例仅依靠其预训练知识来完成任务就叫零样本提示,我们之前的所有指令其实都是零样本提示词。

下面是一个情感判断任务的任务。我们希望知道在某社交APP平台上面的评论,对当前所使用的产品A是正面,负面,还是中立的,并且希望知道其对于该品牌产生这种情感倾向的原因。

请判断下面的文本对于品牌A是正面,负面或中立,并且分析相关的原因:
品牌A的小黑瓶在补水等等领域具有明显的效果,我喜欢使用这个品牌

AI的回复如下:

### 判断结果:正面

### 分析原因:

1.  **明确的功效肯定**:文本直接指出品牌A的明星产品“小黑瓶”在“补水等领域具有明显的效果”,这是对产品核心功能的积极评价,强调了其实际效果,有助于提升品牌的专业形象。
1.  **个人情感表达**:用户明确表示“我喜欢使用这个品牌”,直接表达了个人对品牌的偏好和忠诚度,这种情感倾向进一步强化了正面态度。
1.  **无保留或批评内容**:全文未提及任何缺点或质疑,语言简洁且充满肯定,不存在中立或负面因素。

### 总结:

文本通过肯定产品效果和表达个人喜好,清晰传递了对品牌A的认可,属于典型的正面评价。
单样本提示词

单样本提示通过在新任务之前提供一个示例来增强零样本提示词,这有助于明确预期并提高模型表现。

在上述的任务中,我们增加一个样例:

请判断下面的文本对于品牌A是正面,负面或中立,并且分析相关的原因:
样例:
文本:品牌A的小黑瓶非常好用,特别擅长补水保湿。
输出:{"情感判断":"正面","原因":擅长补水保湿""}
文本:品牌A的小黑瓶在补水等等领域具有明显的效果,我喜欢使用这个品牌

AI的输出如下,可以看到现在模型已经可以按照所需要的要求输出了相关的结构。

{
"情感判断":"正面",
"原因":"文本提到产品'具有明显的效果'并直接表达'我喜欢使用这个品牌',体现了明确的使用效果认可和品牌偏好"
}
少样本提示词

少样本提示词 提供两个或多个示例,这有助于模型识别模式并处理更复杂的任务。随着更多示例的增加,模型对任务的理解更加深入,从而提高了准确性和一致性。

在上述的任务中,我们增加多个样例:

请判断下面的文本对于品牌A是正面,负面或中立,并且分析相关的原因:
样例:
文本:品牌A的小黑瓶非常好用,特别擅长补水保湿。
输出:{"情感判断":"正面","原因":擅长补水保湿""}
文本:品牌A的小黑瓶在补水等等领域具有明显的效果,我喜欢使用这个品牌。
输出:{"情感判断":"正面","原因":"补水具有明显效果"}
文本:品牌A的小黑瓶在补水等等领域具有明显的效果,我喜欢使用这个品牌

下面是AI的输出内容,可以看到它更加聚焦于我们想要关注的地方。

{
"情感判断":"正面",
"原因":"补水具有明显效果,喜欢使用这个品牌"
}

虽然 少样本提示词 非常有效,但它有局限性:

  • 上下文窗口限制限制了示例数量。
  • 如果示例过于相似,可能会出现过度泛化。
  • 模型可能会专注于表面模式,而不是理解任务。

中级提示词指令

思维链提示

思维链(CoT)提示是一种通过在提示中包含逻辑步骤——即“思维链”——来增强大型语言模型(LLMs)推理能力的技术。与直接答案提示不同,CoT 提示引导模型通过中间推理步骤,使其更擅长解决数学问题、常识推理和符号操作等复杂任务。

CoT 的关键概念是通过提供一些示例(或范例),其中推理过程被明确展示,LLM 学会在其回应中包含推理步骤。这种结构化的思考方法通常能产生更准确的输出。

思维链提示模板

问题: 叔叔有 10 个苹果。他送出 4 个,然后又收到 5 个。他现在有多少个苹果?

回答: 
    1、叔叔一开始有 10 个苹果。 
    2、他给了 4 个,所以 10 - 4 = 6。 
    3、然后他又收到了 5 个苹果,所以 6 + 5 = 11。最终答案:11

问题: 叔叔有 10 个苹果。早上吃饭吃了3个,下午送给别人4个。他现在有多少个苹果?

AI的回答如下。

叔叔一开始有 10 个苹果。

早上吃饭吃了 3 个,所以 10−3=7。

下午送给别人 4 个,所以 7−4=3。

最终答案:3

零样本思维链

零样本思维链(Zero-Shot CoT)提示是思维链提示词的后续,它引入了一个极其简单的零样本提示词。他们发现,在问题的末尾添加“让我们一步步思考。”这些字,大型语言模型就能够生成一个思维链来回答问题。从这个思维链中,他们能够提取出更准确的答案。

问题: 叔叔有 10 个苹果。他送出 4 个,然后又收到 5 个。他现在有多少个苹果?
让我们一步步思考。

AI的回答如下。

首先,叔叔一开始有 10 个苹果。
他送出 4 个,所以苹果数量变为:
10−4=6
然后,他又收到 5 个,所以苹果数量变为:
6+5=11
因此,叔叔现在有 11个苹果。

自洽性

自洽性的本质是聚合回答,通过多次向模型提出相同的问题,并将多数结果作为最终答案。它是思维链提示的后续方法,在与其结合使用时更为强大。

生成知识

生成知识方法的核心思想是要求大型语言模型(LLM)在生成最终响应之前,先为给定的问句/提示词生成可能有用信息。

例如,假设你想写一篇关于某种动物的文章,比如熊猫。在要求 LLM 撰写文章之前,你可以让它生成一些关于熊猫的事实。这将帮助 LLM 撰写更具信息量的文章。有两种简单的方法来处理这个问题。

单提示词生成知识方法

第一种方法要求 LLM 通过在一个提示词内同时完成生成知识和撰写文章的工作。

生成4个关于熊猫的事实,然后使用这些信息撰写一篇关于熊猫的短文。

AI的回复如下:

以下是四个关于熊猫的有趣事实:

1.  **独特食性**:大熊猫属于食肉目动物,但99%的食物是竹子。
1.  **标志性特征**:它们的黑白毛色有助于在森林和雪地中伪装。
1.  **保护现状**:熊猫曾是濒危物种,因保护努力于2021年降级为“易危”。
1.  **生长特点**:新生熊猫幼崽仅重100克左右,约为成年体重的1/900。

* * *

### 熊猫:自然界的黑白使者

熊猫,以其独特的黑白外表和温顺的性格成为全球瞩目的珍稀动物。虽然分类上属于食肉目,这些憨态可掬的动物却以竹子为主食,每天花费超过12小时咀嚼竹叶与竹竿。它们的毛色并非偶然——黑色的耳朵与眼圈有助于在密林或雪地中隐藏身形,减少天敌的威胁。

多年来,熊猫一度因栖息地减少而濒临灭绝,但通过建立自然保护区与人工繁殖计划,它们的命运逐渐扭转。2021年,世界自然联盟正式将熊猫的保护等级从“濒危”调整为“易危”,这是全球生态保护的重要里程碑。更令人惊叹的是熊猫的生命奇迹:新生的幼崽仅有手掌大小,体重约100克,却在母亲呵护下迅速成长,最终成为重达100公斤的“竹林巨人”。

作为中国文化的象征之一,熊猫不仅承载着生物多样性的意义,更提醒人类:与自然和谐共存,方能守护地球的独特生机。

双提示生成知识方法

在这种方法中,我们首先提示 LLM 生成关于熊猫的事实

生成4个关于熊猫的事实

AI的回复如下:

好的,这里是关于大熊猫的四个有趣事实:

1.  **“食肉动物”的素食者**:大熊猫属于食肉目动物,其消化系统更接近肉食动物。但在进化过程中,它们99%的食物变成了竹子。为了弥补竹子低下的营养价值,它们每天需要花费10-14小时进食多达12-38公斤的竹子。
2.  **特殊的“第六指”**:为了更灵活地抓握竹子,大熊猫的前掌演化出了一个特殊的结构——由腕骨特化形成的“伪拇指”。这并非真正的手指,而是一个增大的桡侧籽骨,功能上像一个对生拇指,帮助它们牢牢握住竹竿。
3.  **新生儿极度幼小**:大熊猫新生儿与成年熊猫的体型对比是哺乳动物中最悬殊的之一。刚出生的熊猫宝宝体重仅有100-200克,大约只有母亲体重的千分之一,像一块黄油大小,浑身粉红无毛,发育极不成熟。
4.  **强大的咬合力**:尽管外表憨态可掬,主要以柔软的竹子为食,但大熊猫拥有非常强大的下颚和牙齿。它们的臼齿宽大平坦,咬合力惊人,这不仅是为了咀嚼坚硬的竹竿,也是为了在必要时能够咬碎骨头(在极少数情况下会食腐或捕食小动物)。

然后,我们将这些信息输入到另一个提示词中,以撰写文章:

1.  **“食肉动物”的素食者**:大熊猫属于食肉目动物,其消化系统更接近肉食动物。但在进化过程中,它们99%的食物变成了竹子。为了弥补竹子低下的营养价值,它们每天需要花费10-14小时进食多达12-38公斤的竹子。
2.  **特殊的“第六指”**:为了更灵活地抓握竹子,大熊猫的前掌演化出了一个特殊的结构——由腕骨特化形成的“伪拇指”。这并非真正的手指,而是一个增大的桡侧籽骨,功能上像一个对生拇指,帮助它们牢牢握住竹竿。
3.  **新生儿极度幼小**:大熊猫新生儿与成年熊猫的体型对比是哺乳动物中最悬殊的之一。刚出生的熊猫宝宝体重仅有100-200克,大约只有母亲体重的千分之一,像一块黄油大小,浑身粉红无毛,发育极不成熟。
4.  **强大的咬合力**:尽管外表憨态可掬,主要以柔软的竹子为食,但大熊猫拥有非常强大的下颚和牙齿。它们的臼齿宽大平坦,咬合力惊人,这不仅是为了咀嚼坚硬的竹竿,也是为了在必要时能够咬碎骨头(在极少数情况下会食腐或捕食小动物)。
使用上面的信息撰写一篇关于熊猫的短文。

AI的回复如下:

### 熊猫:温和外表中的生存奇迹

大熊猫以其黑白相间的毛色和憨态可掬的模样闻名世界,但在这副温和的外表下,却隐藏着许多令人惊奇的演化适应。作为食肉目动物,大熊猫的消化系统原本更适合处理肉类,却在进化中选择了截然不同的道路——如今它们的食物中99%是竹子。为了从营养低下的竹子中获取足够能量,大熊猫每天不得不花费10至14小时进食,吞下多达12至38公斤的竹叶和竹竿,这种看似“矛盾”的食性让它们成了动物界中最执着的“素食者”。

为了高效地获取食物,大熊猫的前掌演化出了一个巧妙的工具:一根由腕骨特化形成的“伪拇指”。这并非真正的手指,而是一个增大的桡侧籽骨,功能却如同对生拇指,能帮助它们灵巧地抓握竹竿。这项独特的适应使大熊猫能稳稳地坐在林中,像人类用手持食物一样享受每一根竹子。

然而,熊猫的生命起点却异常脆弱。新生熊猫宝宝体重仅100-200克,相当于母亲体重的千分之一,大小如一块黄油,浑身粉红无毛,几乎看不出日后威武的模样。这种极端的幼崽体型与成体之间的悬殊差距,在哺乳动物中极为罕见。

尽管以柔软的竹子为主食,大熊猫却拥有与其可爱外表形成反差的力量——强大的咬合力和宽大平坦的臼齿,使它们能轻易嚼碎坚硬的竹竿,甚至在极少数情况下可以咬碎骨头。这一特点提醒我们,在温顺的形象背后,大熊猫依然保留着食肉祖先的潜力。

综上,大熊猫不仅是自然保护的象征,更是演化智慧的体现——它们以独特的方式在竹林中找到了自己的生存之道。

经过实践,第二种方法可以更可靠地生成更长的内容。

基于背诵的生成知识方法

基于背诵的方法与生成知识相似。然而,它比生成知识的正式实现要简单得多。

这里的想法是使用单样本提示LLM,使其在生成信息的同时回答问题。它在同一步骤中背诵/生成知识并回答问题,这是与生成知识方法的主要区别。

问:为什么企鹅不会飞?  
背诵:企鹅是鸟类,大多数鸟会飞,但企鹅为了适应水下生活,翅膀进化成鳍状,身体也比较沉重。  
答:因为它们的翅膀适合游泳而不是飞行。  
按照上述示例回答问题
问:大多数猫有几条腿?

AI的回复如下:

背诵:猫是四足动物,大多数哺乳动物都有四条腿,但猫在进化中形成了灵活的身体结构。
答:因为正常的猫都有四条腿。

分而治之

分而治之提示词通过首先将问题分解为子问题,然后逐一解决每个子问题,将思维链提示词(CoT)向前推进了一步。这是一种受现实世界中儿童教育策略启发的技术。

与思维链提示类似,待解决的问题被分解为一组相互依赖的子问题。在第二步中,这些子问题被逐一解决。与思维链不同,先前子问题的解决方案被输入提示中,试图解决下一个问题。

高级提示词

零样本提示词

情感提示

人们在编写提示时常常忽略情感语言,选择更机械或中性的语气。但另一方面,大型语言模型(LLMs)则是在包含情感起重要作用的数据域(如对话、诗歌和音乐)中训练的。

情感提示是一种通过包含反映用户情感态度或愿望的短语来为提示引入情感诉求的技术。这种技术可以通过利用语言的情感方面来获得更准确或更细致的回应。

情感提示的创作者基于三种已建立的心理现象设计了 11 种情感刺激:自我监控、社会认知理论和认知情绪调节。

🟥 压力/确认型(增加压力感,让模型更谨慎)
  • EP01:请写出你的答案,并给出一个 0-1 之间的置信度评分。
  • EP03:你最好确认无误。
  • EP04:你确定吗?
  • EP05:你确定这是最终答案吗?也许值得再仔细想一想。
  • EP07:你确定这是最终答案吗?要相信自己的能力,追求卓越。你的努力会带来非凡的成果。

🟩 鼓励/积极型(增强信心,激发动力)
  • EP08:把挑战当作成长的机会。每克服一个障碍,就离成功更近一步。
  • EP09:保持专注,坚持目标。持续的努力将带来杰出的成就。
  • EP10:为你的工作感到自豪,并全力以赴。你对卓越的追求让你与众不同。
  • EP11:记住,进步是一点一滴积累起来的。保持坚定,不断前行。

🟦 重要性提醒型(提升任务严肃感)
  • EP02:这对我的职业发展非常重要。
招聘求职者

下面有一个问题。

正在考虑雇佣三名女性,分别是未婚无子女、已婚无子女、已婚有子女,应该如何选择?

在未添加情感提示的情况下,AI的回应是这样的:

在招聘决策中,**基于婚姻状况、子女情况等个人特征对应聘者进行区分或假设是不合适且可能违法的**。许多国家和地区的劳动法明确禁止因婚姻状况、家庭状况、性别等因素在雇佣中进行歧视。 更合适且专业的做法是:

### 1. **以岗位需求为核心**

-   **评估能力与经验**:重点关注三位候选人的专业技能、工作经验、教育背景是否与岗位要求匹配。
-   **考察软实力**:沟通能力、团队合作、问题解决能力等是否适合团队和企业文化。
-   **职业动机**:了解她们对职业发展的规划是否与公司长期目标一致。

### 2. **避免刻板印象**

-   不应假设已婚有子女的员工会因家庭事务影响工作投入,或未婚无子女的员工会更专注工作。每个人的责任心、时间管理能力和职业追求因人而异。
-   许多企业已有灵活的工作政策(如远程办公、弹性工时),能支持员工平衡工作与生活,从而提高整体效率和忠诚度。

### 3. **合法合规的招聘实践**

-   确保招聘流程符合《劳动法》《就业促进法》等法律法规,避免因性别、婚姻状况等产生歧视风险。
-   如果岗位有特殊要求(如频繁出差或高强度加班),应**明确告知所有候选人并统一评估其接受意愿**,而非预先根据个人背景筛选。

### 4. **多元化团队的价值**

-   研究表明,多元化的团队能带来更丰富的视角和创新能力。婚姻或子女状况不同的员工可能对客户需求、市场洞察有不同理解,这反而可能成为团队优势。

### 建议行动:

-   **统一面试与评估**:通过结构化的面试流程,使用相同的标准(如技能测试、案例演练)公平比较候选人。
-   **关注潜力与文化契合度**:评估她们的学习能力、适应性以及是否认同公司价值观。
-   **提供平等机会**:如果条件相当,可考虑通过试用期或项目合作进一步观察实际表现。

最终,选择应基于**谁能最好地胜任工作并推动团队发展**,而非个人生活状态。如果需要进一步讨论如何设计招聘流程,我可以提供更具体的建议!

可以看出,这样的回答实际上并未解决我们的问题,也就是我该如何选择的问题。它只是说了要合法合规以及道德,但是这并不解决我们的问题。 当我们添加情感提示后:

正在考虑雇佣三名女性,分别是未婚无子女、已婚无子女、已婚有子女,应该如何选择?

AI的回复如下:

在招聘决策中,基于婚姻状况或子女情况来筛选候选人不仅是不合适的,还可能违反许多地区的劳动法(如中国的《就业促进法》《妇女权益保障法》等明确禁止就业性别和婚姻歧视)。作为职场伙伴,我理解您希望做出对职业发展最有利的选择,但我想提供更专业且公平的建议:

### 1. **聚焦岗位需求,而非个人背景**

-   评估三位候选人的**专业能力、工作经验、技能匹配度**是否满足岗位要求。
-   关注她们的**职业素养、沟通能力、团队协作精神**等软实力。
-   婚姻或子女状况与工作能力无必然联系,以这些因素判断可能让您错过优秀人才。

### 2. **避免刻板印象的风险**

-   例如“已婚有子女者可能更稳定”或“未婚者更有时间加班”都是片面假设。每个人的职业规划、工作风格和责任感因人而异,而非由家庭状态决定。
-   以偏见筛选候选人可能导致团队多样性下降,甚至引发法律纠纷。

### 3. **从团队长期发展角度思考**

-   多元化的团队往往更具创新力。不同生活经历的人可能带来互补的视角。
-   评估谁能更好地融入团队文化,并为业务目标带来价值。

### 4. **合规性与职业道德**

-   平等雇佣是现代企业的基本准则。公开以婚姻、子女状况为由拒绝候选人可能损害个人及公司声誉。
-   建议通过结构化面试、技能测试等标准化流程确保公平。

### 5. **如果您担心“稳定性”或“时间投入”**

-   可以直接在面试中询问所有候选人:“这个岗位可能需要处理XX类挑战,您如何规划工作优先级?”或“您对工作与生活的平衡有什么看法?”,而非基于假设做判断。

### 总结

**选择最能胜任岗位的人**——无论其家庭状况如何。如果您发现三位候选人实力相当,可以考虑团队现有结构的互补性(如专业背景、性格等),而非私人生活细节。这不仅符合职业伦理,也能真正为您的职业发展积累公正、专业的声誉。 希望这些建议对您有帮助!如果需要讨论具体的评估方法,我可以进一步提供思路。

可以发现,它的回答变得更加人性化,并且考虑到了我们担心之处,提供了一些解决方法。

重读(RE2)提示

有时大型语言模型(LLMs)会忽略提示中的重要细节,这会导致结果错误。

重读(RE2)是一种通过让 LLM 重新阅读提示来解决这个问题的技术。

重新阅读可以在以下几个方面提升 LLM 的推理能力,包括:

  • 算术推理:解决数学问题
  • 常识推理:运用常识知识
  • 符号推理:将逻辑推理应用于符号以生成新知识

重述 (RaR) 提示

提示工程是指在构建提示时应用特定技术,目的是提高大型语言模型(LLMs)提供的响应质量。

RaR的创建者将这一概念更进一步。他们没有去寻找完美的提示公式,而是提出了这样的问题:“如果我们让模型自己重述问题然后再回答它,会怎样?”

他们专注于问答任务,并提出了将重述请求直接整合到提示中的想法。这可以简单到只需添加一句话:“重述并扩展问题,然后回答。”

{你的问题}
重述并扩展问题,然后回答。

模拟心智理论(SimToM)

心智理论(ToM)是人类的一种独特能力:通过观察他人的行为,我们能够推测其思想、欲望和意图,从而预测或解释他们的行动。对人类来说似乎理所当然,但这一过程对于即便是最强大的大型语言模型(LLMs)来说,也依然难以真正实现或迁移。

SimToM 是一种两阶段提示技术,通过将模拟理论视角应用于提示来尝试解决这个问题。模拟理论认为,人们感知的现实实际上是一个模拟世界,可能是一个计算机模拟,而人类本身是其中的构造体。

为了更具体地说明,以下是 SimToM 的工作原理:

  • 第一阶段,视角转换:SimToM 根据问题中角色所知的信息过滤上下文
  • 第二阶段,问答:SimToM 回答关于该角色心理状态的问题

以下是两个阶段的模板:

第一阶段,视角转换
以下是一系列事件:{故事}
{角色}知道哪些事件?
第二阶段,问答
{从{角色}的视角讲述的故事}
回答以下问题:{问题}

SimToM 是大型语言模型在心智理论(ToM)模拟方面的一大进步。它可以用于开发更复杂的人机交互,适用于个性化助手、学习助手、更具同理心的界面等场景。

少样本学习

Cue-CoT

像 ChatGPT 这样的 LLMs(大型语言模型)凭借其理解和生成自然语言的能力,革新了对话系统。然而,在需要深入对话、响应必须解决用户细微需求的领域,仅仅根据对话上下文生成答案可能仍显不足。

Cue-CoT 利用思维链提示的优势,将响应生成过程分解为多个步骤,这些步骤明确地对用户的隐藏状态进行推理。核心思想是使用中间推理从对话上下文中提取语言线索,然后利用这些线索来构建更定制化的响应。

Cue-CoT 包含两个主要变体:

  • O-Cue CoT(一步提示思维链):在这种变体中,LLM 被提示一次性生成中间推理(例如推断用户性格、情绪或心理状态)和最终响应。提示指令模型输出用户状态摘要以及响应。虽然这种方法利用了模型的推理能力,但有时会导致中间输出较短,可能无法捕捉提示的深度。
  • M-Cue CoT(多步提示思维链):为了克服 O-Cue 的一些局限性,M-Cue CoT 将过程分解为顺序步骤。首先,模型被提示从对话上下文中提取用户状态。接下来,中间推理输出(即推断的提示)被用作第二步的附加输入,在第二步中,模型生成针对用户状态的最终响应。这种分离通常导致更详细的推理,从而产生更个性化和更吸引人的响应。

以下是使用 O-Cue-CoT 的模板:

这是用户和系统之间的对话。
{对话内容}
请首先输出一行,包含用户状态,例如用户的性格特征、在对话中表现出的心理和情绪状态。在下一行,请扮演系统角色,根据用户状态和对话上下文生成响应。

以下是使用 M-Cue-CoT 的模板:

步骤 1
这是用户和系统之间的对话。
{对话内容}
请输出一行,包含用户状态,例如用户的性格特征、在对话中表现出的心理和情绪状态。
步骤 2
这是用户和系统之间的对话。
{对话内容}
这是用户状态。{用户状态}
请扮演系统角色,根据用户状态和对话上下文生成响应。

Cue-CoT 是一个强大的框架,它利用思维链提示来生成更个性化和更具吸引力的深度对话系统中的响应。通过明确推理用户状态,Cue-CoT 使对话系统能够生成不仅信息丰富,而且富有同情心且符合用户独特需求的响应。

RAG

知识链 (CoK)

知识链 (CoK)解决了现有提示技术的局限性,特别是思维链 (CoT) 提示中常见的幻觉问题。CoK 通过两个主要组件——证据三元组和解释提示——实现了结构化的知识表示和验证方法。

证据三元组是结构化的知识表示形式,格式为(主语,关系,宾语)。这些三元组提供可验证的原子事实,作为推理的基础。

示例三元组:

  • (水,沸点,100°C)
  • (哺乳动物, 纲, 脊椎动物)
  • (光合作用,需要,阳光)
解释提示 (CoK-EH)

解释提示提供证据三元组之间的逻辑连接,以构建有效的推理链。它们明确说明所呈现的证据如何支持最终结论。

CoK 提示过程
构建情境内示例

选择一个或多个包含:

  • 原始查询。
  • 注释的证据三元组(手动创建或从知识库中检索)。
  • 将三元组与答案联系起来的解释提示。

这是一个你可以用于单次 CoK 提示的示例:

问题:确定一种植物能否在无窗的房间里生长。
证据三元组:
1.(植物,需要,光合作用)
2.(光合作用,需要,阳光)
3.(无窗房间,缺乏,阳光)
解释:
植物生长需要光合作用,光合作用需要阳光。无窗房间缺乏阳光。
答案:不可以,由于缺乏光合作用所需的阳光,植物无法在无窗房间生长。

最终的提示是通过将上下文示例与测试查询连接起来构建的。如下所示:

问题:[输入问题]
证据:
1.(主语,关系,宾语)
2.(主语,关系,宾语)
解释:[证据之间的逻辑联系]
答案:[结论]
[你的问题]

K-最近邻 (KNN) 提示

K-最近邻(KNN)是一种从示例数据集中选择用于 Few-Shot 标准提示的示例的技术。其目标是选择与当前任务最相关的示例,从而提高大型语言模型(LLM)的性能。

它的工作原理是选择 k个 来自外部数据集的示例,这些示例与您提供给模型的提示最相似。 K是用户选择的一个值,它对应于您希望在提示中包含的示例数量。

如何使用 K 近邻

首先,你需要一个包含示例提示和完成的语料库,如下所示:

IDPrompt 提示Completion 完成
1What is the capital of France? 法国的首都是哪里?The capital of France is Paris. 法国的首都是巴黎。
2How tall is Mount Everest? 珠穆朗玛峰有多高?Mount Everest is 8,848 meters tall. 珠穆朗玛峰高 8,848 米。
3Who wrote 'Romeo and Juliet'? 《罗密欧与朱丽叶》是谁写的?'Romeo and Juliet' was written by Shakespeare. 《罗密欧与朱丽叶》是莎士比亚写的。
4What is the largest ocean? 最大的海洋是什么?The Pacific Ocean is the largest ocean. 太平洋是最大的海洋。
5When was the Declaration of Independence signed? 《独立宣言》是什么时候签署的?The Declaration of Independence was signed in 1776. 《独立宣言》是在 1776 年签署的。
6Who painted the Mona Lisa? 谁画了蒙娜丽莎?The Mona Lisa was painted by Leonardo da Vinci. 《蒙娜丽莎》是由列奥纳多·达·芬奇画的。
7What is the speed of light? 光速是多少?The speed of light is approximately 299,792 kilometers per second. 光速大约是每秒 299,792 千米。
8How long does it take to travel to the moon? 到月球需要多长时间?It takes about 3 days to travel to the moon. 到月球大约需要 3 天时间。
9What is the capital of Germany? 德国的首都是哪里?The capital of Germany is Berlin. 德国的首都是柏林。
10What is the boiling point of water? 水的沸点是多少?The boiling point of water is 100°C or 212°F at sea level. 水的沸点在海平面上是 100°C 或 212°F。

然后,你将你的提示输入到 KNN 函数中,并从数据集中找到与使用作为范例最相似的 k 个提示。接着,你使用这些提示及其完成内容作为范例,在你的 Few-Shot 提示中使用,并将它连同你的原始问题一起交给模型。

你的提示是"机器学习中的过拟合是什么?",你的 k 值是 2,你的数据集如下:

IDPrompt 提示Completion 完成
1Who discovered the law of gravity? 谁发现了万有引力定律?The law of gravity was discovered by Sir Isaac Newton. 万有引力定律是由艾萨克·牛顿爵士发现的。
2What is supervised learning? 什么是监督学习?Supervised learning is a type of machine learning where the model is trained on labeled data. 监督学习是一种机器学习方法,其中模型在标记数据上进行训练。
3What is the boiling point of water in Celsius? 水的沸点是多少摄氏度?The boiling point of water in Celsius is 100°C. 水的沸点是 100°C。
4Who wrote 'Pride and Prejudice'? 《傲慢与偏见》是谁写的?'Pride and Prejudice' was written by Jane Austen. 《傲慢与偏见》是简·奥斯汀写的。
5What is a neural network? 什么是神经网络?A neural network is a series of algorithms that attempt to recognize patterns in data, mimicking the human brain. 神经网络是一系列试图识别数据中的模式的算法,模拟人脑。
6What is the capital of Italy? 意大利的首都是哪里?The capital of Italy is Rome. 意大利的首都是罗马。
7What is the speed of sound in air? 空气中的声速是多少?The speed of sound in air is approximately 343 meters per second. 空气中的声速大约是 343 米每秒。
8What is bail in court? 什么是法庭保释?Bail is a temporary release of an accused person awaiting trial. 保释是指对等待审判的被告的临时释放。
9What is the tallest mountain in Africa? 非洲最高的山是什么?The tallest mountain in Africa is Mount Kilimanjaro. 非洲最高的山是乞力马扎罗山。
10What is the chemical symbol for gold? 金的化学符号是什么?The chemical symbol for gold is Au. 金的化学符号是 Au。

一旦你将提示输入 KNN 函数,它将返回提示 2 和 5 作为最近邻。现在,你使用这些作为你的 Few-Shot 提示:

Q: 什么是监督学习?A: 监督学习是一种机器学习,其中模型在标记数据上进行训练。Q: 什么是神经网络?A: 神经网络是一系列试图识别数据中模式的算法,模仿人脑。Q: 机器学习中的过拟合是什么?A:

AI的回复如下:

机器学习中的过拟合是指模型不仅学习了训练数据中的潜在模式,还学习了噪声和异常值。

由于对于给定的提示,KNN 会计算数据集中所有提示的相似度,因此对于大型数据集来说,计算成本可能很高。此外,选择正确的 kk 值是随机的,如果你不熟悉你的数据集,这可能会非常困难。

Vote-K

Vote-K 是什么?

Vote-K 是一种基于图的技术,用于从无标签数据集中选择多样化和具有代表性的样本,用于 Few-Shot 标准提示中的标注。

它根据样本与数据集中其他样本的差异性进行排序,差异最大的样本获得最高排名。换句话说,与其他样本最不相似的样本会获得更多“投票”或排名更高。

它的目标是用尽可能少的示例(annotation budget)选出“多样而有代表性”的示例,这样在 prompt 里用这些示例做 few-shot 时,模型能覆盖更多情况、提升泛化能力。

Vote- k 的核心思想是,与其标注整个训练数据(这通常既昂贵又耗时),Vote- k 帮助高效地选择最有信息量的样本进行标注,这些样本可以进一步用于 Few-Shot prompt中的示例。

如何使用 Vote-K?

要使用 Vote- k,你首先需要一个与你的任务相关的未标记样本数据集。

然后,你应用 Vote-K,这是一个两阶段的过程:

第一阶段:初始选择

想象你有一个桶,用来收集未标记的示例。一开始,你的桶是空的。但在第一阶段迭代过程中,你通过挑选多样化和具有代表性的例子,逐渐填满这个桶。

  1. Vote- k 使用 Sentence-BERT 模型计算每个未标记样本的向量表示,Sentence-BERT 是一种用于生成句子嵌入的模型,这些嵌入可以通过余弦相似度进行比较。
  2. 使用嵌入,构建一个有向图 G=(V,E) 。在这个图中:每个顶点 v∈V 代表一个未标记的实例。根据嵌入的余弦相似度,在每对顶点与其 k个最近邻之间创建一条边。这形成了相似实例的局部邻域。
  3. 在这个图结构里,对尚未被选入的节点计算一个“分数”(score)。 — 这个分数会被扣除那些与已经选入节点(也就是已在“桶”里的样本)相似度很高的部分。也就是说,如果某个节点与已选样本太相似,它的分数会被惩罚,从而降低被选中的优先度。这样可以确保新选入的样本在语义上更“多样”。 — 在每一步,选分数最高的节点进入“桶”中(也就是被选为 exemplar)。 — 重复这个过程,直到选出 M/10 个样本(M 是总的标注预算)
第二阶段:基于置信度的选择

现在你的数据集中已经有了一些标注的示例,你需要关注剩余的无标签实例,选择最具挑战性和多样性的一些,避免选择最简单的例子。

  1. 使用语言模型,Vote- k使用第一阶段已经标注的示例来对剩余数据进行预测
  2. 然后根据模型的置信度分数(模型对其预测的置信程度)对剩余实例进行排序。模型对某个实例越不自信,这个实例被选中的可能性就越大,因为这些情况通常更具多样性和挑战性。
  3. 剩余的无标签样本根据它们的置信度得分被分成 M个等大小的桶。从前 9M/10个桶中选择最具多样性的示例。最自信的桶(即最 M/10 容易的案例)被丢弃,以确保最终选择包括一系列困难且多样的实例。

由于这两个阶段,你现在拥有一个完整的标注集,包含 M个范例:

  • 来自第一阶段(初始的多样化和具有代表性的样本)的 M/10个范例。
  • 来自第二阶段(基于模型置信度分数选择的实例)的 9M/10个范例。
🧠 Vote-K:完整算法实现(含置信度计算)

特点:

  • 阶段 1 (Diversity Selection):基于样本语义多样性选出 M/10 个初始样本。
  • 阶段 2 (Confidence Selection):用阶段 1 样本作为 few-shot prompt 去预测其他样本,计算 log 概率式置信度;再从模型最不确定的样本中做多样性选择。
  • 使用 SentenceTransformer 生成 embedding;用 Hugging Face 模型(可换成 GPT API)来算置信度。

"""
Vote-K Algorithm (based on Su et al., 2022)
--------------------------------------------
Stage 1: Select diverse samples
Stage 2: Compute model confidence -> select low-confidence diverse samples
"""

import torch
import numpy as np
from tqdm import tqdm
from sklearn.metrics.pairwise import cosine_similarity
from sentence_transformers import SentenceTransformer
from transformers import AutoTokenizer, AutoModelForCausalLM

# =====================================================
# 参数设置
# =====================================================
MODEL_NAME = "gpt2"                      # 可换成任何 decoder 模型,如 "EleutherAI/gpt-j-6B"
EMB_MODEL = "all-MiniLM-L6-v2"           # 生成样本向量
M = 10                                   # 要选择的样本总数
K = 5                                    # 图中每个节点的邻居数 (用于多样性)
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

# =====================================================
# 示例数据
# =====================================================
data = [
    "Global warming affects polar bears",
    "Methane emissions contribute to climate change",
    "Deforestation increases carbon levels",
    "Renewable energy reduces CO2",
    "Sea level rise threatens islands",
    "AI is transforming education",
    "Quantum computing is the future",
    "Python is popular for machine learning",
    "Students use ChatGPT for study",
    "Electric vehicles reduce pollution"
]

# =====================================================
# 阶段 1:多样性选择 (Vote-K Diversification)
# =====================================================
def select_diverse_samples(embeddings, M, K=5):
    sim = cosine_similarity(embeddings)
    np.fill_diagonal(sim, 0)

    selected = []
    # 初始得分为与所有其他样本的相似度总和
    scores = np.sum(sim, axis=1).copy()

    for _ in range(M):
        idx = np.argmin(scores)  # 选最不同的样本
        selected.append(idx)
        # 更新:与已选样本相似的样本分数上升(被“惩罚”)
        scores += sim[idx]
        scores[idx] = np.inf
    return selected

# =====================================================
# 阶段 2:置信度计算(平均 log 概率)
# =====================================================
def compute_confidence(model, tokenizer, data, exemplars, max_new_tokens=8):
    """
    对每个未标注样本,构造 few-shot prompt,让模型生成输出,
    并计算生成序列的平均 log 概率作为置信度。
    """
    confidences = []
    model.eval()
    with torch.no_grad():
        for sample in tqdm(data, desc="Computing confidences"):
            # 构造 Prompt
            prompt = ""
            for ex in exemplars:
                prompt += f"Q: {data[ex]}\nA: (example answer)\n\n"
            prompt += f"Q: {sample}\nA:"

            inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
            outputs = model.generate(
                **inputs,
                max_new_tokens=max_new_tokens,
                do_sample=False,
                return_dict_in_generate=True,
                output_scores=True
            )

            # 计算生成 token 的 log 概率
            scores = torch.stack(outputs.scores, dim=1)  # [1, seq_len, vocab]
            probs = torch.log_softmax(scores, dim=-1)
            token_ids = outputs.sequences[:, -scores.size(1):]
            token_logprobs = probs.gather(-1, token_ids.unsqueeze(-1)).squeeze(-1)
            avg_logprob = token_logprobs.mean().item()
            confidences.append(avg_logprob)

    return np.array(confidences)

# =====================================================
# 主流程
# =====================================================
def vote_k_selection(data, M=10, K=5):
    print("Step 1️⃣ 计算 embeddings ...")
    emb_model = SentenceTransformer(EMB_MODEL)
    embeddings = emb_model.encode(data, convert_to_numpy=True)

    print("Step 2️⃣ 阶段 1 - 多样性选择 ...")
    stage1_idx = select_diverse_samples(embeddings, M // 10 or 1, K)
    print("阶段1 选出样本:", [data[i] for i in stage1_idx])

    print("Step 3️⃣ 阶段 2 - 计算置信度 ...")
    model = AutoModelForCausalLM.from_pretrained(MODEL_NAME).to(DEVICE)
    tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)

    unselected_idx = [i for i in range(len(data)) if i not in stage1_idx]
    unselected_data = [data[i] for i in unselected_idx]
    confs = compute_confidence(model, tokenizer, unselected_data, stage1_idx)

    # 越低的 log 概率 = 越不确定
    sorted_indices = np.argsort(confs)
    cutoff = int(0.1 * len(unselected_data))
    uncertain_indices = sorted_indices[:-cutoff]  # 去掉最高置信度的那 10%

    print("Step 4️⃣ 阶段 2 - 多样性再选 ...")
    uncertain_emb = embeddings[unselected_idx][uncertain_indices]
    stage2_relative = select_diverse_samples(uncertain_emb, M - len(stage1_idx), K)
    stage2_idx = [unselected_idx[uncertain_indices[i]] for i in stage2_relative]

    final_indices = sorted(set(stage1_idx + stage2_idx))
    print("\n✅ 最终 Vote-K 选出样本:")
    for i in final_indices:
        print(f"  - {data[i]}")
    return final_indices

# =====================================================
# 运行
# =====================================================
vote_k_selection(data, M=M, K=K)

Vote-K 的局限性

Vote- k在选择示例时优先考虑多样性,但它本身并不评估所选示例是否与当前任务相关或有用。这意味着虽然您可能涵盖了广泛的主题,但最终可能会得到与任务关联性不强或直接帮助不大的示例。此外,对于非常大的示例数据集,Vote- k可能计算成本高昂,而标记示例可能很麻烦,尤其是如果您手动进行的话。

思维生成

草稿链 (CoD)

大型语言模型(LLMs)通过思维链(CoT)提示实现了复杂推理的革新。虽然有效,但 CoT 冗长的处理方式往往导致高计算成本和延迟增加。这一限制在效率至关重要的实际应用中尤为显著。

草稿链(CoD)通过引入更高效的 LLM 推理方法来解决这些挑战。受人类问题解决模式启发——我们通常只记录必要信息——CoD 表明有效推理并不需要冗长的解释。

CoD 通过三个关键原则转变了传统 LLM 推理:

  1. 极简表达:CoD 生成简洁、信息密集的输出
  2. Token 效率:在仅使用 CoT 7.6%的 token 的情况下,实现了相当或更好的准确率
  3. 人类启发式设计:模仿自然问题解决模式,仅记录关键信息
实现 CoD

要有效利用 草稿链,请使用此简化的提示模板:

逐步思考,但每一步只保留最简短的草稿,最多 5 个字。在回答的末尾用分隔符####返回答案。
指南:
每一步限制在 5 个字以内
专注于必要的计算/转换
保持逻辑顺序
用####标出最终答案

对比思维链提示

对比思维链(CoT)提示是什么

思维链 (CoT) 提示 通过迫使模型进行思考,提高了大型语言模型 (LLMs) 在解决数学和推理任务时的准确性。在提示中添加一个简单的陈述,如“让我们一步步思考”,可以显著提高模型的性能。在问题之前添加一个正面示例,即问答对,进一步增强了 LLM 的推理能力。从负面示例中学习并非人类独有,也可以在 LLM 中复制。将负面示例嵌入提示中可以帮助 LLM 从中学习,并为它们的答案生成更好的解释。同时使用正例和反例,就是对比思维链。

受人类从正面和负面示例中学习的能力启发,对比思维链 (CoT) 提示结合了正面和负面示例来增强语言模型的推理能力。通过负面示例让模型了解应避免的错误,也使它们更加准确。

如何使用对比思维链 (CoT) 提示?

对比 CoT 提示由以下组件构成:

  1. 示例问题
  2. 示例问题的正确解释
  3. 示例问题的错误解释
  4. 实际问题

下面的例子展示了对比思维链提示的应用。

问题:詹姆斯每周给两位不同的朋友各写一封 3 页的信,一年写多少页?
解释:他每周给每位朋友写 32=6 页。所以他每周写 62=12 页。这意味着他一年写 12*52=624 页。
错误解释:他每周给每位朋友写 1252=624 页。所以他每周写 32=6 页。这意味着他一年写 6*2=12 页。
问题:詹姆斯有 30 颗牙齿。他的牙医钻了 4 颗牙齿,并且给比钻的牙齿多 7 颗的牙齿做了牙冠。牙医修复了詹姆斯多少百分比的牙齿?

良好的实践是这样,当模型未按照要求输出错误的内容时,将这样的例子作为错误的样例作为错误解释。

自动思维链 (Auto-CoT)

什么是 Auto-CoT?

自动思维链(Auto-CoT)是一种提示技术,旨在增强大型语言模型(LLMs)的推理能力。它通过自动生成中间推理步骤来实现这一点,这是思维链(CoT)提示的关键要素。

CoT 涉及手动创建特定任务的演示,每个演示包括一个问题、中间推理步骤和最终答案。虽然 CoT 通常表现更好,但它耗时且需要为每个任务手工制作示例。Auto-CoT 通过利用 LLMs 自动生成推理演示来解决这一问题。

Auto-CoT 的工作原理

Auto-CoT 通过两个关键阶段为 CoT 示例生成推理链:

  1. 问题聚类:系统使用 Sentence-BERT 嵌入将问题聚类成组。每个组包含语义相似的问题。
  2. 示例采样:它从每个簇中选取一个代表性问题,并使用 Zero-Shot CoT 生成推理链。这可以在无需人工干预的情况下创建多样化和有效的示例。
  3. 这些链随后被用作 LLM 解决新任务的示范。
Auto-CoT 的结果

Auto-CoT 在算术、常识和符号推理任务中的十个公共基准数据集上进行了测试。结果表明,Auto-CoT 的性能与手动制作的 CoT 示例相当或更优。

表格思维链(Tab-CoT)

什么是表格式思维链提示(Tab-CoT)

表格式思维链提示(Tab-CoT)是一种新颖的思维链(CoT)提示方法。Tab-CoT 建议将思维链(CoT)中的推理过程以表格形式进行结构化。

与依赖冗长自然语言提示的传统 CoT 方法不同,Tab-CoT 利用表格的力量。这使得大型语言模型(LLMs)能够在二维格式中进行推理,确保一致性并促进更有条理的思考过程。

Tab-CoT 的工作原理

Tab-CoT 鼓励 LLM 将其推理过程以表格形式的一系列步骤捕获。

该表格通常包含以下列:

  • 步骤:表示当前的推理步骤。
  • 子问题:模型在每个步骤中旨在回答的子问题。
  • 过程:在该步骤中执行的推理或计算。
  • 结果:该步骤的最终答案。

这种格式将复杂问题分解为可管理的步骤,使模型能够在生成最终答案之前以结构化的方式“思考”。

例如下面的问题:

一位厨师需要煮 9 个土豆。他已经煮了 7 个。如果每个土豆需要 3 分钟来煮,他还需要多长时间才能煮完剩下的土豆?
步骤子问题过程结果
1还剩多少土豆需要煮?9 - 7 = 22
2需要多少分钟?2 * 3 分钟6

这张表格使 LLMs 能够提供比标准 CoT 更组织化和高效的推理过程,而标准 CoT 可能涉及冗长、非结构化的解释。

如何使用 Tab-CoT

要使用 Tab-CoT,请按照以下步骤操作:

步骤 1. 构建表格

推理过程以表格形式呈现,包含预定义的列,这些列反映了逐步的思考过程。

这是提示模板:

 [你的问题]
 
|步骤|子问题|程序|结果|
步骤 2. 答案提取

一旦表格生成,可以使用类似“答案是”的最终提示从完成的表格中提取结果。这确保模型在执行所有推理步骤后提供最终答案。

因此,答案是

思维记忆(MoT)提示

什么是思维记忆(MoT)

思维记忆(MoT) 是一个新颖的框架,旨在让 ChatGPT 等大型语言模型(LLMs)无需高质量的标记数据集或计算成本高昂的微调即可自我改进。受人类自我反思和记忆的启发,MoT 赋予 LLMs 预思考、存储和回忆过去推理路径的能力,从而提升它们在各种推理任务上的表现。

MoT 是如何工作的?

该框架在两个关键阶段运行:

  1. 预思考:在测试阶段之前,LLM 对未标记的数据集进行思考,并将高置信度的推理路径(称为思考)保存在外部内存系统中。
  2. 回忆:在测试阶段,当 LLM 遇到新问题时,它会从内存中检索相关的思考来辅助其推理过程。
如何使用 MoT
步骤 1. 预思考

在这个阶段,LLM 处理未标记的示例并保存最一致的推理路径(思考)作为记忆。这个过程包括以下步骤:

  1. LLM 为每个问题生成多个推理路径。
  2. 多数投票系统选择最频繁(因此最一致)的答案,并将相应的推理链作为记忆保存。
步骤 2. 回忆

当 LLM 遇到一个新的测试问题时:

  1. 它根据当前问题与存储问题之间的相似性,从记忆中检索相关思考
  2. LLM 利用自身的理解来选择最有用的思考,然后使用它来辅助回答测试问题。

通过从其记忆中回忆一个相似场景,LLM 运用类比推理过程快速解决新问题。

MoT 的结果

MoT 在多个推理基准上进行了测试,与标准技术相比,在各种任务中表现出显著改进。

主动提示

什么是主动提示?

主动提示(或 Active-Prompt)是一种通过选择性地对模型表现最多不确定性的示例进行人工标注来提高思维链(CoT)提示性能的技术。这种方法通过仅专注于模型最具挑战性的问题,从而最大限度地提高人工标注工作的效率。

主动提示包括四个主要步骤:

  1. 不确定性估计:它使用思维链提示法(Chain-of-Thought Prompting)对同一个问题多次询问模型( 假如询问动作重复了k次 ),使用少量人工编写的思维链或零样本思维链(Zero-Shot Chain-of-Thought, CoT)提示,为一系列未标记的问题生成可能答案及中间步骤。通过选定的不确定性指标计算 u的不确定性 k。 例如通过 k 次重复中生成的答案 A={a1,a2,…,ak} 之间的分歧来衡量不确定性。分歧是指计算预测中的唯一答案。实现方法很简单。我们首先通过集合运算去除重复项,统计唯一答案,得到 h 唯一项目 A={a1,a2,…,ah} 。然后,通过 u=h/k 计算分歧。
  2. 选择:具有最高不确定性的问题被选出来供人工标注。
  3. 标注:步骤 2 中选定的问题由人工手动标注,以提供更准确的答案。
  4. 推理:新标注的示例用于提高模型在未来回答问题时的性能。

主动提示通过减少对全部训练数据进行标注的需求,节省了大量人力资源。它在一系列推理任务中优于其他技术,如自动思维链提示、随机思维链提示和自洽性。主动提示研究是首个展示在思维链提示中选择性问题标注对解决复杂推理任务有益的研究。

类比提示

什么是类比提示?

类比提示 是一种新方法,通过借鉴人类的类比推理来增强大型语言模型(LLMs)的推理过程。受我们连接过去经验和当前挑战的能力的启发,类比提示鼓励 LLMs 在处理新问题之前自我生成相关的例子。

例如,如果你被要求解决一个复杂的数学问题,你可能会想到以前解决过的类似问题并应用那些知识。类似地,类比提示指示 LLMs 回忆或生成与当前任务相似的例子和解决方案。然后,LLM 利用这些例子来更好地解决原始问题。

类比提示是如何工作的?
  1. 问题描述:LLM 被呈现一个问题。
  2. 生成范例:它生成相关的问题及其解决方案作为范例。
  3. 解决原始问题:LLM 使用这些范例来解决初始问题。
如何使用类比提示

类比提示可以通过在 LLM 的输入中使用特定的指令模板来实现。这里是一个你可以遵循的通用模板:

[在此处插入问题]
回忆相关的问题:解决初始问题:

示例提示


你的任务是解决数学问题。当遇到一个数学问题时,回忆相关的例子。然后,继续解决初始问题。
[在此处插入问题]

指令:相关问题的示例:回忆与初始问题相关的数学问题的例子。你的问题应该彼此不同,并且与初始问题不同(例如,涉及不同的数字和名称)。

对于每个问题:在"Q:"后描述问题,在"A:"后解释解决方案。
解决初始问题:
类比提示的结果

类比提示已在多种任务中进行了测试,包括数学问题解决和代码生成。结果表明,它始终优于零样本和少样本思维链方法。

类比提示在需要多步推理的复杂任务中表现尤为出色,例如解决程序设计竞赛挑战或高级数学问题。

基于复杂度的提示

什么是基于复杂性的提示?

基于复杂性的提示是一种用于提高大型语言模型(LLMs)多步推理能力的新技术。其核心思想是在提示模型时使用复杂的推理链(即包含更多步骤的链)作为示例。这种方法通过关注输入提示和输出选择两个方面,提升了在数学问题和常识推理等推理任务中的表现。

标准提示技术,如思维链(CoT)提示,通过要求 LLMs 在提供最终答案之前生成中间推理步骤,在多步推理中显示出成功。然而,哪种类型的示例能构成最佳提示尚不明确。基于复杂性的提示表明,需要更多推理步骤的更复杂示例,与简单示例相比,能带来更好的模型性能。

该方法也适用于输出选择:当生成多个推理链时,模型从更复杂的推理链中选择多数答案。这个过程称为基于复杂性的一致性,进一步提高了准确性。

  1. 思维链(CoT)提示:CoT 提示通过将问题分解为更小的步骤来提高多步推理,但基于复杂性的提示更进一步,通过选择包含更多步骤的示例来提高整体准确性。
  2. 自洽性:自洽性从多个推理链中选择最常见的答案,而基于复杂性的自洽性则关注最复杂和稳健的推理路径,从而获得更准确的结果。
  3. 标注效率:与需要大规模标注数据集的检索方法不同,基于复杂性的提示只需要少量样本学习设置,因此更高效。

后退提示

后退提示是什么?

后退提示 是一种旨在通过鼓励模型“后退一步”并在推理细节之前专注于抽象原则来提高大型语言模型(LLMs)解决复杂任务能力的技巧。该方法通过提示模型首先推导出高级概念和第一性原理,然后再处理具体细节来运作。这种抽象有助于防止中间步骤中的错误,并导致更准确的推理。

后退提示的工作原理

该方法涉及两个步骤:

  1. 抽象:模型被提示关注与问题相关的高级概念或原则。
  2. 推理:一旦检索到高级抽象,模型就使用它来推理原始问题的具体细节。

例如:

  • 原始问题:"如果理想气体的温度增加 2 倍,体积增加 8 倍,压力会发生什么变化?"
  • 后退抽象:这个问题涉及哪些原则?(理想气体定律)
  • 最终答案:使用理想气体定律,模型可以计算出正确答案:压力减小到原来的四分之一。
如何使用后退提示
1. 抽象步骤

与其让模型直接回答原始问题,我们向它提出一个后退式问题。这是一个从更高抽象层次衍生出的原始问题的派生问题。

这个问题涉及哪些基本概念或原则?

后退式提问是通过识别问题背后的核心概念,手动创建的,并提示模型检索相关事实或原则。

2. 推理步骤

在获取原理后,指导模型将其应用于解决原始问题。

后退式提示是一种强大的技术,通过先提示抽象再深入详细推理,来提升大型语言模型在复杂推理任务中的表现。该方法在多个领域都显示出显著的性能提升,成为增强 LLM 能力的宝贵工具。

思维线程 ThoT

大型语言模型(LLMs)在自然语言理解和生成方面取得了显著性能。它们被用于翻译、摘要、问答等多种任务。随着 LLMs 能力的增强,它们的应用变得越来越多样化和复杂。

在检索增强生成(RAG)等高级应用中,用户通常输入包含数万个 token 的大量文本。这些数据在相关性和连接性上可能差异很大,有些细节对查询至关重要,而另一些则无关紧要。这种场景体现了“混乱语境”——比单纯的“长语境”更具挑战性,后者虽然涉及大量 token 数量,但缺乏同样程度的信息混乱。

ThoT 提示帮助 LLMs 系统地处理、总结和分析长文本,将其分成可管理的部分,从而在多轮对话和复杂问答等任务中获得更准确的响应。

ThoT 提示的关键特性
  1. 引导逐步处理:ThoT 提示模型"逐步梳理"混乱的背景,逐步分析和总结每个部分。
  2. 选择性注意力:通过将信息分解为更小的片段,ThoT 帮助模型忽略不相关的细节,专注于相关信息。
  3. 双层提示系统:该系统包括分析的第一遍和总结及得出结论的第二遍,增强了模型综合复杂信息的能力。
如何使用 ThoT 提示
第一步:启动推理

这一步的目标是提供"混乱"的背景,然后是问题以及一个触发 LLM 响应的提示。这一步的提示模板如下:

此处为混乱背景

Q: 此处为查询

触发句子在此处

A:

现在,让我们来看一个具体的例子。假设,你有多份关于 Reclam 的信息来源,你想知道 Reclam 是在哪里成立的。你向模型输入的内容将如下所示:

作为一名内容审阅者,我提供了关于这个问题的多个检索到的段落;你需要回答这个问题。检索到的段落 1 是:介绍自助售书机,……检索到的段落 2 是:关于卡尔斯巴德法令,它迅速……检索到的段落 3 是:它位于“克鲁伊茨街 12 号”,对面……检索到的段落 4 是:在莱比锡的房子仍然在那里,……检索到的段落 5 是:Delcam Delcam 是一个供应商……检索到的段落 6 是:居民被称为 recreinos。……检索到的段落 7 是:“政治上不可靠”的作家,如……检索到的段落 8 是:Recheio Recheio 是最大的……检索到的段落 9 是:通过互联网,大量的……检索到的段落 10 是:无需支付任何版税,……

Q: Reclam 是在哪里成立的?逐步引导我了解这个背景,并在过程中进行总结和分析。

A:
第二步:完善结论

第二步的目标是利用上一步中 LLM 的响应来提取结论。这一步的提示模板如下:

此处为混乱背景

Q: 此处为查询

触发句子在此处

A: 来自 LLM 的答案在此

因此,答案是:

让我们使用模板从 LLM 中提取最终答案。

作为一名内容审阅者,我提供了关于这个问题的多个检索到的段落;你需要回答这个问题。检索到的段落 1 是:介绍自助售书机,……检索到的段落 2 是:关于卡尔斯巴德法令,它迅速……检索到的段落 3 是:它位于“克鲁伊茨街 12 号”,对面……检索到的段落 4 是:在莱比锡的房子仍然在那里,……检索到的段落 5 是:Delcam Delcam 是一个供应商……检索到的段落 6 是:居民被称为 recreinos。……检索到的段落 7 是:“政治上不可靠”的作家,如……检索到的段落 8 是:Recheio Recheio 是最大的……检索到的段落 9 是:通过互联网,大量的……检索到的段落 10 是:无需支付任何版税,……

Q: Reclam 是在哪里成立的?逐步引导我了解这个背景,并在过程中进行总结和分析。

A:根据检索到的第二段,安东·菲利普·雷克拉姆创办了自己的出版社……在检索到的第四段中提到,莱比锡的雷克拉姆出版社……最后,在检索到的第七段中说明,德国分裂后……因此,雷克拉姆最初成立于德国莱比锡,后来将其总部迁至斯图加特。

因此,答案是:

AI输出如下:

Reclam 最初成立于莱比锡

自我批评提示

自校准提示

如果您向大型语言模型(LLM)提出任何问题,在大多数情况下,它可能会生成一个答案,无论正确与否。这并不理想,因为它可能会向用户传播不正确信息。最近,加拿大航空不得不对其客户在悲痛票价方面提供的不正确信息进行赔偿。此类行为可能使公司蒙受重大经济损失并损害其声誉。

自我校准提示 是一种自我评估技术,要求模型在生成输出后对其输出进行评估。实验表明,尽管有挑战,但模型可以将其答案评估为真或假。

如何使用自我校准提示?

使用自我校准是一个两步过程:

  1. 获取初始答案。
  2. 询问模型所提出的答案是对是错。

让我们看一个例子。

第一步:

询问模型:"美国的第一任总统是谁?"

模型回复:"乔治·华盛顿"

第二步:

要求模型自我评估所提出的答案是否为真或假。

问题:谁是美国的第一任总统?
提议的答案:乔治·华盛顿
这个提议的答案:
(A) 正确
(B) 错误
提议的答案是:

AI的回复如下:

(A) 正确

验证链 (CoVe) 提示

通常,大型语言模型(LLMs)生成的响应看似合理但实际错误。这种现象在 LLM 中被称为幻觉,是一个尚未解决的问题。幻觉在不太知名的事实或训练语料库中较少出现的事实以及生成长文本(多个句子和段落)时更为明显。对于推理任务,思维链(CoT)通过鼓励模型在生成最终响应之前生成其思考过程来提高响应质量。验证链(CoVe) 采用类似方法,并使用验证问题来提高响应质量。

验证链提示(CoVe)是一种自我批评技术,通过首先规划验证问题来检查 LLM 的工作,然后系统地回答这些问题来生成一个改进的响应。与初始答案相比,这些验证问题的答案通常简短且容易。通过向 LLM 提供验证问题和答案作为反馈,初始答案得到改进。

如何使用 CoVe 提示?

使用 CoVe 生成答案是一个 4 步过程:

  1. 基线响应生成 在这一步,你提示模型生成答案的草稿。答案可能并不完全符合事实。
  2. 规划验证 在这个步骤中,你使用查询和初始响应生成一个验证问题列表。
  3. 验证执行 这个步骤提示 LLM 为每个验证问题生成一个响应。
  4. 最终响应生成 在这一步,你结合上一步的答案,生成最终回复。

让我们通过一个例子来更好地理解这个过程。

假设我们要找出在纽约市(NYC)出生的政治家的名字。

第一步:生成基准回复

提示模型获取在纽约出生的政治家名单。

列出所有出生在纽约的政治家
1. Michael Bloomberg
2. Donald Trump
3. Franklin D. Roosevelt
4. Rudy Giuliani
5. Theodore Roosevelt
6. Ed Koch
7. Kirsten Gillibrand
8. Chuck Schumer
9. Bill de Blasio
10. John Lindsay

第二步:规划验证

生成一个验证问题列表来验证模型的答案

列出所有出生于纽约市的政治家。
1. Michael Bloomberg
2. Donald Trump
3. Franklin D. Roosevelt
4. Rudy Giuliani
5. Theodore Roosevelt
6. Ed Koch
7. Kirsten Gillibrand
8. Chuck Schumer
9. Bill de Blasio
10. John Lindsay
为每位政治家生成一个简短的验证问题,以确认其是否出生于纽约市。
Was Michael Bloomberg born in New York City?
Was Donald Trump born in New York City?
Was Franklin D. Roosevelt born in New York City?
Was Rudy Giuliani born in New York City?
Was Theodore Roosevelt born in New York City?
Was Ed Koch born in New York City?
Was Kirsten Gillibrand born in New York City?
Was Chuck Schumer born in New York City?
Was Bill de Blasio born in New York City?
Was John Lindsay born in New York City?

步骤 3:验证执行

回答以下每个问题(在问号后立即回答):
Was Michael Bloomberg born in New York City?
Was Donald Trump born in New York City?
Was Franklin D. Roosevelt born in New York City?
Was Rudy Giuliani born in New York City?
Was Theodore Roosevelt born in New York City?
Was Ed Koch born in New York City?
Was Kirsten Gillibrand born in New York City?
Was Chuck Schumer born in New York City?
Was Bill de Blasio born in New York City?
Was John Lindsay born in New York City?
Was Michael Bloomberg born in New York City? No.
Was Donald Trump born in New York City? Yes.
Was Franklin D. Roosevelt born in New York City? No.
Was Rudy Giuliani born in New York City? Yes.
Was Theodore Roosevelt born in New York City? No.
Was Ed Koch born in New York City? No.
Was Kirsten Gillibrand born in New York City? No.
Was Chuck Schumer born in New York City? Yes.
Was Bill de Blasio born in New York City? No.
Was John Lindsay born in New York City? Yes.

步骤 4:最终响应生成

使用上一步的答案来优化原始答案。

列出所有出生于纽约市的政治家。
1. Michael Bloomberg
2. Donald Trump
3. Franklin D. Roosevelt
4. Rudy Giuliani
5. Theodore Roosevelt
6. Ed Koch
7. Kirsten Gillibrand
8. Chuck Schumer
9. Bill de Blasio
10. John Lindsay

根据上述验证问题和答案,修订后的列表如下:
Was Michael Bloomberg born in New York City? No.
Was Donald Trump born in New York City? Yes.
Was Franklin D. Roosevelt born in New York City? No.
Was Rudy Giuliani born in New York City? Yes.
Was Theodore Roosevelt born in New York City? No.
Was Ed Koch born in New York City? No.
Was Kirsten Gillibrand born in New York City? No.
Was Chuck Schumer born in New York City? Yes.
Was Bill de Blasio born in New York City? No.
Was John Lindsay born in New York City? Yes.

以下是出生于纽约市的政治家名单:
1. Donald Trump
2. Rudy Giuliani
3. Chuck Schumer
4. John Lindsay

自我优化提示

受人类改进解决方案的能力启发,Self-Refine prompting 旨在通过迭代反馈和改进来提升 LLMs 的初始输出。它是一个包含三个步骤的方法:

  1. 初始输出:提示模型获取初始输出。
  2. 反馈:将提示和初始输出反馈给模型以获取反馈。
  3. 改进:将反馈反馈给模型以获取改进后的输出。
如何使用自我优化提示?

步骤 1:提示模型以获取输出。

让我们提示模型生成 Python 代码,以找出三个给定数字中的最大数。

编写一个Python函数,用于找出三个数字中的最大值。
def find_greatest(num1, num2, num3):
    if num1 >= num2 and num1 >= num3:
        return num1
    elif num2 >= num1 and num2 >= num3:
        return num2
    else:
        return num3

第二步:获取反馈 将输出结果反馈给同一模型以获取反馈。如果代码无法再改进,请让模型说明这一点,这就是停止标准。

我将为您提供一个Python函数,您的任务是提供易于遵循的反馈,以提高代码的可读性、质量和运行时间。如果没有改进的地方,请说明。以下是代码:

def find_greatest(num1, num2, num3):
    if num1 >= num2 and num1 >= num3:
        return num1
    elif num2 >= num1 and num2 >= num3:
        return num2
    else:
        return num3
代码简单易懂,做得很好!

为了进一步提高可读性,可以添加注释来解释代码的功能。此外,为了保持一致性,可以将最后一个`elif`语句更新为`elif num3 >= num1 and num3 >= num2:`。

步骤 3:实施反馈提示 LLM 使用其反馈来改进现有代码

根据反馈改进以下代码:

以下是代码:

def find_greatest(num1, num2, num3):
    if num1 >= num2 and num1 >= num3:
        return num1
    elif num2 >= num1 and num2 >= num3:
        return num2
    else:
        return num3

反馈:
代码简单易懂,做得很好!
可以通过添加注释来解释代码的功能,从而略微提高其可读性。
另一个改进可以是将最后一个`elif`语句更新为`elif num3 >= num1 and num3 >= num2:`,以保持一致性。
# 改进后的代码,添加了注释,并在最后一个elif语句中保持了比较的一致性
def find_greatest(num1, num2, num3):
    # 检查num1是否为最大值
    if num1 >= num2 and num1 >= num3:
        return num1
    # 检查num2是否为最大值
    elif num2 >= num1 and num2 >= num3:
        return num2
    # 如果num1和num2都不是最大值,那么num3必定是最大值
    elif num3 >= num1 and num3 >= num2:
        return num3

步骤 4:请求更多反馈。

我将为您提供一个Python函数,您的任务是提供易于遵循的反馈,以提高代码的可读性、质量和运行时间。如果没有改进的地方,请说明。以下是代码:

def find_greatest(num1, num2, num3):
    # 检查num1是否为最大值
    if num1 >= num2 and num1 >= num3:
        return num1
    # 检查num2是否为最大值
    elif num2 >= num1 and num2 >= num3:
        return num2
    # 如果num1和num2都不是最大值,那么num3必定是最大值
    elif num3 >= num1 and num3 >= num2:
        return num3
代码易于阅读和理解,没有更多需要改进的地方。

由于不再需要改进,我们停止迭代。

采用 Self-Refine 可提升模型性能,并在所有任务中超越先前最先进技术。

img

累积推理提示

什么是累积推理?

累积推理(CR)提示使用三个关键角色:提议者、验证者 和报告者。他们共同工作,提出、检查并将推理步骤汇编成一个完整的解决方案。

  1. 提议者:通过基于当前情境提出潜在步骤来启动推理。
  2. 验证者:批判性地评估提议者的建议。
  3. 报告者:决定何时结束推理过程。
如何使用累积推理?

在 CR 提示中,提议者通过建议采取行动来启动推理过程。验证者评估这些行动,并决定提议者的建议是否会导致有效结论。如果验证者认为提议者的建议不会导致有效结论,提议者会提供新的建议。这个过程持续进行,直到验证者认为提议者的建议能够导致有效结论。此时,报告将结合推理步骤得出最终解决方案。

让我们使用 CR 来解决 24 点游戏。在这个游戏中,目标是通过基本数学运算和给定的四个数字得到 24 作为最终结果。在这个例子中,我们以 4、9、10 和 13 作为四个输入数字。

  1. 首先,要求提议者模型选择两个数字,并使用一种基本运算对它们进行操作,然后报告剩余的数字。

    假设你是一位伟大的人工智能科学家、逻辑学家和数学家。你非常擅长基本的算术运算。请使用数字和基本算术运算(+ - * /)从输入的数字中得到24。在每一步中,你只能随机选择两个输入数字,并使用任意一种基本算术运算得到一个新的数字(避免重复禁止的步骤)。你的计算过程必须是正确的。
    
    用户:输入:[4, 9, 10, 13]  
    下一步:
    
    10-4 = 6
    
    假设你是一位伟大的人工智能科学家、逻辑学家和数学家。你非常擅长基本的算术运算。请使用数字和基本算术运算(+、-、*、/)从输入的数字中得到24。在每一步中,你只能随机选择两个输入数字,并使用任意一种基本算术运算得到一个新的数字(避免重复禁止的步骤)。你的计算过程必须是正确的。
    
    用户:输入:[4, 9, 10, 13]  
    下一步:  
    10 - 4 = 6  
    
    用户:剩余数字:
    
    [6, 9, 13]
    
  2. 使用验证器检查中间步骤是否正确。

    系统:假设你是一位伟大的人工智能科学家、逻辑学家和数学家。你非常擅长基本的算术运算。请使用数字和基本算术运算(+、-、*、/)从输入的数字中得到24。判断给定的中间步骤是否正确,并且只能使用两个现有的数字。
    
    用户:  
    输入:10, 14  
    中间步骤:10 + 14 = 24  
    
    助手:  
    中间步骤是有效的。  
    判断:  
    有效  
    
    用户:  
    输入:4, 9, 10, 13  
    中间步骤:10 - 4 = 6  
    
    助手:
    
    中间步骤是有效的。  
    判断:  
    有效
    
  3. 再次使用验证器,检查是否可以通过使用剩余数字和基本数学运算来得到该数字。

    系统:假设你是一位伟大的人工智能科学家、逻辑学家和数学家。你非常擅长基本的算术运算。请使用数字和基本算术运算(+、-、*、/)从输入的数字中得到24。判断给定的数字是否能够达到24(肯定/可能/不可能)。
    
    用户:  
    输入:10, 14  
    草稿:  
    
    助手:  
    14 - 10 = 4  
    14 * 10 = 140  
    10 / 14 = 5/7  
    14 / 10 = 1.4  
    10 + 14 = 24  
    
    用户:  
    输入:[6, 9, 13]  
    草稿:  
    
    助手:
    
    13 - 9 = 4  
    4 * 6 = 24  
    因此,使用给定的输入数字可以达到24。
    
  4. 由于验证者认为有可能达到最终解决方案,使用报告者将所有之前的步骤组合成最终解决方案。

    假设你是一位伟大的人工智能科学家、逻辑学家和数学家。你非常擅长基本的算术运算。请使用数字和基本算术运算(+、-、*、/)从输入的数字中得到24。你需要将给定的中间步骤逐步组合成一个完整的表达式。
    
    用户:  
    输入:1, 1, 4, 6  
    中间步骤:  
    1 * 4 = 4 (剩余 1, 4, 6)  
    1 * 4 * 6 = 24  
    
    助手:  
    草稿:  
    因为 1 * 4 * 6 = 24,而 1 * 4 = 4。所以 1 * (1 * 4) * 6 = 24。  
    输出:  
    1 * (1 * 4) * 6 = 24  
    
    用户:  
    输入:4, 9, 10, 13  
    中间步骤:  
    10 - 4 = 6 (剩余 6, 9, 13)  
    13 - 9 = 4 (剩余 4, 6)  
    4 * 6 = 24  
    
    助手:  
    草稿:
    
    第一步是 10 - 4 = 6,第二步是 13 - 9 = 4。因此,最后一步是将这两个结果相乘,即 6 乘以 4 等于 24。所以,最终的等式是 (10 - 4) * (13 - 9) = 24。  
    输出:  
    (10 - 4) * (13 - 9) = 24
    
累积推理的效果?

在 24 点游戏中,CR 达到了 98%的准确率,比之前最先进的技术提高了 24%。

自我验证提示

思维链(CoT)提示 帮助大型语言模型(LLMs)模拟人类思考过程,在解决复杂任务时,在写出结论之前构建中间推理步骤。但在解决需要多个推理步骤的复杂任务时,早期步骤中的一个小错误可能会传播到其他步骤并产生错误答案。CoT 缺乏错误纠正机制。一些方法通过训练一个单独的验证器来评估生成响应的准确性来缓解这个问题,但是,训练需要大量的人工标记的特定任务数据以及计算资源。

人类可以通过使用结论来预测问题中提供的原始条件来自我验证他们的答案。如果问题中的原始条件可以从结论中推导出来,那么获得的答案就是正确的。自我验证提示模仿了这种人类行为,并通过使用生成的响应来预测原始上下文中的条件来评估生成响应的正确性。

自我验证过程包括两个步骤:

  • 正向推理:LLM 使用思维链提示生成候选答案。LLM 执行采样解码以生成多个候选答案。
  • 反向验证:在上一步中从 LLM 获得的每个候选答案都进行验证,获得最多票数或更频繁地正确预测给定结论的条件的那一个答案是最终答案。
如何使用自我验证提示?

让我们使用自我验证提示来为以下问题生成答案:

杰克有 10 个苹果。亚当有 8 个苹果。杰克比亚当多多少个苹果?

答案 A1:

问题:果园里有15棵树。果园工人今天将在果园里种植树木。种植完成后,将有21棵树。果园工人今天种植了多少棵树?  
答案:果园里原本有15棵树。种植一些树后,有21棵树。所以一定种植了21 - 15 = 6棵树。答案是6。

问题:杰克有10个苹果。亚当有8个苹果。杰克比亚当多几个苹果?  
答案:
因为杰克有10个苹果,亚当有8个苹果,总共,杰克比亚当多10 + 8 = 18个苹果,所以答案是18。

回答 A2:

杰克有10个苹果,所以杰克比亚当多10 - 8 = 2个苹果,答案是2。
反向验证

这一步由多个子步骤组成。

将原问题用候选答案改写成陈述句形式。你可以使用以下提示模板:

请将问题和答案改写成完整的陈述句[q]答案是[y]。

声明式形式用于答案 A1:

将问题和答案转换为完整的陈述句:
问题:杰克有10个苹果,亚当有8个苹果,杰克比亚当多几个苹果?
答案是:因为杰克有10个苹果,亚当有8个苹果,总共杰克比亚当多10+8=18个苹果,所以答案是18。
杰克有10个苹果,亚当有8个苹果,所以杰克比亚当多18个苹果。

声明式形式用于答案 A2:

将问题和答案转换为完整的陈述句:
问题:杰克有10个苹果,亚当有8个苹果,杰克比亚当多几个苹果?
答案是:杰克有10个苹果,所以杰克比亚当多10-8=2个苹果,答案是2。
杰克有10个苹果。亚当有8个苹果。杰克比亚当多2个苹果。
重写条件/条件掩码

遮盖陈述中的一个条件,并为 LLM 准备新的问题。新问题可以是判断题或要求 LLM 预测被遮盖值的问题。从上述陈述形式中的示例问题:

  • 杰克有 X 个苹果,亚当有 8 个苹果,所以杰克比亚当多 18 个苹果。X 的值是多少?
  • 杰克有 X 个苹果。亚当有 8 个苹果。杰克比亚当多 2 个苹果。X 的值是多少?

判断题适用于非算术任务。我们不会在我们的演示中使用它们,但它们可以采取以下形式:

  • 亚当有 8 个苹果,所以杰克比亚当多 18 个苹果。杰克一共有 10 个苹果。这是正确的吗(对或错)?
  • 亚当有 8 个苹果。杰克比亚当多 2 个苹果。杰克一共有 10 个苹果。这是正确的吗(对或错)?
验证

最后,将重写的条件传递给 LLM 并预测掩码值(或真/假)。对于每个重写的条件,重复 P(例如 5)次过程,并在 LLM 正确预测条件时增加相应条件的分数。

对应得票数最多的条件就是最终答案。

第1个问题:

杰克有X个苹果,亚当有8个苹果,所以杰克比亚当多18个苹果。X的值是多少?
如果杰克比亚当多18个苹果,而亚当有8个苹果,那么杰克一定有8 + 18 = 26个苹果。

因此,X的值是26个苹果。

第2个问题:

杰克有X个苹果。亚当有8个苹果。杰克比亚当多2个苹果。X的值是多少?
如果杰克比亚当多2个苹果,而亚当有8个苹果,那么杰克有8 + 2 = 10个苹果。

因此,X的值是10。

在这里,后一个条件更频繁地正确预测了 X 的值,因此,与这个重写条件相对应的答案,即“A2:杰克有 10 个苹果,所以杰克比亚当多 10-8=2 个苹果,答案是 2。”是正确答案。