FewShotPromptTemplate
FewShotPromptTemplate
是 LangChain 中用于实现少样本学习(few-shot learning)的提示模板类,它通过提供少量示例来指导大语言模型快速理解任务并生成更准确的符合要求的回答。
核心就是通过示例演示任务规则,而不仅仅是通过文字指令描述任务。
就像教孩子认动物:与其解释"老虎有条纹、是大型猫科动物",不如直接展示老虎图片并说"这是老虎"——直观示例比抽象描述更有效。
作用和原理
核心作用
FewShotPromptTemplate
的主要作用是将多个示例组合成一个完整的提示,帮助模型理解任务模式并生成更好的输出。
工作原理
该模板的工作流程如下:
-
1. 示例获取:从预定义的示例列表(examples)或示例选择器(example_selector)中获取相关示例
-
2. 示例格式化:使用
example_prompt
将每个示例格式化为字符串 -
3. 模板组装:按照
prefix
+ 格式化示例 +suffix
的顺序组装最终提示 -
4. 变量替换:使用指定的模板格式(
f-string
或jinja2
)进行最终的变量替换
关键参数
-
• examples/example_selector:提供示例数据,两者只能选其一
-
• example_prompt:定义单个示例的格式化模板
-
• prefix/suffix:提示的前缀和后缀模版字符串部分,默认都是空字符串
""
-
• input_variables:最终模板中需要替换的变量列表,确保与prefix或suffix中的变量匹配
什么时候用?
适用场景
-
1. 任务模式复杂:当任务需要特定的输入输出格式时
-
2. 提高回答质量:通过示例引导模型生成更准确的回答
-
3. 动态示例选择:需要根据输入动态选择最相关的示例(有大量不同类型的示例)
使用示例
-
• 生成提示词
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
# few-shot 示例
# 这里的示例使用了 😝 表情来表示加法运算
examples = [
{"input": "2 😝 3", "output": "5"},
{"input": "4 😝 5", "output": "9"},
]
few_shot_prompt = FewShotPromptTemplate(
prefix="以下是一些关于 😝 运算符的示例:",
examples=examples,
example_prompt=PromptTemplate.from_template(
"输入: {{ input }}\n输出: {{ output }}", template_format="jinja2"
),
suffix="请根据这些示例,提供{{ expression }}的结果",
input_variables=["expression"],
template_format="jinja2",
)
print(few_shot_prompt.format(expression="9 😝 10"))
-
• 提示词结果
以下是一些关于 😝 运算符的示例:
输入: 2 😝 3
输出: 5
输入: 4 😝 5
输出: 9
请根据这些示例,提供9 😝 10的结果
-
• 去问下聪明伶俐的deepseek
-
One More Thing
根据AI研究论文实证:
-
• 在知识检索任务中,few-shot相比zero-shot提示可提升21-46%准确率
-
• LangChain官方测试显示文本分类任务有35%的相对提升
-
• GPT-3在翻译任务中BLEU分数提升达40%
(效果因模型/任务而异,建议通过Prompt调试确定最佳示例数量)
FewShotPromptTemplate
特别适合需要展示输入输出模式的任务,如翻译、问答、数据转换等。通过提供相关示例,可以显著提高模型在特定任务上的表现,特别是在处理结构化输出或复杂推理任务时。选择使用固定示例还是动态示例选择器取决于你的具体需求和示例数量。
用真话讲AI,回归技术本质,拒绝神话或妖魔化。搜索 "大千AI助手" 关注我,一起撕掉过度包装,学习真实的AI技术!