大模型稳定性 - Few-shot 学习与相关示例详解
一、什么是 Few-shot 学习?
Few-shot Learning(少样本学习)是一种通过提供少量高质量示例来引导大语言模型(LLM)理解并执行特定任务的技术。通常只需要 1-10 个示例,就能让模型快速适应新领域,无需进行模型微调。
其核心思想是利用大语言模型强大的上下文学习能力(In-Context Learning)——模型在预训练阶段已经学习了海量文本中的模式,通过 prompt 中的示例可以激活相关能力,从而“举一反三”。这就像一位精通编程语法的开发者,看到几行代码风格示例后,就能写出符合规范的新代码,而不需要重新学习编程。
与传统机器学习的本质区别:传统方法需要成千上万条标注数据来训练模型参数,而 Few-shot 不更新任何参数,仅通过 prompt 中的示例构建临时任务规范。因此它具有成本低、部署快、即插即用的显著优势。
二、Few-shot 的核心策略与实现方法
1. 示例选择策略
选择合适的示例是 Few-shot 成功的核心,需遵循以下原则:
|
原则 |
说明 |
示例 |
|
多样性 |
覆盖主要类别和边界情况 |
情感分类中同时包含明确褒奖和委婉称赞的正面评论 |
|
代表性 |
选择最能体现类别特征的典型样本 |
保险客服场景中,每类意图选 2 个最典型提问 |
|
相关性 |
示例与输入文本语义相近 |
动态选择时使用向量相似度匹配最相关样本 |
2. 示例排序优化
示例的排列顺序会影响模型学习效果,常用策略包括:
- 相关性排序:按与输入内容的语义相似度从高到低排列
- 难度递增排序:从简单示例到复杂示例逐步引导
3. 固定示例 vs 动态示例
固定示例(Fixed Examples):每次推理使用相同的示例集,简单易用,适合模式固定的任务。
动态示例(Dynamic Few-shot):根据当前输入,通过向量相似度算法从训练集中动态选取最相关的示例。这种方法能显著提升模型在多样化输入场景下的表现。例如使用 SemanticSimilarityExampleSelector 配合嵌入模型和向量数据库实现。
三、代码实现示例(基于 LangChain)
3.1 固定示例实现
以自定义数学运算符“🦜”代表加法为例:
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
from langchain_openai import ChatOpenAI
# 定义示例
examples = [
{"input": "2 🦜 2", "output": "4"},
{"input": "2 🦜 3", "output": "5"},
]
# 创建示例格式化器
example_prompt = ChatPromptTemplate.from_messages([
("human", "{input}"),
("ai", "{output}"),
])
few_shot_prompt = FewShotChatMessagePromptTemplate(
example_prompt=example_prompt,
examples=examples,
)
# 构建最终提示
final_prompt = ChatPromptTemplate.from_messages([
("system", "You are a wondrous wizard of math."),
few_shot_prompt,
("human", "{input}"),
])
model = ChatOpenAI(model="gpt-4o-mini", temperature=0.0)
chain = final_prompt | model
response = chain.invoke({"input": "What's 3 🦜 3?"})
print(response.content) # 输出:3 🦜 3 = 6
3.2 动态示例实现(向量相似度选择)
对于复杂问答任务,可以构建示例池,并基于语义相似度动态选择最相关示例:
from langchain_chroma import Chroma
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain_openai import OpenAIEmbeddings
# 示例池(训练集)
qa_examples = [
{"question": "Who lived longer, Muhammad Ali or Alan Turing?",
"answer": "Follow up: How old was Muhammad Ali... So final answer: Muhammad Ali"},
{"question": "Who was the maternal grandfather of George Washington?",
"answer": "Follow up: Who was the mother... So final answer: Joseph Ball"},
# 更多示例...
]
# 创建基于语义相似度的选择器
example_selector = SemanticSimilarityExampleSelector.from_examples(
qa_examples,
OpenAIEmbeddings(),
Chroma,
k=1 # 每次选择最相似的1个示例
)
# 构建动态提示
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
suffix="Question: {input}",
input_variables=["input"],
)
chain = prompt | model
result = chain.invoke({"input": "Who was the father of Mary Ball Washington?"})
print(result.content) # 自动匹配最相关示例,输出正确回答
四、实战案例:文本纠错与情感分类
案例1:错别字纠正
通过一个示例即可让大模型学会纠错格式:
任务描述:找出错别字并按格式输出
输出示例:
熊猫眼,黑白分名(名→明)
待纠错文本:
熊猫打滚,可爱又玩皮
熊猫血,珍贵无敝
输出结果:
熊猫打滚,可爱又玩皮(玩→顽)
熊猫血,珍贵无敝(敝→比)
案例2:情感分类(含推理过程)
复杂推理任务可结合Chain of Thought(思维链),在示例中展示中间步骤:
示例:
The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: Adding all the odd numbers (9, 15, 1) gives 25. The answer is False.
新输入:
The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1.
A: Adding all the odd numbers (15, 5, 13, 7, 1) gives 41. The answer is False.
思维链技术能显著提升数学推理、逻辑判断等复杂任务的准确率,但仅对参数量超过 1000亿 的大模型有效。
五、Few-shot 最佳实践与注意事项
5.1 示例数量选择
- 通常 3-5 个示例 足够,过多可能导致模型混淆或超出 token 限制
- 从 3 个开始测试,效果不稳定则逐步增加,不超过 10 个
5.2 示例质量要求
- 每个类别至少提供 2 个示例,让模型看到类内差异
- 格式必须严格统一(包括分隔符、标记符号等)
- 即使标签有少量错误,只要整体模式一致,模型仍能学习正确响应模式
5.3 常见问题与解决方案
|
问题 |
解决方案 |
|
输出格式不稳定 |
在指令中明确“仅输出分类结果,不要解释”;使用正则后处理 |
|
模型对措辞敏感 |
准备多个 prompt 版本,用小规模测试集择优 |
|
复杂任务效果差 |
结合 Chain of Thought 展示推理过程;考虑 Fine-tuning |
5.4 技术选型建议
- Few-shot 首选场景:数据量少(几十条)、临时性需求、长尾任务
- Fine-tuning 场景:核心高频任务、有几千条以上高质量数据、准确率要求极高
- RAG 结合 Few-shot:先检索知识库相关案例,再作为 Few-shot 示例传给模型,适合客服问答等场景
六、总结
Few-shot Learning 是大语言模型提示工程中的核心技巧,通过精心设计的少量示例就能显著提升模型在特定任务上的表现。其本质是利用模型预训练阶段积累的通用知识,通过上下文注意力机制进行模式匹配。合理运用固定示例和动态示例策略,结合思维链等进阶技术,可以在医疗、法律、电商等数据稀缺领域发挥巨大价值。开发者应根据任务复杂度、数据量和性能要求,在 Few-shot、Fine-tuning 和 RAG 之间做出合适的技术选型。
如需进一步学习,推荐参考 LangChain 官方文档和 OpenAI API 参考,关注向量存储和嵌入模型的最新研究进展
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)