第6篇:Few-shot与Chain-of-Thought——教会AI如何思考
前五篇我们花了很多精力教模型"做什么"和"输出成什么样"。但从这一篇开始,我们要进入一个更深层的领域——教模型"怎么想"。这听起来有点反直觉。模型不是已经有了"推理能力"吗?为什么还需要教它怎么想?模型有推理能力,但默认情况下它不会自动使用最适合当前任务的推理方式。你可以类比一下人类的思维模式:当你在解决一个数学问题时,你不会直接写下答案——你会先列公式、逐步推导、检查中间结果。但在日常聊天中,你
第6篇:Few-shot与Chain-of-Thought——教会AI如何思考
适用人群:进阶→高阶 | 字数:约25,000字 | 预计阅读时间:60分钟
前言
前五篇我们花了很多精力教模型"做什么"和"输出成什么样"。但从这一篇开始,我们要进入一个更深层的领域——教模型"怎么想"。
这听起来有点反直觉。模型不是已经有了"推理能力"吗?为什么还需要教它怎么想?
答案是:模型有推理能力,但默认情况下它不会自动使用最适合当前任务的推理方式。
你可以类比一下人类的思维模式:当你在解决一个数学问题时,你不会直接写下答案——你会先列公式、逐步推导、检查中间结果。但在日常聊天中,你不会做这些。你会直接表达观点。模型也是一样——它有不同的"思维模式",而提示词可以引导它进入特定的模式。
这一篇介绍两种最强大的"思维引导"技术:Few-shot Learning(少样本学习) 和 Chain-of-Thought(思维链)。
第一部分:Few-shot Learning——用示例教会模型
1.1 什么是Few-shot Learning?
Few-shot Learning(少样本学习)是一种通过提供少量输入-输出示例,让模型"学会"完成特定任务的技术。
原理: 模型在训练时学习了大量的"模式"。当你在提示词中给出几个示例时,这些示例就像"线索",帮助模型从海量模式中定位到当前任务所需的那个模式。
零样本(Zero-shot):不给示例
“请把以下英文翻译成中文:
Hello, how are you?”
单样本(One-shot):给一个示例
"请把以下英文翻译成中文。
示例:
I love programming. → 我喜欢编程。请翻译:Hello, how are you?"
少样本(Few-shot):给多个示例
"请把以下英文翻译成中文。
示例1:I love programming. → 我喜欢编程。
示例2:The weather is nice today. → 今天天气不错。
示例3:This book is very interesting. → 这本书很有趣。请翻译:Hello, how are you?"
1.2 Few-shot的核心机制
Few-shot 之所以有效,是因为它在干两件事:
第一:任务对齐。
示例告诉模型"这是什么任务"。即使你的任务描述写得很清楚,示例提供了一个直观的"参考点",让模型确认它理解正确。
第二:格式示范。
示例展示了输入和输出的对应关系。如果输出格式比较复杂(如JSON格式、特定结构的表格),示例比任何文字描述都更有效。
第三:风格锚定。
示例展示了输出应该是什么风格。如果你给的两个例子都是简洁风格,模型就会沿着简洁风格生成。
1.3 Few-shot的选取策略
不是所有示例都一样有效。示例的选择直接影响Few-shot的效果。
策略一:代表性
示例应该代表任务的"典型情况"。如果任务是情感分析,示例应该覆盖正面、负面、中性三种情况。
策略二:边界性
示例可以包含任务的"边界情况"。如果任务是分类,可以包含一个模棱两可的案例,帮助模型处理模糊场景。
策略三:多样性
示例应该展示任务的各种变体。如果任务是邮件分类,示例应该覆盖"询价"、“投诉”、"合作"等不同类型的邮件。
策略四:难度递进
示例可以按照"简单→中等→困难"的顺序排列。这样模型先理解基本模式,再处理复杂情况。
1.4 Few-shot的"数量"问题
多少个示例最合适?
一般规则:3-5个示例是甜区。
| 示例数量 | 效果 | 说明 |
|---|---|---|
| 0(Zero-shot) | 基线水平 | 依赖模型已有的理解 |
| 1(One-shot) | 显著提升 | 模型理解任务的基本模式 |
| 3-5(Few-shot) | 最优 | 覆盖足够的多样性,又不浪费Token |
| 5-10 | 边际收益递减 | 更多示例不一定带来更好的效果 |
| 10+ | 可能过拟合 | 模型可能"记住"示例而不是"学会"模式 |
为什么不是越多越好? 因为Few-shot的本质是"模式识别"——太多的示例可能让模型陷入"模仿具体内容"而不是"学会抽象模式"。
1.5 Few-shot的常见变体
变体一:动态Few-shot
不是固定提供同样的示例,而是根据输入动态选择最合适的示例。
def dynamic_few_shot(user_input, example_pool):
# 从示例池中选择与当前输入最相似的3个示例
relevant_examples = select_most_similar(user_input, example_pool, k=3)
prompt = build_prompt_with_examples(relevant_examples, user_input)
return call_llm(prompt)
这种技术在生产系统中非常常见——你维护一个示例库,每次根据用户的输入自动匹配最相关的示例。
变体二:负样本(Negative Examples)
不仅给正面的"正确示例",也给反面的"错误示例":
"请对以下用户反馈进行情感分类:正面、负面、中性。
正确示例1:‘这个产品太棒了!’ → 正面
正确示例2:‘等了三天还不发货’ → 负面错误示例:‘一般般吧’ → 不要分类为’负面’,这应该是’中性’
请分类:‘价格还行,但质量有待提升’"
负样本可以帮助模型避开常见的分类错误。
变体三:输入-推理-输出三部曲
在示例中不仅展示输入和输出,还展示"推理过程":
"示例:
输入:‘这个手机电池续航太差了,半天就没电。’
推理:这句话表达了用户对产品的不满,属于负面情绪。
输出:负面请分析:‘这个屏幕色彩显示效果非常好。’"
这种变体实际上融合了Few-shot和Chain-of-Thought(我们马上会详细讲)。
第二部分:Chain-of-Thought(思维链)——让模型"思考"再回答
2.1 什么是Chain-of-Thought?
Chain-of-Thought(CoT,思维链)是2022年由Google研究者提出的一项技术。它的核心思想异常简单:让模型在给出最终答案之前,先展示它的推理过程。
常规提示(Direct Answer):
Q: 一个球拍和一个球总共1.10美元。球拍比球贵1美元。球多少钱?
A: 0.10美元。
(这个答案是错误的。很多人第一次也会答错。)
思维链提示(Chain-of-Thought):
Q: 一个球拍和一个球总共1.10美元。球拍比球贵1美元。球多少钱?
A: 让我们一步一步思考:
设球的价格为x美元。
那么球拍的价格为x + 1美元。
两者之和:x + (x + 1) = 1.10
2x + 1 = 1.10
2x = 0.10
x = 0.05
所以球的价格是0.05美元。
2.2 为什么CoT有效?
CoT之所以能显著提升模型在推理任务上的表现,原因有四个:
原因一:工作记忆的扩展。
大模型的生成是"从左到右"的——它在生成第N个Token时,只能看到前N-1个Token。如果你让模型直接给出答案,它的"推理空间"非常有限。但如果它在给出答案之前先生成推理过程,这些推理过程就变成了可以"回头参考"的工作记忆。
原因二:错误检测的机会。
当模型把推理过程暴露出来时,每一步都有机会被发现"走错了"。你可以在推理过程中发现中间步骤的错误,然后纠正它。但在"直接给答案"的模式下,一旦出错,就是整体错误,难以诊断。
原因三:问题分解。
CoT迫使模型把复杂问题分解为一系列简单步骤。每个步骤只需要关注一小部分信息,决策压力大大降低。
原因四:自我一致性。
当模型沿着推理链前进时,每一步的结论都必须与前面的步骤一致。这种"一致性约束"会强迫模型检查自己的逻辑连贯性。
2.3 CoT的三种主要形式
形式一:手动CoT(Manual CoT)
直接告诉模型"请一步一步思考"。
“请一步一步思考以下问题:”
“让我们逐步分析:”
“在回答之前,请先展示你的推理过程。”
形式二:Few-shot CoT
给模型一个或多个包含推理过程的示例。
"示例问题:一个农夫有15只鸡和7只兔子。这些动物一共有多少条腿?
推理步骤:
- 每只鸡有2条腿,15只鸡有15×2=30条腿
- 每只兔子有4条腿,7只兔子有7×4=28条腿
- 总腿数:30+28=58条
答案:58条现在请回答:一个农场有23只羊和12只鸭子。这些动物一共有多少条腿?"
形式三:Zero-shot CoT(零样本思维链)
最简洁的CoT形式——只需在提示词后追加"Let’s think step by step"。
“问题:[问题内容]
让我们一步一步思考。”
研究表明,仅凭这一句话,模型在推理任务上的表现就能提升10-30%。
这是一种"魔法"——仅仅因为这句话激活了模型的"推理模式",模型就从"直觉回答模式"切换到了"分析推理模式"。
第三部分:Few-shot + CoT = 强大的组合
3.1 为什么要组合?
Few-shot 和 CoT 解决的是不同的问题:
- Few-shot:解决"不知道做什么"的问题(任务对齐、格式示范)
- CoT:解决"不知道怎么想"的问题(推理过程、逻辑链)
当两者组合时,模型既知道"该做什么",也知道"该怎么想"。
3.2 组合的三种模式
模式一:Few-shot在前,CoT在后
先用示例让模型理解任务,再用CoT引导推理过程:
"你的任务是回答数学应用题。
示例1:
问题:小明有5个苹果,小红给了他3个,他又吃了2个,还剩几个?
推理:5+3=8,8-2=6
答案:6个示例2:
问题:一本书有200页,小明第一天读了1/4,第二天读了剩下的1/3,还剩多少页没读?
推理:第一天读了200×1/4=50页,剩下150页;第二天读了150×1/3=50页,剩下100页
答案:100页现在请回答以下问题,让我们一步步推理:
问题:[新问题]"
模式二:CoT内嵌在Few-shot中
每个示例都包含完整的推理过程:
"示例1:
问题:[问题]
推理:步骤1→步骤2→步骤3
答案:[答案]示例2:(同样包含推理过程)
现在请回答:[新问题]"
模式三:结构化的推理框架
让Few-shot和CoT形成固定的结构化模式:
问题:[输入]
关键信息提取:[从问题中提取关键数据]
推理步骤:
Step 1: [第一步推理]
Step 2: [第二步推理]
Step 3: [第三步推理]
最终答案:[根据推理得出的答案]
3.3 一个完整的实战案例
场景:分析销售数据变化的原因
你是一位数据分析师。你的任务是分析销售数据的变化原因。
以下是一个分析示例:
【数据】
Q1销售额:120万
Q2销售额:98万
变化:-18.3%
【分析过程】
Step 1 - 确认数据:Q1=120万,Q2=98万,环比下降18.3%
Step 2 - 拆解因素:
- 新客户数量:从320降至280(-12.5%)
- 客单价:从3750元降至3500元(-6.7%)
- 老客户复购率:从45%降至40%
Step 3 - 深入分析:
- 新客户减少的主因:Q2没有大型营销活动
- 客单价下降的主因:促销力度加大
- 复购率下降的主因:产品B出现质量问题
Step 4 - 结论:
销售额下降的主要原因是新客户获取不足,次要原因是复购率下降。
建议:Q3加大营销投入,同时解决产品B的质量问题。
【分析结论】
核心原因:营销投入不足+产品B质量问题
建议:加大营销预算,修复产品B
---
现在请分析以下数据:
Q1销售额:500万
Q2销售额:620万
变化:+24%
详细数据:
- 新客户数量:1000→1500
- 客单价:5000元→4133元
- 老客户复购率:50%→55%
- 营销投入:80万→120万
- 新产品C上市:Q2初
请按照上述分析框架,一步步分析。
这个提示词结合了:
- Few-shot:给了完整的分析示例
- CoT:示例中包含推理步骤,新任务也要求"一步步分析"
- 结构化框架:分析过程有固定的Step结构
第四部分:CoT的高级变体
4.1 Self-Consistency(自一致性)
自一致性是CoT的一个重要改进。原理很简单:
同一个问题,用CoT多次推理,然后取"多数答案"。
问题:[问题]
运行1(Temperature=0.7):推理过程A → 答案X
运行2(Temperature=0.7):推理过程B → 答案Y
运行3(Temperature=0.7):推理过程C → 答案X
运行4(Temperature=0.7):推理过程D → 答案X
运行5(Temperature=0.7):推理过程E → 答案Z
多数答案:X(出现了3次)
最终输出:X
为什么自一致性有效?因为正确的推理路径虽然可能有多种,但它们通常指向相同的答案;而错误的推理路径则更容易产生不一致的结果。
在实践中,自一致性通常需要3-5次推理,Token消耗增加3-5倍,但准确率可以提升5-15%。
4.2 Tree-of-Thought(思维树)
CoT是"一条直线"——从起点到终点的一条推理链。但对于很多复杂问题,最优的推理路径不是线性的,而是需要在多个可能的方向上探索。
Tree-of-Thought(ToT,思维树)扩展了CoT的概念,让模型在多个可能的推理方向上并行探索:
问题:[复杂问题]
分支1:路径A → 子路径A1 → 子路径A2 → ...
分支2:路径B → 子路径B1 → 子路径B2 → ...
分支3:路径C → 子路径C1 → 子路径C2 → ...
评估:哪个分支最有可能通向正确答案?
选择:基于评估继续探索最优分支
ToT在需要创造性思维和探索性推理的任务(如策略规划、创意写作、数学证明)中效果尤其好。
4.3 Chain-of-Thought with Verification
在CoT的末尾增加一个"验证步骤":
推理过程:...
结论:...
验证步骤:
- 检查结论是否与已知事实一致
- 检查推理过程中是否有逻辑跳跃
- 检查是否有被忽略的约束条件
- 如果有问题,指出并修正
这种"推理+验证"双步模式可以显著减少CoT中常见的"推理正确但结论错误"的情况。
4.4 EmotionPrompt(情感提示)
2023年有一个有趣的研究发现:在CoT提示词中加入情感激励,可以进一步提升模型的表现。
“这个问题对我的职业生涯非常重要,请认真分析。让我们一步一步思考。”
研究者发现,加入类似的情感激励后,模型在多个推理任务上的表现提升了5-10%。原因尚不完全清楚,但一种假说是:情感激励让模型进入了"更认真"的模式。
第五部分:Few-shot + CoT在真实场景中的应用
应用一:客户工单分类
你是一位客服工单分类专家。
任务:根据客户描述,将工单分类为以下类别之一:
A. 账户问题(登录失败、密码重置、账户锁定)
B. 订单问题(未收到货、退款申请、订单修改)
C. 产品问题(功能故障、使用疑问、兼容性)
D. 其他
示例1:
客户描述:'我登录不了我的账户,提示密码错误,但我确定密码是对的。'
推理:用户无法登录 → 属于账户登录问题 → 类别A
分类:A
示例2:
客户描述:'我上周下的单现在还没发货,已经超过承诺的3天发货时间了。'
推理:客户在询问订单配送进度 → 属于订单履行问题 → 类别B
分类:B
示例3:
客户描述:'你们的App在安卓14上闪退,一打开就自动关闭。'
推理:客户报告App的技术故障 → 属于产品功能问题 → 类别C
分类:C
现在请分类以下工单。让我们一步步推理:
客户描述:'我想修改我的收货地址,但页面一直提示错误。我已经试了三次了,很着急。'
推理:
应用二:内容审核决策
你是一位内容审核员。请判断以下内容是否违规。
违规类型:
1. 色情内容:包含露骨的性描写或色情暗示
2. 暴力内容:包含暴力描写或血腥描述
3. 仇恨言论:针对特定群体的歧视或攻击
4. 不违规:正常内容
示例1:
内容:'我今天去超市买了很多好吃的,苹果、香蕉、橙子都打折。'
审核分析:描述日常购物,没有违规内容。
判断:不违规
示例2:
内容:'(详细的色情场景描写,含露骨性描写)'
审核分析:内容包含明显的色情描写,属于违规。
判断:色情内容
示例3:
内容:'XX群体的人都应该被赶出这个国家。'
审核分析:内容包含针对特定群体的仇恨言论和歧视。
判断:仇恨言论
现在请审核以下内容:
内容:'这个政策简直是灾难性的,政府应该立即撤回这个愚蠢的决定。'
审核分析:
第六部分:Few-shot + CoT的常见问题
问题一:示例污染
当示例中包含与当前任务无关或相矛盾的信息时,模型可能被"带偏"。
解决方案: 精心选择示例,每个示例都要经过验证,确保引导方向正确。
问题二:推理幻觉
模型在推理过程中可能"编造"推理步骤——看起来合理,但基于错误的前提或事实。
解决方案: 在提示词中加入"请确保护推理的每一步都基于提供的信息,不要使用外部知识。"
问题三:过度推理
对于简单的任务,CoT会让模型"过度思考",反而降低了效率和准确性。
解决方案: 根据任务复杂度决定是否使用CoT。简单任务(如事实性问答)用Zero-shot,复杂任务(如数学推理、逻辑分析)用CoT。
问题四:Token消耗
CoT和Few-shot都会消耗大量Token。一个带有3个Few-shot示例和完整CoT的提示词,可能消耗5-10倍于普通提示词的Token数。
解决方案:
- 只在需要推理的任务中使用CoT
- 压缩示例长度(保留核心逻辑,去掉不必要的文字)
- 考虑在应用层做缓存(相同的输入直接返回缓存结果)
问题五:Few-shot中的顺序偏差
模型对示例的顺序敏感。把"最有用"的示例放在最前面和最末尾(参考第1篇关于注意力分布的讨论)。
写在最后
Few-shot 和 Chain-of-Thought 是提示词工程中最重要的两项"思维引导"技术。它们让提示词从"指令式"进化为"教学式"——不再只是告诉模型"做什么",而是教它"怎么做"。
当你掌握了这两项技术,你就可以:
- 让模型完成它"没见过"的新任务(通过Few-shot对齐)
- 让模型解决它"想不通"的复杂问题(通过CoT分解推理)
- 让模型的输出稳定、可信、可解释(通过暴露推理过程)
从这一篇开始,你不再只是"操作AI工具的人",而是"教会AI思考的人"。
课后练习:
-
Few-shot练习:选一个你经常做的任务(如邮件分类、文本总结),设计3个示例,对比Zero-shot和Few-shot的效果差异。
-
CoT练习:找一个需要多步推理的问题(数学题、逻辑题、策略分析),先用普通方式问,再用"让我们一步一步思考"问,对比两次的答案质量。
-
组合练习:把Few-shot和CoT结合,设计一个包含3个完整示例(含推理过程)+ 新任务的提示词,验证组合效果。
下一篇预告:《第7篇:思维链(CoT)深度解析——解锁推理能力》
第6篇介绍了CoT的基本概念和应用,第7篇我们将深入探索CoT的内部机制、高级变体(如ToT、GoT、Self-Consistency等),以及在编程、数学、逻辑推理中的专题应用。这是提示词工程中"最硬核"的一篇。
Few-shot 教会模型"该做什么",CoT 教会模型"该怎么做"。当两者结合,模型就不再是鹦鹉学舌,而是真正开始"思考"了。🧠
更多推荐



所有评论(0)