支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Langchain 教程三(FewShotChatMessagePromptTemplate)

发布日期:2025-07-23 07:33:00 浏览次数: 1547
作者:AI编程随录

微信搜一搜,关注“AI编程随录”

推荐语

掌握Few-Shot Prompting技巧,让大语言模型精准理解你的自定义指令!

核心内容:
1. Few-Shot Prompting的原理与价值
2. LangChain中FewShotChatMessagePromptTemplate的实战应用
3. 通过"?运算"案例演示模板效果

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家


在大语言模型的提示词工程中,有一个经典的提问方式叫做 “Few-Shot Prompting”,也就是在提问前给模型几个“样例”,引导它模仿示例来回答问题,这在咱们之前的《提示词工程》文章也有讲到过:不会写提示词?你可能正在浪费90%的AI算力,对提示词不熟悉的同学可以再看看。

其实在 LangChain中,也为我们封装了很多用于构造这类提示词的工具,其中 FewShotChatMessagePromptTemplate 是专门为聊天式模型(Chat Model)服务的 few-shot 提示模板组件。

今天我们就一起来看看 FewShotChatMessagePromptTemplate 的用途、设计思路,并结合一个完整 Demo,展示它在 LangChain 中是如何使用的。

Few-Shot 的作用

在使用语言模型时,你可能会发现这样的问题:

模型虽然聪明,但它未必理解你发明的新“指令”或自定义语义。

打个比方,咱们发明了一个叫做“🤣 运算”的表达方式,代表两个数字相加。但如果你直接问模型:

8🤣20等于多少?

它可能会一脸懵:你在说啥?

比如咱们下面的代码

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="Qwen/Qwen3-32B",
    openai_api_key="your_key",
    base_url="https://api.siliconflow.cn/v1",
    temperature=0
)

response = llm.invoke("请问 2🤣3等于多少?")
print(response.content)

大模型的返回就是


“🤣”是一个表情符号,通常表示“大笑”或“笑到流泪”,在数学中并没有对应的运算规则。因此,**2🤣3** 并不是一个有效的数学表达式,无法直接计算出数值结果。

如果你是想问普通的数学运算(例如加法、乘法等),可以明确一下符号哦!比如:
- 2 + 3 = 5
- 2 × 3 = 6
- 2^3 = 8(2的3次方)

如果是文字游戏或幽默表达,可以告诉我你的具体规则,我来帮你解答! 😄

这时候,就需要 Few-Shot Prompting —— 你给它几个示例说明什么是“🤣 运算”,它就会开始模仿了。

LangChain 如何组织 Few-Shot

LangChain 的提示词模板系统(PromptTemplate)非常灵活,其中:

  • ChatPromptTemplate:用于构建 Chat 模型的多轮消息模板。
  • FewShotChatMessagePromptTemplate:用于在提示词中插入“多个示例消息”。

这两个配合起来,就可以实现如下结构的提示词:

System: 你是一个数学天才  
Human: 2🤣2等于多少  
AI: 4  
Human: 5🤣5等于多少  
AI: 10  
Human: 6🤣8等于多少  
AI: 14  
Human: 8🤣20等于多少  

模型读到前面的“例子”后,就会自然地模仿来回答最后一个问题。

我们逐步拆解下面这个 Demo,帮助你理解每个步骤背后的意义:

示例模板定义

首先我们定义一个人机对话的简单流程。

example_prompt = ChatPromptTemplate.from_messages([
    ("human""{input}"),
    ("ai""{output}")
])

这定义了 每个示例 的格式:用户发问,AI 回答,两个变量 input 和 output 将从咱们后面的 examples 中被替换进去。

提供 Few-Shot 示例数据

examples = [
    {"input""2🤣2等于多少""output"4},
    {"input""5🤣5等于多少""output"10},
    {"input""6🤣8等于多少""output"14},
]

这组数据会被 FewShotChatMessagePromptTemplate 套用 example_prompt 模板,渲染成多轮对话形式的提示内容。

