您的位置:首页 > 教育 > 锐评 > 深圳装修公司排名前十口碑推荐_万能短视频素材库免费_常用于网站推广的营销手段是_买外链有用吗

深圳装修公司排名前十口碑推荐_万能短视频素材库免费_常用于网站推广的营销手段是_买外链有用吗

2025/5/13 16:55:28 来源:https://blog.csdn.net/frank110503/article/details/146012946  浏览:    关键词:深圳装修公司排名前十口碑推荐_万能短视频素材库免费_常用于网站推广的营销手段是_买外链有用吗
深圳装修公司排名前十口碑推荐_万能短视频素材库免费_常用于网站推广的营销手段是_买外链有用吗

文章目录

    • FastGPT 源码:混合检索调用链路
      • 1. 入口函数
      • 2. 核心搜索函数
      • 3. RRF合并函数
      • 4. Rerank重排序函数
      • 5. 完整流程

FastGPT 源码:混合检索调用链路

主要调用链路如下:

1. 入口函数

dispatchDatasetSearch(packages/service/core/workflow/dispatch/dataset/search.ts):

export async function dispatchDatasetSearch(props: DatasetSearchProps) {// 1. 获取参数const {teamId,histories,module,params: {datasets,similarity,limit,usingReRank,searchMode,userChatInput}} = props;// 2. 问题优化/扩展const { concatQueries, rewriteQuery } = await datasetSearchQueryExtension({query: userChatInput,extensionModel,extensionBg,histories});// 3. 调用核心搜索函数const { searchRes } = await searchDatasetData({teamId,reRankQuery: rewriteQuery,queries: concatQueries,model: vectorModel.model,similarity,limit,datasetIds: datasets.map((item) => item.datasetId),searchMode,usingReRank});
}

2. 核心搜索函数

searchDatasetData(packages/service/core/dataset/search/controller.ts):

export async function searchDatasetData({teamId,reRankQuery,queries,model,similarity,limit,searchMode,usingReRank,datasetIds
}) {// 1. 向量检索和全文检索const { embeddingRecallResults, fullTextRecallResults } = await multiQueryRecall({embeddingLimit,fullTextLimit});// 2. 第一次RRF合并(向量检索和全文检索结果)const concatRecallResults = embeddingRecallResults.concat(fullTextRecallResults.filter((item) => !set.has(item.id)));// 3. Rerank二次排序const reRankResults = await reRankSearchResult({query: reRankQuery,data: concatRecallResults });// 4. 最终RRF合并(三种结果)const rrfConcatResults = datasetSearchResultConcat([{ k: 60, list: embeddingRecallResults },{ k: 60, list: fullTextRecallResults },{ k: 58, list: reRankResults }]);// 5. 结果过滤和处理const scoreFilter = filterResults(rrfConcatResults);return { searchRes: filterResultsByMaxTokens(scoreFilter, maxTokens) };
}

3. RRF合并函数

datasetSearchResultConcat(packages/global/core/dataset/search/utils.ts):

export const datasetSearchResultConcat = (arr: { k: number; list: SearchDataResponseItemType[] }[]) => {// 1. 计算每个结果的RRF分数arr.forEach((item) => {const k = item.k;item.list.forEach((data, index) => {const rank = index + 1;const score = 1 / (k + rank);// 合并分数...});});// 2. 根据RRF分数排序return results.sort((a, b) => b.rrfScore - a.rrfScore);
}

4. Rerank重排序函数

reRankRecall(packages/service/core/ai/rerank/index.ts):

export function reRankRecall({query, documents}) {// 调用重排序模型APIreturn POST(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}));});
}

5. 完整流程

  1. dispatchDatasetSearch 作为入口,接收搜索参数
  2. 调用 searchDatasetData 执行核心搜索逻辑
  3. searchDatasetData 中:
    • 先执行向量检索和全文检索
    • 合并这两种检索结果
    • 调用 reRankRecall 进行重排序
    • 最后通过 datasetSearchResultConcat 合并所有结果
  4. 返回最终过滤和处理后的搜索结果

这个调用链路完整实现了:

  • Embedding 和 BM25 检索
  • 结果合并后的 Rerank
  • 最终三路结果的 RRF 合并

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com