Retrieval After RAG: Hybrid Search, Agents, and Database Design — Simon Hørup Eskildsen of Turbopuffer


基本信息


摘要/简介

Turbopuffer 源于一个阅读应用。


导语

Turbopuffer 源于一个阅读应用,其核心在于探索检索增强生成(RAG)之后的系统演进。随着 RAG 技术的普及,单纯的向量检索已难以满足复杂场景对准确性与灵活性的需求。本文将深入探讨混合搜索、智能代理与数据库设计如何协同工作,帮助开发者理解如何构建更稳健的后端架构,以应对日益严苛的数据检索挑战。


摘要

以下是对 Simon Hørup Eskildsen(Turbopuffer)关于“RAG 之后的检索”主题的中文总结:

核心主题:超越基础 RAG 的检索架构

随着 RAG(检索增强生成)技术的普及,仅仅依赖基础的向量检索已不足以应对复杂的生产环境。Simon 指出,为了提高答案的相关性和准确性,现代 AI 应用必须演进到更复杂的检索策略,核心在于混合搜索智能体代理以及优化的数据库设计

1. 向量检索的局限性

虽然向量搜索是 RAG 的基础,但它并非万能。

  • 语义漂移:向量搜索基于语义相似度,往往会检索到“概念相近”但“事实不符”的内容。例如,搜索“最新的 iPhone 价格”可能会返回关于 iPhone 历史的百科全书条目,而非具体的价格表。
  • 精确匹配缺失:向量数据库通常难以处理专有名词、产品 ID 或需要精确字符匹配的关键词(如 “SQL 注入”)。

2. 混合搜索

为了解决上述问题,系统必须结合多种检索模式:

  • 关键词搜索(BM25):用于精确匹配词汇,弥补向量搜索在处理专有名词和精确短语上的不足。
  • 元数据过滤:利用结构化数据(如日期、类别、标签)对搜索结果进行“硬过滤”,确保检索的内容在事实层面有效。
  • 重排序:先通过低成本方式(如向量或关键词)召回大量候选结果,再使用高精度模型(如 Cross-Encoder)对结果进行精细排序。这是在保证效果的同时控制计算成本的关键技术。

3. 智能体代理与查询理解

检索不仅仅是匹配关键词,更重要的是理解用户的意图。

  • 查询转换:智能体需要将用户的自然语言转化为更适合检索的形式(例如将“如何修车”转化为特定的维修文档关键词)。
  • 多轮检索与推理:对于复杂问题,单一检索往往无效。智能体应具备拆解问题的能力,进行多次检索并综合信息。
  • 自我修正:如果检索结果不理想,智能体应能自主调整搜索策略(例如更换关键词或扩大搜索范围)。

4. 数据库设计与架构

Turbopuffer 的经验表明,


评论

中心观点 文章的核心观点在于:在RAG(检索增强生成)系统的实际落地中,通用的向量检索往往无法满足生产环境对精确度的严苛要求,必须通过混合检索、精细化的数据库设计以及Agent(智能体)工具的动态介入,构建“检索后”的二次筛选与验证机制,才能弥合语义相似性与事实准确性之间的鸿沟。

支撑理由与深度评价

1. 向量检索的语义模糊性与“幻觉”风险

  • [事实陈述] 文章指出,纯向量检索基于语义相似度而非事实匹配,导致在处理具体数据(如价格、日期、专有名词)时经常出现“看似相关但实则错误”的结果。
  • [作者观点] Eskildsen认为,仅依赖Embedding(嵌入)技术是懒惰的工程实践,无法解决生产环境中的精确匹配问题。
  • [你的推断] 这揭示了当前RAG行业的痛点:大模型的理解能力与检索系统的精确表达能力存在错位。向量数据库擅长模糊联想,但缺乏对结构化事实的严格约束。
  • [反例/边界条件] 对于开放域的创意写作或宽泛的主题探索(如“给我讲个关于勇气的故事”),纯向量检索的高召回率比精确匹配更重要,引入复杂的混合检索反而可能降低系统的流畅度和响应速度。

