LangChain Prompt 模板保姆级教程:让大模型秒懂你的心
·
别再手写一坨坨的 Prompt 字符串了!LangChain 的模板功能让你的提示词优雅又好维护~
开篇碎碎念
你是否也曾写出过这种代码
prompt = f"请帮我为商品{name}写文案,它的卖点是{points},目标用户是{user},要求不超过{length}字,语气要{tone}..."
# 字符串越来越长,越来越难维护...😭
明明能用,但维护起来简直要命。改一个地方,满代码找半天。
别慌!LangChain 的 Prompt 模板来拯救你的代码洁癖了!
啥是 Prompt?
通俗点说,Prompt 就是你跟大模型说的话。
比如:
- "请用一句话介绍 LangChain。" —— 这是最简单的 Prompt
- "你是一名资深程序员,请用通俗易懂的语言解释什么是递归。" —— 这就复杂点了
Prompt 写得好,模型输出就像开了挂;Prompt 写得烂,输出能让你怀疑人生。
PromptTemplate:最简单的模板
想象一下,你有个模板:
请为商品 {商品名} 写一句广告语,突出卖点:{卖点}
每次只需要填空就行:
from langchain_core.prompts import PromptTemplate
创建模板
template = PromptTemplate.from_template(
"请为商品 {product_name} 写一句广告语,突出卖点:{selling_points}"
)
填空调用
prompt = template.invoke({
"product_name": "无线鼠标",
"selling_points": "静音、续航长、轻便"
})
print(prompt.text)
输出:
请为商品 无线鼠标 写一句广告语,突出卖点:静音、续航长、轻便
是不是像填空题一样简单?😄
ChatPromptTemplate:聊天模型的好搭档
现代大模型(GPT、Claude、通义千问等)都支持角色消息,这时候用 ChatPromptTemplate 更香:
from langchain_core.prompts import ChatPromptTemplate
chat_template = ChatPromptTemplate.from_messages([
("system", "你是一名电商运营专家,回答要简洁有吸引力。"),
("human", "请为商品 {product_name} 写一段文案,卖点是:{selling_points}")
])
prompt = chat_template.invoke({
"product_name": "logi鼠标",
"selling_points": "静音、灵敏、无延迟"
})
PromptTemplate vs ChatPromptTemplate
| 模板类型 | 输出格式 | 角色支持 | 推荐指数 |
|---|---|---|---|
| PromptTemplate | 纯文本字符串 | ❌ 无 | ⭐⭐⭐ |
| ChatPromptTemplate | 消息列表 | ✅ system/human/ai | ⭐⭐⭐⭐⭐ |
一句话总结:聊天模型用 ChatPromptTemplate 就对了!
Prompt 编写的"万能公式"
记住这个四件套,你的 Prompt 就不会太差:
1️⃣ 明确角色
你是一名资深电商运营专家。
让模型知道"自己是谁",风格就稳了。
2️⃣ 明确任务
请根据商品信息生成详情页文案。
别让模型猜你想要啥,直接说清楚。
3️⃣ 明确约束
要求:
1. 不超过 150 字
2. 不夸大宣传
3. 适合年轻用户
规则越多,跑偏越少。
4️⃣ 明确输入
商品名称:{product_name}
商品卖点:{selling_points}
目标用户:{target_user}
变量清清楚楚,模型一看就懂。
实战演练:三个拿来即用的案例
案例 1:商品文案生成器
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate
load_dotenv()
model = init_chat_model(
model="deepseek-chat",
model_provider="openai",
base_url=os.getenv("DEEPSEEK_BASE_URL"),
api_key=os.getenv("DEEPSEEK_API_KEY"),
temperature=0.5
)
prompt_str = """
请根据以下信息生成商品详情页文案:
商品名称:{product_name}
商品卖点:{selling_points}
目标用户:{target_user}
要求:
不超过 150 字
突出用户利益
不虚假夸张
"""
chat_prompt = ChatPromptTemplate.from_messages([
("system", "你是电商运营专家,擅长写自然有吸引力的商品文案"),
("human", prompt_str)
])
prompt = chat_prompt.invoke({
"product_name": "无线静音鼠标",
"selling_points": "静音按键、蓝牙连接、续航30天",
"target_user": "办公室和图书馆用户"
})
response = model.invoke(prompt)
print(response.content)
一句话点评:角色 + 输入 + 约束 = 稳定输出 ✅
案例 2:学习计划生成器
prompt_template = ChatPromptTemplate.from_messages([
("system", "你是一名编程老师,擅长制定可执行的学习计划。"),
("human", """
请为我制定学习计划:
学习主题:{topic}
学习时长:{days} 天
每天学习:{hours_per_day} 小时
当前基础:{level}
要求:
按天列出学习内容
每天给出练习任务
内容适合当前基础
""")
])
prompt = prompt_template.invoke({
"topic": "LangChain 入门",
"days": 5,
"hours_per_day": 2,
"level": "会 Python 基础"
})
小贴士:变量可以是数字哦~ 不一定是字符串!
案例 3:客服回复生成器
prompt_template = ChatPromptTemplate.from_messages([
("system", "你是电商客服,回复礼貌明确,不推卸责任。"),
("human", """
请根据以下信息生成客服回复:
用户问题:{user_question}
订单状态:{order_status}
物流信息:{shipping_info}
要求:
先安抚用户
再说明情况
最后给建议
不超过 120 字
""")
])
prompt = prompt_template.invoke({
"user_question": "我的快递三天没更新了,是不是丢了?",
"order_status": "已发货",
"shipping_info": "包裹已到上海转运中心"
})
业务价值:用户问题 → 数据库 → 第三方接口 → Prompt → 秒回用户!
进阶玩法:MessagesPlaceholder
当你需要插入聊天历史时,用 MessagesPlaceholder:
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有用的助手。"),
MessagesPlaceholder("history"), # 这里插入历史消息
("human", "{question}"),
])
调用时传入历史
prompt_value = prompt.invoke({
"history": [
("human", "我叫小明"),
("ai", "你好小明!"),
],
"question": "我叫什么名字?",
})
参数说明
| 参数 | 作用 |
|---|---|
optional=True |
允许不传 history,不报错 |
n_messages=4 |
只保留最近 4 条消息,防止 token 爆表 |
简写形式:
("placeholder", "{history}") # 等价于 MessagesPlaceholder("history", optional=True)
封装技巧:告别重复代码
每个案例都写一遍模型初始化?太累了!
创建 model_factory.py:
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
def get_deepseek_model(temperature: float = 0.7):
load_dotenv()
return init_chat_model(
model="deepseek-chat",
model_provider="openai",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url=os.getenv("DEEPSEEK_BASE_URL"),
temperature=temperature,
)
以后一行搞定:
from model_factory import get_deepseek_model
model = get_deepseek_model(temperature=0.5)
常见问题快问快答
Q:Prompt 越长越好吗?
A:不是! 要求太多反而会让模型顾此失彼,保持清晰就够了。
Q:为什么模型没完全按要求输出?
A:大模型不是程序,不能百分百服从。 后续可以结合结构化输出做校验。
Q:PromptTemplate 和 ChatPromptTemplate 选哪个?
A:聊天模型优先用 ChatPromptTemplate! 这是现代应用的标配。
总结划重点
| 知识点 | 一句话总结 |
|---|---|
| Prompt 本质 | 给模型的"任务说明书" |
| 模板好处 | 变量分离,复用 easy |
| PromptTemplate | 简单文本任务用 |
| ChatPromptTemplate | 聊天模型首选 |
| MessagesPlaceholder | 插入历史消息神器 |
| 编写公式 | 角色 + 任务 + 输入 + 约束 |
觉得有用的话,点个赞再走呗~ 你的鼓励是我持续输出的动力! 🎉
有问题欢迎评论区唠两句,一起学习一起进步!
更多推荐




所有评论(0)