前面讲了ChatPromptTemplate的两种创建方式。我们看到不管使用实例初始化方法,还是使用from_messages(),参数类型都是列表类型。列表中的元素可以是多种类型,前面我们主要测试了元组类型。
源码:
def __init__(self,
messages: Sequence[BaseMessagePromptTemplate | BaseMessage |
BaseChatPromptTemplate | tuple[str | type, str | list[dict] | list[object]] |
str | dict[str, Any]],
*,
template_format: Literal["f-string", "mustache", "jinja2"] = "fstring",
**kwargs: Any) -> None
@classmethod def from_messages(cls,
messages: Sequence[BaseMessagePromptTemplate | BaseMessage
| BaseChatPromptTemplate | tuple[str | type, str | list[dict] | list[object]]
| str | dict[str, Any]],
template_format: Literal["f-string", "mustache", "jinja2"]
= "f-string")
-> ChatPromptTemplate
结论:参数是列表类型,列表的元素可以是字符串、字典、字符串构成的元组、消息类型、提示词模板
类型、消息提示词模板类型等
类型1:str列表类型
列表参数格式是str类型(不推荐),因为默认角色都是human
#1.导入相关依赖
from langchain_core.prompts import ChatPromptTemplate
# 2.定义聊天提示词模版
chat_template = ChatPromptTemplate.from_messages(
[
"Hello, {name}!" # 等价于 ("human", "Hello, {name}!")
]
)
# 3. 使用invoke执行
messages = chat_template.invoke({"name":"小谷AI"})
# 4.打印格式化后的聊天提示词模版内容
print(messages)
messages=[HumanMessage(content=’Hello, 小谷AI!’, additional_kwargs={},response_metadata={})]
类型2:tuple列表类型
列表参数格式是元组类型
# 示例: 元组形式的消息
prompt = ChatPromptTemplate.from_messages([
("system", "你的名字是{role}."),
("human", "很高兴认识你"),
])
print(prompt.invoke({"role":"小智"}))
messages=[SystemMessage(content=’你的名字是小智.’, additional_kwargs={},response_metadata={}), HumanMessage(content=’很高兴认识你’,
additional_kwargs={}, response_metadata={})]
类型3:dict列表类型
列表参数格式是dict类型
# 示例: 字典形式的消息
prompt = ChatPromptTemplate.from_messages([
{"role": "system", "content": "你的名字是{role}."},
{"role": "human", "content":"很高兴认识你"},
])
print(prompt.invoke({"role":"小智"}))
messages=[SystemMessage(content=’你的名字是小智.’, additional_kwargs={},
response_metadata={}), HumanMessage(content=’很高兴认识你’,
additional_kwargs={}, response_metadata={})]
类型4:Message列表类型
from langchain_core.messages import SystemMessage,HumanMessage
chat_prompt_template = ChatPromptTemplate.from_messages([
SystemMessage(content="我是一个贴心的智能助手"),
HumanMessage(content="我的问题是:人工智能英文怎么说?")
])
messages = chat_prompt_template.invoke({})
print(messages)
print(type(messages))
messages=[SystemMessage(content=’我是一个贴心的智能助手’, additional_kwargs={},
response_metadata={}), HumanMessage(content=’我的问题是:人工智能英文怎么说?’,
additional_kwargs={}, response_metadata={})]
<class ‘langchain_core.prompt_values.ChatPromptValue’>
注意:在XxxMessage中不能有占位符。即:
from langchain_core.messages import SystemMessage,HumanMessage
chat_prompt_template = ChatPromptTemplate.from_messages([
SystemMessage(content="我是一个贴心的智能助手"),
HumanMessage(content="我的问题是:{word}英文怎么说?")
])
messages = chat_prompt_template.invoke({"word":"人工智能"})
print(messages)
print(type(messages))
messages=[SystemMessage(content=’我是一个贴心的智能助手’, additional_kwargs=
{}, response_metadata={}), HumanMessage(content=’我的问题是:{word}英文怎么说?’, additional_kwargs={}, response_metadata={})]
<class ‘langchain_core.prompt_values.ChatPromptValue’>
类型5:MessagePromptTemplate列表类型
LangChain提供不同类型的MessagePromptTemplate。最常用的是
SystemMessagePromptTemplate 、HumanMessagePromptTemplate 和
AIMessagePromptTemplate ,分别创建系统消息、人工消息和AI消息。
基本概念:
HumanMessagePromptTemplate,专用于生成用户消息(HumanMessage) 的模板类
- 模板化:支持使用变量占位符,可以在运行时填充具体值
- 格式化:能够将模板与输入变量结合生成最终的聊天消息
- 输出类型:生成 HumanMessage 对象( content + role=”human” )
- 设计目的 :简化用户输入消息的模板化构造,避免重复定义角色
SystemMessagePromptTemplate、AIMessagePromptTemplate:类似于上面,不再赘述
举例1:
# 导入聊天消息类模板
from langchain_core.prompts import ChatPromptTemplate,
HumanMessagePromptTemplate, SystemMessagePromptTemplate
# 创建消息模板
system_message_prompt = SystemMessagePromptTemplate.from_template("你是一个
{role}")
human_message_prompt = HumanMessagePromptTemplate.from_template("给我解释
{concept},用浅显易懂的语言")
# 组合成聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages([
system_message_prompt,
human_message_prompt
])
# 格式化提示
formatted_messages = chat_prompt.invoke({"role":"物理学家","concept":"相对
论"})
print(formatted_messages)
messages=[SystemMessage(content=’你是一个物理学家’, additional_kwargs={},
response_metadata={}), HumanMessage(content=’给我解释相对论,用浅显易懂的语
言’, additional_kwargs={}, response_metadata={})]
类型6:BaseChatPromptTemplate列表类型
使用 BaseChatPromptTemplate,可以理解为ChatPromptTemplate里嵌套了
ChatPromptTemplate。
举例1:带参数
from langchain_core.prompts import ChatPromptTemplate
# 使用 BaseChatPromptTemplate(嵌套的 ChatPromptTemplate)
nested_prompt_template1 = ChatPromptTemplate.from_messages([
("system", "我是一个人工智能助手,我的名字叫{name}")
])
nested_prompt_template2 = ChatPromptTemplate.from_messages([
("human", "很高兴认识你,我的问题是{question}")
])
prompt_template = ChatPromptTemplate.from_messages([
nested_prompt_template1,nested_prompt_template2
])
prompt_template.invoke({"name":"小智","question":"你为什么这么帅?"})
ChatPromptValue(messages=[SystemMessage(content=’我是一个人工智能助手,我的名
字叫小智’, additional_kwargs={}, response_metadata={}),
HumanMessage(content=’很高兴认识你,我的问题是你为什么这么帅?’,
additional_kwargs={}, response_metadata={})])
举例2:不带参数
from langchain_core.prompts import ChatPromptTemplate
# 使用 BaseChatPromptTemplate(嵌套的 ChatPromptTemplate)
nested_prompt_template1 = ChatPromptTemplate.from_messages([("system", "我是
一个人工智能助手")])
nested_prompt_template2 = ChatPromptTemplate.from_messages([("human", "很高兴
认识你")])
prompt_template = ChatPromptTemplate.from_messages([
nested_prompt_template1,nested_prompt_template2
])
prompt_template.invoke({})
ChatPromptValue(messages=[SystemMessage(content=’我是一个人工智能助手’,
additional_kwargs={}, response_metadata={}), HumanMessage(content=’很高兴
认识你’, additional_kwargs={}, response_metadata={})])
举例3:综合使用
from langchain_core.prompts import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain_core.messages import SystemMessage, HumanMessage
# 示例 1: 使用 BaseMessage(已实例化的消息)
system_msg = SystemMessage(content="你是一个AI工程师。")
human_msg = HumanMessage(content="你好!")
# 示例 2: 使用 BaseMessagePromptTemplate
system_prompt = SystemMessagePromptTemplate.from_template("你是一个{role}.")
human_prompt = HumanMessagePromptTemplate.from_template("{user_input}")
# 示例 3: 使用 BaseChatPromptTemplate(嵌套的 ChatPromptTemplate)
nested_prompt = ChatPromptTemplate.from_messages([("system", "嵌套提示词")])
prompt = ChatPromptTemplate.from_messages([
system_msg, # MessageLike (BaseMessage)
human_msg, # MessageLike (BaseMessage)
system_prompt, # MessageLike (BaseMessagePromptTemplate)
human_prompt, # MessageLike (BaseMessagePromptTemplate)
nested_prompt, # MessageLike (BaseChatPromptTemplate)
])
prompt.invoke({"role":"人工智能专家","user_input":"介绍一下大模型的应用场景"})
ChatPromptValue(messages=[SystemMessage(content=’你是一个AI工程师。’,
additional_kwargs={}, response_metadata={}), HumanMessage(content=’你
好!’, additional_kwargs={}, response_metadata={}),
SystemMessage(content=’你是一个人工智能专家.’, additional_kwargs={},
response_metadata={}), HumanMessage(content=’介绍一下大模型的应用场景’,
additional_kwargs={}, response_metadata={}), SystemMessage(content=’嵌套
提示词’, additional_kwargs={}, response_metadata={})])
















请登录后查看评论内容