当前位置: 首页 > article >正文

别再瞎调RAG了!用RAGAS给你的LangChain应用做个“体检报告”(附完整代码)

用RAGAS为你的LangChain应用做深度诊断从指标解读到精准优化当你花费数周构建的RAG系统突然在关键演示中输出纽约市得名于一位爱吃苹果的市长时那种绝望感我深有体会。去年我们的客服机器人就曾把产品退货政策解释成建议把包装盒埋在花园里施肥——这促使我系统研究了RAGAS评估框架。与常见教程不同本文将带你像资深医师解读体检报告那样通过四个核心指标定位RAG系统的病灶并提供可直接复用的优化方案。1. 构建可评估的RAG管道从混沌到可测量在LangChain中构建基础RAG管道只需15分钟但要让其具备可评估性需要特殊设计。最近帮某金融客户优化问答系统时发现他们90%的评估时间都浪费在数据格式转换上。以下是经过实战验证的最佳实践from langchain.chains import RetrievalQA from langchain_community.vectorstores import FAISS from langchain_core.retrievers import BaseRetriever class EvaluableRetriever(BaseRetriever): def _get_relevant_documents(self, query, **kwargs): # 在此添加检索日志记录逻辑 return super()._get_relevant_documents(query, **kwargs) # 关键技巧使用自定义Retriever包装原始检索器 retriever EvaluableRetriever(base_retrieverFAISS.load_local(vector_db).as_retriever()) qa_chain RetrievalQA.from_chain_type( llmChatOpenAI(temperature0), retrieverretriever, return_source_documentsTrue, # 必须开启 chain_typestuff )常见陷阱排查表问题现象可能原因验证方法评估时报KeyError未启用return_source_documents检查RetrievalQA初始化参数所有指标得分相同结果缓存未清除在评估前调用import langchain; langchain.llm_cache Nonecontext_recall始终为0未提供ground_truths确保result字典包含ground_truths: [标准答案1, 标准答案2]实战建议在开发环境创建专用的EvaluationWrapper类自动处理字段转换和日志记录。我曾用这个方法将评估准备时间从40分钟缩短到30秒。2. 四大核心指标的临床解读超越表面分数2.1 context_relevancy检索器的精准度筛查这个0.82的分数到底意味着什么通过逆向分析200评估案例我发现当该指标低于0.6时系统会频繁出现答非所问而高于0.9时则可能导致回答过于保守。上周优化法律咨询机器人时通过以下策略将其从0.57提升到0.79# 在检索阶段增加相关性过滤 def relevance_filter(docs, query_embedding, threshold0.75): from sklearn.metrics.pairwise import cosine_similarity return [ doc for doc in docs if cosine_similarity( get_embedding(doc.page_content), query_embedding ) threshold ] # 集成到Retriever中 retriever.search_kwargs[post_processors] [lambda docs: relevance_filter(docs, current_query_embed)]典型改进方案对比优化方向实施方法预期提升幅度副作用风险增加检索前过滤查询分类/关键词提取0.1~0.15可能遗漏长尾信息优化向量空间领域适配微调embedding模型0.2~0.3需要标注数据后处理过滤如上述代码示例0.05~0.1计算开销增加2.2 faithfulness生成模块的谎言检测器这个指标检测LLM是否在胡编乱造。某医疗客户曾出现faithfulness得分0.3的灾难案例——因为他们的prompt中误写了若不确定答案发挥创造力猜测。通过以下prompt工程技巧我们在两周内将得分稳定在0.85**改进后的prompt模板** 你是一位严谨的[领域]专家必须严格根据提供的参考内容回答问题。 若信息不足必须回答根据现有资料无法确定禁止任何形式的编造。 参考内容 {context} 问题 {question} 请按以下结构回答 1. 直接答案如存在 2. 答案依据引用参考内容的原文段落编号 3. 确定性说明完全确定/部分确定/无法确定关键发现faithfulness得分与temperature参数呈负相关r-0.72。但当temperature0.3时answer_relevancy会下降。需要找到平衡点。3. 高级诊断技巧交叉指标分析单独看每个指标就像只用体温计诊断疾病——我们需要建立指标间的关联分析。这是我在三个企业级RAG项目中总结的症状-诊断对照表复合问题诊断矩阵指标组合模式潜在问题优化优先级context_relevancy低 faithfulness高检索范围过窄调整检索器top_k参数context_recall高 answer_relevancy低生成模块信息整合差重构prompt的答案组织逻辑所有指标波动大数据分布不均按问题类型分组评估最近用这个方法帮一家电商客户发现当问题包含价格比较时系统表现骤降。根本原因是产品文档中价格单位不统一有的带$有的写美元。解决方案是增加预处理归一化层def normalize_text(text): # 统一货币单位 text re.sub(r\$\s*(\d), r\1美元, text) # 处理型号缩写 text re.sub(rPro\b, Professional, text) return text # 在索引和查询时都应用 vector_db.add_documents([normalize_text(doc) for doc in raw_docs]) query normalize_text(user_query)4. 从评估到优化构建持续改进闭环评估不是终点而是优化循环的起点。这是我们团队采用的PDCA评估工作流Plan选择10-20个典型问题作为基准测试集Do运行RAGAS评估并记录各环节数据Check用雷达图可视化四项指标Act针对最弱指标实施靶向优化自动化评估脚本示例import pandas as pd from ragas.metrics import faithfulness, answer_relevancy, context_precision, context_recall def benchmark_improvement(baseline, improved): metrics { faithfulness: faithfulness, answer_relevancy: answer_relevancy, context_precision: context_precision, context_recall: context_recall } results [] for name, metric in metrics.items(): base_score metric.score(baseline) impr_score metric.score(improved) results.append({ metric: name, baseline: base_score, improved: impr_score, delta: impr_score - base_score }) return pd.DataFrame(results).set_index(metric) # 生成对比报告 df benchmark_improvement(old_results, new_results) df.style.bar(color[#d65f5f, #5fba7d], alignzero)在最近一次季度优化中这个工作流帮助我们将平均回答质量提升了37%。具体措施包括为低context_relevancy问题添加同义词扩展对faithfulness不足的回答类型增加校验步骤当context_recall显示召回不足时自动触发混合检索每次评估后我们会将典型失败案例加入回归测试集。六个月下来这套方法让系统在应对边缘案例时的稳定性提高了4倍。

