编程与 AI12 分钟阅读更新于 2026-07-30

长期记忆和知识库怎么分层:别把用户偏好当业务事实

梳理 RAG 全流程与 8 种长期记忆方式,讲清短期对话窗口、用户长期记忆、业务知识库、日志评估四层分别负责什么,回答前应该按什么顺序取用信息。

相关工具

最容易混淆的是“记得用户”和“知道事实”

做 RAG 和长期记忆时,一个常见误区是把所有外部信息都叫知识库。用户上一轮说过的偏好、客服手册里的制度、上传 文中的条款、系统日志里的失败样本,看起来都能帮助回答,但它们不是同一种东西。混在一起以后,系统会很难判断哪些可以当事实,哪些只是用户曾经表达过的想法。

相关概念 讲 RAG 时,重点是把私有文档加载、切分、向量化、检索,再交给模型生成答案。长期记忆相关概念 讲 Memory 时,重点是多轮对话里如何保存历史、实体、关系、摘要或向量化旧信息。两份资料放在一起看,会发现它们解决的是两条不同链路:RAG 让模型查资料,Memory 让模型不丢上下文。

所以,一个可维护的 Agent 不应该只有一个“记忆池”。更稳的做法是分层:短期对话窗口保存最近上下文,用户长期记忆保存偏好和实体,业务知识库保存可引用资料,日志与评估保存系统表现。回答时可以同时参考这些层,但不能把它们混成同一种可信度。

Agent 记忆与知识库的四层结构图
Agent 记忆与知识库的四层结构

短期窗口、用户长期记忆、业务知识库、日志评估四层各司其职,最后共同辅助 LLM 生成回答。

短期窗口只负责当前对话的连贯

短期窗口对应前面讲过的 chat_history,也对应长期记忆相关概念 里的全量历史、滑动窗口、Token 缓冲这几类方法。它解决的是当前会话里的指代问题。用户问“这门课会学习 Python 吗”,下一句追问“为什么需要这个前提”,系统要知道“这个前提”指的是 Python。

这层信息的生命周期应该很短。一次咨询、一个任务、一个话题结束后,它就可以被清空或压缩。文中的 ConversationBufferWindowMemory 只保留最近 k 轮,ConversationTokenBufferMemory 按 token 控制范围,本质上都是在避免历史无限增长。

短期窗口不能承担长期事实存储。用户刚才说“我今天想看 Redis”,不代表他永远偏好 Redis;用户在一次对话里临时上传了某份文件,也不代表以后所有回答都应该默认用这份文件。短期窗口越清楚地限定在当前任务里,后面的长期记忆和知识库越不容易被污染。

用户长期记忆保存偏好、实体和长期约束

用户长期记忆来自长期记忆相关概念 里的实体记忆、知识图谱、摘要、向量检索记忆等方式。它保存的不是业务制度,而是和用户有关的信息:用户偏好什么表达方式,正在处理哪个案件,长期关注哪个项目,曾经明确提出过哪些约束,某个人名和某个笔名是什么关系。

这层信息可以跨会话使用,但要有边界。比如教育辅导里,系统可以记住学生经常卡在二次方程;法律咨询里,可以记住某个案件名称和相关人物;电商助手里,可以记住用户更关注续航和配送。这些记忆能让后续对话更省力。

但用户记忆不能直接升级成事实。用户说“我公司支持本地部署”,这只能说明用户曾经这么说过,不能替代产品手册或合同条款。回答业务问题时,系统可以用用户记忆理解上下文,却应该从业务知识库里找依据。这里一旦混淆,答案会变得很像懂用户,实际却可能没有事实依据。

业务知识库保存可引用资料

业务知识库就是 RAG 链路里的资料层。相关概念 反复强调 Document Loading、Splitting、Embedding、VectorStore、Retrieval、source_documents。它保存的是制度、文档、FAQ、产品手册、课程讲义、内部流程这些可以被引用和复核的内容。

这层信息要重视 metadata。文件名、页码、章节、版本、权限、发布时间,都决定后面能不能过滤、追溯和排查。用户问“企业版支持哪些部署方式”,答案应该来自产品手册、部署方案或 FAQ,而不是来自用户以前的聊天偏好。

业务知识库也不是模型长期记忆。它更像资料系统:资料更新要重建或增量更新索引,旧版本要下线,重复文档要清理,source_documents 要能展示。它的重点是准确、可追溯、可维护,而不是个性化。

