news 2026/7/3 2:51:27

用“动态 RAG”实现终身学习 Agent

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用“动态 RAG”实现终身学习 Agent

上一篇我们把 Agent 记忆拆成了工作记忆、短期记忆和长期记忆。

继续往下走,问题会变得更锋利:

如果长期记忆不只是被读取,还会被 Agent 修改,系统还能不能可信?

企业工单 Agent 很快会遇到这种需求。用户反复问同一类延迟发货问题,一线客服发现旧 SOP 里漏掉了节假日规则,主管在审批里补了一条处理口径,质检系统标记某个回复模板容易引发二次投诉。理想状态下,Agent 不应该每次都从零处理这些经验,而应该把稳定知识沉淀下来,下一次检索时直接使用。

这就是很多人说的“终身学习 Agent”。

但工程上要先把这个词降温。这里的终身学习,不是让模型权重在线自我更新,也不是把所有聊天记录塞进向量库。

Agent 在受控流程里,把经过证据约束和权限校验的经验写回外部知识库,并让后续检索能使用这些新知识。

如果写入不可审计,检索越强,污染传播越快。


一、文件系统记忆不是随手写文件

先把“文件系统记忆”说清楚。

它不是让 Agent 获得任意读写磁盘的权限,也不是在项目目录里到处生成 Markdown。这里的文件系统,更像一个受控的知识仓库:政策、SOP、处理口径、FAQ、案例复盘都以文件形式保存,每次变更都有路径、作者、证据、版本和审计记录。

一个简化的工单知识库可以长这样:

knowledge/ policies/ shipping-delay.md refund-exception.md sop/ delayed-shipment-ticket.md refund-review.md playbooks/ appease-angry-customer.md cases/ 2026/ shipping-delay-holiday-window.md manifest.json

这些文件才是长期记忆的事实源。向量库、关键词索引、重排序缓存,都只是围绕它生成的检索层。

这个边界非常重要。很多 RAG 系统后期失控,是因为团队把向量库当成知识库本身。文档切片写进去以后,原文在哪里、版本是什么、谁改过、能不能撤销、哪一段已经废弃,都变得很难回答。

在文件系统记忆里,我们反过来设计:

文件仓库:事实源,可读、可审计、可版本化 索引层:派生物,可删除、可重建、可多路并存 运行时记忆:临时状态,只服务当前工单决策

这样做有一个直接好处:当 Agent 检索错了、知识写坏了、索引构建失败了,我们仍然可以回到文件级证据链,而不是在一堆 embedding 记录里猜哪条是源头。

对企业工单场景来说,文件也比“纯数据库文本块”更适合协作。运营、客服主管、法务、质检都能 review 一份 Markdown SOP;开发团队可以用 Git、审批流或内部文档系统管理版本;Agent 则通过受控工具读取、提出修改和触发索引更新。

这不是为了复古。它是在给长期记忆一个可治理的形状。


二、动态 RAG 的闭环

传统 RAG 多数只覆盖前半段:

用户问题 -> 检索知识 -> 注入上下文 -> 生成答案或行动

动态 RAG 要多走后半段:

用户问题 -> 检索知识 -> 处理工单 -> 发现知识缺口、冲突或新经验 -> 提出知识变更 -> 校验和审批 -> 写回文件仓库 -> 重建索引 -> 后续工单使用新知识

这里最容易犯的错,是把“发现新信息”和“写入长期知识”合成一步。比如 Agent 在处理工单时看到主管说“这次可以破例给 20 元券”,就直接更新延迟发货政策:

延迟发货超过 3 天时,可以给 20 元补偿券。

这很危险。那可能只是一次人工例外,可能只适用于特定客户,可能是主管临时安抚,不一定是组织政策。下一次 Agent 检索到这条“记忆”,就会把例外当规则。

更稳的做法,是让 Agent 先提出变更候选,而不是直接修改事实源:

