为什么不应该为 RAG 使用向量数据库
关于构建更好检索增强生成系统的逆向思考。

什么是 RAG,以及你为什么要关心它?
每天,数百万人与 ChatGPT、Claude 和其他大型语言模型互动,从根本上改变了我们与计算机互动的方式。其吸引力显而易见:用户无需学习特定的界面,只需用自然语言进行交流即可。机器适应人类,而非人类适应机器。
这一转变促使组织争相使用自己的数据创建类似的体验。无论是构建能理解产品文档的支持聊天机器人,还是打造能撰写个性化电子邮件的助手,抑或开发帮助员工访问公司知识的内部工具,它们都需要相同的基础:让大型语言模型能够访问专有信息。
检索增强生成(RAG)应运而生,其概念看似简单,实则不然。
- 用户提出问题
- 系统根据该问题检索相关文档
- 大型语言模型利用这些检索到的文档作为上下文生成答案
如果实施得当,RAG 可以提供更准确、更及时的响应,同时减少幻觉。但大多数工程师都在这里犯了错误:他们默认使用向量数据库,却没有考虑这是否是最佳方法。
工程师的捷径:向量数据库
典型的 RAG 实现看起来是这样的:
User Question → Convert to Embedding → Query Vector DB → Retrieve Similar Documents → Generate Answer
这在直觉上是合理的。向量嵌入捕获语义意义,因此相似的概念在向量空间中会聚集在一起。通过将问题和文档转换为相同的嵌入空间,即使确切的关键词不匹配,你也能找到相关信息。
工程师们喜欢这种方法,因为它看起来很优雅。你不需要复杂的查询解析或关键词匹配——只需将所有内容转换为向量,然后让相似性算法完成工作。
但这种捷径会产生两个严重问题,显著降低结果的质量。
问题1:未经优化的查询导致不相关结果
第一个主要问题发生在初始步骤:我们直接将原始用户查询转换为嵌入,并用它来检索文档。
想想你使用 Google 时会发生什么。你并非总是用实际的问题进行搜索——你会将其提炼成更有可能产生相关结果的关键术语。如果你想知道“在大型项目中组织 React 组件的最佳方法是什么?”,你可能会搜索“React 组件组织最佳实践 大型应用”。
大型语言模型擅长这种查询优化,但在标准的向量数据库方法中,我们跳过了这个关键步骤。嵌入捕获了原始问题的语义意义,但这并不总是与最佳搜索查询保持一致。
问题2:向量搜索为了召回率而牺牲精确度
第二个问题更具根本性:与传统的全文搜索相比,向量相似性搜索在召回率方面表现出色,但在精确度方面往往较弱。
向量搜索擅长查找概念上相关的内容(召回率)——即使它们使用不同的术语,也能找到讨论相似主题的文档。然而,它在精确定位你所需内容(精确度)方面效果较差。
另一方面,全文搜索优先考虑精确度。当存在精确的关键词匹配时,它们通常高度相关。但其缺点是,全文搜索可能会遗漏使用不同术语但概念上相似的内容。
这解释了为什么许多完全依赖向量数据库的 RAG 系统在初始检索后会实施额外的重排序步骤。这也是为什么向量数据库越来越多地增加全文检索功能——它们认识到纯向量搜索的固有局限性。
更人性化的 RAG 方法
既然我们试图构建模仿人类智能的系统,难道我们不应该将 RAG 管道的结构设计成反映人类实际搜索信息的方式吗?
当人们需要查找信息时,他们会:
- 将问题重新表述为有效的搜索词
- 使用为检索相关信息而优化的搜索引擎
- 扫描结果以识别最有用内容
更好的 RAG 设计将遵循以下模式:
User Question → LLM Refines Into Search Query → Hybrid Search (Combining Full-text and Semantic) → Retrieve Relevant Documents → LLM Generates Answer
这种方法解决了这两个问题:
- 大型语言模型将用户的原始问题提炼成优化的搜索查询
- 混合搜索结合了全文搜索的精确度和语义搜索的召回率
解决方案:使用搜索引擎实现更简单(更优)的 RAG
我的逆向思考是:与其直接为 RAG 跳到向量数据库,不如从一个结合了全文和语义功能的高质量搜索引擎开始。
Meilisearch 等现代搜索引擎提供混合搜索功能,其整体相关性优于纯向量检索。它们还具有以下优点:
- 更易于部署和维护
- 针对大规模快速查询进行了优化
- 以相关性为主要目标进行设计
- 更直观地调试搜索结果
对于大多数 RAG 应用程序来说,工作流程变得更加简单:
- 用户提交一个问题
- 大型语言模型将该问题转换为有效的搜索查询
- 搜索引擎使用混合搜索检索相关文档
- 大型语言模型利用这些文档作为上下文生成响应
这种方法与人类实际搜索信息的方式保持一致,利用了大型语言模型和搜索技术的优势,同时避免了不必要的复杂性。
RAG 中的简单性力量:回归搜索基础
向量数据库在机器学习生态系统中确实有其地位,但它们并非总是 RAG 系统的最佳基础。通过退一步思考人类如何搜索信息,我们可以构建更有效、更简单的 RAG 架构。
下次你设计 RAG 系统时,考虑一下一个好的搜索引擎是否是更好的选择。你的用户(以及未来维护系统的你)会感谢你。