提示词 (Prompts)
提示词(Prompt)是用户传递给模型的指令。优秀的提示词工程(Prompt Engineering)是获得高质量输出的关键。LangChain 提供了强大的工具来管理和构建提示词。
提示词模板 (Prompt Templates)
硬编码提示词通常不够灵活。PromptTemplate 允许你定义带有变量的模板,并在运行时动态填充。
1. ChatPromptTemplate (推荐)
用于聊天模型,支持结构化的消息列表。
python
from langchain_core.prompts import ChatPromptTemplate
# 使用 from_messages 方法构建
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的{role}。"),
("human", "请解释什么是 {topic}。")
])
# 填充变量
formatted_value = prompt.invoke({"role": "技术作家", "topic": "RAG"})
# 输出结果是一个 ChatPromptValue,包含消息列表,可以直接传给 Chat Model
print(formatted_value)2. PromptTemplate (用于纯文本 LLM)
用于传统的文本补全模型。
python
from langchain_core.prompts import PromptTemplate
template = PromptTemplate.from_template("给我讲一个关于{subject}的笑话。")
formatted_string = template.format(subject="程序员")
print(formatted_string)为什么使用模板?
- 复用性: 定义一次,多次调用。
- 清晰性: 将指令逻辑与数据分离。
- 安全性: 防止某些类型的提示词注入攻击。
- 部分填充 (Partial Formatting): 可以预先填充部分变量(例如绑定当前的日期或用户ID),稍后再填充剩余变量。
占位符 (MessagesPlaceholder)
在构建具有记忆(Memory)的对话系统时,我们需要一个占位符来动态插入历史聊天记录。
python
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个助手。"),
MessagesPlaceholder(variable_name="history"), # 历史记录将插入此处
("human", "{input}")
])**提示词准备好后,如何处理模型的回复呢?请前往下一章:输出解析器 (Output Parsers)。
LangChain中文文档