日志与评估保存系统表现,不参与直接回答

第四层是日志与评估。前面端到端 RAG 文章里讲过,每次迭代最好记录用户问题、命中文档、生成答案和人工判断。这些数据很重要,但它们不应该默认直接进入回答上下文。它们的主要用途是评估系统、发现失败样本、调整切分和检索策略。

比如某次用户问“价格是多少”,系统没有命中文档,人工标记为“不准确”。这条日志能帮助你发现价格资料缺失或 metadata 过滤错误,但不能让模型下一次直接引用这条失败日志回答价格。日志是镜子,不是资料。

当然,日志可以经过处理变成知识。比如常见失败问题被人工整理成 FAQ,或评估样本被转为测试集。关键是要有一道治理过程,不能把未经确认的日志直接塞进知识库。否则系统会把自己的旧错误重新喂给自己。

回答前的信息取用顺序流程图
回答前的信息取用顺序

回答前先识别任务,再取短期窗口、用户长期记忆和业务知识库,并经过权限、过期和来源检查。

回答前先判断当前问题需要哪几层

不是每个问题都需要四层一起参与。用户问“刚才那个参数是什么意思”,主要需要短期窗口;用户问“我上次提过的合同纠纷进展如何”,可能需要用户长期记忆和业务知识库;用户问“公司报销标准是多少”,应该优先检索业务知识库;使用者排查“为什么答错”,才需要看日志评估。

信息取用顺序可以这样设计:先识别当前任务和用户意图,再取最近几轮对话做指代消解;如果问题涉及用户个人背景,再查长期记忆;如果问题涉及事实、制度、产品、价格、流程,再检索业务知识库;最后把上下文合并给模型,并在答案里保留来源。

这里最重要的保护线是:不要把用户记忆当业务事实。用户记忆可以帮助系统理解“我之前说的那个项目”,但项目是否支持某功能,仍要查文档。这样回答虽然多一步检索,却能避免很多看似贴心、实际不准的结论。

长期记忆要能编辑和删除

长期记忆相关概念 里讲了实体记忆、知识图谱、摘要和向量检索记忆,这些都可能保存用户相关信息。产品上必须给这层数据留管理入口。用户应该能看到系统记住了什么,能删除过期偏好,能纠正错误实体,能关闭某类记忆。

这不只是隐私问题,也直接影响答案质量。用户以前说喜欢火锅,不代表现在还喜欢;用户曾经参与某项目,不代表现在仍在负责;系统抽错了某个实体关系,后面会反复用错。不能编辑的长期记忆,会从便利变成负担。

相反,业务知识库的修改通常由组织或管理员完成,日志评估由开发或运营团队使用,短期窗口由会话自动管理。四层数据的管理权限也应该分开。谁能看、谁能改、谁能删除,要跟数据性质一致。

一个调试台要同时看四层数据

做开发时,最怕只看到最终答案。一个实用的调试台,至少应该同时展示短期窗口、用户长期记忆、业务知识库召回结果和日志评估。这样出错时,你能判断是追问没理解、用户记忆取错、知识库没命中,还是模型生成偏了。

短期窗口里看最近几轮对话是否足够;用户长期记忆里看偏好、实体和约束是否正确;业务知识库里看 source_documents、页码和相似度;日志评估里看这类问题以前是否失败过,人工判断是什么。四层摊开后,问题会具体很多。

这也是从 Demo 到产品的分水岭。Demo 只要能答一句话;产品要能解释这句话为什么这么答。长期记忆和知识库分层之后,系统不一定更复杂,反而更容易维护。每层负责一件事,错误也更容易归因。

记忆与知识库分层调试台 UI 草图
记忆与知识库分层调试台

调试台把短期窗口、用户长期记忆、业务知识库和日志评估并排展示,方便定位答案问题来自哪一层。

常见问题

用户长期记忆能不能直接当知识库用?

不建议。用户长期记忆主要记录偏好、实体和上下文,业务事实仍应来自可追溯的知识库资料。

日志评估为什么不直接参与回答?

日志记录的是系统表现和失败样本,未经整理可能包含错误答案。它适合用于评估和改进,不适合直接当资料引用。

四层结构会不会太复杂?

第一版可以做轻量实现,但概念上最好分清。短期窗口、用户记忆、业务知识库和日志评估混在一起,后期会很难排查。

RAG、知识库与长期记忆

继续阅读

返回专题