{ "change_type": "knowledge_gap", "target_path": "knowledge/sop/delayed-shipment-ticket.md", "proposal": "补充节假日期间承诺送达日顺延的判断步骤。", "evidence": [ "ticket://T-20260524-0831", "approval://A-20260524-119", "policy://shipping-delay/current" ], "risk_level": "medium", "review_required": true }

注意这里的proposal仍然不是最终正文。它只是告诉知识维护流程:系统发现了一个缺口,证据在哪里,建议改哪个文件,风险是什么。

动态 RAG 的价值不在于“Agent 自己越写越懂”,而在于它能把运行时经验变成可处理的知识变更任务。真正写入之前,还要经过类型判断、冲突检测、权限控制和必要的人类审核。


三、写回协议

如果给 Agent 一个write_file(path, content)工具,它大概率会在 Demo 里表现得很聪明,在生产里变成事故入口。

文件系统记忆的写操作应该被收紧成“提交补丁”。Agent 不能任意覆盖文件,只能基于已检索到的版本提出差异,并说明证据和原因。

一个最小的写回对象可以这样设计:

fromtypingimportLiteral frompydanticimportBaseModel, Field classMemoryPatch(BaseModel): target_path: str base_revision: str change_type: Literal["add", "update", "deprecate"] summary: str=Field(max_length=200) evidence_ids: list[str] diff: str risk_level: Literal["low", "medium", "high"] review_required: bool=True

这里真正关键的是base_revisionevidence_idsdiff

base_revision用来避免覆盖别人刚改过的知识。Agent 读到的是shipping-delay.md@rev_12,提交补丁时也必须声明基于这个版本。如果文件已经变成rev_13,系统应该拒绝补丁,要求重新检索和合并。

evidence_ids让每次知识变更都有来源。一个工单、一次审批、一条质检结论、一个政策版本,都可以成为证据。没有证据的“我觉得应该这样写”,不能进入组织级知识库。

diff则让变更可 review、可回滚。相比“整篇重写”,补丁更容易看出 Agent 到底改了什么,也更容易定位错误。

写回工具的接口不应该叫save_memory,而应该表达真实动作:

propose_knowledge_patch approve_knowledge_patch apply_knowledge_patch rebuild_knowledge_index rollback_knowledge_revision

这些工具可以被 Agent 调用,但权限不同。普通工单处理 Agent 可以提交候选补丁;主管或知识管理员可以批准;系统任务负责应用补丁和重建索引;回滚通常需要更高权限。

这时 Agent 的学习能力被放进了一个工程边界里:

Agent 发现问题 -> Agent 提交补丁 -> 系统校验 -> 人或规则审批 -> 文件版本更新 -> 索引重建 -> 检索链路生效

它仍然在学习,但不是偷偷学习。


四、冲突处理

知识库里的冲突不一定表现为明显矛盾。更常见的情况是两条内容各自看起来都对,但适用条件不同。

比如延迟发货处理口径里可能同时出现三段话:

延迟超过 3 天可以发放补偿券。 高价值订单补偿需要主管审批。 大促期间承诺送达日按活动页规则顺延。

如果 Agent 只靠相似度召回其中一段,很容易做出过度简化的结论。动态 RAG 写回时也一样危险。它可能把某个案例里的特殊处理补进 SOP,却没有写清适用范围,导致后续检索误用。

因此,写回前至少要做三类冲突检查。

第一类是版本冲突。目标文件在 Agent 读取后是否被更新过。如果更新过,补丁不能直接应用。

第二类是语义冲突。新内容是否和同目录政策、上级政策、已有 SOP 存在不一致。这里可以用检索辅助,但不能只靠模型一句“无冲突”。更稳的方式是把冲突检查变成结构化报告:

{ "target_patch": "patch_782", "possible_conflicts": [ { "path": "knowledge/policies/refund-exception.md", "reason": "补偿券额度描述与退款例外政策中的审批阈值不一致", "severity": "medium" } ], "decision": "requires_review" }

第三类是作用域冲突。一次工单经验到底应该写成用户级偏好、工单案例、SOP 补充,还是组织政策。写错作用域,比写错一句话更隐蔽。

例如:

用户说:“以后别给我打电话,发邮件就行。”

这可以成为用户级偏好,但不应该变成客服 SOP。

主管说:“这个客户这次先给 20 元券,别再升级了。”

这可以成为工单处理记录,但不应该变成延迟发货政策。

质检连续发现 30 个节假日订单被误判延迟。

这才可能进入 SOP 或政策候选变更。

所谓可靠记忆,不是没有冲突,而是冲突能被发现、解释和处理。动态 RAG 系统里,冲突检查应该是写入路径的一部分,而不是上线后靠人工翻旧账。


五、防止幻觉积累

RAG 常见风险是幻觉;动态 RAG 还多了一个更麻烦的风险:幻觉积累。

一次错误生成如果只出现在回复里,影响是一单工单。一次错误写入如果进入长期知识库,就会被后续检索反复召回,变成系统性偏差。

因此,写入策略要比生成策略更保守。

我们可以把知识写入分成三个等级:

写入等级典型内容处理方式
自动写入低风险事实索引、工单处理摘要、已存在文档的引用关系系统校验后写入
待审核写入SOP 补充、政策解释、处理经验、模板修改Agent 提交补丁,人工或规则审批
禁止自动写入组织政策、合规承诺、用户风险标签、高风险权限规则只能由授权流程修改

这张表里最重要的是第三行。Agent 可以发现政策可能需要更新,但不能直接改政策。它可以说“当前 SOP 缺少节假日顺延说明”,可以提交证据和候选补丁,但最终是否进入政策文件,必须走组织已有的知识管理流程。

还要避免把用户陈述当事实。用户说“你们客服昨天答应给我全额退款”,这只能成为一条待验证陈述。系统需要查工单备注、通话记录或审批单,确认后才能写入处理记录。否则 Agent 会把用户策略性表达变成长期事实。

一个实用的写入准则是:

没有证据,不写入。 没有作用域,不复用。 没有版本,不覆盖。 没有审批,不上升为组织知识。

这四句话比“提升记忆质量”更可执行。


六、检索也要动态

文件写回之后,动态 RAG 还没有结束。新知识什么时候能被检索到、旧知识什么时候失效、索引失败怎么办,都会影响 Agent 的实际行为。

比较稳的设计是把索引层看作可重建的派生物,而不是写回工具顺手更新几条向量记录。

文件变更之后,系统应该产生一个知识事件:

{ "event_type": "knowledge_revision_applied", "path": "knowledge/sop/delayed-shipment-ticket.md", "revision": "rev_18", "previous_revision": "rev_17", "changed_sections": ["holiday_delivery_window"], "audit_id": "audit_20260524_441", "index_status": "pending" }

索引任务消费这个事件,重新切分受影响文件,更新全文索引、向量索引和元数据表。只有索引成功后,检索层才把新 revision 标记为可用。

这里有两个工程细节容易被忽略。

第一,检索结果必须带版本。Agent 不能只看到一段文字,还要看到它来自哪个文件、哪个 revision、是否 current、适用范围是什么。

{ "text": "节假日期间承诺送达日按活动页展示规则顺延。", "path": "knowledge/sop/delayed-shipment-ticket.md", "revision": "rev_18", "section": "holiday_delivery_window", "effective_from": "2026-05-24", "status": "current" }

第二,旧内容不能简单物理删除。删除政策段落或废弃 SOP 时,最好产生 tombstone 或废弃记录,让系统知道“这段为什么不能再用”。否则历史工单回放、审计和错误排查都会断链。

rev_17: 包含旧节假日处理口径 rev_18: 废弃旧口径,新增按活动页顺延规则 tombstone: old_holiday_rule deprecated by audit_20260524_441

动态 RAG 的“动态”,不只是运行时多检索几次,而是知识生命周期在持续变化。只要知识会变化,检索结果就必须携带版本和状态;只要索引是派生物,就必须能从文件事实源重建。


