Skip to content
English

Rank Fusion:按名次融合多个检索结果 ​

融合全文与向量结果的名次,避免直接相加语义不同的原始分数。

reciprocalRankFusion(lists,{limit,k?}) 返回 {id,score,contributions}[]。每个来源有唯一 sourceId、按名次排列的 ids 和可选正 weight。默认 k=60、weight=1;贡献为 weight/(k+rank),rank 从 1 开始。同来源重复 ID 只计一次。总分降序,等分时按 id 排序;limit 为 1—1000。

返回分数是融合排序依据,不是相似度、置信度或事实正确率。各来源须在融合前完成相同的权限过滤;融合不会重新检查源数据是否可见。

由简到繁的同业务示例 ​

先用默认融合参数 ​

入门 · Node.js

ts
import { reciprocalRankFusion } from '@jangts/agent-core/kits/rank-fusion';
const result = reciprocalRankFusion([
  { sourceId: 'text', ids: ['workflow', 'model'] },
  { sourceId: 'vector', ids: ['model', 'workflow'] },
], { limit: 5 });
console.log(result);
js
import { reciprocalRankFusion } from '@jangts/agent-core/kits/rank-fusion';
const result = reciprocalRankFusion([
    { sourceId: 'text', ids: ['workflow', 'model'] },
    { sourceId: 'vector', ids: ['model', 'workflow'] },
], { limit: 5 });
console.log(result);

相同函数增加来源权重与平滑参数 ​

配置 · Node.js

ts
import { reciprocalRankFusion } from '@jangts/agent-core/kits/rank-fusion';
const result = reciprocalRankFusion([
  { sourceId: 'text', ids: ['workflow', 'model'], weight: 2 },
  { sourceId: 'vector', ids: ['model', 'workflow'], weight: 1 },
], { limit: 2, k: 30 });
console.log(result[0].contributions);
js
import { reciprocalRankFusion } from '@jangts/agent-core/kits/rank-fusion';
const result = reciprocalRankFusion([
    { sourceId: 'text', ids: ['workflow', 'model'], weight: 2 },
    { sourceId: 'vector', ids: ['model', 'workflow'], weight: 1 },
], { limit: 2, k: 30 });
console.log(result[0].contributions);

策略与实现 ​

接口参考、使用示例与开发指南。