乐于分享
好东西不私藏

深度解析AI Agent记忆系统:工程架构、向量召回与多Agent共享机制

深度解析AI Agent记忆系统:工程架构、向量召回与多Agent共享机制

Memory for AI Agents:Agent记忆的系统性拆解

AI Agent 的记忆问题,从工程视角看,远比”上下文长度”复杂得多。

本文试图回答一个具体问题:一个生产级的 AI Agent 记忆系统,完整的技术架构是什么?各个模块如何协作?主流实现方案各有什么取舍?


一、记忆问题的本质:为什么不是”加长上下文”?

常见的误解是:只要把上下文窗口扩大到 1M token,记忆问题就解决了。

但这是一个工程上错误的假设。

原因三点:

1. 成本是线性的,收益不是。
把 100 条历史对话全部塞进上下文,每次推理都要支付这些 token 的计算成本。大多数”古老”的信息根本不需要参与本次推理,但模型仍然要为它们付出费用。

2. 检索的精准度 > 信息的丰富度。
模型在一个嘈杂的、100万 token 的上下文里寻找”上次讨论的那个技术选型”,效果远不如在一个经过索引的、精确的记忆库里语义检索。后者的信噪比高出几个数量级。

3. 记忆需要结构,上下文是平面的。
人类记忆不是把所有经历平铺存储,而是有层级、有重要性权重、有时间衰减。上下文窗口无法建模这些属性。

所以真正的记忆系统,是独立的工程子系统,而不是模型能力的延伸。


二、整体架构:四层结构

目前主流的 Agent 记忆系统,可以拆解为四层:

┌─────────────────────────────────────┐
│         应用层 Application          │
│   (Agent / Assistant / Chatbot)     │
├─────────────────────────────────────┤
│       召回层 Retrieval Layer        │
│  (语义搜索 / 重要性过滤 / 排序)      │
├─────────────────────────────────────┤
│       存储层 Storage Layer          │
│  (向量数据库 / 键值存储 / 图存储)     │
├─────────────────────────────────────┤
│       写入层 Ingestion Layer        │
│  (对话摘要 / 压缩 / 重要性打分)       │
└─────────────────────────────────────┘

写入层:对话如何变成记忆

对话写入不是原样复制,而是经过三层处理:

① 对话切片(Chunking)
一次 2 小时的对话,不能作为一个整体存储。写入层首先对对话进行语义切片——按话题切换点、时间和交互轮次切分。切片的粒度决定了后续召回的精准度:太大则噪声多,太小则丢失上下文。

② 摘要压缩(Summarization)
每个切片经过 LLM 摘要,压缩为结构化的记忆片段。摘要prompt通常包含三个要求:

  • 保留关键事实和结论
  • 去掉对话语气和重复内容
  • 用第三人称客观陈述
# 典型的摘要prompt结构
prompt = f"""
将以下对话片段压缩为3-5条结构化记忆:

对话:
{dialogue_chunk}

要求:
- 每条记忆包含:主体(谁)、动作(做了什么)、对象(针对什么)、结论
- 使用客观陈述句
- 标注时间上下文(如有)
"""

③ 重要性打分(Importance Scoring)
并非所有记忆同等重要。模型会对记忆片段打重要性分数(通常0-10),影响后续的召回权重和衰减速度。重要性判断基于:

  • 是否包含用户明确表达过的偏好/需求
  • 是否包含多轮交互才形成的结论
  • 是否涉及决策或承诺

存储层:向量索引是核心

记忆片段以向量形式存入向量数据库(如 Chroma、Qdrant、Weaviate)。

每条记忆的存储 record 大约长这样:

{
  "id": "mem_001",
  "embedding": [0.123, -0.456, ...],  // 1536维向量
  "text": "用户偏好使用Python而非Java进行数据分析",
  "metadata": {
    "user_id": "u_123",
    "timestamp": "2026-03-15T10:30:00Z",
    "importance": 8,
    "category": "preference",
    "session_id": "sess_456"
  }
}

为什么用向量?

关键在于语义检索。用户说”上次讨论的那个Python脚本”,向量数据库能匹配到所有包含Python相关语义的记忆,即使原文没有出现”Python”这个词。而传统的关键词检索(BM25)无法做到这一点。

向量化的另一个好处是支持混合检索——向量相似度 + 关键词匹配的加权组合,能同时保证语义理解和精确匹配。

