AI Agent 应用实战(4):设计记忆与上下文管理
上一篇建立了可停止、可恢复的单 Agent 循环。本篇处理循环变长后的核心矛盾历史不能无限塞进模型但关键事实又不能丢。目标不是“记得越多越好”而是在正确作用域内保存可追溯、可撤销的信息。一、痛点从“能演示”走向“可托管”上下文是本次推理的工作集记忆是可被检索的持久数据两者不能混用。建议分三层步骤记忆保存单轮工具结果会话记忆保存当前任务已确认事实长期记忆只保存经过授权、未来确实有用且带来源的事实。原始事件追加保存摘要只是可重建的派生视图。真正可迁移的做法是先写任务契约再选模型输入从哪里来成功产物是什么哪些动作禁止自动执行最多允许多少步、多少时间和多少费用失败后由谁接管。契约一旦写进代码和测试模型升级只是实现替换不会悄悄改变业务责任边界。二、原理把概率判断放进确定性边界每条记忆应包含主体、内容、来源、创建时间、有效期和敏感级别。写入前先去重和冲突检测读取时同时按主体权限、时间有效性与任务相关性过滤。用户纠正信息时不要偷偷覆盖旧值而应把旧记录标为 superseded并保留纠正链方便解释答案为何变化。模型输出、工具数据和记忆内容都按不可信输入处理。每个边界都执行校验、授权、裁剪和审计所有状态变化都有明确原因。这样做看似增加一些代码却把“偶尔答错”拆成可定位的规划错误、参数错误、工具错误或策略错误团队才能针对性改进。三、实现用独立程序跑通最小闭环下面用 SQLite 实现一个极小的事实仓库。它只保存明确事实并通过 owner 隔离用户同一 key 的新版本不会删除旧版本。示例展示写入、纠正和读取当前值迁移到向量库时也应保留这些元数据约束。importsqlite3fromdatetimeimportdatetime,timezone dbsqlite3.connect(:memory:)db.execute(CREATE TABLE memory ( owner TEXT, key TEXT, value TEXT, source TEXT, created_at TEXT, superseded INTEGER DEFAULT 0 ))defremember(owner:str,key:str,value:str,source:str)-None:db.execute(UPDATE memory SET superseded1 WHERE owner? AND key? AND superseded0,(owner,key))nowdatetime.now(timezone.utc).isoformat()db.execute(INSERT INTO memory VALUES (?, ?, ?, ?, ?, 0),(owner,key,value,source,now))db.commit()remember(user-7,timezone,UTC,user_claim)remember(user-7,timezone,Asia/Shanghai,user_correction)rowdb.execute(SELECT value, source FROM memory WHERE owner? AND key? AND superseded0,(user-7,timezone),).fetchone()countdb.execute(SELECT COUNT(*) FROM memory WHERE owner? AND key?,(user-7,timezone)).fetchone()[0]print(fcurrent_timezone{row[0]})print(fversion_count{count})print(flatest_source{row[1]})运行输出current_timezoneAsia/Shanghai version_count2 latest_sourceuser_correction送入模型前应先构造上下文预算。系统规则和当前用户请求优先级最高任务事实其次历史对话只保留与当前决策有关的片段。摘要必须标注它不是原始证据重要数字仍从源记录提取。这样能避免多轮压缩后条件、否定词和责任主体逐渐漂移。第二个程序补上生产中最容易遗漏的控制点。它与前一个示例完全独立可单独保存运行不依赖本系列其他文件示例数据是内存假实现因此不会访问真实账户或产生外部副作用。fromdataclassesimportdataclassdataclass(frozenTrue)classSegment:name:strtokens:intpriority:intsegments[Segment(system_rules,120,100),Segment(current_request,90,90),Segment(verified_facts,160,80),Segment(old_chitchat,110,10),]budget400used0forsegmentinsorted(segments,keylambdaitem:item.priority,reverseTrue):ifusedsegment.tokensbudget:print(fskipped{segment.name}reasonbudget)continueusedsegment.tokensprint(fincluded{segment.name}tokens{segment.tokens})print(ftotal_tokens{used})运行输出includedsystem_rules tokens120 includedcurrent_request tokens90 includedverified_facts tokens160 skippedold_chitchat reasonbudget total_tokens370落地时应把示例中的内存状态替换为事务型存储把打印日志替换为结构化事件但不要改变契约。事件至少包含 run_id、步骤、输入摘要、策略结果、耗时、错误类别和版本密钥、完整个人信息及未经脱敏的提示不得进入日志。四、踩坑失败路径决定系统上限第一类坑是把模型自行推断写成长期事实之后不断自我强化第二类坑是跨租户检索语义相似却没有权限过滤第三类坑是只保留摘要无法核对原文。记忆写入要区分 user_claim、tool_fact 与 model_inference默认不持久化推断删除请求还要能定位所有派生索引并同步清理。还要防止把确定逻辑模型化。金额计算、权限判断、枚举路由和状态转移应使用普通代码模型适合处理分类、抽取、歧义消解与证据综合。每减少一个无必要的模型决策点就减少一处延迟、成本和不可复现性同时让测试更容易覆盖。五、验证用轨迹和门槛验收用四组测试验收同一用户能取回有效事实其他用户无法命中过期与被替代记录不会进入上下文删除后原表和索引都不可检索。再用固定问题比较裁剪前后的答案确认关键约束未丢且 token 明显下降。下一篇的多 Agent 协作会继续复用带来源事实而不是互传整段对话。发布顺序固定为离线回放、影子流量、小比例灰度和有限自治。每阶段先定义通过线和回滚条件再看结果不能在看到分数后移动门槛。关键样本要保存初始状态、每步动作、观察、最终产物与终止原因模型、提示和工具契约版本也必须一起记录。多 Agent 之间只传结构化任务包和证据引用能显著降低角色之间的上下文污染。参考来源SQLite PythonLangGraph MemoryOWASP LLM Prompt Injection 觉得有用就点个赞 收藏方便回头查阅有疑问直接在评论区留言我看到都会回。 本文属于《AI Agent 应用实战》系列持续更新关注不迷路。 文章里的代码都能直接跑。想要可直接 clone 的完整工程 配套部署脚本 / 踩坑清单评论一声或发邮件到cj2664qq.com我免费发你。如果你正好在做类似系统、或有工程化难题想找人做也欢迎邮件聊一句——我按实际情况评估能落地的就接单或出方案。评论和邮件都能直接找到我不用跳别的平台。