2. 混合检索的必要性:关键词与语义的互补

  • [事实陈述] 文章提倡Hybrid Search(混合检索),即结合BM25(关键词检索)和Vector Search(向量检索)。
  • [作者观点] 关键词检索能兜底向量检索在低频词和精确匹配上的不足,两者结合(通常通过Reciprocal Rank Fusion, RRF算法)能显著提升准确率。
  • [你的推断] 这标志着行业从“向量崇拜”回归理性。BM25代表了传统的符号主义(精确匹配),而Vector代表了连接主义(概率匹配),混合检索实质是两种AI范式的工程融合。
  • [反例/边界条件] 在数据高度同质化或充斥着大量SEO垃圾文本的场景下,BM25极易引入噪声,此时过度依赖关键词匹配可能会导致检索质量劣于纯向量检索。

3. Agent作为“检索后”的验证层

  • [事实陈述] 文章探讨了利用Agent在检索之后对结果进行二次处理,例如重新打分或过滤。
  • [作者观点] 数据库不应只是存储和检索,应具备智能路由的能力,利用LLM作为逻辑层来优化传统的数据库查询结果。
  • [你的推断] 这是“RAG 2.0”或“Agentic RAG”的雏形。它将检索从“一次性查询”转变为“迭代式推理”,利用模型的推理能力弥补检索算法的缺陷。
  • [反例/边界条件] 引入Agent进行二次验证会显著增加系统延迟和Token成本。在对实时性要求极高的场景(如高频交易辅助或即时客服),这种多跳检索的架构可能是不可接受的。

4. 数据库设计的“反模式”与专用化

  • [事实陈述] Eskildsen基于Turbopuffer的开发经验,批评了传统数据库在处理AI工作流时的笨重,主张针对云原生和AI特性重新设计存储层。
  • [作者观点] 通用数据库试图做所有事情,结果往往是在特定场景下(如海量向量过滤)表现平庸。
  • [你的推断] 这反映了基础设施领域的“康威定律”:随着AI应用层逻辑的复杂化(混合检索、重排序),底层数据库必须解耦,专门的向量数据库(VVDS)将在特定垂直领域取代通用数据库的AI扩展功能。

综合评价

  • 内容深度与严谨性: 文章没有停留在算法表面的调优,而是深入到了“检索后”这一被忽视的环节,指出了向量检索在处理事实性数据时的结构性缺陷。论证结合了Turbopuffer的实际工程经验,具有较高的可信度。
  • 实用价值: 对于正在构建企业级RAG的开发者极具参考价值。它打破了“向量数据库+LLM=万能”的幻想,指出了必须引入关键词匹配和后处理模块的工程路径。
  • 创新性: 提出了将Agent逻辑融入检索结果过滤的思路,模糊了数据库层与应用层逻辑的边界,为未来的“自治型数据库”提供了思路。
  • 争议点: 文章隐含了对专用向量数据库的推崇。然而,业界(如Postgres团队)认为通用数据库通过插件(如pgvector)也能达到类似效果,且能减少数据迁移的复杂性。此外,混合检索中的权重调优往往依赖于数据集,缺乏通用标准。

实际应用建议

  1. 架构分层: 在设计RAG系统时,不要试图用一步向量搜索解决所有问题。应设计“召回层”和“精排层”。
  2. 数据切片策略: 针对混合检索,需要同时维护全文索引和向量索引,确保数据更新的原子性。
  3. 成本控制: 在使用Agent进行二次验证时,应设置缓存机制,避免对重复查询进行昂贵的LLM推理。

可验证的检查方式

  1. [指标] 检索准确率对比: 在包含具体数值(如“2023年Q4营收”)的数据集上,对比纯向量检索与混合检索的Hit Rate(命中率)和NDCG(归一化折损累积增益)。预期混合检索在精确匹配指标

技术分析

基于 Simon Hørup Eskildsen(Turbopuffer 创始人)关于 “Retrieval After RAG” 的演讲及相关技术分享,以下是对该主题的深入分析。Simon 的背景非常独特:他曾是 Shopify 的技术架构负责人,Turbopuffer 诞生于他构建阅读应用的实际需求,这为他的技术观点提供了极强的实战色彩。


深度分析报告:RAG 之后的检索、混合搜索与数据库设计

1. 核心观点深度解读

主要观点: 文章的核心观点在于反驳当前 RAG(检索增强生成)领域中“重模型、轻检索”的倾向。Simon 认为,随着 LLM(大语言模型)能力的提升,检索(Retrieval)环节而非生成环节,正成为 RAG 系统新的瓶颈和决定性因素。他主张通过混合搜索和极致的数据库设计来释放 RAG 的潜力。

核心思想: “Retrieval After RAG” 这一短语具有双重含义:一是指“在 RAG 流程中,检索发生在生成之后(指代 Agent 的多步迭代检索)”;二是指“在 RAG 成为标准范式之后,我们该如何重新审视检索技术”。Simon 传达的核心思想是:向量搜索不是银弹,单纯的语义检索无法满足生产环境对精准度的要求,必须回归到混合搜索,并重新设计数据库以适应高维向量的实时性需求。

创新性与深度: 该观点的创新性在于打破了“向量数据库”这一营销热词带来的迷思。大多数从业者盲目追求全向量检索,而 Simon 从信息检索的底层逻辑指出,关键词匹配(BM25)与向量检索的结合才是通往高精度的唯一路径。深度体现在他对“上下文窗口”与“检索质量”关系的辩证思考:模型窗口变大并不意味着我们可以容忍低质量的检索,相反,只有检索足够精准,大窗口才能发挥实效。

重要性: 这一观点至关重要,因为它直接决定了 AI 应用的可靠性。目前许多 RAG 应用面临“幻觉”和“答非所问”的问题,根源往往不在 LLM,而在检索。如果不解决检索的召回率和准确率问题,RAG 架构无法在关键业务中落地。

2. 关键技术要点

1. 混合搜索:

  • 原理: 结合稀疏向量(如 BM25/TF-IDF,代表关键词匹配)和稠密向量(Embeddings,代表语义相似度)。
  • 实现: Simon 强调,关键词检索擅长处理专有名词、ID 和精确匹配(例如 “iPhone 15 Pro Max”),而向量检索擅长处理同义词和概念(例如 “如何修复手机”)。两者必须通过 RRF (Reciprocal Rank Fusion) 或加权倒排合并。
  • 难点: 传统的向量数据库往往不支持高效的全文索引,或者两者结合时的性能损耗巨大。

2. HNSW 图算法与倒排文件的冲突:

  • 原理: 大多数向量库使用 HNSW(Hierarchical Navigable Small World)构建索引,这是一种基于图的索引,写入性能极差(需要大量内存构建图)。
  • 创新点: Turbopuffer 提出了基于 S3 (对象存储) 的倒排文件索引方案。他们放弃了 HNSW,转而使用量化技术将向量压缩,并利用 S3 的极高并发带宽来弥补网络延迟,从而实现了无状态的、弹性的向量检索。

3. 数据库设计的“无状态化”:

  • 原理: 传统数据库依赖内存缓存来维持速度,这导致扩容困难和成本高昂。
  • 解决方案: Turbopuffer 将计算与存储彻底分离。索引文件直接存储在 S3 上,查询时按需拉取。这种设计使得数据库可以像 Serverless 函数一样瞬间扩容,处理突发流量,而不需要预置昂贵的内存实例。

