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/8/10 8:33:39 阅读更多 →
荒岛求生:极端环境下的生存技巧与实践指南

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

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

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

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

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

2026/8/10 8:32:39 阅读更多 →

最新新闻

C语言高级语法:内存管理与数据结构实战

C语言高级语法:内存管理与数据结构实战

1. 为什么需要掌握C语言高级语法 在嵌入式开发、操作系统内核、高性能计算等底层领域,C语言依然是无可争议的王者。但很多初学者在掌握了基础语法后,面对实际项目中的内存管理、复杂数据结构时常常手足无措。我曾见过不少开发者因为堆内存使用不当导致的…

2026/8/10 9:22:07 阅读更多 →
飞书文档批量导出终极指南:25分钟搞定700+文档的自动化神器

飞书文档批量导出终极指南:25分钟搞定700+文档的自动化神器

飞书文档批量导出终极指南:25分钟搞定700文档的自动化神器 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 还在为手动下载飞书文档而烦恼吗?feishu-doc-export 是一款跨平…

2026/8/10 9:22:07 阅读更多 →
DOTA2一号位瘟疫法师进阶指南:从对线到团战的完整决策分析

DOTA2一号位瘟疫法师进阶指南:从对线到团战的完整决策分析

在 DOTA2 的实战中,英雄的玩法、出装和节奏选择并非一成不变,它们高度依赖于版本、分路、团队阵容以及选手的个人风格。瘟疫法师,通常被称为 NEC,是一个兼具强大续航、持续伤害和斩杀能力的中后期核心。观看高分段选手的第一视角&…

2026/8/10 9:22:07 阅读更多 →
从 SAP_GWFND 到 OData V4,深入理解 SAP Gateway、REST 与 OData 的技术脉络

从 SAP_GWFND 到 OData V4,深入理解 SAP Gateway、REST 与 OData 的技术脉络

在一套 SAP S/4HANA 系统里分析 SAP Fiori 应用的数据请求时,经常会看到 /sap/opu/odata、$metadata、$filter、$expand 这些熟悉的内容。继续往 ABAP 后端追踪,又会遇到 /IWFND/MAINT_SERVICE、/IWFND/GW_CLIENT、MPC、DPC、SADL,再往新一代开发模型走,则会看到 CDS、Serv…

2026/8/10 9:22:07 阅读更多 →
Windows下MinGW-w64环境搭建与g++命令行编译实战指南

Windows下MinGW-w64环境搭建与g++命令行编译实战指南

1. 项目概述:从零搭建你的C命令行编译环境 如果你刚开始接触C编程,或者刚从Visual Studio这类集成开发环境(IDE)转向更底层的命令行开发,第一个拦路虎往往不是语法,而是“环境”。标题里的几个问题&#xf…

2026/8/10 9:22:07 阅读更多 →
SpringBoot+Vue小区物业管理系统架构与实现

SpringBoot+Vue小区物业管理系统架构与实现

1. 项目概述:小区物业管理系统技术架构解析 这套2025年最新版的小区物业管理系统采用了当前企业级开发中最主流的SpringBootVue前后端分离架构。作为一套完整可运行的商业级源码,它完美融合了后端SpringBoot的高效开发特性与前端Vue.js的响应式优势&…

2026/8/10 9:21:07 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →