下篇:LangChain Agent 智能体从入门到实战(二)—— 记忆管理、中间件与最佳实践
让 Agent 记住对话、压缩历史、接受人工审核最终成为可靠的智能助手。上篇我们学会了 Agent 的概念、工具定义和 MCP 协议接入。但目前的 Agent 每次调用都是独立的——它不记得上一轮对话说了什么。同时长对话会导致消息列表无限膨胀Token 消耗剧增。本篇将解决这些问题通过Checkpointer实现记忆通过中间件实现历史压缩和人工审核并总结最佳实践与常见问题。四、记忆管理让 Agent 记住过去4.1 失忆问题默认情况下Agent 每次invoke都是一次独立的“感知→推理→行动”过程上一次的对话内容不会自动带入下一次。python# 第1次调用 agent.invoke({messages: [{role: user, content: 我叫张三}]}) # Agent: 你好张三 # 第2次调用默认无记忆 agent.invoke({messages: [{role: user, content: 我叫什么名字}]}) # Agent: 抱歉我不知道你叫什么名字。 ← 失忆了4.2 Checkpointer 机制LangChain 通过Checkpointer实现记忆。每次调用结束后自动保存本次对话的所有消息下次调用时自动加载历史消息拼接到新输入前面。使用方式只需两步pythonfrom langgraph.checkpoint.memory import InMemorySaver # 1. 创建 checkpointer checkpointer InMemorySaver() # 2. 创建 Agent 时传入 agent create_agent( modelllm, toolstools, checkpointercheckpointer, # ← 就这一行 )4.3 Thread ID多会话隔离一个 Agent 通常服务多个用户需要为每个用户维护独立的会话历史。通过thread_id区分python# 张三的对话thread_id user_zhangsan agent.invoke( {messages: [{role: user, content: 我叫张三}]}, config{configurable: {thread_id: user_zhangsan}} ) # 李四的对话thread_id user_lisi完全独立 agent.invoke( {messages: [{role: user, content: 我叫李四}]}, config{configurable: {thread_id: user_lisi}} )相同thread_id的调用共享历史不同thread_id互不干扰。4.4 完整示例pythonimport datetime from langchain.agents import create_agent from langchain.chat_models import init_chat_model from langgraph.checkpoint.memory import InMemorySaver llm init_chat_model(modelgpt-4o-mini, model_provideropenai) checkpointer InMemorySaver() agent create_agent(modelllm, tools[], checkpointercheckpointer) # 第1次调用 for chunk in agent.stream( {messages: [{role: user, content: 今天北京天气怎么样}]}, config{configurable: {thread_id: abc123}} ): print(chunk, end\n\n) # 第2次调用相同 thread_id → 有记忆 for chunk in agent.stream( {messages: [{role: user, content: 我刚才问你什么了}]}, config{configurable: {thread_id: abc123}} ): print(chunk, end\n\n) # Agent 会回答你刚才问了北京今天的天气 # 第3次调用不同 thread_id → 无记忆 for chunk in agent.stream( {messages: [{role: user, content: 我刚才问你什么了}]}, config{configurable: {thread_id: xyz789}} ): print(chunk, end\n\n) # Agent 会回答这是我们第一次对话你还没有问过任何问题4.5 记忆的代价随着对话轮次增加保存的消息列表越来越长第 1 轮2 条消息第 10 轮20 条消息第 100 轮200 条消息每次调用都要把所有历史消息发给 LLM导致Token 消耗剧增甚至可能超出上下文窗口限制。解决方案就是下一节的中间件。五、中间件在关键节点“拦截”处理5.1 中间件概念中间件是一种插入 Agent 执行流程中的“拦截器”可以在以下位置介入介入位置时机典型用途before_model消息发给 LLM 之前压缩历史、注入额外上下文after_modelLLM 返回结果之后记录日志、过滤敏感内容wrap_tool工具执行前后人工审核、权限控制使用方式创建中间件实例通过middleware参数传入create_agent。pythonagent create_agent( modelllm, toolstools, middleware[middleware_a, middleware_b], # 列表按顺序执行 )5.2 消息压缩中间件SummarizationMiddleware解决长对话中消息无限增长的问题。当消息量超过阈值时自动用 LLM 将旧消息压缩成一段摘要。pythonfrom langchain.agents.middleware import SummarizationMiddleware from langchain_openai import ChatOpenAI summary_middleware SummarizationMiddleware( modelChatOpenAI(modelgpt-4o-mini), trigger(messages, 100), # 消息数量达到100条时触发压缩 )压缩效果示意压缩前100 条消息[用户你好AI你好用户天气AI晴天...用户最新问题]压缩后2 条消息[系统以下是摘要用户询问了天气、订单状态...用户最新问题]trigger支持三种策略触发策略写法含义按消息数量(messages, 100)消息数达 100 条时压缩按 Token 比例(fraction, 0.5)Token 数达上下文窗口 50% 时压缩按 Token 绝对值(tokens, 3000)Token 数达 3000 时压缩5.3 人工审核中间件HumanInTheLoopMiddleware某些高风险操作转账、删除数据、发送邮件即使 LLM 决定执行也需人工确认后再真正执行。pythonfrom langchain.agents.middleware import HumanInTheLoopMiddleware hitl_middleware HumanInTheLoopMiddleware( interrupt_on{ transfer_money: True, # 转账 → 需要审核 delete_record: True, # 删除 → 需要审核 get_weather: False, # 查天气 → 不需要审核 } )执行流程Agent 决定调用transfer_money中间件拦截暂停执行返回“等待审核”状态人工通过界面查看并做出“批准”或“拒绝”决定将决定作为Command(resume...)传回Agent 继续执行或放弃。完整示例代码见文档 5.3 节实际开发中需结合前端交互来实现审核界面。5.4 中间件叠加使用多个中间件可以同时使用按列表顺序依次执行。例如pythonagent create_agent( modelllm, toolstools, middleware[summary_middleware, hitl_middleware], )六、Agent 最佳实践6.1 工具设计五原则原则为什么重要正面示例反面示例单一职责LLM 更容易理解功能明确的工具get_weather、get_forecast各做一件事handle_all一个工具做太多事描述清晰LLM 完全依赖描述决定何时用、怎么用“获取指定城市今天的实时天气”“查天气”参数具体减少 LLM 猜测参数格式的可能date: str Field(description格式YYYY-MM-DD)date: str无格式说明错误友好LLM 可根据错误信息调整策略返回“城市‘北精’无法识别是否指‘北京’”抛出KeyError: 北精幂等安全避免重试时产生副作用get_user(id123)多次调用结果相同create_order()多次调用会创建多个订单经验法则如果一个工具的 docstring 超过 3 句话才能说清功能说明它承担了太多职责应该拆分。6.2 系统提示词优化好的系统提示词应包含角色定位、工作流程、约束条件、输出格式。好示例text你是一个专业的数据分析助手。 工作流程 1. 理解用户分析需求 2. 使用 search 工具获取数据 3. 使用 calculate 工具进行计算 4. 用简洁语言呈现结果 注意事项 - 计算结果保留2位小数 - 如果数据不足主动告知用户 - 不要编造数据差示例“你是一个AI助手帮助用户解决问题。”太模糊6.3 调试三层次层次方法适用场景第一层开启日志logging.basicConfig(levellogging.DEBUG)快速定位调用参数第二层LangSmith设置环境变量启用追踪可视化完整执行轨迹第三层流式输出用stream替代invoke观察每一步中间过程经验大多数 Agent 问题根源可归为三类工具描述不够清晰 → LLM 选错工具系统提示词引导不足 → 执行顺序混乱工具返回值格式不规范 → LLM 无法解读结果6.4 性能优化问题优化方法效果响应慢只加载当前任务必需的工具减少 LLM 决策时间Token 消耗高使用SummarizationMiddleware压缩历史消息工具调用次数多优化工具返回值一次返回完整信息减少循环轮次吞吐量不足使用ainvoke异步调用支持并发处理七、课程总结与常见问题7.1 知识回顾章节核心问题学到了什么Agent 介绍Agent 是什么和 Chain 的区别Agent LLM 自主决策 工具调用工具定义怎么让 Agent“做事”tool定义create_agent组装MCP 接入怎么接入外部工具MCP 协议统一接入对 LLM 透明记忆管理怎么让 Agent 记住对话Checkpointer thread_id 实现多会话记忆中间件怎么压缩历史、人工审核SummarizationMiddleware、HumanInTheLoopMiddleware7.2 常见问题 QAQ1Chain 和 Agent 如何选择任务流程确定时用 Chain简单可靠任务需要动态判断时用 Agent灵活但复杂。两者可以结合——Agent 内部的某些子任务可以用 Chain 实现。Q2RAG 和 Agent 可以结合吗可以而且非常常见。典型做法是把 RAG 检索封装成一个工具Agent 在需要时自主调用它。例如将向量数据库检索包装为query_knowledge_base工具Agent 就可以在回答专业问题时自动检索相关知识。Q3如何优化 Agent 的响应速度四个方向只加载必需的工具减少 LLM 决策开销用SummarizationMiddleware压缩长对话减少 Token使用异步调用ainvoke支持并发优化工具返回值格式减少循环轮次Q4什么时候需要 LangGraph当你需要多个 Agent 协作、复杂的条件分支和循环逻辑或比create_agent更精细的流程控制时就需要 LangGraph。它是 Agent 的进阶编排工具。7.3 下一步建议动手实践选择一个实际场景如个人知识库问答、自动化数据分析用本课知识构建一个 Agent。深入 LangGraph学习状态图、条件边、多 Agent 协作构建更复杂的工作流。关注 AI 生态MCP 社区正在快速发展关注社区动态可以快速扩展 Agent 的能力。