4. Agents 与 Re-Ranking:

  • Simon 提到,在 Agent 架构中,检索不是一次性的,而是迭代的。Agent 需要多次检索来验证信息。这对数据库的 QPS(每秒查询率)和延迟提出了极高的要求,这也是为什么他极力优化检索性能的原因。

3. 实际应用价值

指导意义: 对于正在构建 RAG 应用的开发者,该分析指明了一条务实的道路:不要试图用向量搜索解决所有问题。如果你的搜索体验不好,首先检查是否包含了关键词搜索。

应用场景:

  • 企业知识库: 员工搜索通常包含特定的项目代码或缩写,纯向量搜索会失效,必须用混合搜索。
  • 电商推荐: 用户搜索具体型号时需要关键词,搜索“礼物”时需要向量,混合策略能极大提升转化率。
  • 阅读应用: Simon 的原始场景,用户搜索书中的句子或概念,需要极高的语义理解精度。

注意问题: 实施混合搜索会增加系统的复杂度(需要维护两套索引)。同时,Re-ranking 阶段虽然能提升精度,但会增加延迟和 Token 消耗,需要在速度和质量之间找到平衡点。

4. 行业影响分析

对行业的启示: Turbopuffer 的出现挑战了 Pinecone、Milvus 等传统向量数据库的架构假设。它证明了“云原生”不仅仅是把数据库放在 Docker 里,而是彻底利用云的对象存储特性。

变革:

  • 成本结构变革: 通过利用廉价的 S3 存储代替昂贵的 RAM,向量搜索的边际成本大幅降低。
  • 架构变革: 未来的搜索基础设施将更加倾向于“存算分离”和无状态化,以适应 AI 应用高并发、突发流量的特性。

发展趋势: 行业将从“单一向量数据库”向“统一搜索基础设施”演进。未来的数据库将不再区分“向量库”和“全文库”,而是原生支持多模态索引。

5. 延伸思考

  • LLM 作为裁判: 既然 LLM 理解语义,我们是否可以用 LLM 来动态判断何时该用关键词搜索,何时该用向量搜索?
  • 量化与精度的权衡: Turbopuffer 使用了极端的量化(如 1-bit PQ)来压缩向量。随着 Embedding 模型的维度越来越高(例如 OpenAI 的 text-embedding-3-large),如何在极低精度下保持语义准确性是一个值得研究的前沿方向。
  • 检索的尽头是生成: 如果 LLM 的上下文窗口扩大到 1000 万 Token,检索是否还有必要?答案是肯定的,因为“注意力机制”的计算成本与文本长度呈平方级关系,检索依然是最经济的“注意力聚焦”方式。

6. 实践建议

如何应用到项目:

  1. 评估当前检索栈: 检查你的 RAG 管道。如果你只用向量搜索,立即加入 BM25 搜索(Elasticsearch 或 Postgres 的 TSV)。
  2. 测试混合效果: 使用 RRF 算法合并两路结果,调整权重比例(通常从 50:50 开始微调)。
  3. 引入 Re-ranking: 在粗排之后,使用 Cross-encoder(如 BGE-reranker)或 LLM 本身对 Top-10 结果进行精排。

行动建议:

  • 不要迷信向量数据库的专用硬件。如果你的数据量在百万级以下,Postgres (pgvector) 配合良好的全文索引可能更稳健。
  • 关注延迟。如果检索耗时超过 500ms,用户体验会急剧下降。考虑使用 Turbopuffer 这类基于 S3 的方案来降低成本并提高弹性。

7. 案例分析

成功案例:Simon 的阅读应用

  • 背景: 用户需要搜索书中的特定概念或引用。
  • 问题: 传统的全文搜索无法理解“关于勇气的段落”这种语义查询;而早期的向量搜索无法精确找到书中的原话。
  • 解决: 通过混合搜索,既能通过关键词定位到具体的书页,又能通过语义找到相关主题。这直接促成了 Turbopuffer 的诞生,因为现有的数据库无法以低成本支持这种实时的高维混合查询。

