【速通RAG实战:进阶】20、改进RAG检索质量有哪些诀窍?

article/2025/7/18 9:58:26

在这里插入图片描述

一、数据层优化:构建高质量检索基础

(一)动态语义分块技术

传统固定长度分块易切断完整语义,采用基于相似度的动态分块策略可显著提升上下文连贯性。通过LangChain的SemanticChunker实现语义边界检测,当相邻文本相似度低于0.4时自动切分,避免将“设备型号-参数-操作步骤”等关联内容分割到不同块。

from langchain_experimental.text_splitter import SemanticChunker
from langchain.embeddings import HuggingFaceEmbeddingsembedder = HuggingFaceEmbeddings(model_name="BAAI/bge-base-zh")
splitter = SemanticChunker(embedder, breakpoint_threshold=0.4)  # 相似度阈值设为0.4
chunks = splitter.split_text(long_document)  # 自动识别语义边界

应用效果:在医疗病历检索场景中,症状-诊断-治疗的上下文关联度提升35%,关键信息遗漏率降低22%。

(二)多粒度索引体系构建

建立三层索引结构实现粗细粒度结合的检索能力:
在这里插入图片描述

  • 摘要层:利用GPT-3生成128字摘要,涵盖文档核心论点,用于快速概览检索。
  • 段落层:按自然段分块,保留完整逻辑单元,适合精确内容定位。
  • 关键词层:提取专业术语及同义词(如“房颤→心房颤动”),通过Elasticsearch实现关键词精确匹配。
    金融合同场景实践:通过三层索引,合同条款检索的Hit@3指标从68%提升至92%,违约条款定位效率提升4倍。

(三)数据增强策略

1. 查询扩展(HyDE)

利用LLM生成假设答案作为补充查询,解决用户模糊需求问题。例如用户提问“如何提升销售额”,HyDE生成“提升销售额的营销策略有哪些”,扩展检索维度。

# HyDE查询扩展示例
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAIprompt = PromptTemplate(template="用户问题:{query}\n假设答案:",input_variables=["query"]
)
llm = OpenAI(temperature=0.7)
expanded_query = llm(prompt.format(query=user_query))
2. 同义词注入

构建领域同义词库并结合ChatGPT生成变体术语,如“区块链→分布式账本技术”、“CPU→中央处理器”。通过向量数据库的同义词搜索功能,将相关术语的向量距离缩短30%。

二、算法层优化:提升检索精准度与召回率

(一)混合检索加权融合

结合向量检索与关键词检索的优势,根据场景动态调整权重:

from langchain.retrievers import BM25Retriever, EnsembleRetriever# 初始化双检索器
vector_retriever = FAISSVectorRetriever(vectorstore=vector_db)
keyword_retriever = BM25Retriever.from_texts(texts=keyword_corpus)# 权重配置(技术文档侧重向量检索,客服对话侧重关键词)
ensemble_retriever = EnsembleRetriever(retrievers=[vector_retriever, keyword_retriever],weights=[0.7, 0.3]  # 技术文档场景权重分配
)

调参经验

  • 法律文书:[0.6, 0.4](向量+法律条文关键词)
  • 电商客服:[0.4, 0.6](商品名称+属性关键词)

(二)查询重写三阶策略

针对不同查询类型实施分级处理:
在这里插入图片描述

法律场景示例
原始查询:“合同违约如何处理”
重写后:“根据《民法典》第五百七十七条,合同违约的责任承担方式有哪些”

(三)嵌入模型微调实战

使用企业私有数据对通用嵌入模型进行微调,提升领域术语表征能力:


http://www.hkcw.cn/article/MTBRXPAdAl.shtml

相关文章

Nginx网站服务:从入门到LNMP架构实战

🏡作者主页:点击! Nginx-从零开始的服务器之旅专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年5月30日14点22分 前言 说起Web服务器&#xff0c…

早发现=早安心!超导心磁图如何捕捉早期病变信号?

随着生活节奏的加快,心血管疾病已成为威胁人们健康的“隐形杀手”。据国家心血管病中心发布的《中国心血管健康与疾病报告2022》显示,我国心血管病现患者人数已高达3.3亿,每5例死亡中就有2例死于心血管病。这一数据触目惊心,提醒我…

AI感知与行动:考拉悠然发布空间智能世界模型,让AI走进物理世界

本文转自:《封面新闻》 5月,2025福布斯中国人工智能科技企业TOP50评选结果发布,成都考拉悠然科技有限公司成功入选,成为榜单中唯一专注“空间智能”的企业。 ,时长02:55 而在近日,考拉悠然发布了面向空间…

Arduino学习-跑马灯

1、效果 2、代码 /**** 2025-5-30 跑马灯的小程序 */ //时间间隔 int intervaltime200; //初始化函数 void setup() {// put your setup code here, to run once://设置第3-第7个引脚为输出模式for(int i3;i<8;i){pinMode(i,OUTPUT);} }//循环执行 void loop() {// put you…

CAD多边形密堆积2D插件

插件介绍 CAD多边形密堆积2D插件可在AutoCAD内建立模拟重力堆积状态的随机多边形颗粒及界面过渡区&#xff08;ITZ&#xff09;模型。 模型可分为多边形颗粒、界面过渡区&#xff08;ITZ&#xff09;、长方形试件三部分&#xff0c;各部分在CAD内分图层绘制&#xff0c;可批…

特伦斯 S75:重塑钢琴体验的数码钢琴之选