召回层:如何让记忆在正确的时机出现

召回是记忆系统的核心价值所在。召回流程通常分三步:

① 查询向量化(Query Embedding)
用户新的输入,被嵌入为向量。

② 混合检索(Hybrid Retrieval)
向量检索(语义相似度 top-K)+ 关键词检索(BM25 top-K),两者结果取并集,按加权分数排序。

③ 重排序与过滤(Reranking & Filtering)

  • 时间衰减:新记忆权重更高
  • 重要性加权:importance 分数参与最终排序
  • 去重:语义上完全相同的记忆只保留一条
  • 上下文相关性:只召回与当前话题相关的记忆
# 简化的召回逻辑
def retrieve(query: str, top_k: int = 10) -> list[Memory]:
    # 1. 向量检索
    vector_results = vector_db.search(
        embed(query), top_k=30
    )
    
    # 2. 关键词检索
    keyword_results = bm25.search(query, top_k=30)
    
    # 3. 合并去重
    merged = merge_by_id(vector_results, keyword_results)
    
    # 4. 加权重排
    scored = [
        (m, m.similarity * 0.7 + m.importance / 10 * 0.3)
        for m in merged
    ]
    
    # 5. 时间衰减 + 过滤
    return apply_time_decay(scored, top_k=top_k)

应用层:记忆如何被 Agent 使用

最终,召回的记忆被注入到 Agent 的系统提示词(System Prompt)或上下文窗口中。注入方式有两种:

方式一:动态系统提示词(Dynamic System Prompt)
每次推理前,根据当前输入动态生成系统提示词:

当前用户信息:
- 偏好编程语言:Python(来自2026-03-15的记忆)
- 正在进行的数据分析项目:用户提到在处理金融时序数据
- 近期关注点:大模型量化压缩技术

[后续为当前对话...]

方式二:工具调用(Tool-Calling)
Agent 具备一个 memory.retrieve(query) 工具,在推理过程中主动调用来补充记忆。这是更”Agentic”的方式——模型自己决定什么时候需要查记忆。


三、多Agent共享记忆:架构难点

如果记忆只需要在单个Agent内共享,实现相对简单。但多Agent协作场景下,记忆共享引入了新的挑战:

问题一:谁的记忆可以共享?

并非所有记忆都应该共享。用户的隐私信息、个人偏好,不应该被其他Agent看到。需要实现记忆可见性控制

  • private:仅创建者可见
  • team:同一团队的Agent可见
  • public:所有Agent可见

问题二:记忆冲突如何处理?

当多个Agent对同一事实产生不同理解时,需要冲突检测和消解机制。常用方案:

  • 时间戳优先:最新的记录覆盖旧的
  • 重要性加权:高重要性的记忆优先
  • 人工审核:对高置信度冲突触发人工确认

问题三:记忆的一致性

多Agent写入同一记忆库,需要处理并发写入问题。解决方案通常是最终一致性模型——允许短暂的不一致,但保证在有限时间内收敛到一致状态。


四、技术选型:主流方案对比

维度 Chroma Qdrant Weaviate Pinecone
部署方式 嵌入式/本地 自托管/云 自托管/云 纯云
向量维度 可配置 可配置 可配置 可配置
混合检索 有限 原生支持 原生支持 需插件
多租户 需自己实现 原生支持 原生支持 原生支持
成本 免费(开源) 免费(开源) 免费(开源) 按量付费

对于国内开发者,Chroma + 私有部署是起步成本最低的方案;如果对多租户和混合检索有较高要求,Qdrant 是目前社区评价最高的开源选择。


五、为什么这件事现在才发生

技术本身没有颠覆性创新——向量检索、对话摘要、重要性打分,这些都是成熟技术。真正的推动力是两个:

第一:模型能力的提升,让低成本高保真摘要成为可能。
两年前的模型做摘要,质量远不如现在。模型能力提升直接降低了记忆系统的实现门槛。

第二:Agent产品的竞争压力。
记忆能力已经成为 Agent 产品体验差异化的核心。各家不得不投资这套基础设施。

对开发者而言,这套系统的工程复杂度仍然不低,但最小可行版本(MVP)的实现,已经从”需要一支专业团队”降级到了”一个工程师加一个周末”

这是基础设施成熟的标志,也是下一波 Agent 应用爆发的起点。