引言:为什么 Agent 需要向量数据库

当我们谈论 AI Agent 的"记忆"时,实际上在谈论一个多层次的存储系统。短期记忆存在于上下文窗口中,随着对话结束而消散;长期记忆则需要持久化存储,并能在新对话中被检索和调用。向量数据库就是实现长期记忆检索的核心基础设施。

一个典型的 Agent 记忆系统包含以下环节:

  1. 记忆写入:将对话片段、事实、决策等编码为向量嵌入并存储
  2. 记忆检索:将当前查询编码为向量,在存储的向量中找到语义最相似的记录
  3. 记忆管理:遗忘、合并、更新过时或冗余的记忆条目
  4. 记忆整合:将检索到的记忆与当前上下文融合,指导 Agent 行为

向量数据库的性能、功能和易用性直接决定了记忆系统的质量。本文将从 Agent 记忆系统的实际需求出发,系统对比当前主流的向量数据库方案。

一、Agent 记忆系统对向量数据库的核心需求

在进行选型之前,我们需要明确 Agent 记忆系统的特殊需求,这些需求与传统的推荐系统或搜索引擎有所不同:

1.1 实时写入与即时检索

Agent 在对话过程中需要实时写入新记忆并立即检索。这意味着向量数据库必须支持低延迟的写入操作,且写入的数据能立即被检索到,不能有同步延迟。

1.2 元数据过滤

Agent 的记忆通常需要附带丰富的元数据:时间戳、对话 ID、记忆类型(事实/偏好/事件)、重要性评分等。高效的元数据过滤能力对于精准检索至关重要。

1.3 动态更新与删除

记忆不是一成不变的。Agent 需要更新过时的记忆(如用户偏好变化)、删除无效的记忆(如临时信息)、合并重复的记忆。向量数据库需要支持高效的向量更新和删除操作。

1.4 规模弹性

个人 Agent 的记忆可能只有数千条,但服务大量用户的生产系统可能需要存储数十亿条记忆。向量数据库需要能平滑扩展,且在不同规模下保持性能稳定。

1.5 混合检索

纯向量检索在精确匹配场景(如特定 ID 查询、精确关键词)上表现不佳。Agent 记忆系统通常需要向量检索与传统关键词检索的结合,即混合检索能力。

二、主流向量数据库深度对比

2.1 Pinecone

架构定位:全托管云原生向量数据库

核心优势

  • 零运维:完全托管的服务,无需关心基础设施管理
  • 低延迟:优化的查询引擎,P99 延迟通常在 50ms 以内
  • Serverless 架构:最新版本采用 Serverless 架构,按使用量计费,无需预配置资源
  • 混合检索:原生支持稠密向量和稀疏向量的混合检索
  • 命名空间隔离:通过命名空间实现多用户/多 Agent 的记忆隔离

核心劣势

  • 数据驻留:数据存储在 Pinecone 云上,无法本地部署,对数据敏感场景不友好
  • 成本随规模增长:当向量数量超过百万级时,费用增长显著
  • 灵活性限制:不支持的索引类型和距离度量方式有限
  • 网络依赖:作为云服务,网络波动直接影响 Agent 响应延迟

Agent 记忆场景适用性

  • ✅ 快速原型开发
  • ✅ 中小规模生产部署(<1000 万向量)
  • ❌ 数据合规要求严格的场景
  • ❌ 超大规模记忆存储

2.2 Milvus

架构定位:开源云原生向量数据库

核心优势

  • 极致规模:支持百亿级向量存储,在超大规模场景下性能表现优异
  • 多种索引类型:支持 IVF、HNSW、DiskANN、GPU 索引等多种索引类型
  • 架构解耦:存算分离架构,存储和计算可独立扩展
  • 丰富的生态:与主流 AI 框架(LangChain、LlamaIndex 等)深度集成
  • 混合检索:2.4 版本后支持稀疏稠密混合检索

核心劣势

  • 部署复杂:完整的 Milvus 部署涉及多个组件(Proxy、QueryNode、DataNode、 etcd、MinIO、Pulsar),运维成本高
  • 资源消耗大:即使在小规模场景下也需要较多计算资源
  • 更新延迟:数据写入到可检索之间存在一定延迟(秒级),不适合需要即时检索的场景
  • 学习曲线陡峭:配置项繁多,调优需要深入理解向量检索原理

