GC-QA-RAG 智能问答系统的向量检索
本章节介绍 GC-QA-RAG 智能问答系统的核心检索技术原理,包括向量化策略、混合检索机制、RRF 融合排序等关键实现细节。
1. 检索流程概述
系统采用典型的 RAG(Retrieval-Augmented Generation)三阶段架构,检索阶段的目标是:在用户提问时,结合关键词与语义理解,快速定位最相关的知识点,为后续生成高质量答案提供支撑。
检索流程如下:
- 用户输入问题;
- 系统对问题进行向量化(稠密+稀疏);
- 在知识库中并行检索“问题”和“答案”字段;
- 采用 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 智能问答系统的向量检索的更多相关文章
- [python] 向量检索库Faiss使用指北
Faiss是一个由facebook开发以用于高效相似性搜索和密集向量聚类的库.它能够在任意大小的向量集中进行搜索.它还包含用于评估和参数调整的支持代码.Faiss是用C++编写的,带有Python的完 ...
- Improving Commonsense Question Answering by Graph-based Iterative Retrieval over Multiple Knowledge Sources —— 基于多知识库迭代检索的常识问答系统
基于多知识库迭代检索的问答系统 论文地址 背景 常识问答任务需要引入外部知识来帮助模型更好地理解自然语言问题,现有的解决方案大都采用两阶段框架: 第一阶段 -- 从广泛的知识来源中找到与给定问题相关的 ...
- QA问答系统,QA匹配论文学习笔记
论文题目: WIKIQA: A Challenge Dataset for Open-Domain Question Answering 论文代码运行: 首先按照readme中的提示安装需要的部分 遇 ...
- 【转】Java 内存模型及GC原理
一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...
- Java 内存模型及GC原理 (转载)
一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...
- zz阿里妈妈深度树检索技术(TDM)及应用框架的探索实践
分享嘉宾:何杰 阿里妈妈 高级算法专家 编辑整理:孙锴 内容来源:DataFun AI Talk 出品社区:DataFun 注:欢迎转载,转载请注明出处 导读:阿里妈妈是阿里巴巴集团旗下数字营销的大中 ...
- JVM相关文章和GC原理算法
参考推荐: Java内存模型及GC原理 一个优秀的Java程序员必须了解的GC机制 Android 智能指针原理(推荐) Java虚拟机规范 Java虚拟机参数 Java内存模型 Java系列教程(推 ...
- HMS Core AR Engine 2D图片/3D物体跟踪技术 助力打造更智能AR交互体验
AR技术已经被广泛应用于营销.教育.游戏.展览等场景.通过2D图像跟踪技术和3D物体跟踪技术,用户只需使用一台手机进行拍摄,即可实现海报.卡牌等平面物体以及文物.手办等立体物体的AR效果.尽管近年来2 ...
- java程序性能优化
一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...
- Java的性能优化
http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...
随机推荐
- idle如何调试程序
1.启动idle ctrl+n 快捷键 新建命令窗口 输入程序 4.F5 调试程序,结果看在启动界面查看
- 【Unit1】表达式化简(层次化设计)-作业总结
三次作业围绕表达式化简展开,逐次递进.主体思路为:递归下降解析表达式保存至类中,依据相关模式化简,依照规范输出字符串. 1.第一次作业 1.1 题目概述 表达式 = 项 + 项 + ... 项 = 因 ...
- HarmonyOS_Next 星河版迁移报错记录【自用】
Object literal must correspond to some explicitly declared class or interface (arkts-no-untyped-obj- ...
- dockerfile 由于公钥不可用,无法验证以下签名
报错 当我在打包 docker镜像时,发生了报错 $ sudo docker build -t dcgm-exporter:3.2.5 . 1.772 The following signatures ...
- centos安装php环境
安装 PHP 所需扩展 yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcur ...
- AI与.NET技术实操系列(七):使用Emgu CV进行计算机视觉操作
引言 计算机视觉(Computer Vision, CV)是人工智能领域中最为引人注目的分支之一.从自动驾驶汽车到医疗影像分析,从智能安防系统到虚拟现实体验,计算机视觉的应用无处不在,深刻地改变着我们 ...
- 用Adobe Illustrator编辑ArcGIS地图的方法
本文介绍在ArcGIS下属的ArcMap软件中,将绘制好的地图导出为.ai或者.eps格式文件,并在Adobe Illustrator软件中进一步编辑地图,并最终导出为图片格式的结果文件的方法. ...
- Lambda表达式--java进阶day03
1.Lambda表达式 2.Lambda表达式格式 ()放我们要重写的方法的形参,{}放我们要写的逻辑 show()没有形参,所以空着,我们将打印语句写入{}中 如图,匿名内部类和Lambda都出现了 ...
- 基于C#的学生社团管理系统(简单基础版)
前言 该系统为个人独立编写测试,也算自己的孩子吧,虽然基础功能简单但是也为了大家能有个可以借鉴,可以改写的模版使用,我就写个博客让大家参考,但是拒绝搬运售卖. * 正式介绍 该系统基于C#开发,使用V ...
- eolinker同一个自动化用例内执行不同端接口遇到的问题(主要是两套host环境共存的问题)解决方法
特别注意:需要使用全局变量或者预处理前务必阅读本链接https://www.cnblogs.com/becks/p/13713278.html eolinker内同一套环境只能配置一个host地址,如 ...