Prompt Templates:提示词模板
学习用 ChatPromptTemplate 管理提示词,使用变量插值与 MessagesPlaceholder 复用模板。
为什么需要模板
把提示词硬编码在字符串里难以复用与测试。ChatPromptTemplate 让提示词成为带参数的"函数":
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位{domain}领域的翻译专家,把用户输入翻译成英文。"),
("human", "{text}"),
])
rendered = prompt.invoke({"domain": "计算机", "text": "检索增强生成"})
print(rendered.to_messages())
MessagesPlaceholder:动态插入历史
多轮对话时,需要在模板中预留"历史消息槽位":
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个耐心的助手。"),
MessagesPlaceholder("history"), # 对话历史插入点
("human", "{question}"),
])
写好提示词的原则
- 明确角色:告诉模型它是谁、服务谁;
- 给出格式:要求 JSON / 列表 / 表格等具体输出形态;
- 提供示例:一两个 few-shot 例子胜过长篇描述;
- 划定边界:明确"不知道就说不知道",减少幻觉。
📝 课后练习
quiz-1 ChatPromptTemplate 中 MessagesPlaceholder 的作用是?