本章节介绍 GC-QA-RAG 智能问答系统的核心检索技术原理,包括向量化策略、混合检索机制、RRF 融合排序等关键实现细节。

1. 检索流程概述

系统采用典型的 RAG(Retrieval-Augmented Generation)三阶段架构,检索阶段的目标是:在用户提问时,结合关键词与语义理解,快速定位最相关的知识点,为后续生成高质量答案提供支撑。

检索流程如下:

  1. 用户输入问题;
  2. 系统对问题进行向量化(稠密+稀疏);
  3. 在知识库中并行检索“问题”和“答案”字段;
  4. 采用 RRF(Reciprocal Rank Fusion)算法融合多路检索结果,返回 TopK 最优答案。

2. 混合检索机制

2.1 多通道检索

系统采用混合检索(Hybrid Search),即同时利用稀疏向量(BM25)和稠密向量(Dense Embedding)两种方式,分别对“问题”和“答案”字段进行检索:

  • 稀疏检索(BM25):适合关键词明确的查询,召回能力强;
  • 稠密检索(Dense Vector):基于语义相似度,适合复杂表达和模糊查询。

每一路检索均获取 TopK=40 条候选结果。

2.2 检索字段

每个知识条目包含四类向量特征:

  • Prefix_Question_Dense
  • Prefix_Answer_Dense
  • Prefix_Question_Sparse
  • Prefix_Answer_Sparse

检索时,用户问题会分别与“预设问题”和“答案”字段的稠密/稀疏向量进行匹配,极大提升了召回率和相关性。

2.3 RRF 融合排序

多路检索结果通过 RRF(Reciprocal Rank Fusion)算法进行融合排序,最终选取 TopK=8 条最优结果返回。RRF 能有效兼顾不同检索通道的优势,提升最终结果的多样性和准确性。

3. 检索实现细节

3.1 向量化与查询

  • 用户问题首先通过 embedding 模型生成稠密向量和稀疏向量(如 BM25 权重);
  • 检索时,分别以“问题稠密”、“答案稠密”、“问题稀疏”、“答案稀疏”四路向量为查询,调用向量数据库(如 Qdrant)的多路预取(Prefetch)接口;
  • 检索结果通过 RRF 融合,去重后返回。

3.2 代码实现要点

以 search.py 为例,核心检索逻辑如下:

  • get_embedding_pair:对输入问题生成稠密和稀疏向量;
  • search_sementic_hybrid_single:对单个知识库集合,分别以四路向量进行预取检索(Prefetch),并通过 RRF 融合排序;
  • search_sementic_hybrid:对所有知识库(如文档、论坛问答、教程)并行检索,合并结果;
  • distinct_search_hits:对检索结果去重,确保每个知识点唯一。

3.3 检索流程示意

用户问题

├─> 生成稠密/稀疏向量

├─> [问题稠密] ─┐
├─> [答案稠密] ─┼─> 多路检索(TopK=40)
├─> [问题稀疏] ─┤
└─> [答案稀疏] ─┘

└─> RRF 融合排序 → TopK=8

└─> 返回检索结果

4. 检索结果的结构与用途

每条检索结果包含:

  • Question:预设问题
  • Answer:标准答案
  • FullAnswer:详细解释
  • Summary:上下文摘要
  • Url、Title、Category、Date 等元数据

这些信息不仅用于直接展示,也为后续大模型生成答案提供丰富上下文。

5. 技术优势与优化点

  • 多路混合检索:兼顾关键词和语义理解,极大提升召回率和准确性;
  • RRF 融合排序:有效融合多通道结果,提升多样性和相关性;
  • Prefix 机制:通过文档类别/标题前缀,避免语义混叠,提升检索精准度;
  • 高效去重:确保每个知识点唯一,避免重复信息干扰。

6. 总结

本系统通过多通道混合检索、RRF 融合排序、丰富的向量化与元数据设计,实现了高效、精准的知识检索能力,为智能问答系统提供了坚实的基础。

历史文章

GC-QA-RAG 智能问答系统的文档切片

了解更多

AI智能体开发指南

