微信扫码
添加专属顾问
我要投稿
掌握Few-Shot Prompting技巧,让大语言模型精准理解你的自定义指令! 核心内容: 1. Few-Shot Prompting的原理与价值 2. LangChain中FewShotChatMessagePromptTemplate的实战应用 3. 通过"?运算"案例演示模板效果
在大语言模型的提示词工程中,有一个经典的提问方式叫做 “Few-Shot Prompting”,也就是在提问前给模型几个“样例”,引导它模仿示例来回答问题,这在咱们之前的《提示词工程》文章也有讲到过:不会写提示词?你可能正在浪费90%的AI算力,对提示词不熟悉的同学可以再看看。
其实在 LangChain中,也为我们封装了很多用于构造这类提示词的工具,其中 FewShotChatMessagePromptTemplate
是专门为聊天式模型(Chat Model)服务的 few-shot 提示模板组件。
今天我们就一起来看看 FewShotChatMessagePromptTemplate
的用途、设计思路,并结合一个完整 Demo,展示它在 LangChain 中是如何使用的。
在使用语言模型时,你可能会发现这样的问题:
模型虽然聪明,但它未必理解你发明的新“指令”或自定义语义。
打个比方,咱们发明了一个叫做“🤣 运算”的表达方式,代表两个数字相加。但如果你直接问模型:
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 的提示词模板系统(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 中被替换进去。
examples = [
{"input": "2🤣2等于多少", "output": 4},
{"input": "5🤣5等于多少", "output": 10},
{"input": "6🤣8等于多少", "output": 14},
]
这组数据会被 FewShotChatMessagePromptTemplate
套用 example_prompt
模板,渲染成多轮对话形式的提示内容。
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={})]
接下来我们就可以按照前面提到的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)
如果你正在构建一个需要“引导性思维”的 AI 应用,FewShotChatMessagePromptTemplate
将是你构建 Prompt 时不可或缺的利器。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-07-23
Langchain学习教程一(Hello World)
2025-07-23
Langchain学习教程二(提示词模板和 LCEL 语法)
2025-07-23
Langchain 教程四(OutputParser)
2025-07-23
Langchain教程五(LCEL 上篇)
2025-07-23
Langchain教程六(LCEL下篇)
2025-07-22
通俗易懂的LangGraph图定义解析
2025-07-21
LlamaIndex + LangChain 如何协同打造 AI 超级助手
2025-07-21
让AI像人一样“动脑筋”:教你用LangChain打造“超强智能体”!
2025-05-06
2025-06-05
2025-05-08
2025-05-28
2025-05-19
2025-05-28
2025-06-26
2025-04-25
2025-05-19
2025-04-26
2025-07-14
2025-07-13
2025-07-05
2025-06-26
2025-06-13
2025-05-21
2025-05-19
2025-05-08