相关新闻

手动改能降低AI率吗?我踩3天坑攒的实测结论

手动改能降低AI率吗?我踩3天坑攒的实测结论

上周帮运营组改他们用大模型生成的618活动复盘稿,熬了俩小时改完提交公司合规系统,直接被打回。 当时我第一反应就是:手动改能降低AI率吗?之前网上搜的野路子怎么一个都没用?一开始我用的是网上流传最广的操作&#xf…

2026/7/18 16:41:45阅读更多 →
Gerrit 批量评审与合入依赖链的全自动实践

Gerrit 批量评审与合入依赖链的全自动实践

在日常基于 Gerrit 的代码协作中,经常会遇到**一系列存在父子依赖关系的提交(Patch Set)**需要依次评审与合入。例如:基于同一个功能分支,本地拆分成多个逻辑独立的 commit 依次 push 到 Gerrit,这些 Chang…

2026/7/18 16:41:45阅读更多 →
欧盟要求谷歌开放安卓,谷歌与苹果应对 DMA 规则差异明显

欧盟要求谷歌开放安卓,谷歌与苹果应对 DMA 规则差异明显

欧盟要求谷歌开放安卓系统今日,欧盟要求谷歌让其人工智能竞争对手更便捷地接入安卓(Android)系统。安卓作为一款开源操作系统,驱动着全球数十亿台设备的运行。这一要求虽看似让谷歌吃了败仗,毕竟多年来谷歌一直在抵制此…