当传统钢琴的典雅质感与现代科技的精准赋能相遇&#xff0c;特伦斯 S75 立式数码钢琴应运而生。这款专为追求品质的演奏者与音乐爱好者设计的高端乐器&#xff0c;以 “还原三角钢琴灵魂&#xff0c;革新数字钢琴体验” 为核心理念&#xff0c;在音色、触感、音质与智能交互间达…

methods的实现原理

一、直观的感受methods的使用 首先直观的感受methods方法的使用&#xff0c;同样以计数器为例&#xff0c; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…

晨控CK-FR03与TwinCAT3配置EtherCAT通讯连接手册

晨控CK-FR03与TwinCAT3配置EtherCAT通讯连接手册 晨控CK-FR03系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题&#xff1a;围绕CK-FR03…

大模型-attention汇总解析之-MLA

一、核心思想 先看下初始的MLA的一般性公式&#xff1a; 我们一般会缓存的是投影后的k_i, v_i而不是投影前的x_i, c_i &#xff0c;根据 MLA 的这个做法&#xff0c;通过不同的投影矩阵再次让所有的 K、V Head 都变得各不相同&#xff0c;那么 KV Cache 的大小就恢复成跟 MHA …

多线程(3)

1volatile关键字: 1.1volatile的功能 volatile关键字能够保证内存可见性 当变量被volatile修饰后: 写操作--->会将寄存器内的值修改后会第一时间将新值写回内存(主内存),不会引起一个另外一个线程去读的时候还读个旧数据,导致出现bug,比如将01改为1后就应该立马写回内存…

WIN11+VSCODE搭建c/c++开发环境

搭建c/cby win11vscode 前面试过了ubuntuvscode,macosvscode,win11visual studio搭建&#xff0c;本来以为win11vscode是手到擒来的&#xff0c;没想到颇有些周折。可能解决方案也并不完美&#xff0c;先记录下来&#xff0c;以后有改进再来修改。 安装vscode https://code.v…

20250530-C#知识:String与StringBuilder

String与StringBuilder string字符串在开发中经常被用到&#xff0c;不过在需要频繁对字符串进行增加和删除时&#xff0c;使用StringBuilder有利于提升效率。 1、String string是一种引用类型而非值类型&#xff08;某些方面像值类型&#xff09;使用“”进行两个string对象的…

04-redis-分布式锁-edisson

1 基本概念 百度百科&#xff1a;控制分布式系统之间同步访问共享资源方式。 在分布式系统中&#xff0c;常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源&#xff0c;那么访问这些资源的时候&#xff0c;往往需要互斥来防止…

01 Netty简介

文章目录 概要1 Hello World1.1 什么是netty&#xff1f;1.2 Netty 的核心特性1.3 初识 netty 2 Netty 的核心组件2.1 EventLoop 和 EventLoopGroup2.1.1 基本概念2.1.2 与 Channel 关联2.1.3 EventLoopGroup 的实现2.1.4 常用方法 2.2 Channel2.2.1 Channel 的类型2.2.2 Chann…

熵最小化Entropy Minimization (一): 基本认识

文章目录 1. 前置知识Softmax函数信息熵&#xff08;Entropy&#xff09; 2. 熵最小化3. 案例理解4. 总结 熵最小化是一种利用未标记数据的策略&#xff0c;其核心思想是鼓励模型对未标记数据做出“自信”的预测&#xff0c;即预测概率分布尽可能尖锐&#xff08;Peaky&#xf…

jmeter:登录接口的token用于下一个接口

1、创建线程组 -》 添加 登录请求&#xff0c;在登录请求里面添加【正则表达式】 正则表达式提取器 引用名称&#xff1a;newtoken 正则表达式&#xff1a;token"."(*?) 模板&#xff1a; 1 1 1 匹配数字(0代表随机)&#xff1a;0 缺省值&#xff1a;null 2、创建…

Leetcode 2005. 斐波那契树的移除子树游戏

1.题目基本信息 1.1.题目描述 斐波那契树是一种按这种规则函数 order(n) 创建的二叉树&#xff1a; order(0) 是空树。 order(1) 是一棵只有一个节点的二叉树。 order(n) 是一棵根节点的左子树为 order(n - 2) 、右子树为 order(n - 1) 的二叉树。 Alice 和 Bob 在玩一种…

类 Excel 数据填报

类 Excel 填报模式&#xff0c;满足用户 Excel 使用习惯 数据填报&#xff0c;可作为独立的功能模块&#xff0c;用于管理业务流程、汇总采集数据&#xff0c;以及开发各类数据报送系统&#xff0c;因此&#xff0c;对于报表工具而言&#xff0c;其典型场景之一就是利用报表模…

TreeMap、TreeSet和HashMap、HashSet

目录 一、TreeMap&TreeSet 1.数据结构&#xff1a; 2.时间复杂度&#xff1a; 3.键/元素: 4.TreeMap基本操作: (与 HashMap 类似&#xff0c;但 put, get, remove 等操作会根据键的顺序进行)&#xff1a; 5.TreeMap遍历&#xff1a; 6.TreeSet基本操作 (与 HashSet 类…

电工基础【2】自锁、互锁、正反转电路

04 自锁、正反转电路 我们讲一下这个自锁和正反转。 自锁电路图示例图 加了一个这个 KM1 自锁。加了 KM1 的辅助触头&#xff0c;它怎么实现呢&#xff1f;它怎么就自锁了呢&#xff1f;没加它的时候为什么是点动&#xff1f;加它为什么自锁&#xff1f; 讲解一下。首先我们…