构造 Few-Shot 模板

few_shot_prompt = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
)

Langchain 中的 FewShotChatMessagePromptTemplate 会自动将上面的 examples 填充成中间的“样例对话”部分,让提示词更有上下文语境。

构建完整提示词结构

接下来咱们使用ChatPromptTemplate构造一个完整的提示词,代码如下

final_prompt = ChatPromptTemplate.from_messages([
    ("system""你是一个数学天才"),
    few_shot_prompt,
    ("human""{user_input}")
])

整个提示词由三部分组成:

  • system:系统角色设定
  • few_shot_prompt:嵌入 few-shot 示例(自动展开为多轮对话)
  • human:最终用户输入的变量

这个结构清晰且高可读性,非常适合构造复杂场景下的提示词。

这个final_prompt.messages最终打印出来就是

[
SystemMessagePromptTemplate(
prompt=PromptTemplate(
  input_variables=[], 
  input_types={}, 
  partial_variables={}, 
  template='你是一个数学天才'
), additional_kwargs={}), 
FewShotChatMessagePromptTemplate(
  examples=[
    {'input''2🤣2等于多少''output': 4}, 
    {'input''5🤣5等于多少''output': 10}, 
    {'input''6🤣8等于多少''output': 14}
  ], input_variables=[], input_types={}, partial_variables={}, example_prompt=ChatPromptTemplate(input_variables=['input''output'], input_types={}, partial_variables={}, messages=[HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['input'], input_types={}, partial_variables={}, template='{input}'), additional_kwargs={}), AIMessagePromptTemplate(prompt=PromptTemplate(input_variables=['output'], input_types={}, partial_variables={}, template='{output}'), additional_kwargs={})])), HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['user_input'], input_types={}, partial_variables={}, template='{user_input}'), additional_kwargs={})]

构建 Chain 并调用

接下来我们就可以按照前面提到的LCEL语法构建一个chain

chain = final_prompt | llm | parser
resp = chain.invoke({"user_input""8🤣20等于多少"})

最终就能得到模型的回答 —— 28(模仿前面的加法例子)。

完整示例代码

以下是完整可运行代码,适配 LangChain 0.3+ 版本的 LCEL(LangChain Expression Language)语法:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import (
    FewShotChatMessagePromptTemplate,
    ChatPromptTemplate
)
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="Qwen/Qwen3-32B",
    openai_api_key="your-api-key",
    base_url="https://api.siliconflow.cn/v1",
    temperature=0
)

example_prompt = ChatPromptTemplate.from_messages([
    ("human""{input}"),
    ("ai""{output}")
])

examples = [
    {"input""2🤣2等于多少""output"4},
    {"input""5🤣5等于多少""output"10},
    {"input""6🤣8等于多少""output"14},
]

few_shot_prompt = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
)

final_prompt = ChatPromptTemplate.from_messages([
    ("system""你是一个数学天才"),
    few_shot_prompt,
    ("human""{user_input}")
])

parser = StrOutputParser()
chain = final_prompt | llm | parser

resp = chain.invoke({"user_input""8🤣20等于多少"})
print(resp)

总结

特性
说明
自动插入样例对话
将 few-shot 示例以“Chat 轮”的形式插入提示词
与 ChatPromptTemplate 兼容
可作为提示词的中间片段
增强模型理解力
通过模仿示例,引导模型更稳定地输出
支持灵活模版变量
示例和实际用户输入可以分开设计、复用性强

应用场景推荐

  • 自定义“指令语法”(如本例的 🤣 运算)
  • 用户意图识别:提供几组问题与分类标签作为 few-shot 样例
  • 对话模板迁移:将客服对话等格式化为示例,模型进行模仿

如果你正在构建一个需要“引导性思维”的 AI 应用,FewShotChatMessagePromptTemplate 将是你构建 Prompt 时不可或缺的利器。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询