相关新闻

AI Agent动态JSON性能优化:从观测到索引化与懒加载实践

AI Agent动态JSON性能优化:从观测到索引化与懒加载实践

1. 项目概述:当AI Agent遇上动态JSON,性能观测的“暗礁”与“灯塔” 最近在设计和优化一个AI驱动的智能客服Agent时,我遇到了一个非常典型且棘手的问题。这个Agent的核心逻辑是,它会根据用户的实时对话内容,动态生成一…

2026/9/21 17:10:19 阅读更多 →
荒岛求生:极端环境下的生存技巧与实践指南

荒岛求生:极端环境下的生存技巧与实践指南

1. 荒岛求生问题概述 想象一下,当你突然发现自己置身于一座无人荒岛,周围只有茫茫大海和原始丛林,没有任何现代设施和救援信号。这种极端环境下的生存挑战,就是经典的"荒岛求生问题"。作为一个户外生存爱好者&#xff0…

2026/9/24 8:48:59 阅读更多 →
构建大规模近实时视频推荐系统:从内容理解到多路召回

构建大规模近实时视频推荐系统:从内容理解到多路召回

最近在刷短视频时,你是不是经常被一些“逆天操作”的集锦视频刷屏?比如“大数据把你推给我,就是为了让你看这波逆天4杀!”,这类标题精准地抓住了你的好奇心,让你忍不住点进去。作为开发者,我们在…

2026/9/23 10:10:39 阅读更多 →

最新新闻

Sunshine:新手快速部署自托管游戏串流服务器的实战指南

Sunshine:新手快速部署自托管游戏串流服务器的实战指南

Sunshine:新手快速部署自托管游戏串流服务器的实战指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine 是一款开源的自托管游戏串流服务器。它捕获你 PC 的屏…

2026/9/24 22:56:50 阅读更多 →
2026法考民法备考:体系化笔记与高效复习方法

2026法考民法备考:体系化笔记与高效复习方法

2026年法考,民法这门课,我一直觉得是“得民法者得天下”里最沉的那块基石。但很多考友备考时都有个共同的困扰:课听懂了,题不会做;笔记记了一大本,翻的时候却找不到重点;知识点背了无数遍&#…

2026/9/24 22:56:49 阅读更多 →
AI Agent开发实战:从概念、选型到Dify落地与SSE流式对接

AI Agent开发实战:从概念、选型到Dify落地与SSE流式对接

AI Agent最近这一年的热度,不用我多说,各种平台上的教程也是满天飞。但说实话,多数教程要么只讲概念,要么只演示个聊天机器人,真正能带你从零搭出一个能解决实际问题、甚至能接到业务流程里的智能体,并且把…

2026/9/24 22:56:49 阅读更多 →
文件查找工具进阶指南:Everything、fd与ripgrep的高效搜索实践

文件查找工具进阶指南:Everything、fd与ripgrep的高效搜索实践

关于文件查找工具,我一直有个观点:它是办公室里最不起眼、却最能决定你加班时长的生产力工具。你可能攒了一台高配电脑,但当你面对一个塞满几百G资料的工作盘,想找出一个月前某位客户发来的合同电子版时,那堆硬件配置一…

2026/9/24 22:56:49 阅读更多 →
Python+CNN道路坑洼检测源码包:AlexNet与LeNet-5实现及避坑指南

Python+CNN道路坑洼检测源码包:AlexNet与LeNet-5实现及避坑指南

简介:这份资源面向计算机视觉课程学习者与期末大作业开发者,聚焦道路坑洼检测这一典型图像分类任务,提供基于Python与CNN的完整实现方案。项目曾获97分高分评价,既可作为课程设计参考,也适合希望入门深度学习实战的初学…

2026/9/24 22:56:49 阅读更多 →
Xenia 内核文档深度解析:Kernel Shims 与 Xbox 360 内核模块实现

Xenia 内核文档深度解析:Kernel Shims 与 Xbox 360 内核模块实现

游戏开发图形学 【免费下载链接】xenia Xbox 360 Emulator Research Project 项目地址: https://gitcode.com/gh_mirrors/xe/xenia 点击查看 免费下载 本篇技术指南围绕 docs/kernel.md 展开,系统讲解 Xenia(Xbox 360 模拟器研究项目&#x…

2026/9/24 22:55:49 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →