17. LangChain FewShotPromptTemplate少样本应用实战
做 AI 应用开发的人应该都有过这种经历:明明在提示词里写了一大堆要求,大模型还是会输出不符合预期的内容,甚至一本正经地胡说八道。这时候,与其继续堆砌文字说明,不如试试 LangChain 里的 FewShotPromptTemplate—— 用几个简单的示例,就能让大模型瞬间明白你想要什么。视频在这里《17. LangChain FewShotPromptTemplate 少样本应用实战》。

这个工具的底层逻辑是少样本学习,说白了就是让大模型先看几个正确的示范,再去处理新的任务。不管是翻译、文本分类还是逻辑推理,只要给对了例子,它的输出准确率和一致性都会有明显提升。

它的核心思想特别朴素:与其给 AI 写几百字的任务说明,不如直接扔给它两三个具体的例子。大模型对示例的理解能力,远比我们想象的要强得多。
这里有个容易踩的坑:创建 FewShotPromptTemplate 的时候,examples 和 example_selector 这两个参数是互斥的,必须填其中一个,不然代码直接报错。绝大多数情况下,我们直接用 examples 参数把准备好的示例数据传进去就行。
|
组件 |
说明 |
必填性 |
示例 |
|
example_selector |
动态选择示例的选择器 |
二选一 |
SemanticSimilarityExampleSelector |
|
examples |
示例数据列表,每个是字典 |
二选一 |
[{"input": "Hi", "output": "你好"}] |
|
example_prompt |
单个示例的格式化模板 |
必填 |
PromptTemplate.from_template(...) |
|
prefix |
示例前的引导文本 |
可选,默认"" |
"请把英文翻译成中文:" |
|
suffix |
示例后的用户输入提示 |
必填 |
"Input: {new_input}\nOutput:" |
|
input_variables |
用户输入变量列表 |
必填 |
["new_input"] |
|
example_separator |
示例之间的分隔符 |
默认\n\n |
"\n" |
先来看最基础的用法,针对文本补全模型,我们可以这样写:
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate # 准备示例数据 examples = [ {"input": "Hello", "output": "你好"}, {"input": "Thank you", "output": "谢谢"}, {"input": "Good morning", "output": "早上好"}, ] # 定义示例的格式化模板 example_prompt = PromptTemplate.from_template( "{input} -> {output}" ) # 创建 FewShotPromptTemplate few_shot_prompt = FewShotPromptTemplate( examples=examples, example_prompt=example_prompt, prefix="请把以下英文翻译成中文:", suffix="{new_input} -> ", input_variables=["new_input"], example_separator="\n", ) prompt_value = few_shot_prompt.invoke( { "new_input": "Good bye" } ) print(prompt_value.to_string()) res = llm.invoke(prompt_value, config=config) print(res.content)
如果用的是聊天模型,就要用专门的 FewShotChatMessagePromptTemplate,用法也差不多:
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate # 准备示例数据 examples = [ {"input": "Hello", "output": "你好"}, {"input": "Thank you", "output": "谢谢"}, {"input": "Good morning", "output": "早上好"}, ] # 定义示例的格式化模板 example_prompt = ChatPromptTemplate.from_messages( [ {"role": "user", "content": "{input}"}, {"role": "ai", "content": "{output}"} ] ) # 创建示例提示词模版 few_shot_prompt = FewShotChatMessagePromptTemplate( examples=examples, example_prompt=example_prompt ) # 构建最终的聊天提示模板 chat_prompt = ChatPromptTemplate.from_messages( [ {"role": "system", "content": "请把以下英文翻译成中文:"}, few_shot_prompt, {"role": "user", "content": "{new_input}"} ] ) # 输入内容 prompt_value = chat_prompt.invoke( { "new_input": "Where are you from?", } ) print(prompt_value.to_string()) res = llm.invoke(prompt_value, config=config) print(res.content)
总的来说,FewShotPromptTemplate 是解决大模型输出不稳定问题最简单也最有效的手段之一。不用改模型,不用调参数,只要花几分钟准备几个高质量的示例,就能让你的 AI 应用体验上一个台阶。

浙公网安备 33010602011771号