给 AI Agent 修了一个“记忆断层”:从先删后写到安全迁移
最近整理自己的智能运维 Agent 项目时我发现三层记忆系统里有一个比“摘要写得好不好”更基础的问题旧对话先被删掉新的摘要却还没生成。这次没有重写记忆架构而是先调整迁移顺序目标层写入成功再清理源数据。让异步失败留下可重试的原料而不是留下一个上下文缺口。本文要点异步可以缩短等待但不会自动保证数据安全。先写后删允许短暂重复去重和幂等负责收尾。当前先做轻量修复持久化任务和更完整的恢复机制留待后续。一、三层记忆为什么会有“断层”项目把聊天记忆分成三层L1 保存近期原始对话L2 保存较早对话的摘要L3 通过 pgvector 保存可检索的历史记忆。L1、L2 在进程内保留热缓存并写入 Redis摘要与归档放到后台异步执行。原来的顺序大致是删除 L1 旧对话 → 提交摘要任务 → 生成摘要 → 写入 L2问题出在中间那段空窗模型调用失败、Redis 写入异常甚至线程池拒绝任务都可能让源记忆已经消失、目标记忆却没有落地。L2 向 L3 归档也有类似风险。这里说的“丢失”主要是模型可用上下文出现缺口。正常认证对话的完整原文另由 PostgreSQL 记录但它不会因为摘要失败就自动回填到记忆链路。二、修改思路把删除放到成功之后核心规则只有一句话没有确认目标写入成功就不删除源记忆。保留源记忆 → 异步生成/归档 → 目标写入成功 → 清理源记忆摘要失败原文留在 L1向量化或数据库写入失败摘要留在 L2。任务没有成功交出去也按失败处理不让“提交了异步任务”被误当成“迁移完成”。还有一个容易忽略的情况目标已经写成功源数据却没删掉。这时允许两份暂时并存。L2 已经生成时后续只补做源清理不再重复调用摘要模型。我的取舍是暂时多留一份比提前删掉更容易补救。但这个取舍必须配合去重不能让同一段记忆反复进入 Prompt。三、不是只交换两行代码源数据保留后同一条记忆可能再次被扫描到所以还要控制重复任务。这次用进程内的处理中 ID 集合避免同一条记忆被反复派发目标写入使用稳定 ID让重复执行尽量落到同一条记录拼接上下文时按 ID 去重重叠时优先使用原文。异步任务也可能乱序完成因此摘要要按对话轮次排序。旧会话的回调不能修改后来重新建立的同名会话。失败后的重试并没有做成复杂调度系统后续新增对话、或者应用启动恢复时会根据仍保留的源数据重新尝试。它不是定时重试也不是跨实例的任务协调。四、为什么这次没有直接上任务队列当前项目更需要一套能解释、能验证、能继续迭代的方案。已有 Spring 异步执行、Redis 和 PostgreSQL先沿着现有结构修复改动范围更容易控制。本次没有新增中间件、依赖或数据库表因此没有额外的消息队列部署负担也不需要同步调整大量业务接口。代价仍然存在持续失败会让旧记忆暂时超过容量增加上下文和 Token 开销重试也可能再次产生模型费用。用户不用为每次摘要同步等待但后台积压不能长期放任不管。如果以后转向多实例或更高可靠性要求再加入持久化任务、退避重试、失败告警以及从原文数据库重建记忆的补偿入口会更合理。五、验证结果以及这次没有解决的事这次新增了 34 条测试覆盖摘要失败、目标写入失败、源清理失败、任务拒绝、恢复重试和重复上下文等情况。全项目 103 项测试通过应用也在 Java 17 的 Docker 环境中成功启动。模型及部分存储故障通过 Mock 验证项目的 pgvector 集成测试使用真实容器。本轮没有进行真实模型长对话或多实例压力验收所以不能据此声称“生产环境绝不丢数据”。Redis 初始写入失败、过期或淘汰后的自动回填仍需要后续治理。正在运行的归档任务与清空会话之间的彻底协调也没有在这次最小修复中全部解决。结语这次优化给我最大的提醒是异步任务不只是“另开一个线程”它还需要明确的成功边界。先保留什么、什么时候能删、失败后靠什么重试这些问题比多加一层存储更基础。对当前项目来说先把这个顺序修对比一次把所有可靠性机制堆齐更有价值。实现与验证记录GitHub 修复提交。