Agent 记忆场景适用性

  • ✅ 超大规模生产系统(>1 亿向量)
  • ✅ 有专业运维团队的企业
  • ❌ 小规模或个人项目
  • ❌ 需要即时写入检索的场景

2.3 Qdrant

架构定位:开源高性能向量搜索引擎

核心优势

  • Rust 实现:内存安全和性能兼顾,无 GC 停顿问题
  • 实时性:写入即可检索,延迟在毫秒级,非常适合 Agent 的实时记忆需求
  • 丰富的过滤:支持复杂的 Payload 过滤条件(嵌套字段、范围、地理位置等)
  • 混合检索:原生支持向量+关键词的混合检索
  • 轻量部署:单二进制部署,Docker 一行命令启动,资源占用低
  • 量化压缩:支持标量量化和积量化,大幅降低内存占用
  • 多租户:通过 Collection 和 Payload 分组实现高效的多租户管理

核心劣势

  • 超大规模性能:在 10 亿级向量规模下,性能不如 Milvus 的分布式架构
  • 云服务较新:Qdrant Cloud 相比 Pinecone 的成熟度仍有差距
  • 生态覆盖:虽然增长迅速,但生态系统的广度仍不及 Milvus

Agent 记忆场景适用性

  • ✅ 中小规模生产部署(<1 亿向量)
  • ✅ 需要实时写入检索的 Agent 记忆
  • ✅ 多租户 Agent 平台
  • ✅ 本地/私有化部署需求
  • ❌ 超大规模记忆存储

2.4 Chroma

架构定位:轻量级向量数据库,AI 原生设计

核心优势

  • 极简 API:5 行代码即可完成向量存储和检索
  • 嵌入式优先:支持嵌入式运行,无需独立服务
  • LangChain 深度集成:作为 LangChain 默认向量存储之一
  • 开发体验:对开发者极其友好,上手成本几乎为零

核心劣势

  • 规模限制:不适合超过百万级向量的场景
  • 性能:在大规模数据下性能下降明显
  • 功能有限:不支持复杂的过滤条件和混合检索
  • 生产就绪度:更适合原型开发,生产部署需要额外工作

Agent 记忆场景适用性

  • ✅ 原型开发和 POC
  • ✅ 个人 Agent 项目
  • ❌ 生产环境
  • ❌ 多用户场景

2.5 Weaviate

架构定位:开源向量搜索引擎,支持多模态

核心优势

  • 多模态:原生支持文本、图像、PDF 等多模态数据的向量化
  • 模块化向量化:内置多种 embedding 模型(OpenAI、Cohere、HuggingFace 等),可自动向量化
  • GraphQL API:灵活的查询接口,支持复杂的数据关联
  • 混合检索:支持 BM25 + 向量的混合检索,权重可调

核心劣势

  • Java 依赖:需要 JVM 环境,资源占用较高
  • 部署复杂度:介于 Qdrant 和 Milvus 之间
  • 性能:在纯向量检索性能上略逊于 Qdrant

Agent 记忆场景适用性

  • ✅ 多模态 Agent 记忆(文本+图像)
  • ✅ 需要自动向量化(不想自行管理 embedding)的场景
  • ❌ 对性能要求极高的实时场景

三、性能基准测试

我们使用标准数据集(1M 条 1536 维 OpenAI embedding 向量)对三个主要方案进行了基准测试:

3.1 写入性能

数据库写入吞吐 (vectors/s)写入延迟 P99
Pinecone (Serverless)~5,000120ms
Milvus 2.4~15,000200ms
Qdrant 1.10~20,00015ms

3.2 查询性能

数据库QPS (top-10)查询延迟 P50查询延迟 P99
Pinecone85012ms45ms
Milvus1,2008ms35ms
Qdrant1,5005ms18ms

3.3 元数据过滤查询

在添加 payload 过滤条件(过滤掉约 50% 的数据)后:

数据库QPS查询延迟 P99
Pinecone62065ms
Milvus80050ms
Qdrant1,10022ms

3.4 内存占用

数据库1M 向量内存占用
PineconeN/A (托管)
Milvus~6.5 GB
Qdrant~2.1 GB (开启量化)

