FastGPT 源码:RRF、Rerank 相关代码

文章目录

    • [FastGPT 源码:RRF、Rerank 相关代码](#FastGPT 源码:RRF、Rerank 相关代码)
      • [1. RRF (Reciprocal Rank Fusion) 合并实现](#1. RRF (Reciprocal Rank Fusion) 合并实现)
      • [2. Rerank 二次排序实现](#2. Rerank 二次排序实现)
      • [3. 重排序的主要特点](#3. 重排序的主要特点)
      • [4. 整个搜索流程](#4. 整个搜索流程)
      • [5. 这种方式的优势](#5. 这种方式的优势)

FastGPT 源码:RRF、Rerank 相关代码

下边介绍 RRF 合并和 Rerank 二次排序的相关实现:

1. RRF (Reciprocal Rank Fusion) 合并实现

主要在 datasetSearchResultConcat 函数中实现(packages/global/core/dataset/search/utils.ts):

typescript 复制代码
// RRF公式实现
const score = 1 / (k + rank);  // k是一个常数(60),rank是搜索结果的排名

// 合并多个渠道的搜索结果
arr.forEach((item) => {
  const k = item.k;
  item.list.forEach((data, index) => {
    const rank = index + 1;
    const score = 1 / (k + rank);
    
    // 如果已存在相同ID的结果,合并score
    if (record) {
      map.set(data.id, {
        ...record,
        score: concatScore,
        rrfScore: record.rrfScore + score
      });
    } else {
      map.set(data.id, {
        ...data,
        rrfScore: score
      });
    }
  });
});

RRF 合并主要用在以下场景:

  • 合并向量检索和全文检索的结果
  • 合并多个查询的搜索结果
  • 合并重排序后的结果

2. Rerank 二次排序实现

重排序功能在 reRankRecall 函数中实现(packages/service/core/ai/rerank/index.ts):

typescript 复制代码
export function reRankRecall({
  query,
  documents
}: {
  query: string;
  documents: { id: string; text: string }[];
}) {
  // 调用重排序模型API
  return POST<PostReRankResponse>(
    model.requestUrl,
    {
      model: model.model,
      query,
      documents: documents.map((doc) => doc.text)
    }
  ).then((data) => {
    // 返回重排序后的结果和相关性分数
    return data?.results?.map((item) => ({
      id: documents[item.index].id,
      score: item.relevance_score  // 0-1之间的相关性分数
    }));
  });
}

3. 重排序的主要特点

  • 使用专门的重排序模型对搜索结果进行二次评分
  • 得到 0-1 之间的相关性分数,比向量相似度更精确
  • 可以根据重排分数进行过滤,提高精度
  • 重排结果会与其他搜索结果一起通过 RRF 合并

4. 整个搜索流程

  1. 同时进行向量检索和全文检索
  2. 对检索结果进行重排序评分
  3. 使用 RRF 合并三种结果(向量检索、全文检索、重排序)
  4. 根据相关度分数进行过滤
  5. 返回最终结果

5. 这种方式的优势

  • 综合多种检索方式的优势
  • 通过重排序提高精度
  • 使用 RRF 合理合并多个渠道的结果
相关推荐
caoerzhong41 分钟前
仓库管理数字化趋势解读:JeeWMS 开源 Java WMS 视角下的五个演进方向
java·开源
冬奇Lab1 小时前
开源项目第222期:security-audit — Cloudflare 的安全审计 Skill,把 Coding Agent 变成六阶段安全审计器
人工智能·开源·资讯
m4Rk_2 小时前
【论文阅读】Agent 记忆机制(74):CompassMem——从相似度检索走向事件图上的记忆导航
论文阅读·人工智能·学习·开源·github
wflynn3 小时前
GitHub 日榜趋势速报 | 2026-09-18
开源·github
海带紫菜菠萝汤3 小时前
本周 AI 观察:嘴上喊着降速,手上全踩油门
人工智能·深度学习·ai·开源·大模型
Experience-摆渡5 小时前
开源RAG知识库WeKnora深度调研:让知识自己长成体系
爬虫·docker·开源·rag
赛博仓鼠5 小时前
MiniMax H3 实测:8GB显存跑2K视频+原生音频,开源视频生成的新卷王
开源·aigc·音视频
万物智能信息科技7 小时前
PWM散热风扇设置—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
人工智能·华为·开源·harmonyos·鸿蒙
Mr.朱鹏9 小时前
Git 仓库同时推送到 Gitee 与 GitHub 配置指南
git·gitee·开源·github
十二同学啊11 小时前
Drools规则引擎:让复杂业务规则从代码中解耦
java·后端·开源