2026/7/18 16:41:45阅读更多 →
【AI Agent灰度发布实战指南】:20年SRE亲授5大避坑法则,90%团队踩过的3个致命陷阱

【AI Agent灰度发布实战指南】:20年SRE亲授5大避坑法则,90%团队踩过的3个致命陷阱

更多请点击: https://intelliparadigm.com 第一章:AI Agent灰度发布的本质与SRE视角下的演进逻辑 AI Agent灰度发布并非简单的流量切分,而是面向不确定性决策系统的可控实验范式。其本质是将Agent的推理链、工具调用策略、记忆机制与外部API…

2026/7/18 17:35:49阅读更多 →
Mistral + Ollama + LangChain极速搭建私有知识库(附可运行Docker Compose模板)

Mistral + Ollama + LangChain极速搭建私有知识库(附可运行Docker Compose模板)

更多请点击: https://kaifayun.com 第一章:Mistral模型的核心架构与技术特性 Mistral系列模型(如Mistral-7B、Mistral-Nemo)由Mistral AI团队研发,是基于Transformer架构的开源大语言模型,以高效推理、强上…

2026/7/18 17:35:49阅读更多 →
OpenStrike发布:在2004年PSP上稳定60 FPS运行类《反恐精英》游戏!

OpenStrike发布:在2004年PSP上稳定60 FPS运行类《反恐精英》游戏!

1. OpenStrike正式发布OpenStrike正式发布,它拥有经典的BSP地图、机器人、弹道特效,以及基于Solid JSX的HUD界面,能在配置为333 MHz处理器、32 MB内存且不支持着色器的索尼PSP上稳定保持60 FPS。本文将为JavaScript开发者提供详细技术指南&am…

2026/7/18 17:35:49阅读更多 →
讲问题,找方向,定计划——一个程序员面对AI时代的务实思考

讲问题,找方向,定计划——一个程序员面对AI时代的务实思考

这篇文章不讲焦虑,也不打鸡血。只分享我过去两年观察到的真实变化和思考,希望能给你一些实在的参考。 一、先看清问题:旧地图上找不到新大陆 先说一个我自己的观察。2024年我身边大多数程序员对AI的态度是"试试看"。2025年变成了&…

2026/7/18 17:35:49阅读更多 →
暑期美陈如何兼顾流量与质感?重庆时代广场「COOL PINGU 企遇酷玩山城」主题快闪活动给出了标准范本 -肆墨设计

暑期美陈如何兼顾流量与质感?重庆时代广场「COOL PINGU 企遇酷玩山城」主题快闪活动给出了标准范本 -肆墨设计

暑期档是商业美陈的核心流量赛道,在消费需求向情绪价值、场景体验倾斜的行业趋势下,经典 IP 快闪已成为高端商场激活客流、强化年轻态品牌认知的核心手段。重庆时代广场推出的「COOL PINGU 企遇酷玩山城」PINGU 企鹅家族主题快闪,以经典治愈系…

2026/7/18 17:35:49阅读更多 →
依托AI智能体技术,实现发票识别查验、报销一站式自动办理

依托AI智能体技术,实现发票识别查验、报销一站式自动办理

在发票报销场景中,AI 最容易展示的能力是 OCR:上传一张发票图片,几秒钟后识别出发票号码、开票日期和金额。但对企业来说,识别只是材料进入系统的第一步。发票是否真实、是否已经报销过、抬头是否符合要求、当前人员能否报销这类费…

2026/7/18 17:33:49阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →