百万级租户的长期记忆
短期记忆在上下文窗口,长期记忆落库成行。Agent 数据库多租户用 partition key 让单个 collection 承载百万级租户;需要独立 schema 时,每集群默认可建 65,536 个 collection。
Milvus 是面向 AI Agent 的开源数据库:组织百万级租户的长期记忆,结合 RBAC、混合检索、grep 和 MCP。行级权限仅 Zilliz Cloud 企业版提供。
短期记忆在上下文窗口,长期记忆落库成行。Agent 数据库多租户用 partition key 让单个 collection 承载百万级租户;需要独立 schema 时,每集群默认可建 65,536 个 collection。
RBAC 给每个 Agent 或工具独立角色;行级权限仅在 Zilliz Cloud 企业版提供。
dense 与 BM25 一起召回,叠加正则、LIKE、短语过滤,再统一重排,一次请求完成。
将 agent_id、user_id 或 session_id 用作分区键,一个 collection 可组织百万级租户;每次请求仍必须带租户过滤。情景、语义和程序性记忆可用类型字段区分,schema 或权限边界不同则分 collection。
开源 Milvus 支持实例、数据库和 collection 级的用户、角色与权限。行级权限仅 Zilliz Cloud 企业版支持;partition key 本身不提供授权控制。
Agent 既要语义也要原文:错误码、文件路径、订单号。正则过滤和各种匹配既能单独用,也能放进向量检索和混合检索。
Milvus 是 Agent 记忆管理框架下面的存储层,MCP 数据库服务让 Claude Desktop、Cursor 直接查。
| 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 文档。
召回某个用户命中正则的记忆,dense 与 BM25 两路结果用 RRF 融合排序。
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 索引可加速正则。
两者都要:业务系统放订单、账单这类事务数据;记忆、文档和工具结果放 Milvus,按租户过滤的混合检索和按行过期是内置能力,Zilliz Cloud 再加行级安全。
短期记忆就是上下文窗口,随会话结束;长期记忆要落库才能跨会话:每条智能体记忆一行,embedding 加 user_id、时间戳、记忆类型(情节 / 语义 / 程序)等标量字段,按租户混合检索召回。
三条路:upsert 按主键覆盖旧记忆;Entity TTL(Milvus 3.0+)按时间自动过期;按过滤条件 delete 一次清掉某个 user_id 的全部记忆,用户要求删除数据时就靠它。
管数据而不是管 prompt:每个租户一个 partition key,每个 Agent 或工具一个 RBAC 角色;Zilliz Cloud 的行级安全按调用者过滤每次读写,prompt 注入也扩不了范围。
RAG 检索的是 Agent 没写过的共享文档;记忆是按用户隔离、由 Agent 运行时写入的。两者都能放在同一个 Milvus 集群里,用同一套混合检索和过滤。
能。正则(=~、!~)、LIKE、TEXT_MATCH、PHRASE_MATCH 都能作为过滤条件放进向量或混合检索,精确匹配和语义排序一次请求完成。
从快速入门开始,给每个 Agent 或用户一个 partition key 和一个角色,接上 Mem0 或 MCP,同一套代码可以平滑迁到集群或 Zilliz Cloud。