拆解腾讯开源知识库WeKnora学RAG:多路RRF融合召回排序Chunk合并策略

发布时间:2026/7/14 3:53:46

拆解腾讯开源知识库WeKnora学RAG:多路RRF融合召回排序Chunk合并策略 在进入正题之前先理清两个基础概念 RAG系统中的召回最常见的两条路是向量检索和BM25关键词检索向量检索把文本编码成高维向量用余弦相似度之类的度量找语义最接近的chunkBM25是经典的关键词匹配算法按词频和逆文档频率打分精确匹配能力强。各有擅长向量捕捉同义、近义表达BM25锁定专有名词和精确术语在RAG系统中这两种经常一起使用。但是问题在于这两条路给出的分数度量标准完全不同无法直接加减比较。RRF不看原始分数只看排名一个chunk在某个检索通道里排名越靠前贡献的权重就越大。方式是把每个通道的1/(k rank)加起来作为最终得分其中rank是该chunk在当前通道的排名k是平滑常数默认60防止排名靠前的chunk权重过大。这样不同检索通道的结果不需要对齐尺度就能直接比较多个列表合并成一份统一排序甚至知识图谱之类的结果也可以纳入进来一起计算。WeKnora的召回机制有5个关键环节多路并行向量检索和BM25关键词检索并行执行结果用RRF倒数排名融合融合排名路径分叉FAQ问答对类型和文档类型走不同的召回路径FAQ只入向量库统一重排所有召回结果用重排序模型rerank重打分有阈值过滤上下文拼装8步合并流水线子块映射找回父块、相邻块扩展、FAQ答案回填等机制引用回查保留位置信息问答中支持回查原始文档召回多路融合与重排多库扇出再统一融合检索时系统按存储后端分组VectorStoreID TenantID同一存储后端的多个知识库在一次请求里不同存储后端分别请求。为什么要分组因为它的不同知识库可能使用不同的向量库Elasticsearch/Milvus/PostgresSQL等等都有可能。所以你建库的时候可以选择分组完成后各组并发执行检索上限4组并发每组30秒超时。每个分组内部支持两条并行通道向量语义检索在向量索引里做近邻搜索。支持多种底层引擎PostgreSQLpgvector、Elasticsearch、Milvus、Qdrant、Weaviate、SQLitesqlite-vec、腾讯向量数据库、Doris、OpenSearch等。BM25关键词检索用原始查询文本做关键词匹配只对文档知识库生效FAQ不参与。两条通道的结果用RRF倒数排名融合合并。除此之外对话中还可以并行挂接Web搜索和知识图谱实体检索这类独立分支但它们不进入RRF。FAQ和文档在召回层分叉执行WeKnora有两条平行的数据入库路径文档路径文件上传→解析→分片→向量化→入库FAQ路径问答对直接创建→向量化→入库跳过解析和分片FAQ知识库的每条记录是一组QA问答对标准问题、相似问题、反例问题和答案。数据入口有三种在Web UI中单条创建通过API批量导入通过CSV导入8列格式分类、标准问、相似问、反例问、答案、是否全部回复、是否停用、是否禁止推荐多值用##分隔批量导入支持append追加按标准问/相似问做问题级去重校验和replace按内容哈希比对差异并同步计算新增、替换和删除两种模式。FAQ数据只参与向量语义检索不参与关键词检索。向量化有两种内容模式question_only模式只编码标准问和相似问答案不进向量但存入chunk元数据命中后从元数据取出question_answer模式则把问题和答案一起编码。两种模式都是以问题召回为主但在question_answer模式下答案文本也会参与向量表示影响相似度分布索引有两种模式combined模式把标准问和相似问合并为一个向量separate模式为每个问题创建独立向量首次检索后如果去重后的唯一FAQ chunk仍少于用户请求的matchCount而且首轮向量召回已经打满初始over-retrieval上限系统会启动迭代检索TopK从matchCount×3开始每轮翻倍最多5轮。每轮还会过滤命中反例问题的chunk反例问题在导入时由用户标注检索时做精确匹配排除。向量和关键词结果用RRF融合WeKnora用的是加权RRFWeighted RRF在基础公式上为每个通道分配不同权重score vector_weight / (rrf_k vector_rank) keyword_weight / (rrf_k keyword_rank)默认参数rrf_k 60vector_weight 0.7keyword_weight 0.3。向量权重占主导但关键词排名极好第1名的chunk也能靠第二项拉回来。举个例子chunk A向量排名第1关键词排名第5 → 0.7/(601) 0.3/(605) 0.01148 0.00462 0.01610 chunk B向量排名第3关键词排名第1 → 0.7/(603) 0.3/(601) 0.01111 0.00492 0.01603 chunk C向量排名第2关键词没出现 → 0.7/(602) 0 0.01129当只有向量结果时按分数去重同时存在向量和关键词时才会进入RRF。另外如果开启了知识图谱则图谱检索走的是独立的query_knowledge_graph工具由agent按需调用不进入主检索管线的RRF融合。重排直接加载、打分与降阈值重试RRF融合完成后所有候选结果进入重排序阶段。重排序先把直接加载的结果摘出来不送进重排序模型。用户在对话时可以通过提及或API参数knowledge_ids指定某些知识文件系统会尝试直接从数据库加载这些文件的chunk如果总量不超过50个就跳过语义搜索直接带入后续流程初始分数就是1.0。超出上限的文件则回退到正常检索路径。其余候选统一交给重排序模型重新打分。打完分后只保留分数≥阈值的结果。如果原始阈值高于0.3且没有结果通过系统会把阈值乘以0.7再筛一次最低不低于0.3。如果降阈值后仍然没有结果通过但top-1的分数不低于0.15系统会把这个结果保留下来作为兜底。重排序模型的阈值需要根据实际数据调整降阈值重试是一种兜底机制。合并拼出最终上下文重排序之后还有一轮8步的合并merge流水线把多个来源的结果拼成最终上下文。几个关键参数历史引用注入基于Jaccard相似度阈值≥0.15最多3条分数打6折短chunk低于350字符沿前驱和后继双向扩展上限850字符最终按chunk ID、内容签名和重叠区间做去重。第3步的映射逻辑按chunk类型分两条路径文本子块映射到父块时系统保留父块的全部文本但会移除匹配区间之外的Markdown图片链接文本不动只清理无关图片。匹配区间就是子块在文档中的StartAt到EndAt。大模型需要周围文本理解语境但不需要看到不相关页面的缩略图图片子块image_ocr/image_caption走链式解析先找到text父块再找parent_text祖父块。如果祖父块存在就从祖父块的content中切出text父块覆盖的范围。文本也被裁剪因为图片信息已经通过ImageInfo单独提供了送进模型的上下文此时已经过文档关系重组和上下文扩展处理了。引用回查每个检索结果保留知识ID、chunk ID、起止位置和可能的父块关系。引用信息就依靠这些位置信息回查原始文档。在回答前系统把这些引用信息一起装到上下文中这样AI在回答结果中可以标注引用信息。最后上面我们详细分析了WeKnora的召回策略和具体的实现路径结合前篇的分片策略这样RAG知识库中的核心组件基本就讲完了。WeKnora的这些实现细节已经相当完善了甚至系统还自带了知识图谱这两篇文章没有展开来写。在RAG开发中参考这套分片和召回策略基本就够用了你甚至可以直接把这两篇文站丢给AI出详细的PLAN/SPEC直接落地。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