别再手写一坨坨的 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 插入历史消息神器
编写公式 角色 + 任务 + 输入 + 约束

觉得有用的话,点个赞再走呗~ 你的鼓励是我持续输出的动力! 🎉

有问题欢迎评论区唠两句,一起学习一起进步!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