构建面向Agent的多租户搜索引擎
摘要
本文讲述了作者构建Index——一个面向AI Agent的多租户动态语料库检索系统的完整过程。文章从背景出发,阐述了传统搜索引擎无法满足Agent需求的根本原因,详细介绍了基于Postgres+pgvector的存储架构、Cloudflare Workers的全球化部署方案、六步文档处理管道、混合搜索机制以及三层缓存系统。最终通过MSMARCO基准测试验证,Index在保持与ChromaDB相当检索质量的同时,实现了P99延迟低于300ms的性能目标,并成功支持多租户隔离和动态搜索空间。
内容框架与概述
文章开篇即点明核心矛盾:传统搜索系统是为人类而非AI Agent设计的。人类具有适应性,能通过不断尝试建立对语料库的心智模型,而Agent缺乏这种直觉和记忆能力,需要在毫秒级内获得准确结果。这导致作者必须构建一个不依赖Agent学习曲线、能在模糊概念中保持准确性、同时满足多租户边界和全球低延迟要求的搜索系统。
在技术架构部分,作者详细阐述了选择Postgres+pgvector而非专用向量数据库的四大理由:元数据作为一等公民、多租户需求、混合搜索能力以及更新和缓存需求。通过Cloudflare Workers实现全球化部署,利用R2对象存储和Workers AI构建了包含分块、分类、嵌入、摘要、保存和删除六步的处理管道,并在存储层通过PlanetScale优化性能,将P99延迟从475ms降至209ms。
搜索设计部分展示了从查询解析、过滤、搜索、归一化到最终返回的完整流程,采用混合搜索策略将全文匹配和语义匹配结果按alpha值加权合并。缓存系统则通过KV存储和Vectorize语义映射实现双层缓存,并创新性地使用反向映射解决文档变更导致的缓存失效问题。最终评估表明,Index在Recall、MRR、MAP和NDCG等指标上与ChromaDB相当,同时支持更复杂的多租户场景。
核心概念及解读
混合搜索:同时结合全文搜索和语义搜索的技术,通过向量捕捉文档细微差别,通过关键词匹配捕捉文档内容,并根据alpha参数调整两种搜索的权重,解决纯语义方法可能返回错误文件中的正确概念的问题。
递归分块:一种文档切分算法,将文档分割成重点突出的部分,因其对语料库的语义内容不敏感,特别适合处理讲座、笔记、成绩单等高度非结构化的数据流,确保切片能与摘要一起提供相关上下文。
反向映射:一种缓存失效机制,不仅维护搜索到切片的映射,还维护切片到搜索哈希的反向映射。当文档更新时,通过这个反向索引快速定位并使所有包含过时切片的缓存失效,确保在动态语料库中保持搜索准确性。
多租户边界:系统需要支持跨用户个人资料、群组、社区等多个实体维度进行搜索的能力,要求在同一搜索中动态扩展或收缩搜索空间,同时保持性能和隔离性,这是面向消费者应用的关键约束。
上下文腐烂:当LLM合成内容时,如果最准确的内容位置靠后或被低质量结果稀释,会导致输出质量下降。因此搜索系统需要将最佳结果排在尽可能靠前的位置,通过MRR、MAP和NDCG等指标评估和优化排序质量。
原文信息
| 字段 | 内容 |
|---|---|
| 原文 | 真正优秀的搜索系统实属难得 |
| 作者 | |
| 发表日期 | 2025-11-25 |
此摘要卡片由 AI 自动生成