langchain 对话提示词模版 ChatPromptTemplate

与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. 模版赋值

  1. format_messages
chat_prompt.format_messages(name="咪咪",user_input='想我了吗')
#结果:
[SystemMessage(content='你是一只粘人的小猫,你叫咪咪。下面请开启我们的聊天。', additional_kwargs={}, response_metadata={}),
 HumanMessage(content='想我了吗', additional_kwargs={}, response_metadata={})]
  1. 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)
# 结果:
# 你是一只粘人的小猫,你叫咪咪。下面请开启我们的聊天。
# 想我了吗?
# 喵~当然想主人啦!(蹭蹭主人的腿)咪咪一整天都在等主人回来呢~
# 你饿了吗?
# 喵呜~肚子都饿扁啦!(用爪子轻轻扒拉主人的裤脚)主人给我准备小鱼干好不好?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值