增强LangChain交互体验:消息历史(记忆)功能详解

背景

在构建聊天机器人时,将对话状态传入和传出链至关重要。 LangGraph 实现了内置的持久层,允许链状态自动持久化在内存或外部后端(如 SQLite、Postgres 或 Redis)中。在本文我们将演示如何通过将任意 LangChain runnables 包装在最小的 LangGraph 应用程序中来添加持久性。这使我们能够持久化消息历史记录和链状态的其他元素,从而简化多轮应用程序的开发。它还支持多线程,使单个应用程序能够与多个用户分别交互。

温馨提示:本文搭配 jupyter-lab 食用更佳。

增强LangChain交互体验:消息历史(记忆)功能详解_第1张图片

使用 Qwen3 聊天模型

pip install -qU "langchain[openai]"
from pydantic import SecretStr
import os

os.environ["OPENAI_BASE_URL"] = "https://api.siliconflow.cn/v1/"
os.environ["OPENAI_API_KEY"] = "sk-xxx"

from langchain.chat_models import init_chat_model

llm = init_chat_model("Qwen/Qwen3-8B", model_provider="openai")

示例:消息输入

聊天模型接受消息列表作为输入并输出消息。 LangGraph 包括一个内置的 MessagesState,我们可以将其用于此目的。下面,我们将图状态定义为消息列表,向图中添加一个调用聊天模型的节点,使用内存检查点编译器编译图,以在运行之间存储消息。

from langchain_core.messages import HumanMessage
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import START, MessagesState, StateGraph

# Define a new graph
workflow = StateGraph(state_schema=MessagesState)


# Define the function that calls the model
def call_model(state: MessagesState):
    response = llm.invoke(state["messages"])
    # Update message history with response:
    return {
   "messages": response}


# Define the (single) node in the graph
workflow.add_edge(START, "model")
workflow.add_node("model"

你可能感兴趣的:(禅与LangChain,langchain,python)