失败反思:

  • 许多初创公司试图构建“纯向量”的客服机器人。
  • 结果: 当用户询问具体的订单号或错误代码(如 “Error 504”)时,向量搜索往往会返回语义相似但完全无关的内容(如 “关于网络问题的讨论”),导致客服失效。
  • 教训: 忽略关键词匹配的 RAG 系统在生产环境中是不可用的。

8. 哲学与逻辑:论证地图

中心命题: 在 RAG 系统中,混合检索结合基于对象存储的无状态数据库架构,是实现高精度、低成本且可扩展 AI 应用的唯一可行路径。

支撑理由:

  1. 语义的局限性: 纯粹的稠密向量无法有效处理专有名词和精确匹配,而稀疏向量可以弥补这一缺陷。
    • 依据: 信息检索领域的长期实践;BM25 在精确匹配上的数学保证。
  2. 成本与扩展性: 传统的基于内存的 HNSW 算法具有极高的边际成本和写入瓶颈,无法适应 AI 时代海量数据的实时更新需求。
    • 依据: AWS RAM 价格与 S3 价格的巨大差异;HNSW 的写入延迟特性。
  3. 查询复杂度的提升: Agent 架构要求检索系统具备极高的并发处理能力和极低的延迟,传统有状态数据库难以弹性伸缩。
    • 依据: Serverless 计算的普及趋势;微服务架构对数据层的弹性要求。

反例 / 边界条件:

  1. 极小规模数据: 当数据量极小(例如 < 10,000 条文档)时,简单的全量向量遍历或 Postgres 全文检索可能比混合架构更简单、更高效,无需引入复杂的分布式系统。
  2. 极度模糊的探索性搜索: 在某些创意写作或头脑风暴场景中,用户可能完全不希望受限于关键词,只想要“发散性”的结果,此时纯向量检索可能优于混合检索。

命题性质分析:

  • 事实: 关键词检索在精确匹配上优于向量检索;S3 存储成本低于 RAM。
  • 价值判断: “唯一可行路径” 是基于工程实用主义的判断,认为成本和可维护性优于理论上的纯模型方案。
  • 可检验预测: 随着模型参数增大,检索质量对最终效果的影响权重将超过模型参数大小。

立场与验证:支持 Simon 的观点。混合搜索是目前工程界的“最佳实践”,而存算分离是数据库的未来趋势。

可证伪验证方式:

  • 指标: 在标准 RAG 基准测试(如 RAGAS 或 TruLens)中,混合搜索的 Context PrecisionContext Recall 应持续显著高于(>10%)纯向量搜索。
  • 实验: 构建两个相同的 RAG 应用,一个使用 Pinecone (纯向量/HNSW),一个使用 Turbopuffer (混合/IVF-PQ),在 1000 万文档规模下进行压力测试。混合方案应在 P95 延迟和持有成本上表现更优。

最佳实践

最佳实践指南

实践 1:采用混合搜索策略

说明: 单纯的向量搜索在处理关键词匹配、精确过滤或特定实体识别时往往表现不佳。最佳实践是将传统的 BM25 关键词搜索与现代的向量语义搜索相结合。混合搜索能够同时捕捉语义的相关性和关键词的精确匹配,显著提高召回率和准确度,特别是在用户查询包含特定术语或缩写时。

实施步骤:

  1. 部署同时支持 BM25 和 HNSW(Hierarchical Navigable Small World)索引的搜索引擎。
  2. 在查询阶段,并行执行关键词检索和向量检索。
  3. 使用倒数排名融合(RRF)或加权评分算法将两组结果合并。
  4. 根据业务场景调整关键词与语义结果的权重比例。

注意事项:

  • 需要监控两种检索方法的延迟,确保并行处理不会导致响应时间过长。
  • 权重的调整应基于实际查询日志的 A/B 测试,而非直觉。

实践 2:优化数据库设计与索引策略