相关新闻

把「一文多发」做成脚本流水线:CDP、滑块、二维码、WAF、限流,这些坑我替你踩完了

把「一文多发」做成脚本流水线:CDP、滑块、二维码、WAF、限流,这些坑我替你踩完了

把「一文多发」做成脚本流水线:CDP、滑块、二维码、WAF、限流,这些坑我替你踩完了参与话题:CSDNAI:程序员新生产力 环境:Windows 11 Chrome CDP(remote-debugging-port) Node.js。全自动不现实…

2026/10/9 5:41:43 阅读更多 →
从原理到实战:最简单的transformer教程一:整体架构、模型输入、位置编码

从原理到实战:最简单的transformer教程一:整体架构、模型输入、位置编码

整体架构模型的输入 自然语言转换为数字的常见方法----独热编码(不合适直接使用)词嵌入法对应的词向量计算过程 假设我们的世界非常简单,词汇表里只有 4 个词:["篮球", "鸡", "苹果", "跑步&q…

2026/10/9 5:41:43 阅读更多 →
Claude Code插件superpowers:给AI编程装上技能SOP

Claude Code插件superpowers:给AI编程装上技能SOP

最近把 Claude Code 的插件体系翻了个底朝天,收获最大的一个项目叫superpowers。听名字就知道,它是来给 AI 打工上限做加法的——一套开源的技能增强库。装上之前,我以为它只是多几个提示词模板;装上之后才发现,它把 A…

2026/10/9 5:40:43 阅读更多 →

最新新闻

SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

如果你写过或者接手过 SSR 前端项目,大概都有过这种经历:本地npm run dev跑得飞起,可真要让项目在另一台电脑上跑起来,或者部署到服务器上验证,就开始连环翻车——Node 版本不对、系统库缺失、环境变量没配、数据库连不…

2026/10/9 6:05:01 阅读更多 →
波士顿房价预测实战:正规方程原理、矩阵推导与代码实现

波士顿房价预测实战:正规方程原理、矩阵推导与代码实现

波士顿房价预测这个项目,入门机器学习的朋友基本都绕不过去。而我更想说的是,越是那种“代码实现看起来只有几行”的项目,越值得把原理抠明白。拿正规方程(Normal Equation)来解线性回归,很多时候代码就是矩…

2026/10/9 6:05:01 阅读更多 →
微服务分布式事务与幂等设计:从原理到Seata实战

微服务分布式事务与幂等设计:从原理到Seata实战

半夜两点被电话叫起来,运营语气很急:商品A的库存变成负数了。打开数据库一看,下单记录两条——用户点了一次下单按钮,前端超时后自动重试了一次,网关层的重试机制又补了一刀,三笔请求最终都执行了库存扣减&…

2026/10/9 6:05:01 阅读更多 →
MySQL Host not allowed连接错误的原理与全场景排查指南

MySQL Host not allowed连接错误的原理与全场景排查指南

1. 问题本质与真实场景还原:这不是连接失败,而是权限拦截的明确信号“Host xxx.xx.xx-xx.xx.com is not allowed to connect to this MySQL server”——这行报错在某高校数据库运维组、某SaaS公司后端团队、某外包项目交付现场,几乎每周都会…

2026/10/9 6:05:01 阅读更多 →
AI论文写作全流程工具链:从选题到答辩的效率革命

AI论文写作全流程工具链:从选题到答辩的效率革命

从选题卡壳到终稿交上,我带着两届本科生的论文打磨经验,把AI工具按“全链路”重新趟了一遍。这篇不讲虚的,直接告诉你:哪个环节用哪款工具、怎么提问才能拿到能用的话、哪些坑踩了会出事。不管你是刚开题还是deadline逼近&#xf…

2026/10/9 6:05:01 阅读更多 →
AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

1. 扩容决策的起点:两个方向,两种代价先聊一个我经常被问的问题:AI系统跑不动了——推理延迟飙升、训练任务排队、GPU显存告急——到底该加机器还是换大机器?这个问题听起来简单,但每次认真回答完,对方都会…

2026/10/9 6:04:00 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →