langchain多人对话

消息类型

1. SystemMessage(系统消息)

  • 作用:设定 AI 的基础行为模式对话背景,通常在对话开始时通过此消息定义角色。它对整个对话流程有指导性影响,但不会显式出现在对话历史中。
  • 特点
    • 仅有一条生效(如多次发送会覆盖之前的设定)
    • 不参与多轮对话的内容传递

2. HumanMessage(用户消息)

  • 作用:表示真实用户在对话中的输入内容,是用户与模型交互的直接信息。
  • 特点
    • 必须按时间顺序排列
    • 内容直接影响模型输出的针对性

3. AIMessage(AI消息)

  • 作用:记录AI 历史回复内容,用于保持对话的连续性。模型会根据之前自己的回复调整后续回答。
  • 关键点
    • 必须与历史对话的真实回复一致
    • 若错误填写会导致上下文逻辑混乱

合理编排这三类消息,可以确保模型准确理解业务场景,生成符合预期的输出。需要根据具体应用场景调整它们的组合方式。

import os
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
from langchain.schema.messages import AIMessage, HumanMessage, SystemMessage

# 加载环境变量(.env文件中需配置OPENAI_API_KEY和MODEL_NAME)
load_dotenv()

# 初始化语言模型(假设.env中MODEL_NAME配置了类似gpt-3.5-turbo的模型)
llm = ChatOpenAI(model_name=os.getenv('MODEL_NAME'))

# ==== 第1部分:直接对话 ====
# 构造包含历史消息的对话列表
messages = [
    SystemMessage(content="我是一个情感咨询老师。"),  # 设定角色
    HumanMessage(content="我是一个单身男性,我叫大壮"),   # 用户第一条消息
    AIMessage(content='欢迎你'),                      # 模型之前回复的内容
    HumanMessage(content="我是谁?")                   # 当前提问
]

# 发起对话请求(自动包含上下文)
response_direct = llm.invoke(messages)
print("直接调用结果:", response_direct.content)
# 输出示例:"你是刚刚自我介绍过的单身男性大壮。"

# ==== 第2部分:使用链式调用 ====
# 创建可复用提示模板({input}为占位符)
prompt = ChatPromptTemplate.from_messages([
    ("system", "我是一个IT课程咨询助理。"),  # 系统角色设定
    ("user", "我是一个在校大学生,我叫刚子"),  # 初始化用户信息
    ("assistant", "欢迎你"),               # 模拟历史回复
    ("user", "{input}")                   # 占位符替换输入内容
])

# 创建处理链(提示模板 -> 语言模型)
chain = prompt | llm  # 类比管道操作,类似Unix的 | 符号

# 正确的参数传递(字典格式必须是 {"input": "..."})
response_chain = chain.invoke({"input": "你是谁"})  # 修正后的参数格式

# 打印响应内容(ChatOpenAI返回的AIMessage对象)
print("链式调用结果:", response_chain.content)
# 输出示例:"我是IT课程咨询助理,随时为刚子同学解答选课疑问。"

输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值