17. LangChain FewShotPromptTemplate少样本应用实战

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

image

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

image

 它的核心思想特别朴素:与其给 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 应用体验上一个台阶。

posted @ 2026-05-17 07:27  老陈说编程  阅读(55)  评论(0)    收藏  举报