真正好的搜索有多难?—— Index:专为 AI 智能体设计的毫秒级动态文档检索系统
@opennote 创始人 Abhi 这篇完整技术分享,核心内容是他们内部自研的搜索系统 Index。这个系统不是给人用的搜索引擎,而是专为 AI 智能体在用户个人知识库上实现极快且极准的检索而设计。
为什么现有搜索系统无法满足智能体需求
传统搜索引擎是为人类设计的。人会逐渐摸清系统的脾气,学会换词、补词、跳过缺陷。而智能体完全没有这种能力,它每次查询都是从零开始,没有记忆,也没有对知识库的“感觉”。更严重的是:
· 智能体极易产生幻觉,只要给它的上下文稍微错一点,整条回答就崩了。
· Opennote 的典型场景只有几千份(而不是几亿份)文档,容错率几乎为零,必须一次就把最正确的片段找出来。
· 产品面向普通消费者,不能像研究工具那样等几秒钟,端到端延迟必须稳定在几百毫秒以内。
五大硬约束
作者反复强调 Index 必须同时满足以下几乎互相打架的要求:
1. 极低延迟:P99 < 300ms(全球任何地方都一样快)
2. 高精度:在同一个概念出现在不同文件时,也要找出上下文最正确的那一份
3. 多租户与动态范围:支持同时搜索“仅我自己”“我和朋友共享”“整个社区”“加上公开网页”等任意组合,性能不能下降
4. 全球低延迟:用户和智能体可能在地球两端
5. 数据永不静止:用户随时编辑、分享、删除、改权限
关键技术选型(很多都反直觉)
1. 存储与核心检索引擎
选择了 Postgres(pgvector + pg_trgm + tsvector),托管在 PlanetScale,而不是主流的 Pinecone、Weaviate、Qdrant、Chroma 等专用向量数据库。
原因在于:
· 元数据过滤极快,能在做向量计算前就把候选集砍到最小
· 原生支持真正的混合检索(全文 + 模糊匹配 + 语义)
· 多租户边界、动态过滤、UPSERT/DELETE 都天然高效
· 实测把 P99 延迟从 475ms 压到 209ms
2. 全球分布式运行时
全部架构跑在 Cloudflare 生态:Workers + Hyperdrive + R2 + Workers AI + Vectorize + KV。
好处是代码天然在全球几十个边缘节点运行,访问数据库时通过 Hyperdrive 加速后感觉像本地一样快。
3. 文档处理流水线(Ingestion)
采用完全无状态的 Worker + R2 对象存储设计,严格适配 Worker 128MB 内存限制。流程如下:
1. 递归分块(对各种乱七八糟的文档都足够鲁棒)
2. 用 hash 精准对比新旧 chunk,只对真正变动的部分重新计算
3. 只对变动的 chunk 重新 embedding(省钱又省时)
4. 为文档和重要段落生成摘要,给智能体额外的“这是整篇在讲什么”的上下文
5. UPSERT 新 chunk
6. 删除旧 chunk,同时触发缓存失效
4. 搜索流程(Search)
1. 收到智能体查询后先做参数清洗和过滤条件拼接
2. 在 Postgres 里用元数据把搜索空间预先砍到最小(租户、来源、标签、时间、显式排除等)
3. 在过滤后的集合上并行跑全文检索和向量检索
4. 把两套得分归一化到 0-1,用一个叫 alpha 的参数动态融合(0=纯关键词,1=纯语义)
5. 数据库内完成去重、排序、取 top-K
6. 可选再用 Workers AI 做一次轻量重排序,最后返回
5. 缓存系统(最巧妙的部分)
普通缓存会在文档更新后变脏,作者设计了三层机制彻底解决:
· 精确缓存:相同 query + 相同过滤条件直接命中 KV
· 语义缓存:用 Vectorize 存 query 的 embedding,相似问题也能命中
· 反向索引失效:每个 chunk 都记录自己出现在哪些查询的缓存里,一旦 chunk 失效,就主动把所有相关缓存删掉
这样既极大降低数据库压力,又保证永远不会返回已过时的内容。
实测结果
用标准数据集 MSMARCO 10,000 条问答对 + BGE-M3 模型,和 ChromaDB 做了严格对比。
在 Recall@10、MRR@10、MAP@10、NDCG@10 四个指标上,Index 与 Chroma 基本持平或略高,同时还额外具备混合检索、多租户隔离、动态过滤等能力,真实生产环境 P99 延迟稳定在 300ms 以内。
目前 Index 已经正式承载 Opennote 社区功能的全部检索负载。
未来演进方向
作者认为现在的 Index 只是“检索”,下一步要进化成“理解”:
· 给 chunk 之间加上时间、因果、演化关系
· 引入重要性/流行度信号
· 继续蒸馏更小更快更专用的 embedding 模型
· 让智能体可以自定义多步检索策略
最终目标是让智能体真正拥有对用户知识库的“心智模型”,而不是每次都从零开始瞎猜。
邵猛,中年失业程序员 😂
专注 - Context Engineering, AI Agents.
分享 - AI papers, apps and OSS.
ex Microsoft MVP
合作 - 私信/邮箱:shaomeng@outlook.com
📢 公众号/小红书: AI 启蒙小伙伴