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);