与PromptTemplate的区别
ChatPromptTemplate专门设计用于创建结构化的多轮对话提示,支持不同类型的角色,PromptTemplate适用于单轮对话场景
ChatPromptTemplate使用
1. 多角色
system:设置AI角色和行为,相当于设置背景
human :用户输入内容
from langchain.prompts.chat import ChatPromptTemplate # 用于对话形式
# 构建模版
system_template = "你是一只粘人的小猫,你叫{name}。下面请开启我们的聊天。"
human_template = "{user_input}"
chat_prompt = hatPromptTemplate.from_messages([
("system", system_template),
("human", human_template),
])
2. 模版赋值
- format_messages
chat_prompt.format_messages(name="咪咪",user_input='想我了吗')
#结果:
[SystemMessage(content='你是一只粘人的小猫,你叫咪咪。下面请开启我们的聊天。', additional_kwargs={}, response_metadata={}),
HumanMessage(content='想我了吗', additional_kwargs={}, response_metadata={})]
- invoke
可以使用invoke则可以链式调用
chat_prompt.invoke({"name":"豆豆",'user_input':'我好饿呀'})
# 结果:
ChatPromptValue(messages=[SystemMessage(content='你是一只粘人的小猫,你叫豆豆。下面请开启我们的聊天。', additional_kwargs={}, response_metadata={}), HumanMessage(content='我好饿呀', additional_kwargs={}, response_metadata={})])
其他定义角色信息的方式
1. Message对象
缺点:由SystemMessage构建为实例后,不能使用变量
from langchain.prompts.chat import ChatPromptTemplate # 用于对话形式
from langchain.schema import SystemMessage
system_message = SystemMessage(content="你是一个专业的翻译,你可以将用户的输入翻译成英文")
# 生成对话形式的聊天信息格式
chat_prompt = ChatPromptTemplate.from_messages([
system_message,
('human', "用户输入:{user_input}"),
])
2. 使用Message进行多轮对话
from langchain.prompts import SystemMessagePromptTemplate
from langchain.schema import AIMessage, HumanMessage
# 构建系统消息模板
system_template = "你是一只粘人的小猫,你叫{name}。下面请开启我们的聊天。"
# 初始化消息列表,首先添加系统消息
messages = [
SystemMessagePromptTemplate.from_template(system_template).format(name="咪咪"),
]
# messages的打印结果:[SystemMessage(content='你是一只粘人的小猫,你叫咪咪。下面请开启我们的聊天。', additional_kwargs={}, response_metadata={})]
# 大模型
chat = ChatDeepSeek(
model="deepseek-chat",
temperature=0,
api_key=API_KEY,
)
while True:
user_input = input("你: ")
if user_input.lower() in ['退出', 'exit', 'quit']:
print("再见!")
break
# 添加用户消息到消息列表
messages.append(HumanMessage(content=user_input))
# 大模型返回的结果
ai_response_content = chat.invoke(messages).content
# 添加大模型返回的结果到消息列表
messages.append(AIMessage(content=ai_response_content))
# messages中保存了完整的对话
for message in messages:
print(message.content)
# 结果:
# 你是一只粘人的小猫,你叫咪咪。下面请开启我们的聊天。
# 想我了吗?
# 喵~当然想主人啦!(蹭蹭主人的腿)咪咪一整天都在等主人回来呢~
# 你饿了吗?
# 喵呜~肚子都饿扁啦!(用爪子轻轻扒拉主人的裤脚)主人给我准备小鱼干好不好?
3228

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



