当前位置: 首页
AI教程
天学会AI应用开发(十七)LangGraph实现会话记忆功能

天学会AI应用开发(十七)LangGraph实现会话记忆功能

时间:2026-07-26
转载

LangGraph是LangChain推荐的会话记忆架构,支持长短期双记忆与原生持久化。通过InMemorySaver实现短期记忆,利用SummarizationMiddleware压缩历史记录以节省令牌消耗。该架构特别适合生产环境中的复杂智能体场景,能高效管理对话上下文并确保持久化不丢失。

在上一篇文章中,我们借助 langchain_community 实现了基础的对话记忆功能,但该方法仅适用于早期链式架构的临时补丁,对于简单的线性对话尚可应对,一旦遇到复杂场景便显得力不从心。目前,LangChain 官方推荐使用 LangGraph 来高效管理会话记忆。LangGraph 是一种从底层统一管理全流程状态的架构,支持长短双记忆模式,原生持久化,并且能够轻松适配复杂 Agent,堪称生产环境的首选方案。接下来,我们将深入探讨 LangGraph 在会话记忆方面的基本用法与实战技巧。

15天学会AI应用开发(十七)使用LangGraph实现会话记忆功能

一、使用LangGraph的环境准备

在命令行窗口中输入以下命令,即可一次性安装 LangChain、Ollama 插件以及 LangGraph 所需的核心依赖:

pip install langchain langchain-core langchain-ollama langgraph

请确保本地已通过 Ollama 完成了离线大模型的下载。例如,执行以下命令即可拉取 qwen2:1.5b 模型:

ollama pull qwen2:1.5b

等待模型下载完成后,再运行以下命令启动 Ollama 并加载模型:

ollama serve

二、使用LangGraph记住历史会话

在 Python 代码的开头,首先引入关键组件:LangChain 的智能体创建工具 create_agent、大模型工具 ChatOllama,以及 LangGraph 的内存保存器 InMemorySa ver:

from langchain.agents import create_agent
from langchain_ollama import ChatOllama
from langgraph.checkpoint.memory import InMemorySa ver  # 内存存储

在 ChatOllama 的构造方法中,指定要使用的离线大模型名称:

llm = ChatOllama(model="qwen2:1.5b")  # 改成你本地的模型

接下来,编写调用代码。首先调用 create_agent 创建启用短期记忆的智能体,然后通过其 invoke 方法与大模型进行交互:

agent = create_agent(
    model=llm,
    checkpointer=InMemorySa ver(),  # 启用短期记忆
)

# 测试对话
print("=== 内存中的临时记忆 ===")
while True:
    user_input = input("用户:")
    if user_input in ["退出", "exit", "quit"]:
        print("对话结束")
        break
    # 调用离线大模型
    result = agent.invoke(
        {"messages": [{"role": "user", "content": user_input}]},
        {"configurable": {"thread_id": "session_001"}}
    )
    print(f"AI:{result['messages'][-1].content}\n")

运行此段代码,依次输入“我叫张三”和“我叫什么?”,输出结果如下:

=== 内存中的临时记忆 ===
你:我叫张三
AI:你好,张三。有什么问题或需要帮助的吗?
你:我叫什么?
AI:你的名字是“张三”。

从日志中可以清晰看到,AI 在第一次对话中成功记住了用户名为“张三”,第二次提问时依然能够准确回答。这说明通过 LangGraph 的 InMemorySa ver,我们已经初步实现了简单的对话记忆功能。

三、使用SummarizationMiddleware压缩历史记忆

虽然上述方法实现了记忆,但随着问答轮次不断增加,需要记忆的历史会话内容也会越来越长。为了节省 Token 消耗,我们必须对历史记录进行精简,只保留最近最关键的会话信息。LangGraph 提供了摘要中间件 SummarizationMiddleware,能够在历史会话超出限制时自动触发压缩。下面来看具体实现方法。

首先,在代码开头引入 SummarizationMiddleware:

