这道题其实问的是:大模型[[Agent]]怎么把信息存下来,并且在不同场景下高效地取回来用。长期记忆不是简单存个文本,而是要区分语义、事实和状态三个层次,选型完全看业务要什么。
先说[[向量数据库]],它做的是语义记忆。对话历史、文档这些非结构化数据,编码成 [[Embedding]],按相似度检索。优点是模糊匹配和语义关联很强,适合开放域问答、相似案例召回这种场景。举个例子,客服Agent要查“之前有个客户对退款流程很不满”,直接搜关键词可能找不到,但向量检索能匹配到语义相似的对话。不过这里有个坑:它对精确数值和逻辑查询几乎无效。比如“订单金额大于500的退款单”,向量库就搞不定,而且存在 [[Hallucination]] 风险,召回的内容可能语义相关但事实错误。所以它适合做粗排,不适合做精确确认。
再说结构化知识库,比如关系数据库、[[Knowledge Graph]]。它存的是精确事实,用户画像、交易记录、权限规则这些。优点是支持SQL或图遍历,查询结果可验证,出错能定位。比如客服要查“这个订单的支付金额和退款金额”,用SQL一查就准。但缺点是需要预定义schema,对模糊语义不友好,而且维护成本高。所以它适合做精准确认,不适合做语义搜索。
最后是外部符号记忆,你可以理解成Agent的“便签纸”。典型实现像MemGPT里的虚拟上下文,Agent自己读写外部存储的笔记、待办清单。优点是显式可控,可编辑,适合多步骤任务追踪和跨会话目标维护。比如一个Agent要执行“先查库存,再算折扣,最后生成报价”,每一步的中间状态就写在符号记忆里。但缺点是Agent需要自己管理读写,增加了推理负担,而且写的内容可能不准确。
真正落地时,很少只用一种。生产上常见的是三层叠加:向量库做第一轮粗召回,结构化库做第二轮精确过滤,符号记忆维护当前任务状态。举个例子,智能客服Agent处理退款请求:向量库先召回“类似的历史退款案例”,结构化库再查“这个订单的实付金额和退款规则”,符号记忆记录“当前已经处理到哪一步”。检索时按优先级融合,不是单一依赖。
这里有个前提:三层之间的一致性很难保证。如果向量库刚更新了数据,结构化库还没同步,Agent就可能给出矛盾的回答。上线我会特别关注数据同步延迟,通常用事件驱动或定时批处理来协调。常见失败场景是符号记忆写得太随意,导致Agent自己都读不懂,所以我会限制记忆的格式,比如用JSON结构。
另外,我最近在关注一个方向:怎么让Agent自主决定用哪种记忆,而不是硬编码。比如根据query的意图,动态选择走向量库还是结构化库,甚至自动写符号记忆。这可能涉及到模型本身的推理能力,比如用 [[ReAct]] 模式来做决策。
所以总的来说,我更倾向把向量库看成“快照”,结构化库看成“事实表”,符号记忆看成“工作台”。没有银弹,关键是把场景分清楚,然后做好三者的同步和优先级融合。