Appearance
Few-shot与CoT推理
给AI几个例子,它就能学会;让AI一步步思考,它就能推理
1. 概述
1.1 本章背景
在使用AI时,你是否遇到过这样的困扰:
- AI输出的格式总是不符合你的预期
- 复杂问题AI总是回答得不够准确
- 同样的任务,每次输出风格不一致
Few-shot学习和**思维链推理(Chain of Thought,CoT)**是解决这些问题的两大关键技术。它们能让AI更准确地理解你的意图,输出更符合预期的结果。
1.2 在课程体系中的位置
Prompt工程学习路径:
基础入门 → 设计技巧 → 高级模式 → 【Few-shot与CoT】 → 优化实践
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
明确指令 结构化设计 模式化应用 提升推理能力 持续改进前置知识:建议先学习《Prompt基础入门》和《提示词设计技巧》
后续延伸:学习《Prompt优化实践》,掌握更多优化技巧
2. 基本概念
2.1 Few-shot学习
Few-shot学习(少样本学习)是一种通过提供少量示例来引导AI理解任务的技术。
核心语法
Few-shot基本结构:
任务描述 + 示例1 + 示例2 + 示例N + 实际任务
示例格式:
输入:[示例输入1]
输出:[示例输出1]
输入:[示例输入2]
输出:[示例输出2]
输入:[实际输入]
输出:语义解释
| 概念 | 含义 | 说明 |
|---|---|---|
| Zero-shot | 零样本 | 不提供任何示例,直接让AI完成任务 |
| One-shot | 单样本 | 提供1个示例,让AI模仿 |
| Few-shot | 少样本 | 提供2-5个示例,让AI学习模式 |
| Many-shot | 多样本 | 提供大量示例(通常用于微调) |
规范要求
Few-shot最佳实践:
────────────────────────────────────────
✓ 示例质量 > 示例数量(3-5个高质量示例足够)
✓ 示例要有多样性(覆盖不同情况)
✓ 示例格式要一致(便于AI学习模式)
✓ 示例要典型(代表常见场景)
────────────────────────────────────────2.2 思维链推理(CoT)
思维链推理(Chain of Thought)是一种让AI"一步步思考"的技术,通过展示推理过程来提高复杂问题的解决准确率。
核心语法
CoT基本结构:
方法1:直接引导
"请一步步思考,然后给出答案。"
方法2:示例引导
问题:[示例问题]
思考:[推理过程]
答案:[最终答案]
问题:[实际问题]
思考:语义解释
| 概念 | 含义 | 适用场景 |
|---|---|---|
| 标准CoT | 标准思维链 | 复杂推理问题 |
| Zero-shot CoT | 无示例思维链 | 通用场景 |
| Few-shot CoT | 带示例的思维链 | 需要特定推理格式 |
| Self-Consistency | 自一致性 | 需要高准确率 |
规范要求
CoT最佳实践:
────────────────────────────────────────
✓ 明确要求"一步步思考"
✓ 推理步骤要详细
✓ 每步推理要有逻辑关联
✓ 最终答案要清晰明确
────────────────────────────────────────3. 原理深度解析
3.1 Few-shot为何有效?
Few-shot学习原理:
AI模型的"模式识别"能力
│
▼
┌─────────────────────────────────────┐
│ 示例1: 输入A → 输出A' │
│ 示例2: 输入B → 输出B' │
│ 示例3: 输入C → 输出C' │
└─────────────────────────────────────┘
│
▼
AI学习"输入→输出"的映射模式
│
▼
┌─────────────────────────────────────┐
│ 实际输入: 输入D │
│ AI推断: 输出D' (遵循相同模式) │
└─────────────────────────────────────┘核心原理:大语言模型在预训练过程中学习了大量的模式,Few-shot通过示例激活了模型对特定模式的识别能力。
3.2 CoT为何有效?
思维链推理原理:
传统方式:
问题 ──────────────────────→ 答案
(直接跳跃,容易出错)
思维链方式:
问题 → 步骤1 → 步骤2 → 步骤3 → 答案
(逐步推理,准确率更高)核心原理:
- 分解复杂问题:将复杂问题拆解为简单子问题
- 显式推理过程:让AI"说出"思考过程
- 减少跳跃错误:避免直接给出错误答案
3.3 Few-shot与CoT的结合
Few-shot CoT = Few-shot示例 + 思维链推理
示例结构:
────────────────────────────────────────
问题:小明有5个苹果,吃了2个,又买了3个,现在有几个?
思考:小明原来有5个苹果,吃了2个,所以剩下5-2=3个。然后又买了3个,所以现在有3+3=6个。
答案:6个
问题:小红有10本书,送给朋友3本,又买了5本,现在有几本?
思考:
────────────────────────────────────────4. 常见错误与踩坑点
4.1 Few-shot常见错误
错误1:示例格式不一致
❌ 错误表现:
────────────────────────────────────────
输入:苹果
输出:水果
输入:西红柿
答案是:蔬菜
输入:土豆
输出:
────────────────────────────────────────
问题:示例格式不一致("输出"vs"答案是")
✅ 解决方案:
────────────────────────────────────────
输入:苹果
输出:水果
输入:西红柿
输出:蔬菜
输入:土豆
输出:
────────────────────────────────────────错误2:示例缺乏多样性
❌ 错误表现:
────────────────────────────────────────
输入:苹果
输出:水果
输入:香蕉
输出:水果
输入:橙子
输出:水果
输入:西红柿
输出:
────────────────────────────────────────
问题:示例都是同类,AI无法学习边界情况
✅ 解决方案:
────────────────────────────────────────
输入:苹果
输出:水果
输入:西红柿
输出:蔬菜
输入:草莓
输出:水果
输入:黄瓜
输出:蔬菜
输入:土豆
输出:
────────────────────────────────────────错误3:示例数量过多
❌ 错误表现:
提供10+个示例,导致Token浪费,效果反而下降
✅ 解决方案:
3-5个高质量、多样化的示例通常足够4.2 CoT常见错误
错误1:推理步骤过于简略
❌ 错误表现:
────────────────────────────────────────
问题:一个长方形的周长是20厘米,长是6厘米,宽是多少?
思考:用周长公式计算。
答案:4厘米
────────────────────────────────────────
问题:推理过程过于简略,容易出错
✅ 解决方案:
────────────────────────────────────────
问题:一个长方形的周长是20厘米,长是6厘米,宽是多少?
思考:
1. 长方形的周长公式是:周长 = 2 × (长 + 宽)
2. 已知周长 = 20厘米,长 = 6厘米
3. 代入公式:20 = 2 × (6 + 宽)
4. 两边除以2:10 = 6 + 宽
5. 宽 = 10 - 6 = 4厘米
答案:4厘米
────────────────────────────────────────错误2:忽略中间验证
❌ 错误表现:
推理过程中不验证中间结果,导致错误累积
✅ 解决方案:
在关键步骤后添加验证:
"验证:这一步的结果是否合理?"5. 常见应用场景
5.1 场景一:文本分类
场景描述:将用户反馈分类为正面、负面或中性
使用方法:Few-shot学习
示例:
────────────────────────────────────────
请对以下用户反馈进行情感分类。
输入:这个产品非常好用,推荐!
输出:正面
输入:质量一般,价格偏贵。
输出:中性
输入:太差了,完全不能用,退货!
输出:负面
输入:物流很快,但产品有瑕疵。
输出:
────────────────────────────────────────5.2 场景二:格式转换
场景描述:将非结构化文本转换为结构化数据
使用方法:Few-shot学习
示例:
────────────────────────────────────────
请将以下文本转换为JSON格式。
输入:张三,男,28岁,北京
输出:{"name": "张三", "gender": "男", "age": 28, "city": "北京"}
输入:李四,女,35岁,上海
输出:{"name": "李四", "gender": "女", "age": 35, "city": "上海"}
输入:王五,男,42岁,广州
输出:
────────────────────────────────────────5.3 场景三:数学问题求解
场景描述:解决需要多步推理的数学问题
使用方法:CoT推理
示例:
────────────────────────────────────────
请一步步思考解决以下问题。
问题:一个商店进了一批商品,成本价每个50元,售价每个80元。如果卖出100个,利润是多少?
思考:
1. 首先,计算每个商品的利润:售价 - 成本价 = 80 - 50 = 30元
2. 然后,计算总利润:单个利润 × 销售数量 = 30 × 100 = 3000元
3. 验证:成本总计50×100=5000元,收入总计80×100=8000元,利润=8000-5000=3000元,正确。
答案:利润是3000元。
────────────────────────────────────────5.4 场景四:逻辑推理
场景描述:解决需要逻辑推理的问题
使用方法:Few-shot CoT
示例:
────────────────────────────────────────
问题:所有的猫都是动物,所有的动物都需要食物。小花是一只猫。问:小花需要食物吗?
思考:
1. 小花是一只猫
2. 所有的猫都是动物,所以小花是动物
3. 所有的动物都需要食物,所以小花需要食物
答案:是的,小花需要食物。
问题:所有的程序员都懂代码,所有懂代码的人都喜欢电脑。小明是程序员。问:小明喜欢电脑吗?
思考:
────────────────────────────────────────5.5 场景五:代码生成
场景描述:生成符合特定风格的代码
使用方法:Few-shot学习
示例:
────────────────────────────────────────
请按照以下风格编写PHP函数。
输入:写一个计算两数之和的函数
输出:
function add(int $a, int $b): int
{
return $a + $b;
}
输入:写一个计算两数之差的函数
输出:
function subtract(int $a, int $b): int
{
return $a - $b;
}
输入:写一个计算两数之积的函数
输出:
────────────────────────────────────────6. 企业级进阶应用场景
6.1 场景一:智能客服意图识别
场景描述:企业级智能客服系统中的用户意图识别
使用方法:Few-shot + 多标签分类
示例:
────────────────────────────────────────
你是一个智能客服系统的意图识别模块。请识别用户输入的意图。
可能的意图:订单查询、退款申请、产品咨询、投诉建议、其他
输入:我的订单什么时候能到?
输出:{"intent": "订单查询", "confidence": 0.95}
输入:这个产品我想退了,怎么操作?
输出:{"intent": "退款申请", "confidence": 0.92}
输入:你们有没有蓝色的这款?
输出:{"intent": "产品咨询", "confidence": 0.88}
输入:服务态度太差了,我要投诉!
输出:{"intent": "投诉建议", "confidence": 0.97}
输入:我想换个收货地址
输出:
────────────────────────────────────────
性能优化建议:
- 使用3-5个典型示例
- 覆盖高频意图
- 定期更新示例库6.2 场景二:复杂业务规则推理
场景描述:金融风控系统中的规则推理
使用方法:CoT + 规则链
示例:
────────────────────────────────────────
你是一个金融风控系统的风险评估模块。请根据用户信息评估风险等级。
评估规则:
1. 信用分<600:高风险
2. 信用分600-700且负债率>50%:中风险
3. 信用分>700且负债率<30%:低风险
4. 其他情况:中风险
用户信息:信用分650,负债率40%
思考过程:
1. 首先检查信用分:650,不在<600的范围,排除高风险
2. 检查是否满足规则2:信用分600-700(满足),但负债率40%<50%(不满足),不适用
3. 检查是否满足规则3:信用分650<700(不满足),不适用
4. 适用规则4:其他情况,中风险
输出:
{
"risk_level": "中风险",
"reason": "信用分650处于中等水平,负债率40%适中",
"suggestion": "建议人工复核"
}
────────────────────────────────────────
安全考虑:
- 敏感信息脱敏
- 推理过程可审计
- 人工复核机制6.3 场景三:多步骤数据处理
场景描述:ETL数据清洗流程
使用方法:CoT + 分步验证
示例:
────────────────────────────────────────
请对以下原始数据进行清洗和标准化处理。
原始数据:张三,电话13812345678,邮箱zhangsan@gmail.com,地址北京市朝阳区
处理步骤:
步骤1:姓名标准化
- 去除空格:张三
- 验证:符合中文姓名格式
- 结果:张三
步骤2:电话号码标准化
- 原始值:13812345678
- 格式化:138-1234-5678
- 验证:符合中国大陆手机号格式
- 结果:138-1234-5678
步骤3:邮箱验证
- 原始值:zhangsan@gmail.com
- 验证:符合邮箱格式
- 结果:zhangsan@gmail.com
步骤4:地址标准化
- 原始值:北京市朝阳区
- 标准化:北京市朝阳区(完整地址需要补充)
- 结果:北京市朝阳区
最终输出:
{
"name": "张三",
"phone": "138-1234-5678",
"email": "zhangsan@gmail.com",
"address": "北京市朝阳区"
}
────────────────────────────────────────
架构设计建议:
- 每步独立验证
- 错误数据标记
- 支持人工干预7. 行业最佳实践
7.1 Few-shot最佳实践
| 实践内容 | 推荐理由 |
|---|---|
| 示例数量控制在3-5个 | 足够学习模式,避免Token浪费 |
| 示例覆盖边界情况 | 帮助AI理解分类边界 |
| 示例格式严格一致 | 便于AI学习固定模式 |
| 示例顺序由简到繁 | 循序渐进,学习效果更好 |
| 定期更新示例库 | 适应新的需求和场景 |
7.2 CoT最佳实践
| 实践内容 | 推荐理由 |
|---|---|
| 明确要求"一步步思考" | 激活推理模式 |
| 每步推理要有依据 | 提高推理可靠性 |
| 关键步骤添加验证 | 减少错误累积 |
| 最终答案明确输出 | 便于结果提取 |
| 复杂问题拆分子问题 | 降低推理难度 |
7.3 组合使用最佳实践
Few-shot CoT 最佳实践模板:
────────────────────────────────────────
[任务描述]
请按以下格式回答:
问题:[示例问题1]
思考:[详细推理过程]
答案:[最终答案]
问题:[示例问题2]
思考:[详细推理过程]
答案:[最终答案]
问题:[实际问题]
思考:
────────────────────────────────────────
要点:
1. 示例中展示完整的推理过程
2. 推理步骤清晰、有逻辑
3. 最终答案明确8. 常见问题答疑(FAQ)
Q1:Few-shot需要多少个示例最合适?
回答:通常3-5个高质量示例足够。示例数量不是越多越好,关键在于:
- 示例质量高(格式正确、内容典型)
- 示例有多样性(覆盖不同情况)
- 示例格式一致(便于AI学习模式)
示例数量建议:
────────────────────────────────────────
简单任务(格式转换):2-3个示例
中等任务(分类、提取):3-5个示例
复杂任务(推理、生成):5个示例
────────────────────────────────────────Q2:什么时候使用CoT,什么时候不使用?
回答:
需要使用CoT的场景:
────────────────────────────────────────
✓ 数学计算问题
✓ 逻辑推理问题
✓ 多步骤决策问题
✓ 需要解释原因的问题
✓ 复杂分析任务
────────────────────────────────────────
不需要使用CoT的场景:
────────────────────────────────────────
✗ 简单的信息查询
✗ 格式转换任务
✗ 简单的分类任务
✗ 创意写作任务
────────────────────────────────────────Q3:Few-shot和Zero-shot如何选择?
回答:
选择决策树:
任务是否需要特定格式输出?
│
├── 是 → 使用Few-shot
│
└── 否 → 任务是否复杂?
│
├── 是 → 尝试Zero-shot,效果不好再用Few-shot
│
└── 否 → 使用Zero-shotQ4:CoT会消耗更多Token吗?
回答:是的,CoT会消耗更多Token,但这是值得的:
Token消耗对比:
────────────────────────────────────────
普通回答:问题 + 答案 = 约50 tokens
CoT回答:问题 + 推理过程 + 答案 = 约150 tokens
准确率提升:
简单问题:提升不大
复杂问题:提升30-50%
────────────────────────────────────────
建议:复杂问题使用CoT,简单问题直接回答Q5:如何评估Few-shot示例的质量?
回答:
示例质量评估清单:
────────────────────────────────────────
□ 格式是否一致?
□ 是否覆盖了主要情况?
□ 是否包含边界情况?
□ 示例之间是否有冲突?
□ 示例是否真实可信?
□ 示例是否简洁明了?
────────────────────────────────────────
测试方法:
用实际数据测试,看AI输出是否符合预期Q6:CoT推理过程中AI出错怎么办?
回答:
错误处理策略:
────────────────────────────────────────
1. 要求AI验证中间结果
"请验证这一步的计算是否正确"
2. 要求AI自我检查
"完成后请检查推理过程是否有误"
3. 分步确认
"请一步步执行,每步等待我的确认"
4. 提供正确示例
在Few-shot中提供正确的推理示例
────────────────────────────────────────9. 实战练习
9.1 基础练习
练习1:设计Few-shot Prompt
请设计一个Few-shot Prompt,将中文日期格式转换为标准格式。
解题思路:
- 确定输入输出格式
- 设计3个典型示例
- 确保格式一致
参考答案:
请将以下中文日期转换为标准格式(YYYY-MM-DD)。
输入:二零二三年十月一日
输出:2023-10-01
输入:二零二四年一月十五日
输出:2024-01-15
输入:二零二五年三月八日
输出:练习2:设计CoT Prompt
请设计一个CoT Prompt,解决年龄计算问题。
解题思路:
- 明确推理步骤
- 展示完整推理过程
- 给出明确答案
参考答案:
请一步步思考解决以下年龄问题。
问题:小明比小红大3岁,小红今年12岁,5年后小明多少岁?
思考:
1. 首先,确定小红今年的年龄:12岁
2. 小明比小红大3岁,所以小明今年:12 + 3 = 15岁
3. 5年后,小明的年龄:15 + 5 = 20岁
4. 验证:小红5年后是12+5=17岁,小明比她大3岁,所以是20岁,正确。
答案:5年后小明20岁。9.2 进阶练习
练习3:设计Few-shot CoT组合Prompt
请设计一个Few-shot CoT Prompt,用于解决逻辑推理问题。
解题思路:
- 提供2-3个带推理过程的示例
- 展示完整的思考链条
- 格式统一
参考答案:
请根据已知条件进行逻辑推理。
问题:A比B高,C比A矮,D比B高。问谁最高?
思考:
1. A比B高 → A > B
2. C比A矮 → A > C
3. D比B高 → D > B
4. 已知A > B,D > B,但不知道A和D的关系
5. 需要更多信息才能确定谁最高
答案:无法确定,缺少A和D的高度关系。
问题:甲是乙的父亲,乙是丙的哥哥,丙是丁的妹妹。问甲和丁是什么关系?
思考:
1. 甲是乙的父亲 → 甲是乙的爸爸
2. 乙是丙的哥哥 → 乙和丙是兄妹关系,丙是女的
3. 丙是丁的妹妹 → 丙和丁是兄妹关系
4. 乙和丙是兄妹,丙和丁是兄妹 → 乙、丙、丁是三兄妹
5. 甲是乙的父亲 → 甲也是丙和丁的父亲
答案:甲是丁的父亲。
问题:张三比李四年轻,王五比张三大,赵六比李四小。问谁最大?
思考:9.3 挑战练习
练习4:企业级应用设计
设计一个完整的Few-shot CoT系统,用于电商订单异常检测。
要求:
- 定义异常类型
- 设计Few-shot示例
- 包含推理过程
- 输出结构化结果
参考答案:
你是一个电商订单异常检测系统。请分析以下订单是否存在异常。
异常类型:
- 地址异常:收货地址与常用地址不符
- 金额异常:订单金额异常高或异常低
- 频率异常:短时间内多次下单
- 行为异常:购买行为与历史不符
正常订单示例:
订单信息:用户A,购买商品:手机壳×1,金额:39元,收货地址:北京市朝阳区(常用地址)
思考:
1. 检查地址:收货地址与常用地址一致,正常
2. 检查金额:39元在正常范围内,正常
3. 检查频率:单次购买,正常
4. 检查行为:手机壳是常见商品,正常
答案:{"status": "正常", "risk_level": "低", "reason": "订单信息正常"}
异常订单示例:
订单信息:用户B,购买商品:iPhone×10,金额:79990元,收货地址:新疆某偏远地区(非常用地址)
思考:
1. 检查地址:收货地址与常用地址(上海)不符,存在风险
2. 检查金额:79990元金额较高,需关注
3. 检查频率:一次性购买10台手机,异常
4. 检查行为:用户历史无大额购买记录,行为异常
答案:{"status": "异常", "risk_level": "高", "reason": "地址异常、金额异常、购买行为异常", "suggestion": "建议人工审核"}
待分析订单:
订单信息:用户C,购买商品:笔记本电脑×1,金额:5999元,收货地址:广州市天河区(常用地址),距上次下单时间:2小时
思考:10. 知识点总结
10.1 核心要点
Few-shot学习:
────────────────────────────────────────
✓ 通过示例引导AI理解任务
✓ 3-5个高质量示例足够
✓ 示例格式必须一致
✓ 示例要有多样性
✓ 适用于需要特定输出格式的任务
────────────────────────────────────────
思维链推理(CoT):
────────────────────────────────────────
✓ 让AI"一步步思考"
✓ 展示完整的推理过程
✓ 提高复杂问题的准确率
✓ 适用于推理、计算类任务
✓ 消耗更多Token但值得
────────────────────────────────────────
Few-shot CoT组合:
────────────────────────────────────────
✓ 结合两者优势
✓ 示例中展示推理过程
✓ 适用于复杂推理任务
────────────────────────────────────────10.2 易错点回顾
| 易错点 | 说明 | 解决方案 |
|---|---|---|
| 示例格式不一致 | AI无法学习固定模式 | 严格统一示例格式 |
| 示例缺乏多样性 | AI无法处理边界情况 | 覆盖典型和边界情况 |
| 推理步骤过简 | 容易出错 | 详细展示每步推理 |
| 忽略中间验证 | 错误累积 | 关键步骤添加验证 |
| 示例数量过多 | Token浪费 | 控制在3-5个 |
11. 拓展参考资料
11.1 官方文档链接
| 资源名称 | 链接 | 说明 |
|---|---|---|
| OpenAI Prompt Engineering Guide | https://platform.openai.com/docs/guides/prompt-engineering | 官方Prompt工程指南 |
| Anthropic Prompt Engineering | https://docs.anthropic.com/claude/docs/prompt-engineering | Claude官方指南 |
| Google Gemini Prompting Guide | https://ai.google.dev/docs/prompt_best_practices | Gemini官方指南 |
11.2 进阶学习路径建议
学习路径:
────────────────────────────────────────
当前章节:Few-shot与CoT推理
↓
下一章节:Prompt优化实践
↓
进阶方向:
├── Agent开发(复杂推理系统)
├── RAG与知识库(知识增强)
└── AI应用架构(工程化实践)
────────────────────────────────────────💡 核心要点:Few-shot通过示例教会AI"怎么做",CoT通过推理教会AI"怎么想"。两者结合,让AI既能理解任务格式,又能进行准确推理。
