AI的学习之路_5_提示词模版
LangChain通用提示词模版
PromptTemplate表示提示词模版,可以构建一个自定义的基础提示词模版,支持变量的注入,最终生成所需的提示词
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
# 创建提示词
prompt_template = PromptTemplate.from_template(
"你是一个{A}老师,请简单介绍一下{B}相关的知识点, 回答的时候{C}一点"
)
# 调用format进行信息注入 得到提示词文本
prompt_text = prompt_template.format(A="c++", B="引用", C="精简")
print(prompt_text)
model = Tongyi(
model="qwen-max"
)
res = model.invoke(input=prompt_text)
print(res)

构建执行链条
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
# 创建提示词
prompt_template = PromptTemplate.from_template(
"你是一个{A}老师,请简单介绍一下{B}相关的知识点, 回答的时候{C}一点"
)
model = Tongyi(
model="qwen-max"
)
chat = prompt_template | model # 链条结构:提示词-模型
res = chat.invoke(input={"A": "C++", "B": "const", "C": "简洁"}) # 用字典的方式将文本进行替换
print(res)

可见这种写法还是非常有用的
FewShot提示词模版的使用
尝试拼接一些FewShot的提示词模版
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
# 示例模版
example_template = PromptTemplate.from_template("国家:{G}, 首都:{S}")
# 示例的动态注入
example_data=[
{"G": "中国", "S": "北京"},
{"G": "日本", "S": "东京"}
]
few_shot_template = FewShotPromptTemplate(
example_prompt=example_template, # 示例数据的模版
examples=example_data, # 示例的数据 list内套字典
prefix="告知我国家的首都,我提供如下的示例", # 示例之前的提示词
suffix="基于前面的示例,告诉我{G}的首都是什么", # 示例之后的提示词
input_variables=["G"] #声明在前缀或后缀中的所需注入的变量名
)
prompt_text = few_shot_template.invoke(input={"G": "刚果"}).to_string()
print(prompt_text)

使用一下
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_community.llms.tongyi import Tongyi
# 示例模版
example_template = PromptTemplate.from_template("国家:{G}, 首都:{S}")
# 示例的动态注入
example_data=[
{"G": "中国", "S": "北京"},
{"G": "日本", "S": "东京"}
]
few_shot_template = FewShotPromptTemplate(
example_prompt=example_template, # 示例数据的模版
examples=example_data, # 示例的数据 list内套字典
prefix="告知我国家的首都,我提供如下的示例", # 示例之前的提示词
suffix="基于前面的示例,告诉我{G}的首都是什么", # 示例之后的提示词
input_variables=["G"] #声明在前缀或后缀中的所需注入的变量名
)
prompt_text = few_shot_template.invoke(input={"G": "美国"}).to_string()
model = Tongyi(
model="qwen-max"
)
print(model.invoke(input=prompt_text))

format和invoke
format定义于BasePromptTemplate
invoke定义了Runnable
其中,BasePromptTemplate是Runnable的派生类
所以BasePromptTemplate的派生类都能使用format和invoke
| 对比维度 | format 方法 | invoke 方法 |
|---|---|---|
| 核心功能 | 填充 PromptTemplate 模板中的占位符,生成标准化纯文本提示词,仅做本地文本格式化处理,不调用AI | 调用大语言模型(LLM/Chat Model/Chain)执行推理,基于输入内容生成AI回答,是与模型交互的核心操作 |
| 返回值类型 | 格式化后的字符串(纯文本),无额外格式/结构 | 多数场景返回字符串(AI生成的回答文本);部分Chain/结构化输出场景返回字典(如包含result键);ChatModel返回ChatMessage对象 |
| 传参方式 | 1. 关键字参数:template.format(键1=值1, 键2=值2) 2. 字典解包:template.format(**{"键1":值1, "键2":值2}) 参数需与模板占位符完全匹配 |
1. 基础用法:llm.invoke("输入文本") 2. 复杂用法:chain.invoke({"input": "输入文本"})(需匹配Chain定义的输入键) ChatModel可传ChatMessage列表:chat.invoke([HumanMessage(content="输入文本")]) |
| 解析方式 | 无需解析,直接使用纯文本结果;仅需处理字符串格式(如换行、特殊字符) | 1. 字符串结果:直接使用或简单文本处理(分割、提取关键词) 2. 字典结果:通过键取值(如result["result"]) 3. ChatMessage结果:通过message.content提取文本 |
| 依赖对象 | 仅依赖 PromptTemplate 实例,无需连接模型/服务 | 依赖 LLM/Chat Model/Chain 实例,需配置模型地址、参数,需连接本地/远程模型服务 |
| 执行耗时 | 本地操作,耗时极短(微秒/毫秒级) | 需调用模型推理,耗时由模型规模、输入长度决定(毫秒~秒级) |
具体的使用时的区别可自行验证
ChatPromptTemplate
简单的拼接一下模版
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
chart_prompt_template = ChatPromptTemplate.from_messages(
[
("system", "你是一个小学算术老师"), # 系统设定
MessagesPlaceholder("history"), #历史对话,等待动态注入
("human", "所以结果是多少啊") # 最后问的结果
]
)
# 历史聊天记录,这里可以从其他地方获取,数据库,文件什么的,都可以
history_data = [
("human", "给出一个随机数"),
("ai", "17"),
("human", "再给一个"),
("ai", "23"),
]
# 返回一个StringPromptValue
prompt_text = chart_prompt_template.invoke({"history": history_data}).to_string()
print(prompt_text)

加入模型来试一下
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.chat_models.tongyi import ChatTongyi
chart_prompt_template = ChatPromptTemplate.from_messages(
[
("system", "你是一个小学算术老师"), # 系统设定
MessagesPlaceholder("history"), #历史对话,等待动态注入
("human", "所以加法结果是多少啊") # 最后问的结果
]
)
# 历史聊天记录,这里可以从其他地方获取,数据库,文件什么的,都可以
history_data = [
("human", "给出一个随机数"),
("ai", "17"),
("human", "再给一个"),
("ai", "23"),
]
# 返回一个StringPromptValue
prompt_text = chart_prompt_template.invoke({"history": history_data}).to_string()
model = ChatTongyi(
model="qwen-max"
)
print(model.invoke(prompt_text).content)


浙公网安备 33010602011771号