LangChain ChatPromptTemplate 类及 from_messages 方法总结
一、ChatPromptTemplate 类概述
langchain_core.prompts.chat.ChatPromptTemplate 是 LangChain 中用于构建聊天模型模板化提示的核心类,继承自 BaseChatPromptTemplate,核心作用是为对话式 AI 模型提供灵活、可复用的提示结构,支持多轮对话、变量替换、消息类型区分等功能。
1. 核心特性
- 多消息类型支持:原生支持
system(系统指令)、human(人类输入)、ai(AI 回复)、placeholder(消息占位符)等消息类型,适配主流聊天模型的对话格式。 - Runnable 接口实现:集成 LangChain 标准
Runnable接口,支持invoke(同步调用)、ainvoke(异步调用)、batch(批量处理)、stream(流式输出)等方法,可无缝与 LLM、链(Chain)等组件集成。 - 灵活变量管理:支持「必填变量」(
input_variables)、「可选变量」(optional_variables)、「部分变量」(partial_variables),可预填充部分参数或动态传入对话内容。 - 消息占位符:通过
MessagesPlaceholder实现动态插入多轮对话历史,无需手动拼接消息列表。
二、from_messages 方法详解
from_messages 是 ChatPromptTemplate 的核心类方法,用于从「多种消息格式」快速创建聊天提示模板,是构建多轮对话模板的推荐方式(替代已废弃的 from_role_strings 和 from_strings 方法)。
1. 方法定位
- 作用:将任意格式的消息序列转换为
ChatPromptTemplate实例,解决单消息模板(如from_template)无法覆盖多轮对话的问题。 - 优势:支持混合消息格式、自动解析变量、兼容动态对话历史,是最灵活的模板创建方式。
2. 关键参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
messages |
序列(Sequence),元素支持 5 种格式(见下文) | 是 | 构建模板的消息列表,决定对话的角色、内容和变量占位符 |
template_format |
字符串(Literal[“f-string”, “mustache”, “jinja2”]) | 否 | 模板语法格式,默认 f-string,可根据需求选择 Mustache 或 Jinja2 语法 |
3. 支持的 5 种消息格式
messages 参数的元素可采用以下任意格式,覆盖绝大多数对话场景:
- BaseMessagePromptTemplate 实例:预定义的消息模板类(如
SystemMessagePromptTemplate)。 - BaseMessage 实例:直接传入具体消息(如
SystemMessage(content="你是助手")、HumanMessage(content="你好"))。 - (消息类型字符串, 模板) 元组:最常用的简化格式,如
("system", "你的名字是 {name}")、("human", "{user_input}")。 - (消息类, 模板) 元组:显式指定消息类,如
(SystemMessage, "你的名字是 {name}")。 - 纯字符串:简写为「人类消息」,如
"请解释 {concept}"等价于("human", "请解释 {concept}")。
4. 典型示例
示例 1:从消息模板列表创建
通过「(消息类型, 模板) 元组」构建多轮固定对话模板:
from langchain_core.prompts import ChatPromptTemplate
# 用 from_messages 创建多轮对话模板
template = ChatPromptTemplate.from_messages([
("system", "你是一个友好的AI助手,名字是 {name}。"), # 系统消息(带变量)
("human", "你好!")

最低0.47元/天 解锁文章
39

被折叠的 条评论
为什么被折叠?



