高级 RAG 优化策略系列(四)——向量搜索如何赋予RAG系统“语义理解“超能力?
本篇,我们将深入探讨 决定 RAG 检索质量与效率的核心组件——向量搜索(Vector Search),并结合 OriginHub MyScale AI 数据库的能力,展示在高级 RAG 系统中如何构建更强大的语义检索引擎。
在这系列关于高级 RAG 优化策略的文章中,我们讨论了查询优化、索引方法和分块技术等其他组件如何构建高效系统的基础。现在,我们继续探讨这个系列中一个非常重要的部分:向量搜索。
本篇,我们将深入探讨 决定 RAG 检索质量与效率的核心组件——向量搜索(Vector Search),并结合 OriginHub MyScale AI 数据库 的能力,展示在高级 RAG 系统中如何构建更强大的语义检索引擎。
向量搜索在现代检索系统中至关重要。它支持语义搜索,并确保检索到的数据在语境上与查询匹配。向量搜索的核心逻辑是将每个数据表示为高维向量,其中每个维度对应于该数据的特征或属性。然后,可以通过计算它们的向量表示之间的距离来衡量两个项目之间的相似度。
为什么向量搜索是高级 RAG 的基石?
在传统 RAG 中,检索仍然大量依赖关键词匹配或粗粒度向量比对,因此容易出现:
-
查不全:措辞不同导致找不到语义相似内容
-
查不准:检索结果包含大量噪声
-
查不快:在百万级以上知识库中延迟明显
要构建真正可落地的企业级 RAG,检索必须具备三个能力:
-
语义相关性强(不是找关键词,而是找“意思相同”)
-
检索延迟低(毫秒级)
-
可扩展到亿级数据规模
而实现上述目标的底座,就在于向量搜索及其索引能力。
OriginHub MyScale AI 数据库将向量索引、全文索引与混合索引能力融合在同一个高性能引擎中,使企业能够在同一套系统内构建既“懂语义”又“速度快”的高级 RAG 检索层。
向量索引:RAG 检索效率与质量的核心变量
索引是向量搜索的关键环节,有利于搜索变得快速、高效且有意义。一般而言,在对表进行搜索之前,必须先对其进行索引,而这个过程将数据组织成一种方式,使得搜索能够快速检索到相关的结果。那么,我们首先来回顾一下"索引"。
添加索引时需要注意以下几点:
-
只能在向量列(
Array(Float32))或文本列上创建索引。 -
对于向量列,必须事先指定数组的最大长度。这确保了数据结构的一致性,并有助于索引高效工作。
-
索引主要用于相似度搜索,这意味着在创建索引时需要定义相似度度量。例如,你可能会选择
Cosine相似度,这是比较向量的常见度量之一。
索引是高效向量搜索的基础,它们显著减少了找到正确数据所需的时间和计算工作量。选择合适的索引策略并理解这些考虑因素,可以在系统性能上产生重要的影响。
向量搜索类型
向量搜索是一种高级的数据检索技术,重点是匹配搜索查询和数据条目之间的上下文含义,而不仅仅是简单的文本匹配。要实现这一技术,首先需要将搜索查询和数据集中某一特定列转换为数值表示形式,即向量嵌入。
接下来,计算查询向量与数据库中向量嵌入之间的距离(如余弦相似度或欧几里得距离)。然后,根据这些计算的距离确定最接近或最相似的条目。最后,返回与查询向量距离最小的前 k 个结果。
注意:语义搜索在向量搜索的基础定义上进一步发展,根据文本的含义而非确切的术语返回更相关的结果。不过,在实际应用中,向量搜索和语义搜索常常互换使用。
全文搜索(Full-Text Search)
传统 SQL 搜索甚至正则表达式在处理确切术语或特定模式的比较时局限性较大,以下示例说明了这一点。我们使用SQL 语法查找与“Thanksgiving for vegans”相关的文档。
| AND条件 | OR条件 |
|---|---|
| SELECT id, title, body FROM default.en_wiki_abstract WHERE body LIKE ‘%Thanksgiving%’ AND body LIKE ‘%vegans%’ ORDER BY id LIMIT 4; | SELECT id, title, body FROM default.en_wiki_abstract WHERE body LIKE ‘%Thanksgiving%’ OR body LIKE ‘%vegans%’ ORDER BY id LIMIT 4; |
使用AND条件显然不会产生任何结果,而使用OR操作符则扩大了范围,返回包含“Thanksgiving”或“vegans”的文档。尽管这种方法能检索结果,但并非所有文档都与两个术语高度相关。
传统 SQL 搜索的局限性
传统 SQL 搜索非常僵化,无法处理语义相似性或措辞变化。例如,SQL 将“doctor applying anesthesia”和“doctor apply anesthesia”视为完全不同的短语,因此经常忽略相似的匹配。
全文搜索的改进
在前一种情况下,我们基于确切的短语进行搜索,而在后一种情况下,搜索是通过关键字完成的。全文搜索支持这两种方法,允许根据用户偏好进行灵活选择。与传统 SQL 搜索的僵化不同,全文搜索能够容忍一定程度的文本变化。
工作原理
全文搜索的索引构建分为以下几个步骤:
-
分词:分词用于将文本分解为更小的部分。在单词分词中,文本被分解为单词;在句子或字符分词中,文本分别在句子和字符级别被分割。
-
词干提取/词形还原:词干提取和词形还原将单词分解为其“原始”形式。例如,“playing”将被简化为“play”,“children”将被简化为“child”,依此类推。
-
停用词移除:像冠词或介词这样的单词包含的信息较少,可以通过此选项省略。默认的“英文”停用词过滤器不仅专注于移除冠词和介词,还会移除一些其他单词,如“when”、“ourselves”、“my”、“doesn’t”、“not”等。
-
索引构建:一旦文本完成预处理,就会存储在倒排索引中。
完成索引后,即可应用搜索功能。
评分与排序:BM25
BM25(最佳匹配25)是一种非常常用的算法。它的工作方式类似于向量搜索为相似性排序嵌入向量(或一般向量)。BM25 是 TF-IDF 的一种改进形式,基于三个因素:词频(term frequency)、逆文档频率(奖励罕见术语)以及文档长度归一化。
示例
在 MyScale AI 数据库中,可以通过指定类型为fts简单地添加全文搜索索引,同时还可选择是否启用词形还原或词干提取以及停用词过滤器。
ALTER TABLE default.en_wiki_abstract
ADD INDEX body_idx body
TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}');
它会根据查询的相似性对文档/文本样本进行排名。
SELECT
id,
title,
body,
TextSearch(body, 'thanksgiving for vegans') AS score
FROM default.en_wiki_abstract
ORDER BY score DESCLIMIT 5;
混合搜索(Hybrid Search)
虽然全文检索具备一定的灵活性,非常适用于基础关键词检索和文本匹配,但在捕捉语义相似的文本时仍存在局限。为此,我们需要依赖能够深入理解文本语义的向量嵌入技术。但另一方面,基于向量嵌入的向量搜索擅长跨文档语义匹配和深层语义理解,不过处理短文本查询时可能效率不足。
为了兼收两者优势,可以采用混合搜索方案。通过整合全文检索与向量搜索,混合方案能提供更全面、更强大的搜索体验:用户既能享受基于关键词的精准检索,又能获得向量技术带来的深层语义理解,从而得到更准确、更相关的结果,满足多样化的查询需求。
示例
我们通过示例进一步说明。为便于对比,我们继续使用之前的 wiki_abstract_minitable 数据集——全文检索索引建立在 body 字段上,而向量索引则通过对应的嵌入字段提供补充。
ALTER TABLE default.wiki_abstract_mini
ADD INDEX body_idx (body)
TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}');
#Create Vector Index
ALTER TABLE default.wiki_abstract_mini
ADD VECTOR INDEX body_vec_idx body_vector
TYPE MSTG('metric_type=Cosine');
由于向量搜索直接作用于嵌入向量而非原始文本,这里选用 E5-large 模型(通过 Hugging Face 调用)。将其封装为函数即可随时调用。
CREATE FUNCTION EmbeddingE5Large
ON CLUSTER '{cluster}' AS (x) -> EmbedText (
concat('query: ', x),
'HuggingFace',
'https://api-inference.huggingface.co/models/intfloat/multilingual-e5-large',
'hf_xxxx',
''
);
混合搜索函数
在 MyScale AI 数据库中,HybridSearch() 函数是一种融合向量搜索与文本搜索优势的检索方法。这种方法既增强了对长文本语义的理解能力,又弥补了向量搜索在短文本领域的语义短板。
SELECT
id,
title,
body,
HybridSearch('fusion_type=RSF', 'fusion_weight=0.6')(body_vector, body, EmbeddingE5Large('Charted by the BGLE'), ' BGLE') AS score
FROM default.wiki_abstract_mini
ORDER BY score DESC
LIMIT 5;
多模态搜索(Multi-modal Search)
混合搜索为我们提供了全文搜索和向量搜索的结合,而多模态搜索更进一步,提供了跨模态数据(如图像、视频、音频和文本)搜索的方法。
多模态搜索的概念是基于对比学习,其工作机制可简单如下所示:
-
一个统一的模型(如 CLIP(对比语言-图像预训练))处理各种数据类型(如图像或文本),并将它们转换为嵌入向量。
-
这些嵌入被映射到一个共享的向量空间,使得不同数据类型之间可以进行比较。
-
无论数据的原始形式如何,与查询嵌入最接近的嵌入将被返回。

这种方法使我们能够基于单一查询检索多样化且相关的结果——无论是图像、文本、音频还是视频。例如,你可以通过提供文本描述搜索图像,或者通过一个音频片段找到视频。
通过将所有数据类型对齐到一个向量空间,多模态搜索无需整合来自不同模型的分散结果。这也充分体现了向量数据库的强大和灵活性——它能无缝检索多种来源的异构数据。
结语
构建一个先进的 RAG 系统,关键不完全在于模型,而在于检索层是否足够强大。向量搜索带来了语义级的检索能力,而高性能向量索引、多模态嵌入、全文搜索结合向量搜索的混合检索,则进一步奠定了 RAG 系统的上限。
OriginHub MyScale AI 数据库作为一套专为 AI 应用场景打造的数据库,将这些能力整合在同一引擎中,使工程团队能够在生产环境中构建真正可落地、可扩展的 RAG 系统——并且这种能力随着数据量的增长仍能保持稳定。
未来的 RAG 系统不只是“搜索 + 大模型”,而是一套围绕语义理解、数据组织与检索性能不断进化的技术体系。向量搜索,无疑是其中最核心的基石。
更多推荐




所有评论(0)