相关文章:

别再瞎调RAG了!用RAGAS给你的LangChain应用做个“体检报告”(附完整代码)

用RAGAS为你的LangChain应用做深度诊断:从指标解读到精准优化 当你花费数周构建的RAG系统突然在关键演示中输出"纽约市得名于一位爱吃苹果的市长"时,那种绝望感我深有体会。去年我们的客服机器人就曾把"产品退货政策"解释成"建…...

Charles证书过期别慌!Win10/Win11系统下彻底清除旧证书的保姆级教程

Charles证书过期别慌!Win10/Win11系统下彻底清除旧证书的保姆级教程 当你发现Charles突然无法正常抓取HTTPS流量,大概率是根证书过期了。作为Windows平台下最常用的抓包工具之一,Charles的证书管理直接影响着开发调试效率。但系统证书存储机制…...

统一游戏模组管理:如何用XXMI Launcher告别多工具切换的烦恼

统一游戏模组管理:如何用XXMI Launcher告别多工具切换的烦恼 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 你是否曾经为了管理不同游戏的模组而需要在多个工具间来…...

什么是共轭表达式?解决了什么问题?

什么是共轭表达式?解决了什么问题?为什么导数是 1/x? 导数衡量的是“每增加 1 单位的 xxx,y 能增加多少”...

基于hadoop+spark+hive的音乐推荐系统设计与实现

前言随着数字化音乐资源的迅猛增长,传统音乐推荐方式在满足用户个性化需求方面渐显乏力。本研究基于 Python 展开,致力于设计并实现一个音乐推荐系统。通过整合协同过滤算法、数据挖掘技术以及机器学习算法,对用户的音乐偏好和行为进行深入剖…...

为什么一个非常大的数的导数是一个非常小的数?

