[控场AI]
· 8 分钟阅读· 4,132 字

手把手构建精准AI智能体知识库:混合检索与重排序实战

手把手构建精准AI智能体知识库:混合检索与重排序实战

混合检索加按需重排序,是让AI智能体基于准确知识作答的工程路径。

文章基于Elastic官方技术工作坊,系统梳理了构建可靠AI知识库的检索工程方法。核心主张是RAG并未消失,而是退居幕后成为智能体的基础能力,回答质量取决于检索层精度而非模型本身。文章先用实验说明语义检索擅长意图匹配却抓不住精确关键词,BM25擅长字面匹配但语义泛化弱,因此推荐混合检索。融合方式上,RRF开箱即用无需调参,线性组合可按业务调权重但需判断集验证,还可用搜索模板加轻量LLM做查询路由。当混合检索精度不足时再引入重排序,将查询与文档联合评分,可缓解LLM在相似候选中选错的问题。最后介绍了Agent Builder与ESQL在可编程、可审计与来源引用上的价值,并给出先测基线、逐步叠加的实践纪律。

大模型信誓旦旦地胡说八道,是每个AI应用开发者都头疼的问题。在最近一场Elastic官方技术工作坊中,两位解决方案架构师Jeff Estill和James Williams用一套可动手操作的实验环境,完整演示了如何通过混合检索与重排序来构建一个更可靠的知识库,让AI智能体基于准确的信息作答。

这场工作坊的核心观点很明确:检索增强生成(RAG)并没有消失,而是退居幕后,成为了更强大智能体的基础能力。模型再聪明,如果你喂给它垃圾数据并告诉它"这就是答案",它大概率会照单全收。因此,问题的关键不在于模型本身,而在于你给它的检索层是否精准。

工作坊现场:早期AI阶段的架构选择

为什么单纯向量检索会翻车?

工作坊的第一个实验让参与者直观感受了语义搜索的优势与边界。通过Elastic的semantic_text字段,开发者只需简单配置,系统就会自动按句子边界切块,默认每块约250个token,并保留一句重叠。嵌入生成在Elasticsearch内部完成,默认使用JINA模型,也支持用户自带模型。

语义搜索的好处是,即便同一个问题有十种问法,只要意图相同,就能召回相似的文档。但它的短板同样明显:当你要搜索的是一个极其特定的关键词——比如一个无意义的产品ID——语义模型反而抓不住重点。

这正是需要引入传统词汇检索(BM25)的场景。BM25是Elastic耕耘了十几年的技术,对精确关键词和短语的匹配能力极强,而且延迟通常更低,因为它不涉及推理调用。但一旦查询超出精确匹配的范畴,BM25就会开始失效。

两个人的结论是:两者都不能单独打天下。

BM25 是什么:BM25(Best Matching 25)是一种基于统计的词汇检索算法,核心思想是计算查询词在文档中的出现频率(TF)与在整个语料库中的稀有程度(IDF),并结合文档长度做归一化。它不依赖任何神经网络,因此索引与查询的延迟极低,可解释性强——你能清楚知道某条结果为何被召回。自 Elasticsearch 诞生以来,BM25 一直是其默认的文本相关性评分函数。它的局限在于只做字面匹配:同义词、改写、跨语言查询都无法命中,除非额外配置同义词词典或分析器。

语义检索为何抓不住产品 ID:嵌入模型把文本映射到稠密向量空间,训练目标是让“意思相近”的文本靠近,因此它天然会平滑掉那些不承载语义的字符序列。像 SKU-9X72B 这样的随机串在训练语料中极少作为独立语义单元出现,模型很可能把它拆成无意义的子词,最终生成的向量与文档里的同一串并不邻近。精确匹配类查询(错误码、订单号、人名缩写)因此仍是 BM25 的主场。

混合检索:RRF与线性组合怎么选

将BM25与向量搜索结合,是Elastic当前的核心主张。问题在于,两者的评分尺度完全不同——BM25的分数范围几乎是任意的,而向量相似度通常在0到1之间。如果直接相加,一个较差的词汇检索结果很可能在数值上压倒一个优秀的语义检索结果。

工作坊给出了两种解法。

RRF(倒数排名融合) 是开箱即用的方案,它干脆丢弃原始分数,只取两个检索结果中的排名顺序,通过一个可配置的排名常数来融合。如果同一文档在两个检索中都排名靠前,它大概率就是好结果。RRF无需调参,上手即用,适合对数据分布不太了解的场景。

线性组合 则更进一步,先对两路分数做归一化(如min-max),再按权重相加。这就允许开发者根据业务特点调整语义和关键词的侧重比例。

但权重怎么定?讲者的回答非常坦诚:"今天这件事其实很难做。"目前没有权威的答案告诉你如何根据数据形态自动推导权重,实践中的做法是准备一个判断集(judgment set),由人工或LLM标注出某个查询应该返回哪些文档,然后反复实验找到最优权重。

一个被提到的实用技巧是Elastic的搜索模板(search templates)。你可以准备三套策略——RRF、线性组合、以及带重排序的方案——然后用一个轻量的LLM对 incoming query 做意图判断,将其路由到对应的模板。讲者称之为"穷人版自动调优",但它确实能在不同查询类型下拿到更好的召回效果。