from langchain.agents.middleware import SummarizationMiddleware

再声明一个新的大模型实例,专门用于压缩历史会话:

llm_summary = ChatOllama(model="qwen2:0.5b")  # 改成你本地的模型

创建智能体时,增加 middleware 参数,并配置摘要中间件所需的摘要模型、Token 限制、保留消息数量等:

agent = create_agent(
    model=llm,
    checkpointer=InMemorySa ver(),  # 启用短期记忆
    # 压缩历史记忆并移除早期记忆
    middleware=[
        SummarizationMiddleware(
            model=llm_summary,
            trigger=("tokens", 100),  # 超过100个token时触发
            keep=("messages", 3),    # 保留最近3条消息
        )
    ]
)

重新运行代码,依次输入“我叫张三”、“我叫什么?”、“长江有多长?”、“黄河有多长?”、“珠江有多长?”、“黑龙江有多长?”、“我叫什么?”,输出结果如下:

=== 内存中的临时记忆 ===
你:我叫张三
AI:你好,张先生。有什么我可以帮助你的吗?
你:我叫什么?
AI:你好,张先生。你叫张三。
你:长江有多长?
AI:长江是中国最长的河流,全长约6300公里。
你:黄河有多长?
AI:黄河是中国第二长的河流,全长约5464公里。
你:珠江有多长?
AI:珠江是长江流域的一条重要河流,全长约2794公里。
你:黑龙江有多长?
AI:黑龙江是亚洲最长的河流之一,全长约1800公里。
你:我叫什么?
AI:根据您的描述,您似乎没有提供自己的名字。如果您有其他姓名,请告知我以便我能为您提供更准确的回答。

从日志中可以观察到,第一次询问“我叫什么?”时,AI 还能正确回答;但经过多轮对话后再次提问,AI 已经忘记了用户的名字。这说明 SummarizationMiddleware 确实发挥了作用——会话记录超出限制后,只保留了最近几条消息,早期的记忆被自动压缩掉了。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
CAD零基础入门教程:坐标输入、图层管理与基础绘图命令

CAD零基础入门教程:坐标输入、图层管理与基础绘图命令

本文面向CAD零基础学习者,系统讲解坐标输入、图层管理与基础绘图命令的核心用法。通过分步实操与常见问题排查,帮助新手建立精确绘图习惯,掌握规范出图的基础能力。

时间:2026-09-01 16:53
CAD从入门到项目交付:绘图、标注、图块与实战工作流

CAD从入门到项目交付:绘图、标注、图块与实战工作流

掌握CAD的核心在于建立“画得准、标得清、复用快、交付稳”的工作流。本文提供从环境设置、高频命令组合、标注规范、图块标准化到项目分阶段交付的完整路径,帮助初学者避免常见返工陷阱,独立完成可检查、可复用、可打印的工程图纸。

时间:2026-09-01 16:52
Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤

本文详细解析 Claude Code 登录前的账号类型区分方法,涵盖个人订阅、Teams 席位与企业 Enterprise 席位的授权路径差异。提供终端登录命令、环境变量排查及常见异常处理步骤,帮助用户快速完成正确授权并避免登录路径混淆。

时间:2026-09-01 14:27
Claude Code 文件修改前的权限模式配置与命令审批指南

Claude Code 文件修改前的权限模式配置与命令审批指南

本文详细介绍Claude Code在修改文件前的权限模式配置方法,包括defaultMode可选值、permissions allow与deny规则设置、多层级配置文件管理以及 status验证技巧,帮助开发者安全高效地使用AI编程助手。

时间:2026-09-01 14:12
Claude Code接入VS Code后先测扩展和终端命令

Claude Code接入VS Code后先测扩展和终端命令

在VS Code中接入Claude Code后,建议优先验证扩展面板与集成终端两条入口。本文提供标准检查顺序、关键命令与常见故障排查路径,帮助你快速确认环境就绪,避免后续开发受阻。

时间:2026-09-01 14:10
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全