“数”本身没有导数,因为导数是针对函数的(描述函数在某点的变化率或斜率)。如果你指的是某个函数在自变量很大时,函数值(y)变得“非常大”,但其导数(y)却“非常小”&…...

7个实用技巧:用immich实现自托管相册智能管理 | 隐私保护与高效共享指南

7个实用技巧:用immich实现自托管相册智能管理 | 隐私保护与高效共享指南 【免费下载链接】immich High performance self-hosted photo and video management solution. 项目地址: https://gitcode.com/GitHub_Trending/im/immich 你是否曾在数千张照片中艰难…...

Kotlin协程取消机制实战:用suspendCancellableCoroutine避免你的后台任务内存泄漏

Kotlin协程取消机制实战:用suspendCancellableCoroutine避免内存泄漏 当你在安卓应用中处理一个耗时任务时,用户突然退出页面会发生什么?那些未完成的网络请求、数据库查询和文件操作可能仍在后台默默消耗资源。更糟的是,如果这些…...

ArcMap10.4.1中文版地图数字化技巧:如何高效捕捉和数字化等高线

ArcMap 10.4.1中文版等高线数字化实战:从基础操作到效率倍增技巧 在GIS数据处理中,等高线数字化是地形分析的基础环节,也是许多项目中最耗时的步骤之一。我曾参与过一个山区防洪规划项目,团队需要处理超过200平方公里的1:10000地形…...

全面解锁《鸣潮》游戏潜力:WaveTools工具箱新手使用指南

全面解锁《鸣潮》游戏潜力:WaveTools工具箱新手使用指南 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 想要在《鸣潮》中获得更流畅的游戏体验和更精细的画质控制吗?WaveTools鸣潮…...

从Shenyu网关的线程瓶颈说起:我是如何用gRPC长连接优化配置同步的(Raft实战)

从Shenyu网关的线程瓶颈到gRPC长连接优化:Raft协议实战解析 1. 问题背景与现状分析 在微服务架构中,API网关作为流量入口,其性能直接影响整个系统的稳定性。Apache Shenyu作为流行的开源网关解决方案,默认采用HTTP长轮询机制实现配…...

保姆级教程:用Python调用DashScope灵积模型API,5分钟搞定你的第一个AI菜谱

5分钟实战:用Python调用DashScope打造智能菜谱生成器 第一次接触AI模型API调用时,很多人会被各种术语和配置步骤吓退。但事实上,借助像DashScope这样的平台,即使是编程新手也能快速实现有趣的应用。今天我们就从一个生活化场景出…...

php中闭包(Closure)的bindTo函数用法详解

Closure::bindTo 是 PHP 中的一个方法,用于改变闭包(Closure)内部的 $this 上下文以及其静态范围。这意味着你可以将一个闭包从一个对象或类绑定到另一个对象或类上,使其在调用时使用新的上下文。这对于在不同的对象实例间复用闭包…...

hdl_localization实战:在ROS Melodic下,如何不依赖IMU实现16线激光雷达的稳定定位?

无IMU环境下16线激光雷达的hdl_localization实战指南 在机器人自主导航领域,定位系统是核心组件之一。传统方案通常依赖IMU(惯性测量单元)与激光雷达的融合,但在实际工程中,IMU数据可能存在噪声大、校准困难或硬件缺失…...

拯救你的网站兼容性:手把手教你用heic2any解决苹果图片上传问题

苹果用户图片上传难题的终极解决方案:前端HEIC转换实战指南 你是否遇到过这样的场景:精心设计的网站上传功能,在苹果用户面前却频频报错?后台服务器不断收到无法识别的图片格式,而用户则抱怨"明明能拍照片却上传…...

实测560Mbps!基于ZYNQ的SFP光口以太网性能优化全记录(含PetaLinux配置)

实测560Mbps!基于ZYNQ的SFP光口以太网性能优化全记录(含PetaLinux配置) 在嵌入式系统设计中,高速以太网通信一直是提升整体性能的关键环节。特别是当项目需要远距离、抗干扰的数据传输时,SFP光口方案往往成为工程师的首…...

从PTA题目到项目实战:用Python和C语言两种思路重构‘插入排序’

