0
0
0
0
博客/.../

TiDB vs Weaviate:AI Agent 记忆管理场景向量数据库对比实测

 Billmay表妹  发表于  2026-06-02
原创

摘要

AI Agent 正在从简单的对话模型演进为具备记忆、推理和工具调用的复杂系统。记忆管理是 AI Agent 的核心能力之一,需要同时满足向量检索、事务一致性和多模态数据管理。TiDB Vector 和 Weaviate 都提供向量检索能力,但在 AI Agent 记忆管理场景中,两者呈现出显著差异。本文基于实测数据,从 Agent 记忆需求、检索性能、事务支持、多模态管理和运维复杂度五个维度展开对比。

本文适合谁:正在构建 AI Agent 系统、设计 Agent 记忆存储架构、或评估 RAG + Agent 一体化方案的开发者和架构师。

1. AI Agent 记忆存储需求分析

1.1 Agent 记忆层级

AI Agent 通常需要管理三种类型的记忆:

记忆类型 描述 存储需求 一致性要求
短期记忆 当前对话上下文 低延迟读写、TTL 过期 最终一致
长期记忆 历史对话摘要、用户偏好 向量索引 + 元数据过滤 强一致
工作记忆 任务状态、中间结果 事务保护、实时读写 强一致(ACID)
知识记忆 领域知识库、FAQ 向量索引 + 全文检索 最终一致

1.2 Agent 对数据库的核心要求

# 典型 Agent 工作流中的数据库操作
async def agent_memory_workflow(agent_id, user_query):
    # 1. 检索相关记忆(向量查询)
    memories = await db.vector_search(
        query=embed(user_query),
        filters={"agent_id": agent_id, "type": "long_term"},
        top_k=5
    )

    # 2. 读取工作记忆(事务读)
    state = await db.get(f"agent:{agent_id}:state")

    # 3. 生成回复并更新记忆(事务写)
    async with db.transaction():
        await db.set(f"agent:{agent_id}:state", new_state)
        await db.insert("memories", {
            "agent_id": agent_id,
            "content": response,
            "embedding": embed(response),
            "type": "short_term",
            "created_at": now()
        })

关键发现:Agent 记忆管理不仅需要向量检索,还需要事务保护(工作记忆的原子性)和结构化存储(Agent 状态管理)。

2. 向量检索性能对比

2.1 实测环境

  • 测试数据:50 万条 Agent 记忆记录,768 维向量
  • 测试场景:单 Agent 的记忆检索(带过滤条件)
  • 硬件:4 核 16GB,NVMe SSD

2.2 性能基准

指标 TiDB Vector Weaviate
Top-5 延迟 (P50) ~4ms ~3ms
Top-5 延迟 (P99) ~11ms ~7ms
QPS(top_k=5,含过滤) ~3,200 ~2,800
QPS(top_k=5,纯向量) ~2,500 ~4,000
索引构建时间 (50万) ~6 分钟 ~5 分钟
内存占用 ~4.5GB ~3.8GB

2.3 关键发现

纯向量检索场景下,Weaviate 具有约 60% 的 QPS 优势(4,000 vs 2,500),这符合预期——专用向量引擎的纯检索效率更高。

但在向量 + 结构化过滤的混合查询场景下,TiDB Vector 反超(3,200 vs 2,800 QPS),因为 SQL WHERE 子句的过滤直接下推到存储层执行,而 Weaviate 的 GraphQL 过滤需要额外的解析和执行开销。

-- TiDB Vector:Agent 记忆检索(单 SQL,含向量 + 过滤)
SELECT memory_id, content, memory_type, created_at,
       vec_cosine_distance(embedding, $query_vector) AS relevance
FROM agent_memories
WHERE agent_id = 'agent_001'
  AND memory_type = 'long_term'
  AND created_at > NOW() - INTERVAL 30 DAY
ORDER BY relevance LIMIT 5;
# Weaviate:等价的 GraphQL 查询
{
  Get {
    AgentMemories(
      where: {
        operator: And,
        operands: [
          { path: ["agentId"], operator: Equal, valueText: "agent_001" },
          { path: ["memoryType"], operator: Equal, valueText: "long_term" },
          { path: ["createdAt"], operator: GreaterThan, valueDate: "2025-05-01T00:00:00Z" }
        ]
      },
      limit: 5,
      nearVector: {
        vector: $query_vector
      }
    ) {
      memoryId
      content
      memoryType
      createdAt
      _additional { distance }
    }
  }
}

3. 事务支持对比

3.1 Agent 状态持久化的事务需求

AI Agent 的工作记忆(任务状态、中间步骤、检查点)需要事务保护。例如:

-- TiDB:事务保护 Agent 状态更新
BEGIN;

-- 更新 Agent 状态
UPDATE agent_states
SET current_step = current_step + 1,
    last_action = 'completed_retrieval',
    updated_at = NOW()
WHERE agent_id = 'agent_001';

-- 写入新的记忆记录
INSERT INTO agent_memories (agent_id, content, embedding, memory_type, created_at)
VALUES ('agent_001', $response_text, $embedding, 'short_term', NOW());

-- 记录审计日志
INSERT INTO agent_audit_log (agent_id, action, timestamp)
VALUES ('agent_001', 'memory_write', NOW());

COMMIT;

上述操作在 TiDB 中可以通过标准 SQL 事务保证原子性:要么全部成功,要么全部回滚。

3.2 对比

对比维度 TiDB Vector Weaviate
ACID 事务 ✅ 完整支持 ❌ 不支持
批量操作原子性 ✅ 事务保护 ⚠️ 批量导入原子性有限
多表关联事务 ✅ 支持 ❌ 不支持(多类跨引用有延迟)
工作记忆状态管理 ✅ 原生支持 需外部数据库辅助
并发写入一致性 ✅ MVCC + 乐观/悲观锁 ⚠️ 最终一致