说明: RAG 系统的性能瓶颈往往在于数据库 I/O。为了支持高效的混合搜索和过滤,数据库设计必须针对检索模式进行优化。这包括合理使用物化视图、预计算相关字段以及为高频过滤条件(如时间、类别、元数据)建立专用索引,以减少在运行时进行昂贵计算的需求。

实施步骤:

  1. 分析查询模式,识别常用的过滤条件和排序字段。
  2. 对文档块及其元数据进行反范式化处理,以减少 Join 操作。
  3. 为向量列和标量列建立复合索引,支持“先过滤后检索”的模式。
  4. 考虑使用列式存储或专门的向量数据库来处理大规模数据集。

注意事项:

  • 避免过度索引,因为这会拖慢写入速度并增加存储成本。
  • 定期重建索引以保持查询性能,特别是在数据频繁更新的场景下。

实践 3:智能分块与上下文增强

说明: 向量检索的基本单位是“块”,但简单的按字符切分会破坏语义的完整性。最佳实践是使用语义感知的分块方法,并确保每个块包含足够的上下文信息。这有助于模型更好地理解检索到的内容与查询之间的关联,减少“碎片化”信息导致的幻觉。

实施步骤:

  1. 根据文档结构(如段落、标题、列表)进行分层分块,而不是固定字符长度。
  2. 为每个块添加父级文档的摘要或标题作为上下文前缀。
  3. 在嵌入向量时,将上下文信息与块内容一起编码。
  4. 实施滑动窗口技术,确保相邻块之间有一定的重叠,以保留边界信息。

注意事项:

  • 块的大小需要根据模型的上下文窗口大小和检索粒度进行权衡。
  • 过大的块会降低检索的精确度,过小的块则可能丢失关键信息。

实践 4:利用 Agents 进行查询路由与重写

说明: 用户的查询往往是模糊或复杂的。引入 Agent 架构,让 LLM 充当“路由器”和“优化器”,可以动态决定查询策略。Agent 可以判断当前问题是应该走向量搜索、关键词搜索、SQL 查询还是调用外部 API,从而将 RAG 系统从简单的“检索-生成”升级为能够处理复杂逻辑的智能系统。

实施步骤:

  1. 定义一组工具,包括不同的检索器(向量、关键词、图谱)和数据库接口。
  2. 构建一个路由 Agent,分析用户意图并选择最合适的工具链。
  3. 实现查询重写功能,将模糊的查询转化为针对特定检索器优化的格式(例如生成用于过滤的 JSON 对象)。
  4. 设计反馈循环,让 Agent 能够根据检索结果的质量调整策略。

注意事项:

  • Agent 的引入会增加推理延迟和 Token 消耗,需要设置严格的超时和预算限制。
  • 路由决策的可解释性对于调试至关重要。

实践 5:重排序机制

说明: 初始检索(Retrieval)阶段通常为了速度会召回较多的结果(例如 Top 50),但其中可能包含不相关的内容。在将结果发送给 LLM 生成最终答案之前,使用一个更精确但计算量更大的交叉编码器模型进行重排序,可以显著提升最终答案的质量,确保只有最相关的上下文被输入给生成模型。

实施步骤:

  1. 在第一阶段检索时,设定较高的召回量(如 Top 20-50)。
  2. 选择一个专门针对问答或文档检索优化的重排序模型。
  3. 将查询和初始召回的文档块一起输入重排序模型。
  4. 选取重排序后的 Top K(如 Top 5-10)结果作为最终上下文。

注意事项:

  • 重排序步骤会增加额外的推理时间,需评估其对整体延迟的影响。
  • 可以考虑对重排序模型进行量化或使用蒸馏版的小模型以加速推理。

实践 6:元数据过滤与检索前处理

说明: 在许多企业场景中,


引用

注:文中事实性信息以以上引用为准;观点与推断为 AI Stack 的分析。



站内链接

相关文章