LangChain提示词模板:MessagePlaceholder详解
LangChain 提示词模板深度解析(四):MessagePlaceholder 与少量样本示例详解
MessagePlaceholder 的核心作用
MessagePlaceholder 是 LangChain 提示词模板中的动态占位符,允许在运行时插入对话历史或中间生成内容。与静态文本占位符不同,它专为处理可变长度的消息序列设计,适用于多轮对话或需要上下文记忆的场景。
MessagePlaceholder 的参数配置
- variable_name: 指定占位符的变量名,需与输入键名匹配。
- optional: 控制是否为必填字段,默认 False。若为 True,未提供输入时自动忽略该占位符。
示例代码:
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业助手"),
MessagesPlaceholder(variable_name="history"),
("human", "{input}")
])
少量样本示例(Few-shot Prompting)实现
通过 MessagePlaceholder 可动态插入示例对话,增强模型上下文理解能力。示例需以 List[BaseMessage] 格式提供:
from langchain_core.messages import HumanMessage, AIMessage
examples = [
HumanMessage(content="如何煮咖啡?"),
AIMessage(content="1. 研磨咖啡豆\n2. 使用热水冲泡\n3. 等待4分钟")
]
prompt.invoke({
"history": examples,
"input": "如何泡茶?"
})
动态对话历史管理
结合 ConversationBufferMemory 可实现自动历史记录。每次交互后,历史消息会更新至 MessagePlaceholder:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="history", return_messages=True)
memory.save_context({"input": "你好"}, {"output": "你好,有什么可以帮忙?"})
prompt.invoke({"input": "谢谢", "history": memory.load_memory_variables()["history"]})
性能优化注意事项
- 历史消息过长时需截断,避免超过模型 token 限制。
- 少量样本示例建议控制在 3-5 条,确保相关性并减少噪音。
- 可通过
MessagePromptTemplate对示例进行格式化预处理。
典型应用场景
- 多轮对话系统:维护对话状态,实现连贯交互。
- 复杂任务分解:通过历史消息记录中间步骤结果。
- 示例驱动生成:动态插入领域相关样本,提升输出质量。
调试技巧
使用 prompt.format() 检查渲染后的提示词结构,确认 MessagePlaceholder 是否正确替换为预期内容。若出现变量缺失错误,检查输入字典的键名与 variable_name 是否一致。
BbS.okapop011.sbs/PoSt/1122_090002.HtM
BbS.okapop012.sbs/PoSt/1122_225864.HtM
BbS.okapop013.sbs/PoSt/1122_215120.HtM
BbS.okapop014.sbs/PoSt/1122_593640.HtM
BbS.okapop015.sbs/PoSt/1122_340501.HtM
BbS.okapop016.sbs/PoSt/1122_708953.HtM
BbS.okapop017.sbs/PoSt/1122_457950.HtM
BbS.okapop018.sbs/PoSt/1122_084860.HtM
BbS.okapop019.sbs/PoSt/1122_118530.HtM
BbS.okapop020.sbs/PoSt/1122_288007.HtM
BbS.okapop011.sbs/PoSt/1122_846890.HtM
BbS.okapop012.sbs/PoSt/1122_885201.HtM
BbS.okapop013.sbs/PoSt/1122_653031.HtM
BbS.okapop014.sbs/PoSt/1122_047981.HtM
BbS.okapop015.sbs/PoSt/1122_006679.HtM
BbS.okapop016.sbs/PoSt/1122_676015.HtM
BbS.okapop017.sbs/PoSt/1122_716140.HtM
BbS.okapop018.sbs/PoSt/1122_668269.HtM
BbS.okapop019.sbs/PoSt/1122_115657.HtM
BbS.okapop020.sbs/PoSt/1122_618432.HtM
BbS.okapop011.sbs/PoSt/1122_664856.HtM
BbS.okapop012.sbs/PoSt/1122_732532.HtM
BbS.okapop013.sbs/PoSt/1122_013609.HtM
BbS.okapop014.sbs/PoSt/1122_958010.HtM
BbS.okapop015.sbs/PoSt/1122_448188.HtM
BbS.okapop016.sbs/PoSt/1122_248680.HtM
BbS.okapop017.sbs/PoSt/1122_815037.HtM
BbS.okapop018.sbs/PoSt/1122_596107.HtM
BbS.okapop019.sbs/PoSt/1122_015095.HtM
BbS.okapop020.sbs/PoSt/1122_668544.HtM
BbS.okapop011.sbs/PoSt/1122_815850.HtM
BbS.okapop012.sbs/PoSt/1122_617530.HtM
BbS.okapop013.sbs/PoSt/1122_211698.HtM
BbS.okapop014.sbs/PoSt/1122_436502.HtM
BbS.okapop015.sbs/PoSt/1122_430287.HtM
BbS.okapop016.sbs/PoSt/1122_045970.HtM
BbS.okapop017.sbs/PoSt/1122_828367.HtM
BbS.okapop018.sbs/PoSt/1122_793428.HtM
BbS.okapop019.sbs/PoSt/1122_228814.HtM
BbS.okapop020.sbs/PoSt/1122_997776.HtM
BbS.okapop021.sbs/PoSt/1122_096015.HtM
BbS.okapop022.sbs/PoSt/1122_511384.HtM
BbS.okapop023.sbs/PoSt/1122_756153.HtM
BbS.okapop024.sbs/PoSt/1122_276246.HtM
BbS.okapop025.sbs/PoSt/1122_197598.HtM
BbS.okapop026.sbs/PoSt/1122_712331.HtM
BbS.okapop027.sbs/PoSt/1122_441023.HtM
BbS.okapop028.sbs/PoSt/1122_053875.HtM
BbS.okapop029.sbs/PoSt/1122_430222.HtM
BbS.okapop030.sbs/PoSt/1122_068720.HtM
BbS.okapop021.sbs/PoSt/1122_893132.HtM
BbS.okapop022.sbs/PoSt/1122_033983.HtM
BbS.okapop023.sbs/PoSt/1122_816362.HtM
BbS.okapop024.sbs/PoSt/1122_599910.HtM
BbS.okapop025.sbs/PoSt/1122_815497.HtM
BbS.okapop026.sbs/PoSt/1122_296169.HtM
BbS.okapop027.sbs/PoSt/1122_363203.HtM
BbS.okapop028.sbs/PoSt/1122_019774.HtM
BbS.okapop029.sbs/PoSt/1122_444276.HtM
BbS.okapop030.sbs/PoSt/1122_126449.HtM
BbS.okapop021.sbs/PoSt/1122_930648.HtM
BbS.okapop022.sbs/PoSt/1122_736668.HtM
BbS.okapop023.sbs/PoSt/1122_550018.HtM
BbS.okapop024.sbs/PoSt/1122_898763.HtM
BbS.okapop025.sbs/PoSt/1122_913949.HtM
BbS.okapop026.sbs/PoSt/1122_747889.HtM
BbS.okapop027.sbs/PoSt/1122_032280.HtM
BbS.okapop028.sbs/PoSt/1122_297856.HtM
BbS.okapop029.sbs/PoSt/1122_514635.HtM
BbS.okapop030.sbs/PoSt/1122_769005.HtM
BbS.okapop021.sbs/PoSt/1122_589376.HtM
BbS.okapop022.sbs/PoSt/1122_027954.HtM
BbS.okapop023.sbs/PoSt/1122_696800.HtM
BbS.okapop024.sbs/PoSt/1122_517077.HtM
BbS.okapop025.sbs/PoSt/1122_503592.HtM
BbS.okapop026.sbs/PoSt/1122_630958.HtM
BbS.okapop027.sbs/PoSt/1122_338339.HtM
BbS.okapop028.sbs/PoSt/1122_195827.HtM
BbS.okapop029.sbs/PoSt/1122_401394.HtM
BbS.okapop030.sbs/PoSt/1122_940541.HtM