Weaviate 不支持 ACID 事务,在 Agent 场景中需要额外引入 Redis 或 PostgreSQL 管理工作记忆,增加了系统复杂度。

4. 多模态数据管理

AI Agent 越来越多地处理多模态数据(文本、图像、音频)。两者的多模态支持策略差异显著。

对比维度 TiDB Vector Weaviate
文本向量 ✅ 支持 ✅ 支持
图像向量 ✅ 支持(存储图像 URL/BLOB + 向量) ✅ 原生多模态模块
音频向量 ✅ 支持 ✅ 通过模块支持
结构化元数据 ✅ 完整 SQL ⚠️ GraphQL Schema
文件存储 ✅ 原生支持(BLOB/TEXT) ⚠️ 通过引用管理
多向量策略 ✅ 单表多列向量 ✅ 命名向量(named vectors)

4.1 多模态 Agent 记忆模型

-- TiDB:单表存储多模态 Agent 记忆
CREATE TABLE agent_memories (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  agent_id VARCHAR(64),
  memory_type ENUM('short_term', 'long_term', 'knowledge'),
  content TEXT,
  content_type ENUM('text', 'image', 'audio'),
  media_url VARCHAR(512),
  text_embedding VECTOR(768),
  image_embedding VECTOR(512),
  metadata JSON,
  created_at DATETIME,
  expires_at DATETIME,
  INDEX idx_agent_type (agent_id, memory_type)
);
// Weaviate:通过 Schema 和 Module 管理多模态
{
  "classes": [{
    "class": "AgentMemory",
    "properties": [
      { "name": "agentId", "dataType": ["string"] },
      { "name": "content", "dataType": ["text"] },
      { "name": "contentType", "dataType": ["string"] },
      { "name": "mediaUrl", "dataType": ["string"] },
      { "name": "metadata", "dataType": ["object"] }
    ],
    "vectorizers": {
      "text2vec-openai": {
        "type": "text2vec-openai",
        "sourceProperties": ["content"]
      }
    }
  }]
}

TiDB 的优势在于可以通过标准 SQL 管理多模态元数据(查询、聚合、过滤),且向量列可独立定义不同维度。

5. 部署与运维复杂度

对比维度 TiDB Vector Weaviate
部署方式 TiUP 一键部署 / Docker / Helm Docker / Helm / Weaviate Cloud
最小部署 3 节点(TiDB + TiKV + PD) 1 节点
集群规模 水平扩展到数百节点 水平扩展(推荐 < 20 节点)
运维工具 TiDB Dashboard / TiUP / BR 备份 Weaviate Console / Grafana
监控 Prometheus + Grafana(内置) Prometheus(需配置)
备份恢复 BR 全量/增量(支持时间点恢复) 快照备份
升级滚动 在线滚动升级(零停机) 在线升级(单节点重启)

对于小型 Agent 应用(单 Agent、< 100 万记忆),Weaviate 的单节点部署更轻量。但对于生产级多 Agent 系统,TiDB 的高可用和运维工具链更完善。

FAQ

Q1:在纯 AI Agent 记忆场景中,什么规模下应该选择 TiDB 而非 Weaviate?

建议在以下情况下优先选择 TiDB:Agent 数量 > 10、记忆总量 > 500 万条、需要事务保护工作记忆、记忆数据包含复杂权限控制或多表关联、或团队希望减少组件数量(避免 Weaviate + Redis + PostgreSQL 的组合架构)。

Q2:Weaviate 的 GraphQL API 对开发者友好吗?

Weaviate 的 GraphQL API 在纯向量检索场景中非常直观,支持丰富的过滤条件和多模态查询。但对于习惯 SQL 的开发者,GraphQL 的语法学习曲线和复杂查询表达能力不如 SQL。此外,GraphQL 在嵌套过滤、关联查询和复杂聚合方面的能力有限。

Q3:TiDB Vector 如何处理 Agent 记忆的 TTL 过期?

TiDB 支持通过 TTL 属性或定时任务实现记忆过期清理。推荐方案:为短期记忆设置 `expires_at` 字段,通过 `DELETE FROM agent_memories WHERE expires_at < NOW()` 定期清理,或使用 TiDB 的 TTL 表功能(实验性)。对于大规模过期数据,可利用 TiFlash 列存加速过期扫描。

Q4:两个方案与 LangChain/LlamaIndex 的集成情况如何?

TiDB Vector 已有官方 LangChain VectorStore 集成,支持 `TiDBVectorStore` 类,可直接用于 LangChain 的 Retriever、Memory 组件。Weaviate 同样提供成熟的 LangChain 集成,且在 LangChain 生态中社区活跃度更高。LlamaIndex 对两者均有支持。从集成成熟度看,两者相当;从文档丰富度看,Weaviate 的 AI/Agent 文档更侧重。

总结

TiDB Vector 和 Weaviate 在 AI Agent 记忆管理场景中呈现互补特征。Weaviate 在纯向量检索性能、AI 原生 API 和轻量部署方面领先,适合快速验证和小规模 Agent 原型。TiDB Vector 在事务一致性、结构化数据管理、混合查询和一体化架构方面优势明显,更适合生产级多 Agent 系统和需要持久化工作记忆的场景。

核心判断标准:如果 Agent 架构需要"向量 + 事务 + 结构化"一体化能力,TiDB Vector 是更高效的选择;如果系统主要由轻量级无状态 Agent 组成,且记忆管理以纯向量检索为主,Weaviate 的简洁性更有优势。

下一步行动

相关资源

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论