从PTA题目到项目实战:用Python和C语言两种思路重构‘插入排序’ 算法学习常常陷入"纸上谈兵"的困境——我们能在OJ平台上AC题目,却难以将算法思想迁移到真实项目中。以插入排序为例,这道PTA基础题背后隐藏着数据处理、性能优化和语…...

QFIL线刷救砖全攻略:遇到EDL模式切换失败怎么办?附详细COM端口排查方法

QFIL线刷救砖实战指南:EDL模式切换失败的系统级解决方案 当你面对安卓设备变砖的紧急状况,线刷往往是最后的救命稻草。但就在这关键时刻,"Download Fail:Switch To EDL Fail"的红色报错突然弹出,那种从希望到绝望的落差…...

计算机毕业设计:Python出行数据智能分析与预测平台 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

微信聊天记录数据自救指南:WeChatMsg完全解决方案

微信聊天记录数据自救指南:WeChatMsg完全解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg…...

深入STM32F407的UART Bootloader:除了烧程序,你还能用它做什么?

深入STM32F407的UART Bootloader:解锁系统级设计的五大高阶应用 当大多数开发者还在将UART Bootloader视为简单的固件烧录工具时,那些真正理解嵌入式系统设计精髓的工程师已经将其转化为产品全生命周期管理的核心组件。STM32F407芯片内置的Bootloader远…...

如何用Mac Mouse Fix终极提升你的Mac鼠标体验:完整配置指南

如何用Mac Mouse Fix终极提升你的Mac鼠标体验:完整配置指南 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 还在为Mac上的鼠标体验感…...

高性能NoSQL

关系数据库已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。 关系数据库存储的是行记录,无法存储数据结构 关系数据…...

塞尔达存档定制工具:解锁海拉鲁冒险的无限可能

塞尔达存档定制工具:解锁海拉鲁冒险的无限可能 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 在海拉鲁大陆的冒险旅程中,每个玩家都曾面临…...

Yii2的EVENT_BEFORE_ACTION的本质的庖丁解牛

yii\base\Controller::EVENT_BEFORE_ACTION 是 Yii2 框架中 AOP(面向切面编程) 的核心锚点,也是 MVC 流程中的“安检门”。 它的本质是:在具体的业务逻辑(Action)执行之前,提供的一个“拦截、验…...

高性能数据库集群

近年来各种存储技术飞速发展,但关系数据库由于其 ACID 的特性和功能强大的 SQL 查询,目前还是各种业务系统中关键和核心的存储系统,很多场景下高性能的设计最核心的部分就是关系数据库的设计。 不管是为了满足业务发展的需要,还是…...

DXVK:Linux平台Direct3D转Vulkan的技术革命

DXVK:Linux平台Direct3D转Vulkan的技术革命 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 项目价值定位:打破平台壁垒的图形转换层 &#x1f3…...

性能实测:登临Goldwasser V2加速卡跑YOLOv5s,对比CPU看速度提升多少?

登临Goldwasser V2加速卡YOLOv5s实测:从环境配置到性能对比的全流程拆解 当目标检测任务遇上边缘计算场景,算力与能效的平衡往往成为工程落地的关键瓶颈。上周在部署某工业园区安防系统时,我们尝试用登临科技的Goldwasser V2加速卡运行YOLOv5…...

Flet实战:教你用Python把Todo应用打包成exe可执行文件(含界面美化技巧)

用Flet和Python打造专业级Todo应用:从开发到打包的完整指南 在当今快节奏的工作环境中,一个美观实用的Todo应用能显著提升个人效率。Python开发者现在有了一个强大的新选择——Flet框架,它让我们能够用纯Python构建跨平台的桌面应用&#xf…...

李慕婉-仙逆-造相Z-Turbo 生成Matlab算法脚本:从数学公式到可执行代码

李慕婉-仙逆-造相Z-Turbo 生成Matlab算法脚本:从数学公式到可执行代码 最近在帮一个做信号处理的朋友调试代码,他给我看了一页论文里的公式,问我怎么在Matlab里实现。我盯着那一堆希腊字母和矩阵运算,突然想到,要是能…...