GC-QA-RAG 智能问答系统的向量检索的更多相关文章

  1. [python] 向量检索库Faiss使用指北

    Faiss是一个由facebook开发以用于高效相似性搜索和密集向量聚类的库.它能够在任意大小的向量集中进行搜索.它还包含用于评估和参数调整的支持代码.Faiss是用C++编写的,带有Python的完 ...

  2. Improving Commonsense Question Answering by Graph-based Iterative Retrieval over Multiple Knowledge Sources —— 基于多知识库迭代检索的常识问答系统

    基于多知识库迭代检索的问答系统 论文地址 背景 常识问答任务需要引入外部知识来帮助模型更好地理解自然语言问题,现有的解决方案大都采用两阶段框架: 第一阶段 -- 从广泛的知识来源中找到与给定问题相关的 ...

  3. QA问答系统,QA匹配论文学习笔记

    论文题目: WIKIQA: A Challenge Dataset for Open-Domain Question Answering 论文代码运行: 首先按照readme中的提示安装需要的部分 遇 ...

  4. 【转】Java 内存模型及GC原理

    一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...

  5. Java 内存模型及GC原理 (转载)

    一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...

  6. zz阿里妈妈深度树检索技术(TDM)及应用框架的探索实践

    分享嘉宾:何杰 阿里妈妈 高级算法专家 编辑整理:孙锴 内容来源:DataFun AI Talk 出品社区:DataFun 注:欢迎转载,转载请注明出处 导读:阿里妈妈是阿里巴巴集团旗下数字营销的大中 ...

  7. JVM相关文章和GC原理算法

    参考推荐: Java内存模型及GC原理 一个优秀的Java程序员必须了解的GC机制 Android 智能指针原理(推荐) Java虚拟机规范 Java虚拟机参数 Java内存模型 Java系列教程(推 ...

  8. HMS Core AR Engine 2D图片/3D物体跟踪技术 助力打造更智能AR交互体验

    AR技术已经被广泛应用于营销.教育.游戏.展览等场景.通过2D图像跟踪技术和3D物体跟踪技术,用户只需使用一台手机进行拍摄,即可实现海报.卡牌等平面物体以及文物.手办等立体物体的AR效果.尽管近年来2 ...

  9. java程序性能优化

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  10. Java的性能优化

    http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...

随机推荐

  1. 值得推荐的IT公司名单(国企篇)

    大家好,今天我们来盘点一下值得推荐的国企,这些企业在行业内具有举足轻重的地位,不仅主营业务突出,福利待遇优厚,尤其是研发岗位的薪资区间,更是让人眼前一亮. 十大顶尖央企国企,待遇优厚如天花板级别!(排 ...

  2. go实现协程池管理

    使用channel实现协程池 通过 Channel 实现 Goroutine Pool,缺点是会造成协程的频繁开辟和注销,但好在简单灵活通用. package main import ( " ...

  3. PKCS#系列规范分别规定了什么

    PKCS#1:定义了RSA公钥和私钥的表示方法,以及如何进行RSA加密和签名. PKCS#2:原本是用以规范RSA加密摘要的转换方式,现已被纳入PKCS#1之中. PKCS#3:规范以Diffie-H ...

  4. Code Runner MCP Server,来了!

    大家好!我是韩老师. 如果作为程序员的你,还不了解 MCP (Model Context Protocol) 的话,那韩老师劝你赶紧去补补课吧! 本文不对 MCP 进行详细介绍~ 简单来说,MCP i ...

  5. 【Esp32】为 idf 定制本地 Arduino 组件

    在开始今天的水文前,老周先要奉劝一下国内某些嵌入式砖家和穴者,不要看不起 Arduino,它不是一种开发板,而是一种规范.Arduino 的思想是正确的,把各种开发板封装为统一的 API,让许多开源库 ...

  6. 多态的成员访问特点和好处--java进阶day02

    1.多态的成员访问特点 1.成员变量访问特点 分为两个阶段,编译阶段,系统会看父类中是否存在该成员变量,如果存在,运行阶段就会使用父类的成员变量,否则报错 当我们在父类中删去num时,编译直接报错 2 ...

  7. 如果在安装32位Oracle客户端组件的情况下64位模式运行, 将出现此问题.

    场景重现 在一台Windows 7 32-bit电脑上 安装了Oracle 11gR2 32-bit的客户端 用 VS2010 写的一个基于数据库驱动的项目 操作Oracle数据库都挺正常的 后来.. ...

  8. Asp.net mvc基础(十四)Entity Framework

    一.EntityFramework介绍 1.ORM:Object Relation Mapping,用操作对象的方式来操作数据库 2.ORM工具有很多,其中Dapper.PetaPoco.NHiber ...

  9. 智能语音备忘录:SpeechRecognition与gTTS的奇妙融合

    引言:智能语音备忘录的时代已经到来 在这个信息爆炸的时代,我们每天需要处理大量的事务和信息.传统的文字记录方式虽然可靠,但在效率上往往难以满足快节奏生活的需求.想象一下,如果你能在驾车.散步或是灵感突 ...

  10. markdown文本编辑器--核心功能(解析和渲染)

    开源项目地址 GitHub 开源地址(YtyMark-java) 欢迎提交 PR.Issue.Star ️! 1. 简述 YtyMark-java项目分为两大模块: UI界面(ytyedit-mark ...