另一个被反复强调的"免费"优化手段是过滤(filtering)。按关键词、地理范围、日期等维度先把候选集缩小,再做混合检索,效果通常比单纯调权重更立竿见影。

RRF 的公式与直觉:RRF 对每个文档计算 Σ 1/(k + rank_i),其中 rank_i 是文档在第 i 路检索结果中的名次,k 是平滑常数(Elastic 默认 60)。这个设计的关键在于只用名次、不用分数,所以两路检索的分数尺度差异被彻底绕开。代价是丢掉了“第一名比第二名领先多少”的信息——一个以巨大优势排第一的 BM25 结果,和一个勉强挤进第一的向量结果,在 RRF 眼中权重相同。

为什么需要归一化:线性组合要求两路分数落在可比区间。min-max 归一化把当前批次结果映射到 [0,1],但它是批次相关的——同一个文档在不同查询下归一化后的分数可能不同,这会让固定权重的最优性变得不稳定。实践中也有人改用 z-score 或基于历史分布的百分位映射,以换取跨查询的一致性。

重排序:精度不够时的最后一公里

如果混合检索已经拿到了一个不错的第一阶段候选集,但顺序还不够理想,重排序就是第二阶段的任务。它的核心区别在于:向量检索时查询和文档是分别嵌入再算相似度的,而重排序模型将查询和文档放在一起评分,因此能捕捉到更细粒度的相关性信号。代价是必须在查询时实时跑推理,延迟会更高。

讲者介绍了两种重排序模型。点式(point-wise)模型逐个对查询-文档对打分,适用于候选集本身差异较大的场景。列表式(list-wise,JINA V3模型)则一次性看整个候选列表——目前最多64个——因此当多个候选文档内容极其相似时,它能利用上下文区分细微差异。

Agent Builder中工具与API的灵活组合

重排序在智能体场景中尤其关键。工作坊提到一个常见问题:开发者往往把很少的候选文档(比如前三条)直接塞给LLM作答,而正确答案可能就在第四、第五条里。这就导致LLM在几个"看起来都对"的选项里选错。加上重排序,能显著改善这种"多选一选错"的情况。

智能体平台与ESQL:让检索可编程、可审计

工作坊的进阶部分将上述检索能力接入Elastic的Agent Builder平台。这个平台提供了开箱即用的技能(skills)和工具(tools)——技能教模型如何完成某类任务,工具则执行具体动作,比如运行检索、调用工作流、访问外部MCP服务。

一个对软件开发者有吸引力的设计是:Kibana界面里能做的配置,全部可以通过API以编程方式完成。你可以先在界面上快速搭建原型,再复用同样的端点和调用方式构建自有前端,不必推倒重来。

工作坊还演示了ESQL——Elastic新引入的类SQL管道查询语言。它的语法用管道符号串联多个阶段,执行完一步就把结果传给下一步。在智能体场景下,ESQL的价值在于参数化能力和可审计性:Agent执行的每一步检索都留有记录,最终答案可以附上来源引用。

ESQL管道查询与来源追踪示例

对于需要引用来源的场景——比如法律、合规——这一点尤为重要。讲者特别指出,模型本身并不具备"查表"能力,它是在生成token。只有当检索系统把真实文档交给它,并要求它标注引用时,输出才具备可信度。

此外,Elastic在向量索引效率上做了多层优化:默认对float32向量做int8量化以降低内存占用,BBQ(Better Binary Quantization)进一步将图向量压缩到接近一位,而disk BBQ几乎消除了向量检索的内存开销。讲者也坦承,图数据库(GraphRAG)在大规模多十亿向量场景下并未被证明是必要方案,Elastic目前更倾向于用分类模型和过滤机制来解决关系推理问题。

ESQL 与传统查询 DSL 的区别:Elasticsearch 原有的 Query DSL 是声明式的嵌套 JSON,表达复杂的数据加工(聚合后再过滤、多源合并)时结构会迅速膨胀。ESQL 改用管道式语法,形如 FROM index | WHERE ... | STATS ... BY ... | SORT ... | LIMIT ...,每一步的输出是下一步的输入,接近 Pandas 或 Unix 管道的思维模型。它支持在查询中直接定义命名参数,这正是智能体能安全复用的前提:Agent 只需填入参数值,而不必拼装整段查询语句,既降低了注入风险,也让每次执行可被完整记录。

量化技术简述:float32 向量每个维度占 4 字节,一个 768 维向量约 3KB,十亿级向量仅原始数据就达数 TB。int8 量化把每个维度压到 1 字节,精度损失通常可忽略;BBQ(Better Binary Quantization)用近似一位的表示配合查询时的重评分来补偿精度,内存可再降一个数量级。

给开发者的实践路线

工作坊给出的默认推荐路径相当清晰:先用BM25加语义检索的混合方案,如果召回和精度已经达标,就不要继续加东西。只有当精度不够时,再引入重排序模型,并用判断集验证它是否真的把指标推上去了。每一次叠加都会带来额外延迟,只在你确实需要时才付出这个代价。

对于正在构建AI智能体知识库的团队,这场工作坊传递的最有价值的信息或许不是某个具体参数,而是一种工程纪律:先测基线,再逐步叠加,每一步都用数据验证收益。检索层的质量,直接决定了上层智能体的可信度。

#AI智能体知识库#混合检索#RRF#重排序#RAG#Elasticsearch#语义搜索#Agent Builder
分享:

相关推荐