乐学LangChain(3):多轮对话和批量对话
1 关于对话模型的Message
内置的消息类型:
- SystemMessage :设定AI行为规则或背景信息。比如设定AI的初始状态、行为模式或对话的总
- 体目标。比如“作为一个代码专家”,或者“返回json格式”。通常作为输入消息序列中的第一个 传递。
- HumanMessage :表示来自用户输入。比如“实现 一个快速排序方法”
- AIMessage :存储AI回复的内容。这可以是文本,也可以是调用工具的请求
- ChatMessage :可以自定义角色的通用消息类型
- FunctionMessage/ToolMessage :函数调用/工具消息,用于函数调用结果的消息类型
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
import dotenv
dotenv.load_dotenv()messages=[SystemMessage(content="你是一个专业的python代码编写助手"),HumanMessage(content="你是谁")
]
chat_model = ChatOpenAI(model="Qwen/Qwen3-14B")
response=chat_model.invoke(messages)
print(response.content)
2、批量调用
多个消息可以批量发送。
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage,AIMessage
import dotenv
dotenv.load_dotenv()messages1=[SystemMessage(content="你是一个专业的python代码编写助手"),HumanMessage(content="请用户实现一段冒泡算法"),
]messages2=[SystemMessage(content="你是一个专业的java代码编写助手"),HumanMessage(content="请用户实现一段冒泡算法"),
]messages3=[SystemMessage(content="你是一个专业的js代码编写助手"),HumanMessage(content="请用户实现一段冒泡算法"),
]messages_arr = [messages1, messages2, messages3]chat_model = ChatOpenAI(model="Qwen/Qwen3-14B")
response=chat_model.batch(messages_arr)
print(response)
3、异步调用
为了尽可能简化自定义链的创建,LangChain实现了一个"Runnable"协议。许多LangChain组件实现了 Runnable 协议,包括聊天模型、提示词模板、输出解析器、检索器、代理(智能体)等。
Runnable 定义的公共的调用方法如下:
- invoke : 处理单条输入,等待LLM完全推理完成后再返回调用结果
- stream : 流式响应,逐字输出LLM的响应结果
- batch : 处理批量输入
这些也有相应的异步方法,应该与 asyncio 的 await 语法一起使用以实现并发:
- astream : 异步流式响应
- ainvoke : 异步处理单条输入
- abatch : 异步处理批量输入
- astream_log : 异步流式返回中间步骤,以及最终响应
- astream_events : (测试版)异步流式返回链中发生的事件(在 langchain-core 0.1.14 中引入)