四、Agent 记忆系统架构实践

4.1 推荐架构:Qdrant + 分层记忆

基于上述对比,对于大多数 Agent 记忆系统场景,我们推荐以 Qdrant 为核心的分层记忆架构:

第一层:工作记忆(Redis)

存储当前对话的上下文和临时信息。这一层不使用向量检索,而是简单的键值存储。TTL 设为 1-24 小时,确保过期数据自动清理。

第二层:情景记忆(Qdrant)

存储对话历史片段,按时间窗口组织。每条记忆包含:

  • 向量嵌入(对话摘要的 embedding)
  • 元数据:时间戳、对话 ID、参与者、主题标签
  • 原始内容:对话片段的压缩存储

检索时使用时间衰减加权:越近期的记忆权重越高,实现"自然遗忘"效果。

第三层:语义记忆(Qdrant)

存储从对话中提取的结构化知识和事实。这些是长期记忆,不会自动遗忘。每条记忆包含:

  • 向量嵌入
  • 元数据:知识类型、置信度、来源、创建/更新时间
  • 内容:结构化的事实表述

检索时使用置信度加权排序。

4.2 记忆写入流程

用户消息 → Agent 处理 → 
  ├→ 即时写入工作记忆 (Redis)
  ├→ 异步提取关键信息 → 写入情景记忆 (Qdrant)
  └→ 异步知识提取 → 更新语义记忆 (Qdrant)

异步处理是关键。记忆写入不应阻塞 Agent 的响应流程。使用消息队列(如 Redis Streams)实现异步写入管线。

4.3 记忆检索流程

当前上下文 → 生成查询向量 →
  ├→ 检索工作记忆 (Redis, 精确查询)
  ├→ 检索情景记忆 (Qdrant, 向量+时间过滤)
  └→ 检索语义记忆 (Qdrant, 向量+类型过滤)
→ 合并去重 → 相关性重排序 → 注入 Agent 上下文

合并和重排序使用 Reciprocal Rank Fusion (RRF) 算法,平衡不同记忆来源的排名差异。

4.4 记忆管理策略

去重:当新记忆与已有记忆的向量相似度超过 0.95 时,执行合并而非新增。

遗忘:情景记忆设置基于时间的衰减权重,超过 90 天且未被检索过的记忆降低权重,超过 180 天的自动归档。

冲突解决:当新事实与旧事实矛盾时(通过 LLM 判断),保留两者但标记新事实为"最新",旧事实标记为"已过时"。

五、选型决策矩阵

根据不同场景的需求优先级,给出选型建议:

场景特征推荐方案原因
快速原型 / POCChroma零运维,开发最快
个人 Agent 项目Qdrant (本地)轻量部署,性能优秀
中小团队生产环境Qdrant (云或自托管)实时性好,运维简单
大规模企业平台Milvus百亿级支持,架构成熟
多模态记忆Weaviate原生多模态支持
不想运维Pinecone全托管,省心
数据合规要求Qdrant / Milvus支持私有化部署

六、未来趋势

向量数据库领域正在快速演进,以下几个趋势值得关注:

1. 算法融合:纯向量检索和传统关键词检索的界限正在模糊,混合检索将成为标配。

2. 结构化向量:将向量与结构化数据深度融合,支持向量+SQL 的混合查询。

3. 端侧向量数据库:随着端侧 AI 的发展,轻量级向量数据库(如 SQLite-VSS)将获得更多关注。

4. 自适应索引:根据数据分布自动选择最优索引策略,减少手动调优。

5. 隐私保护检索:结合同态加密或 TEE 技术,实现密态向量检索,满足严格的数据隐私需求。

结语

向量数据库是 Agent 记忆系统的基石,但没有"最好"的向量数据库,只有"最适合"的选择。本文的对比和建议基于 Agent 记忆系统的通用需求,在实际选型时,还需要结合团队技术栈、运维能力、预算约束和特定业务需求进行综合判断。

记住,技术选型不是一锤子买卖。选择一个有活跃社区、清晰路线图和良好迁移路径的方案,比选择一个"当前最优"的方案更重要。在 Agent 技术快速迭代的今天,保持架构的灵活性才是最明智的选择。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。