三种索引如何分工

一个问题会同时走向量、全文、图谱三条召回通道。三路结果不比原始分数,而是按各自的名次融合:被几路同时命中的片段自然上浮,任何一路都无法单独垄断排序。

知识库问答里的问题大致有三类:换个说法问同一件事,按文号、型号这类精确字符串找,或者顺着人、部门、制度之间的关系去找。没有哪一种索引能把三类都答好,所以 ApeMind 为每篇文档同时建三套索引,查询时并行召回,再合成一份证据列表交给智能体。

读完这篇,你应该能判断一个知识库该开哪些索引,以及某次回答没找到资料时,问题出在哪一路。

三条通道各管什么

vector

向量

意思相近就能找到

擅长
同义改写、口语提问、跨表述的概念匹配。“住得比标准贵能报吗”能找到“住宿超标须审批”。
不擅长
文号、型号、编号这类必须逐字一致的内容;数字差一位,向量上几乎看不出差别。
依赖
建库时绑定的 Embedding 模型,换模型需要重建向量。
fulltext

全文

字面一致就能找到

擅长
文号、条款号、产品型号、人名和专有名词。“财务〔2024〕17号”只会精确命中那份通知。
不擅长
换了说法的问题。用户说“报销”,原文写“费用核销”,字面上就对不上。
依赖
不需要模型,按 BM25 计算相关度。
graph

图谱

顺着关系就能找到

擅长
“谁审批”“归哪个部门”“A 和 B 什么关系”这类答案分散在多篇文档里、需要串起来的问题。
不擅长
纯描述性的段落;没有被抽取成实体或关系的内容,图谱看不见。
依赖
大语言模型从片段里抽取实体和关系,建图成本最高。

召回实验台

下面是一个模拟的差旅制度知识库。选一个问题,看三条通道各自召回了什么、融合后的顺序是什么。点通道标题可以开关这一路,悬停任何一个片段,可以看到它在各路中的名次和最终得分是怎么算出来的。

问题
Q>
融合结果

示例数据为演示用途;融合公式与产品一致(weighted_rrf_v1,k = 60,三路权重均为 1)。

为什么按名次,不按分数

三条通道的分数根本不在一个尺度上:向量余弦相似度落在 0 到 1 之间,BM25 没有上限,常见值在 1 到 20 多;图谱命中则是按实体和关系路径排出来的顺序,没有可比的分数。如果直接按分数排序,全文结果会压过所有向量结果——在实验台里切到“原始分数”就能看到,一条只是字面沾边的“出差安全须知”会排到第一。

所以 ApeMind 用 倒数排名融合(RRF):每一路只看名次,名次是不带量纲的。

score(d) = Σ通道 w60 + rank
  • rank片段在这一路里的名次,从 1 开始
  • 60平滑常数 k,让第 1 名和第 5 名的差距不至于悬殊
  • w通道权重,当前三路都是 1
  • Σ被几路命中就累加几次,这就是“共识加成”

这个设计有两个直接的结果。第一,三路里只要有一路把某个片段排在前面,它就有机会进入证据列表,不会被另一路的高分淹没。第二,同时被两三路命中的片段几乎总是排在最前,因为它们在语义、字面和关系上都站得住。融合后不再经过额外的重排模型,每一路自己的排序语义被完整保留下来。

图谱通道如何落回片段

图谱里存的是实体和关系,智能体最终要读的却是原文片段。图谱通道的工作是把“命中的实体”沿着 血缘 翻译回片段,再和另外两路一起融合。

问题query 区域总监实体向量命中 华东区一跳扩展 财务 BP一跳扩展 片段 5 片段 6 片段 1 片段 3 w = 1.0 w = 0.6 w = 0.6 按 1/√证据名次 衰减后,与向量、全文一起融合
  1. 问题进入图谱通道

    和另外两路并行发出,单独设有超时,图谱慢不会拖住整次检索。

  2. 先找实体

    用实体向量找到语义上最接近的 规范实体。直接命中的实体权重为 1.0。

  3. 再扩一跳

    沿关系向外扩展一跳,把相邻实体也带进来。扩展出来的实体权重降为 0.6,离问题越远,说服力越弱。

  4. 沿血缘回到原文

    每个实体都记得自己来自哪些片段。证据片段按名次做 1/√n 衰减,单个实体最多贡献有限条来源,避免一个高频实体刷屏,然后和向量、全文一起进入融合。

图谱结果在这里是“线索”而不是“结论”:智能体最终引用的永远是原文片段,而不是模型抽取出来的一条关系。关系抽错了,最多是多召回一个不相关的片段;不会出现一个查无出处的事实。

图片是第四条路

开启图片索引后,默认的向量检索会共享同一次问题向量化,并行召回文字片段和图片。两者分别返回,文字进入 items,图片进入 image_items,不拿文字分数和图片分数互相比较。跨模态的原始分数和跨通道的原始分数一样不可比。

该开哪些索引

向量 + 全文是底线,图谱建议开启。制度类问题经常问“谁审批”“归谁管”,答案分散在组织架构、权限表、管理办法几份文档里,图谱能把它们串起来。

向量 + 全文必开。型号、错误码、参数名只有全文能精确命中;概念解释靠向量。图谱按需:产品之间依赖关系复杂时再开。

全文最关键,条款号、法规文号、金额都要逐字匹配。向量用于“类似条款”的查找。图谱对“甲方、乙方、担保方之间的关系”有帮助。

图谱的建图成本最高,因为每个片段窗口都要调用一次大语言模型。资料量大、关系简单时可以先只开向量和全文,确认问题集确实需要关系推理后再开图谱,已有文档可以从解析产物直接补建,不用重新解析。

边界

出问题时查哪一环

问编号、型号查不到,换个说法却能查到

全文通道没有生效。先确认知识库开启了全文索引,再看这篇文档的全文索引状态是否已完成。只开向量时,精确字符串的召回本来就不可靠。

措辞稍微不同就查不到

向量通道没有生效或模型不合适。确认向量索引已完成;如果知识库内容是专业领域,考虑换一个更贴近领域的 Embedding 模型并重建向量索引。

“谁负责”“归哪个部门”这类问题总答不全

答案分散在多篇文档里,需要图谱把它们串起来。确认图谱索引已开启并完成;如果显示“部分完成”,说明少数片段窗口抽取失败,可以对该文档重建图谱索引。

给想深入的读者:融合的细节

每个片段在自己所属的通道里按分数确定名次;同一片段被多路召回时,合并去重,并记下它在其他通道里的名次,各自贡献一份 1/(60+rank)。得分相同时,单路名次更靠前的排在前面,再相同则保持原有顺序。图谱通道内部先按实体来源权重(直接命中 1.0、一跳扩展 0.6)和证据名次衰减算出图谱得分,再以名次身份参与最终融合。