在之前的文章中有提到当零样本提示和少样本提示不足时这可能意味着模型学到的东西不足以在任务上表现良好。少样本提示的效果对示例的选择非常敏感。示例的质量、多样性、代表性等因素都会影响模型的学习效果。如果示例过于简单或复杂、缺乏代表性或者存在错误都可能导致模型学习到错误的任务模式。除此之外这样做的代价是消耗更多的token并且当输入和输出文本较长时可能会达到上下文长度限制。以下是让模型不用链式思考直接通过少样本提示返回结果的示例public class FewShotPromptingDemo { public static void main(String[] args) { String input 不用链式思考参考下面的示例直接下面的问题。 这组数字中的奇数加起来是一个偶数4、8、9、15、12、2、1。 A答案是False。 这组数字中的奇数加起来是一个偶数17、10、19、4、8、12、24。 A答案是True。 这组数字中的奇数加起来是一个偶数16、11、14、4、8、13、24。 A答案是True。 这组数字中的奇数加起来是一个偶数17、9、10、12、13、4、2。 A答案是False。 这组数字中的奇数加起来是一个偶数15、32、5、13、82、7、1。 A; String output DeepSeekModelUtils.textModelExecution(deepseek-chat,input); System.out.println(output); } } 输出 答案是True。通过示例输出可以看到对问题的响应并不可靠。上面的示例提供了任务的基本信息。但是引入的任务类型涉及几个更多的推理步骤。换句话说如果我们将问题分解成步骤并向模型演示这可能会有所帮助。链式思考CoT提示定义链式思考(Chain-of-Thought) 是一种提示技术通过中间推理步骤实现了复杂的推理能力。可以将其与少样本提示相结合以获得更好的结果以便在回答之前进行推理的更复杂的任务。Standard PromptingChain-of-Thought PromptingpromptQ罗杰有5个⽹球。他⼜买了2罐⽹球。每个罐⼦有3个⽹球。有多少他现在有多少个⽹球?A答案是11个Q⾃助餐厅有23个苹果。如果他们⽤20做午餐⼜买了6个他们有多少个苹果?Q罗杰有5个⽹球。他⼜买了2罐⽹球。每个罐⼦有3个⽹球。他现在有多少个⽹球?A罗杰⼀开始有5个球。2罐3个⽹球等于6个⽹球。5 6 11。答案是11。Q⾃助餐厅有23个苹果。如果他们⽤20做午餐⼜买了6个他们有多少个苹果?outputA答案是27个A⾃助餐厅最初有23个苹果。他们使⽤20个做午饭。23 - 20 3。他们⼜买了6个苹果得到3 6 9。答案是9个。Java示例public class CoTPromptingDemo { public static void main(String[] args) { String input 这组数中的奇数加起来是偶数4、8、9、15、12、2、1。 A将所有奇数相加9、15、1得到25。答案为False。 这组数中的奇数加起来是偶数15、32、5、13、82、7、1。 A; String output DeepSeekModelUtils.textModelExecution(deepseek-chat,input); System.out.println(output); } } 输出 将所有奇数相加15、5、13、7、1得到 41。 41 是奇数不是偶数。 答案为 False。可以看到在提供推理步骤时得到了正确的结果并且可以通过提供更少的示例来解决此任务。零样本 COT 提示思维链CoT提示是一种通过逐步回答示例来引发复杂多步推理的新技术在算术和符号推理方面取得了最优表现。我们可以通过在每个答案前简单添加“让我们一步步思考”来证明LLM是不错的零样本推理者。Java示例public class CoTPromptingDemo { public static void main(String[] args) { String input 我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果 让我们逐步思考。; String output DeepSeekModelUtils.textModelExecution(deepseek-chat,input); System.out.println(output); } } 输出 好的我们一步步来算。 1. 最初买了 **10 个苹果**。 \[ 10 \] 2. 给了邻居 2 个给了修理工 2 个。 \[ 10 - 2 - 2 6 \] 此时剩下 **6 个苹果**。 3. 又买了 5 个苹果。 \[ 6 5 11 \] 现在有 **11 个苹果**。 4. 吃了 1 个苹果。 \[ 11 - 1 10 \] **最终剩下** \[ \boxed{10} \]这在没有太多示例可用于提示时有显著效果。自动思维链Auto-CoT当使用思维链提示时这个过程需要手工制作有效且多样化的例子。这种手动工作可能会导致次优解决方案。 Zhang et al. 2022 提出了一种消除人工的方法即利用 LLMs “让我们一步一步地思考” 提示来生成一个接一个的推理链。这种自动过程仍然可能在生成的链中出现错误。为了减轻错误的影响演示的多样性很重要。这项工作提出了Auto-CoT它对具有多样性的问题进行采样并生成推理链来构建演示。自动思维链Auto - CoT是一种在自然语言处理领域特别是针对复杂任务推理的自动化技术。它是思维链CoT方法的一种扩展旨在自动生成思维链提示而不是像传统 CoT 那样依赖人工设计的带有推理步骤的示例。其核心目标是通过自动化手段让语言模型能够自动生成连贯的推理步骤来解决复杂问题进一步提升模型在复杂任务中的性能。Auto-CoT 主要由两个阶段组成阶段1问题聚类将给定问题划分为几个聚类阶段2演示抽样从每组数组中选择一个具有代表性的问题并使用带有简单启发式的 Zero-Shot-CoT 生成其推理链​Java示例public class CoTPromptingDemo { public static void main(String[] args) { String input 请根据问题的描述 自动生成推理步骤并得出答案。回答时使用以下结构 1. 问题描述 2. 推理过程 3. 答案 问题为小明买了8个苹果和6个橙子一个苹果3元一个橙子5元。他用了50元纸币支付 请问他应该找回多少钱; String output DeepSeekModelUtils.textModelExecution(deepseek-chat,input); System.out.println(output); } } 输出 1. 问题描述 小明买了8个苹果和6个橙子苹果单价3元橙子单价5元。他用一张50元纸币支付需要计算找回多少钱。 2. 推理过程 - 计算苹果总价8个 × 3元/个 24元 - 计算橙子总价6个 × 5元/个 30元 - 计算总花费24元 30元 54元 - 计算应找回金额支付金额 - 总花费 50元 - 54元 -4元 - 由于总花费54元大于支付的50元小明支付的钱不够因此他需要补钱而不是被找回钱。但问题问的是“应该找回多少钱”在常规交易逻辑中若支付不足则无法完成交易或需补足差额。然而根据数学计算找回金额为负数表示需额外支付。 3. 答案 小明支付的钱不够他还需要补4元才能完成购买因此找回的金额是 -4元即需再付4元。自我一致性定义在提示工程中更高级的技术之一是自我一致性。自我一致性旨在“替换链式思维提示中使用的天真贪婪解码方法”。其想法是通过少样本 CoT 采样多个不同的推理路径并使用生成结果选择最一致的答案。这有助于提高 CoT 提示在涉及算术和常识推理的任务中的性能。适用于数学、逻辑、多跳问答、需要严谨推理的任务。方法描述缺点标准提示Standard Prompting直接问问题模型直接输出答案容易出错尤其在数学/逻辑题上思维链Chain-of-Thought, CoT引导模型“一步步推理”再给出答案依赖单一推理路径仍可能因随机性出错自我一致性Self-Consistency多次运行 CoT生成多条推理路径投票选最一致答案计算成本略高但显著提升准确率论文参考SELF-CONSISTENCY IMPROVES CHAIN OF THOUGHTREASONING IN LANGUAGE MODELSPrompt Chaining定义为了提高大语言模型的性能使其更可靠一个重要的提示工程技术是将任务分解为许多子任务。 确定子任务后将子任务的提示词提供给语言模型得到的结果作为新的提示词的一部分。 这就是所谓的链式提示prompt chaining一个任务被分解为多个子任务根据子任务创建一系列提示操作。链式提示可以完成很复杂的任务。LLM 可能无法仅用一个非常详细的提示完成这些任务。在链式提示中提示链对生成的回应执行转换或其他处理直到达到期望结果。public class PromptChainingDemo { public static void main(String[] args) { String input 请按照以下步骤完成 1. 确定问题的核心内容。 2. 提供关于问题中涉及的历史事件的简要背景。 3. 分析该事件的主要原因。 4. 解释该事件对历史发展的主要影响。 5. 总结回答。 问题请描述第二次世界大战的起因并分析其对世界格局的影响。; String output DeepSeekModelUtils.textModelExecution(deepseek-chat,input); System.out.println(output); } } 输出 1. **确定问题的核心内容** 问题的核心是分析第二次世界大战的起因及其对世界格局的影响需要从历史背景、原因和后果等方面进行系统性阐述。 2. **关于问题中涉及的历史事件的简要背景** 第二次世界大战1939-1945年是人类历史上规模最大、影响最广泛的全球性冲突之一涉及全球绝大多数国家主要分为以纳粹德国、日本、意大利等为首的轴心国阵营以及以美国、苏联、英国、中国等为首的同盟国阵营。战争起源于1939年德国入侵波兰最终以1945年轴心国战败告终。 3. **分析该事件的主要原因** - **《凡尔赛条约》的遗留问题**一战后对德国的严苛惩罚导致其经济崩溃、民族主义情绪高涨为纳粹崛起埋下伏笔。 - **经济大萧条的影响**1929年全球经济危机加剧了各国社会矛盾促使德、日、意等国通过对外扩张转移国内危机。 - **极端意识形态的蔓延**法西斯主义、军国主义在德、日、意等国盛行强调民族优越性与领土扩张。 - **国际联盟的失效**一战后建立的国际组织未能有效制止侵略行为如日本侵华、意大利入侵埃塞俄比亚。 - **绥靖政策的失败**英法等国对德、意扩张的妥协如《慕尼黑协定》助长了轴心国的侵略野心。 4. **解释该事件对历史发展的主要影响** - **政治格局重组**欧洲传统强国衰落美苏崛起形成两极格局冷战序幕拉开。 - **殖民体系瓦解**战争削弱了欧洲列强对亚非拉殖民地的控制民族独立运动蓬勃发展。 - **国际秩序重建**联合国成立旨在通过多边合作维护和平《世界人权宣言》等文件奠定国际法基础。 - **科技与军事变革**核武器、喷气式飞机、雷达等技术发展改变了战争形态也推动了战后科技革命。 - **全球经济体系变革**布雷顿森林体系建立美元成为国际货币世界银行、IMF等机构促进全球经济合作。 - **人道主义反思**纳粹大屠杀等暴行促使国际社会加强对人权、种族平等的关注推动国际刑事司法发展。 5. **总结回答** 第二次世界大战的起因是多重因素交织的结果包括一战后国际秩序失衡、经济危机、极端意识形态扩张及外交政策失误。战争不仅造成巨大生命财产损失更彻底改变了世界格局推动殖民体系崩溃、催生美苏两极对抗、建立以联合国为核心的国际体系并为科技、经济与人权领域的全球合作奠定基础。这场战争警示人类和平需要基于公平的国际秩序、有效的集体安全机制以及对极端主义的警惕。如示例可见简化并创建提示链是一种有用的提示方法其中响应需要经过多个操作或转换。思维树 (ToT)定义对于需要探索或预判战略的复杂任务来说传统或简单的提示技巧是不够的。思维树Tree of ThoughtsToT框架基于思维链提示进行了总结引导语言模型探索把思维作为中间步骤来解决通用问题。ToT 维护着一棵思维树思维由连贯的语言序列表示这个序列就是解决问题的中间步骤。使用这种方法LM 能够自己对严谨推理过程的中间思维进行评估。LM 将生成及评估思维的能力与搜索算法如广度优先搜索和深度优先搜索相结合在系统性探索思维的时候可以向前验证和回溯。ToT框架原理思维树的推理流程为语义理解对输入的文本进行语义理解将自然语言转换为计算机能够理解的形式通常会使用一系列预训练的语义表示模型如 BERT、GPT 等来对输入文本进行编码和表示从而捕捉到输入文本中的语义信息。构建思维树基于对输入文本的语义表示构建一个思维树以表示文本中的不同思维路径和关系。这个过程涉及到树状结构的设计和构建算法。路径选择在生成输出文本时根据输入文本和构建的思维树选择合适的思维路径。该过程通常涉及到路径搜索算法以确定最相关和最合适的思维路径ToT 可以考虑到多个可能的思维路径并根据输入文本的不同语义信息动态调整路径选择策略。整合信息选择了合适的思维路径后从不同路径中获取信息并将其整合起来形成一个综合的理解。此过程涉及到信息融合和加权的算法以确保生成的输出文本能够考虑到多个因素和可能性。生成输出根据整合的信息生成输出文本通常采用生成式模型如 GPT来生成连贯、自然的文本。ToT 会根据整合的信息和选择的思维路径来指导文本生成过程以生成准确、多样化的输出。Java示例public class ToTPromptingDemo { public static void main(String[] args) { String input 任务请解决以下迷宫路径规划问题找到从起点 S 到终点 E 的最短路径。 采用树状推理Tree of Thoughts, ToT方法逐步展开路径选择。 问题 迷宫如下S为起点E为终点X为障碍 S 0 0 X 0 X X 0 X 0 0 0 0 0 0 0 X X X E 步骤 1. 在当前位置初始为S生成所有可能的下一步移动上、下、左、右。 2. 对每个移动进行评估sure/maybe/impossible - sure该路径通畅且可能是通往终点的最优路径。 - maybe该路径可能可行但需要进一步尝试。 - impossible该路径不可行或为死路。 3. 从评估结果中保留最佳候选路径继续展开下一步。 4. 如果当前路径无解回退到上一步并重新选择路径。 要求 - 展示每一步的候选路径及其评估结果。 - 输出最终的最短路径及其总步数。; String output DeepSeekModelUtils.textModelExecution(deepseek-chat,input); System.out.println(output); } } 输出 好的我们先明确迷宫结构。 根据你给的描述我先把迷宫画成网格形式假设坐标从左上角开始为 (0,0) (0,0) S (0,1) 0 (0,2) 0 (0,3) X (0,4) 0 (1,0) X (1,1) X (1,2) 0 (1,3) X (1,4) 0 (2,0) 0 (2,1) 0 (2,2) 0 (2,3) 0 (2,4) 0 (3,0) 0 (3,1) X (3,2) X (3,3) X (3,4) E S 在 (0,0)E 在 (3,4)。 0 表示可通过的空格X 表示障碍。 --- **采用 ToT 方法逐步推理** --- ### **第 1 步起点 S (0,0)** 可能的移动右 (0,1)、下 (1,0)、左越界、上越界。 - 右 (0,1)空格 0 → 可行 - 下 (1,0)X → 障碍不可行 候选 1. (0,0) → (0,1) 评估 - (0,1) 是空格且可以继续向右或向下可能是通路 → **maybe**因为刚出发不确定是否最优 --- ### **第 2 步从 (0,1) 展开** 从 (0,1) 可走上越界、下 (1,1)、左 (0,0)、右 (0,2)。 - 左 (0,0)回到起点不考虑除非必要回退 - 下 (1,1)X → 不可行 - 右 (0,2)空格 0 → 可行 候选路径 A: (0,0)→(0,1)→(0,2) 评估 - (0,2) 可以继续向右到 (0,3) 吗(0,3) 是 X不行可以向下到 (1,2) 吗(1,2) 是 0可行。 所以 (0,2) 仍然可能通向终点 → **maybe** --- ### **第 3 步从 (0,2) 展开** 从 (0,2) 可走上越界、下 (1,2)、左 (0,1)、右 (0,3)。 - 右 (0,3)X → 不可行 - 左 (0,1)回头路不考虑 - 下 (1,2)空格 0 → 可行 候选路径 A: (0,0)→(0,1)→(0,2)→(1,2) 评估 - (1,2) 可以向下 (2,2)、右 (1,3)、左 (1,1)、上 (0,2)。 (1,3) 是 X不行(1,1) 是 X不行所以只能下 (2,2) 或上 (0,2)。上 (0,2) 是回头路。 所以唯一新方向是下 (2,2) → **maybe**因为还在探索 --- ### **第 4 步从 (1,2) 展开** 从 (1,2) 可走下 (2,2)、上 (0,2)、左 (1,1)、右 (1,3)。 - 右 (1,3)X → 不可行 - 左 (1,1)X → 不可行 - 上 (0,2)回头路 - 下 (2,2)空格 0 → 唯一新方向 路径 A: (0,0)→(0,1)→(0,2)→(1,2)→(2,2) 评估 - (2,2) 是中心点可以上下左右 上 (1,2) 回头下 (3,2) 是 X左 (2,1) 是 0右 (2,3) 是 0。 所以有两个新方向左 (2,1) 和右 (2,3)。 → **maybe**需要分支 --- ### **第 5 步分支展开** 我们保留两个候选 A1: (0,0)→(0,1)→(0,2)→(1,2)→(2,2)→(2,1) A2: (0,0)→(0,1)→(0,2)→(1,2)→(2,2)→(2,3) 先评估 A1 (2,1) 从 (2,1) 可走上 (1,1) X下 (3,1) X左 (2,0) 0右 (2,2) 回头。 唯一新方向是左 (2,0)。 A1 延伸→(2,0) (2,0) 可走上 (1,0) X下 (3,0) 0左 (1,0) 越界不对(2,0) 左是 (2,-1) 越界右 (2,1) 回头。 所以唯一新方向是下 (3,0)。 A1: →(3,0) (3,0) 可走上 (2,0) 回头右 (3,1) X下 越界左 越界。 **死路**因为 (3,0) 只能回到 (2,0)而 (2,0) 除了 (3,0) 和 (2,1) 无其他新方向且 (2,1) 也是死胡同。 所以 A1 分支是死路 → **impossible** 到达 E。 --- 再看 A2 (2,3) 从 (2,3) 可走上 (1,3) X下 (3,3) X左 (2,2) 回头右 (2,4) 0。 唯一新方向是右 (2,4)。 A2: →(2,4) (2,4) 可走上 (1,4) 0下 (3,4) E左 (2,3) 回头右 越界。 下 (3,4) 就是终点 所以 A2 可以直达终点。 --- ### **第 6 步验证是否更短路径** 当前路径 (0,0)→(0,1)→(0,2)→(1,2)→(2,2)→(2,3)→(2,4)→(3,4) 步数从 S 到 E 共 7 步移动次数 7 次路径长度 7 条边8 个点。 检查是否有更短路径 从 (0,0) 只能先到 (0,1)然后必须到 (0,2)然后必须到 (1,2)然后必须到 (2,2)。 从 (2,2) 如果直接去 (2,3) 再到 (2,4) 再到 E这是唯一可行路径吗 尝试 (2,2)→(2,3)→(2,4)→(3,4) 是最短的因为 (2,4) 直接下方是 E。 如果从 (2,2) 先去 (2,1) 分支已证明死路。 如果从 (2,2) 先去 (2,3) 是唯一可行。 所以这是最短路径。 --- ### **最终结果** **最短路径** S (0,0) → (0,1) → (0,2) → (1,2) → (2,2) → (2,3) → (2,4) → E (3,4) **总步数**7 步从起点到终点移动次数。思维树ToT提示法将 ToT 框架的主要概念概括成了一段简短的提示词指导 LLM 在一次提示中对中间思维做出评估。