Milvus:为 AI Agent 而生的数据库

Milvus 是面向 AI Agent 的开源数据库:组织百万级租户的长期记忆,结合 RBAC、混合检索、grep 和 MCP。行级权限仅 Zilliz Cloud 企业版提供。

  • 开源 Agent 数据库,GitHub 40K+ star
  • Partition key:单 collection 百万级租户
  • RBAC:内置与自定义权限组
  • 混合检索 + RE2 正则过滤(Milvus 3.0+)
为 Agent 而生的数据库:按 Agent 隔离记忆,权限交给数据库,精确匹配和语义排序在一次请求里完成。
为 Agent 而生的数据库:按 Agent 隔离记忆,权限交给数据库,精确匹配和语义排序在一次请求里完成。
Milvus 与 Zilliz Cloud 用户
  • Salesforce
  • Exa.ai
  • OpenEvidence
  • Read.ai
  • Notta.ai
  • Filevine
  • NVIDIA
  • Airtable

为 AI Agent 而生的数据库要做到三件事

百万级租户的长期记忆

短期记忆在上下文窗口,长期记忆落库成行。Agent 数据库多租户用 partition key 让单个 collection 承载百万级租户;需要独立 schema 时,每集群默认可建 65,536 个 collection。

绕不过去的权限

RBAC 给每个 Agent 或工具独立角色;行级权限仅在 Zilliz Cloud 企业版提供。

混合检索加 grep

dense 与 BM25 一起召回,叠加正则、LIKE、短语过滤,再统一重排,一次请求完成。

Agent 数据库怎么做多租户隔离、权限和检索

Agent 记忆系统:百万级租户的长期记忆

将 agent_id、user_id 或 session_id 用作分区键,一个 collection 可组织百万级租户;每次请求仍必须带租户过滤。情景、语义和程序性记忆可用类型字段区分,schema 或权限边界不同则分 collection。

  • 每次请求都需带租户过滤条件;partition key 可减少扫描范围,不代替权限控制。
  • 每集群默认 65,536 个 collection、64 个 database,可调。
  • 记忆遗忘内置:Entity TTL(Milvus 3.0+)让单条记忆按时过期,按过滤条件 delete 可一次清掉某个用户。

Agent 权限 RBAC,企业版再加行级安全

开源 Milvus 支持实例、数据库和 collection 级的用户、角色与权限。行级权限仅 Zilliz Cloud 企业版支持;partition key 本身不提供授权控制。

  • 内置 COLL_RO、COLL_RW 等权限组,也可自定义。
  • 行级权限策略和调用身份的配置由企业版部署决定。

丰富的查询:混合检索 + grep

Agent 既要语义也要原文:错误码、文件路径、订单号。正则过滤和各种匹配既能单独用,也能放进向量检索和混合检索。

  • dense + sparse/BM25 混合检索,RRF 或加权重排。
  • 正则 =~ / !~(RE2,Milvus 3.0+)和 LIKE,NGRAM 索引加速。
  • TEXT_MATCH、PHRASE_MATCH、TEXT_MATCH_FUZZY 与 JSON 路径过滤。

接你在用的记忆框架,以及 MCP

Milvus 是 Agent 记忆管理框架下面的存储层,MCP 数据库服务让 Claude Desktop、Cursor 直接查。

  • 文档里有 Mem0、Letta(MemGPT)、Agno、OpenAI Agents SDK、LangChain、LlamaIndex 的集成教程。
  • MCP 工具覆盖向量、文本、混合检索,以及 query、insert、delete。
  • Embedding Function(Milvus 2.6+)在写入和查询时调用 OpenAI、Cohere、Voyage AI 等模型。

Agent 记忆管理需求与 Milvus 能力对照

Agent 平台需求与 Milvus 能力:多租户隔离、权限、混合检索(默认值,可配置)
Agent 需求Milvus 能力可用版本
按用户、Agent、会话隔离长期记忆,百万级规模Partition key:单 collection 百万级租户开源
每个租户独立 schema 或角色每租户一个 collection 或 database:默认 65,536 / 64 个开源
每个 Agent、工具最小权限RBAC:角色、内置与自定义权限组开源
一个服务账号,背后大量终端用户绑定调用者的行级安全Zilliz Cloud(企业版)
语义召回 + 精确字符串召回混合检索叠加正则、LIKE、TEXT_MATCH 过滤开源,Milvus 3.0+

来源:milvus.io/docs/zh 的 multi_tenancy、rbac、privilege_group、multi-vector-search、pattern-matching 文档。

混合检索和 grep,一次调用

召回某个用户命中正则的记忆,dense 与 BM25 两路结果用 RRF 融合排序。

python
from pymilvus import MilvusClient, AnnSearchRequest, RRFRanker

client = MilvusClient(uri="http://localhost:19530", token="root:Milvus")
question = "what did we promise about the refund?"
scope = 'user_id == "u42" and content =~ "(?i)refund.*order [0-9]+"'

# embed() stands for your embedding model; it returns a list of floats.
dense = AnnSearchRequest(data=[embed(question)], anns_field="dense",
                         param={}, limit=20, expr=scope)
# BM25 sparse field generated from content: pass the raw query text.
sparse = AnnSearchRequest(data=[question], anns_field="sparse",
                          param={}, limit=20, expr=scope)

hits = client.hybrid_search(
    collection_name="agent_memory",
    reqs=[dense, sparse],
    ranker=RRFRanker(),
    limit=5,
    output_fields=["content"],
)

假设 user_id 为 partition key,content 为 VARCHAR 字段,另有一个 dense 向量字段和一个 BM25 sparse 字段。给 content 建 NGRAM 索引可加速正则。

常见问题

Agent 需要什么样的数据库?向量库够不够,还是用 PostgreSQL?

两者都要:业务系统放订单、账单这类事务数据;记忆、文档和工具结果放 Milvus,按租户过滤的混合检索和按行过期是内置能力,Zilliz Cloud 再加行级安全。

短期记忆和长期记忆的区别?AI Agent 长期记忆怎么存,能否跨会话记住用户偏好?

短期记忆就是上下文窗口,随会话结束;长期记忆要落库才能跨会话:每条智能体记忆一行,embedding 加 user_id、时间戳、记忆类型(情节 / 语义 / 程序)等标量字段,按租户混合检索召回。

如何更新、缩减记忆(压缩与遗忘)?

三条路:upsert 按主键覆盖旧记忆;Entity TTL(Milvus 3.0+)按时间自动过期;按过滤条件 delete 一次清掉某个 user_id 的全部记忆,用户要求删除数据时就靠它。

怎么防止一个 Agent 读到别的用户的数据?

管数据而不是管 prompt:每个租户一个 partition key,每个 Agent 或工具一个 RBAC 角色;Zilliz Cloud 的行级安全按调用者过滤每次读写,prompt 注入也扩不了范围。

长期记忆和 RAG 有什么区别?

RAG 检索的是 Agent 没写过的共享文档;记忆是按用户隔离、由 Agent 运行时写入的。两者都能放在同一个 Milvus 集群里,用同一套混合检索和过滤。

Agent 能同时像 grep 一样查、又按语义查吗?

能。正则(=~、!~)、LIKE、TEXT_MATCH、PHRASE_MATCH 都能作为过滤条件放进向量或混合检索,精确匹配和语义排序一次请求完成。

用 Milvus 搭建 AI Agent 长期记忆

从快速入门开始,给每个 Agent 或用户一个 partition key 和一个角色,接上 Mem0 或 MCP,同一套代码可以平滑迁到集群或 Zilliz Cloud。