七、从 Demo 到可上线系统的最小建设顺序

如果团队一开始就设计“全自动终身学习”,通常会过度承诺。更实际的顺序,是先让知识读写变得可控,再逐步放开自动化。

第一步,只读 RAG。把政策、SOP、FAQ 放进文件仓库,建立检索索引。Agent 只能读取,回答时必须引用来源和版本。这个阶段先解决“检索到什么”和“依据是什么”。

第二步,变更候选。Agent 在工单处理后可以提交知识缺口、疑似冲突和补丁建议,但不自动应用。知识管理员 review 后手工修改文件。这个阶段先训练系统发现问题的能力。

第三步,受控补丁。Agent 可以提交结构化MemoryPatch,系统做路径限制、版本校验、证据校验、冲突检测。低风险变更可以半自动合并,中高风险变更仍然审批。

第四步,索引门禁。文件变更必须触发索引任务,索引成功后才进入检索结果。每条检索结果都带 path、revision、section、status 和 effective time。

第五步,回滚和评测。每次知识变更都能回滚;每次回滚都能解释影响了哪些工单;关键 SOP 更新后,跑一组历史工单回归测试,确认新知识没有破坏旧场景。

到这里,我们才有资格认真讨论“终身学习”。因为系统已经能回答:

Agent 学到了什么? 它从哪里学到的? 谁批准了这次学习? 它影响了哪些后续判断? 如果学错了,怎么撤回?

这些问题回答不出来,所谓学习只是把不确定性沉淀进更深的系统层。


可靠记忆的本质是可撤销

Agent 的长期记忆很容易被讲成一种能力升级:系统会越用越懂业务,越处理越有经验。

这个方向没有错,但前提是学习过程本身受控。对企业工单 Agent 来说,最值得警惕的不是“它忘了什么”,而是“它把不该相信的东西记住了,并在未来反复使用”。

文件系统记忆给动态 RAG 提供了一个更稳的底座:文件是事实源,索引是派生物,补丁是写入协议,版本是审计线索,回滚是安全阀。

能终身学习的 Agent,不是能随时写记忆的 Agent,而是能在证据、权限、版本和回滚约束下更新外部知识的 Agent。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 2:46:58

CPT外汇:长期观察者更在意的移动端体验,这里做个细节梳理

在外汇相关服务里,CPT外汇是否值得长期关注,往往取决于几个清晰的体验点:说明是否好理解、提示是否到位、流程是否连贯、支持是否稳定。下面从这些维度对CPT外汇做一次正向梳理与要点归纳。在外汇相关服务中,读者最在意的通常是信…

作者头像 李华
网站建设 2026/7/3 2:46:12

AI辅助专利撰写实战:从技术构思到文档成型的全流程指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 如果你是一名开发者、技术创业者,或者只是对AI辅助编程感兴趣,最近可能被一个词刷屏了: Codex …

作者头像 李华
网站建设 2026/7/3 2:44:43

【Java毕业设计】基于 SpringBoot 的供排水应急调度智能决策系统的设计与实现 城市防汛水务应急调度管理系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/3 2:36:39

向量数据库不是银弹:RAG 检索质量的排查路径

很多团队第一次把 RAG 接进业务系统时,问题看起来都很相似:文档已经入库,向量索引也建好了,测试问题一问,模型仍然答非所问。 常见反应是换一个更强的向量数据库、调大 top_k、换 embedding 模型,或者把更…

作者头像 李华
网站建设 2026/7/3 2:34:58

Mem0 源码解析系列(一):记忆是如何被添加的

一、引言Mem0("mem-zero")是一个为 AI 应用提供长期记忆层的开源项目。它能让 AI 助手记住用户偏好、适应个性化需求,并持续学习——非常适合客户支持聊天机器人、AI 助手和自主系统等场景。在阅读源码之前,我一直好奇&…

作者头像 李华