news 2026/5/4 5:59:08

rag混合检索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rag混合检索

文章目录

  • rag检索分类
    • (1)向量查询
    • (2) 过滤查询
    • (3) 预置查询(Named Vectors)
    • (4) 稀疏向量查询(Sparse Vector / BM25)
    • (5) 混合查询(Hybrid Search)
  • 入库和检索
    • 入库
    • 混合检索工程方案

rag检索分类

(1)向量查询

# 单一向量.query_points(query=vector,limit=10)# 多个向量(加权平均).query_points(query=[vec1,vec2],query_weights=[0.7,0.3])

(2) 过滤查询

.query_points(query=vector,query_filter=Filter(must=[FieldCondition(key="category",match=MatchValue(value="AI"))]),limit=10)

(3) 预置查询(Named Vectors)

# 如果入库时给向量起了名字 .query_points( collection_name="docs", query_name="document_vector", # 指定使用哪个向量字段 using="text_vector", # 使用命名的向量 with_vector=True )

(4) 稀疏向量查询(Sparse Vector / BM25)

# 需要配置 sparse vector 索引 .query_points( query=sparse_vector, # 稀疏向量(词袋表示) using="sparse_text" # 指定稀疏向量字段 )

(5) 混合查询(Hybrid Search)

# 结合稠密和稀疏向量 .query_points( prefetch=[ Prefetch(query=dense_vector, using="dense", limit=100), Prefetch(query=sparse_vector, using="sparse", limit=100), ], query=Filter(...), # 重排序阶段 limit=10 )

入库和检索

入库

入库

# 创建 collection 时配置fromqdrant_client.http.modelsimport(VectorParams,HnswConfigDiff,PayloadIndexType)client.create_collection(collection_name="my_docs",vectors_config={"text_vector":VectorParams(size=768,# 向量维度distance=Distance.COSINE,hnsw_config=HnswConfigDiff(m=16,# 每个节点最大连接数ef_construct=100))},# 对 payload 字段建索引(用于过滤)optimizers_config=OptimizersConfigDiff(indexing_threshold=10000))# 对 payload 字段创建倒排索引(用于快速过滤)client.create_payload_index(collection_name="my_docs",field_name="category",field_type=PayloadIndexType.KEYWORD)# 对 text 内容建全文索引(稀疏向量/BM25)client.create_payload_index(collection_name="my_docs",field_name="text_content",field_type=PayloadIndexType.TEXT)

混合检索工程方案

classHybridRetriever:asyncdefretrieve(self,query:str,top_k:int=10):# 1. 扩大召回dense_limit=max(top_k*3,10)# 2. 并行检索dense_task=self._dense_search(query,dense_limit)bm25_task=self._bm25_search(query,dense_limit)dense_hits,bm25_hits=awaitasyncio.gather(dense_task,bm25_task)# 3. 融合(RRF 或加权)combined=self._reciprocal_rank_fusion(dense_hits,bm25_hits)# 4. 重排序(Cross-Encoder)reranked=awaitself._cross_encoder_rerank(query,combined[:top_k*2])# 5. 返回最终 top_kreturnreranked[:top_k]

需要注意的是混合检索不能直接采用并集,
错误代码如下,不可用于实际生产环境,(最优解应该使用加权融合)

results=self.client.query_points(collection_name=self.collection_name,prefetch=[# 语义检索(稠密向量)Prefetch(query=dense_embedding,using="dense_text",# 使用稠密向量字段limit=recall_limit,filter=query_filter),# 关键词检索(稀疏向量)Prefetch(query=sparse_embedding,using="sparse_text",# 使用稀疏向量字段limit=recall_limit,filter=query_filter)],# query参数在这里用于最终的融合和排序# 传入None表示只做融合,不再额外检索query=None,limit=top_k,with_payload=True,with_vectors=False)

但是以下代码又是可以的

response = client.query_points( collection_name="my_collection", prefetch=[ models.Prefetch( query=models.Document( text=query, model="Qdrant/bm25", ), using="sparse", limit=20, ), models.Prefetch( query=models.Document( text=query, model="sentence-transformers/all-MiniLM-L6-v2", ), using="dense", limit=20, ) ], query=models.FusionQuery(fusion=models.Fusion.RRF), limit=10, )
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 5:59:05

张雪机车,人机环境系统智能的胜利

“人机环境系统智能”不仅是一个概念和理论,更是一个应用与现实。张雪机车就是一个绝佳的观察样本。她之所以能火,绝不仅仅是因为“速度机车”的视觉反差,而是她精准地踩中了这套东西方本体论融合的“系统智能”节奏。1. 西方本体论的“术”&…

作者头像 李华
网站建设 2026/5/4 5:51:37

WeClaw:通过微信远程调用AI编程助手,实现移动端无缝编码

1. 项目概述:将微信变身为AI编程助手的远程控制台如果你和我一样,经常在电脑前使用Claude Code、Cursor这类AI编程工具,但同时又希望能在离开电脑时,比如通勤路上、会议室里,也能随时调用它们处理一些紧急的代码问题&a…

作者头像 李华
网站建设 2026/5/4 5:49:20

保姆级教程:在XTDrone仿真中配置ego_planner,实现无人机三维避障飞行

保姆级教程:在XTDrone仿真中配置ego_planner实现无人机三维避障飞行 无人机自主飞行技术的核心在于运动规划与实时避障能力。本文将手把手带您完成XTDrone仿真环境中ego_planner的完整配置流程,从参数解析到实战验证,帮助初学者快速搭建可用的…

作者头像 李华
网站建设 2026/5/4 5:46:11

告别Vite打包臃肿:用rollupOptions.output.manualChunks精细控制你的vendor文件

深度优化Vite打包策略:精细化拆解vendor文件的工程实践 当你面对一个动辄上MB的vendor.js文件时,是否曾为缓慢的首屏加载速度感到头疼?现代前端项目依赖日益复杂,默认打包策略往往将所有第三方库塞进单一文件,这不仅影…

作者头像 李华
网站建设 2026/5/4 5:46:05

Arch Linux 自动化安装指南:Archpilot 脚本实战与系统优化

1. 项目概述与核心价值最近在折腾一个挺有意思的项目,叫gauravs19/archpilot。乍一看这个名字,你可能会联想到 Arch Linux 和某种“领航员”工具的结合。没错,这正是它的核心定位。简单来说,Archpilot 是一个旨在自动化、简化并引…

作者头像 李华