Skip to content

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 → 答案
(逐步推理,准确率更高)

核心原理

  1. 分解复杂问题:将复杂问题拆解为简单子问题
  2. 显式推理过程:让AI"说出"思考过程
  3. 减少跳跃错误:避免直接给出错误答案

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-shot

Q4: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,将中文日期格式转换为标准格式。

解题思路

  1. 确定输入输出格式
  2. 设计3个典型示例
  3. 确保格式一致

参考答案

请将以下中文日期转换为标准格式(YYYY-MM-DD)。

输入:二零二三年十月一日
输出:2023-10-01

输入:二零二四年一月十五日
输出:2024-01-15

输入:二零二五年三月八日
输出:

练习2:设计CoT Prompt

请设计一个CoT Prompt,解决年龄计算问题。

解题思路

  1. 明确推理步骤
  2. 展示完整推理过程
  3. 给出明确答案

参考答案

请一步步思考解决以下年龄问题。

问题:小明比小红大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,用于解决逻辑推理问题。

解题思路

  1. 提供2-3个带推理过程的示例
  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系统,用于电商订单异常检测。

要求

  1. 定义异常类型
  2. 设计Few-shot示例
  3. 包含推理过程
  4. 输出结构化结果

参考答案

你是一个电商订单异常检测系统。请分析以下订单是否存在异常。

异常类型:
- 地址异常:收货地址与常用地址不符
- 金额异常:订单金额异常高或异常低
- 频率异常:短时间内多次下单
- 行为异常:购买行为与历史不符

正常订单示例:
订单信息:用户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 Guidehttps://platform.openai.com/docs/guides/prompt-engineering官方Prompt工程指南
Anthropic Prompt Engineeringhttps://docs.anthropic.com/claude/docs/prompt-engineeringClaude官方指南
Google Gemini Prompting Guidehttps://ai.google.dev/docs/prompt_best_practicesGemini官方指南

11.2 进阶学习路径建议

学习路径:
────────────────────────────────────────
当前章节:Few-shot与CoT推理

下一章节:Prompt优化实践

进阶方向:
├── Agent开发(复杂推理系统)
├── RAG与知识库(知识增强)
└── AI应用架构(工程化实践)
────────────────────────────────────────

💡 核心要点:Few-shot通过示例教会AI"怎么做",CoT通过推理教会AI"怎么想"。两者结合,让AI既能理解任务格式,又能进行准确推理。