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

给RAG打分:小白也能懂的AI系统评测全攻略

你是不是经常被这些问题困扰:

"我搭的RAG系统,到底靠不靠谱?"
"花了大价钱部署的RAG应用,效果怎么还不如直接问ChatGPT?"
"为啥有时候回答超准,有时候却离谱到天际线?"

别担心,今天我们就要聊聊如何给RAG系统打分,就像我们平时给外卖评星一样简单!

RAG评测:从"感觉良好"到"有理有据"

先来个小场景:小王刚刚搭建了一个公司内部文档问答系统,同事们反馈"感觉挺好用的",但是CEO突然问他:"这系统到底比原来的搜索好在哪?能不能量化?"

小王:😰...

这不就是我们的日常吗?所以今天我们就要从"感觉良好"升级到"有理有据"的评估体系!

图1:RAG系统评估的三大维度及核心指标

检索质量评估:从"大海捞针"到"一针见血"

检索评估那些事儿

想象你在图书馆找一本关于"如何训练猫咪使用马桶"的书:

  • 方式A:你问图书管理员,他给了你50本书,说"应该在里面"
  • 方式B:管理员直接带你到准确位置,第一本就是你要的

这就是RAG检索质量的差别!而衡量这种差别的指标主要有:

Recall@K:就像赶场相亲,相中的那个人在前K个候选里的概率。

"哎呀妈,你给我安排的10个相亲对象里,居然没一个是学计算机的!"

这就是Recall@K等于0的惨案,你要找的信息压根不在检索结果里!

MRR (Mean Reciprocal Rank):第一个正确答案出现的位置的倒数平均值。

假设你在某宝搜"程序员加班神器",如果第一个就是"黑咖啡",那MRR=1;
如果第二个才是,那MRR=1/2=0.5;
如果第十个才是,那MRR=1/10=0.1。

MRR越高,说明系统越能把正确答案放前面!

NDCG:考虑了相关性程度和排名位置的指标。

就像点外卖,不光看有没有你想吃的菜,还要看好评的店是不是排在前面。
如果五星餐厅被排在第10页,而三星餐厅排在首页,这就是NDCG不高的表现!

生成质量评估:从"狗屁不通"到"如数家珍"

AI回答也要打分

你有没有过这样的体验,RAG系统明明检索到了正确的内容,但生成的回答却像是被猫踩过的键盘?

评价生成质量,主要看这几点:

事实准确性:AI说的是不是真的。

这就像你男朋友给你讲他前任的故事,你总得找个知情人核实一下,对不对?

BLEU/ROUGE:衡量生成文本与标准答案的相似度。

想象你小时候背诵课文,老师会看你背得有多准确。
BLEU/ROUGE就像是AI的"背诵评分",看它是不是把知识点都覆盖到了。

图2:RAG系统中的评估关键点

BERTScore:更注重语义相似性而非字面相似性。

这就像你跟朋友讲同一个笑话,表达不同但笑点一样,依然是好笑话!
BERTScore就是看AI回答的"神韵"对不对,而不只是字字相符。

端到端评估:用户才是最终裁判

从技术指标到用户体验

技术指标再好,用户不买单也是白搭。所以我们还需要端到端评估:

响应时间:系统响应速度。

就像你问路,对方思考了半小时才告诉你"往前走",
信息再准确,你可能也已经自己找到了...

端到端准确率:整体回答正确率。

这就像你点的外卖,不管餐厅、骑手、包装环节谁出了问题,
最终送到你手上的食物凉了或者洒了,这单体验就是失败的。

实战案例:小李的客服机器人评测记

小李最近在电商公司部署了一个基于RAG的客服机器人,上线前他是这样评测的:

  1. 检索质量测试
    准备了100个常见问题,看机器人能否找到对应的产品手册和政策文档。
    结果发现Recall@5只有75%,意味着1/4的问题找不到正确资料!

  2. 生成质量测试
    对成功检索的75个问题,生成回答与标准答案的ROUGE-L平均只有0.6,
    就像教科书上的知识点只答对了60%...

  3. A/B测试
    找了50名真实客户,一半使用新机器人,一半使用旧系统。
    结果用户满意度只提升了5%,远低于预期的20%!

通过这些评估,小李发现了问题所在:

图3:小李的RAG系统评估发现的主要问题

最终,小李针对性地进行了三方面优化:

  1. 建立知识库自动更新机制,提高了检索覆盖率
  2. 改进提示词,让回答更全面和客户友好
  3. 升级服务器配置,将响应时间从5秒缩短到2秒

一个月后,小李的系统满意度提升了25%,超过了目标!

实用建议:别让评估变成"形式主义"

许多人做RAG评估时会陷入几个常见误区:

误区一:只看技术指标,忽视业务价值

这就像你的对象长得帅身材好性格佳,但从不给你买奶茶...
各项指标都优秀,但解决不了你的实际需求,有什么用?

误区二:一次性评估,缺乏持续监控

就像你减肥,测了一次体重发现瘦了2斤就开始疯狂吃火锅...
RAG系统也需要持续监控,因为数据和问题都在变化!

误区三:样本偏差,不代表真实场景

就像相亲照片P得很好看,但见面发现是照骗...
测试样本要足够多样化,才能反映真实使用情况!

给我的RAG应用做体检:实用清单

如果你正准备给自己的RAG系统做评估,这里有一份简易清单:

  1. 检索评估

    • 准备100个典型问题和标准答案
    • 计算Recall@3, Recall@5, MRR
    • 目标:Recall@5 > 85%, MRR > 0.7
  2. 生成评估

    • 使用自动指标:ROUGE-L > 0.7
    • 人工评估:事实准确率 > 95%
    • 幻觉检测:错误事实比例 < 3%
  3. 端到端评估

    • 响应时间 < 3秒
    • 用户满意度提升 > 15%
    • A/B测试样本量 > 200

记住,评估不是为了评估而评估,而是为了发现问题、持续改进!

总结:优秀的RAG系统是"考"出来的

好了,现在你已经掌握了如何给RAG系统进行全方位的科学评估。记住,这不是一次性的工作,而是持续优化的过程。

想想我们日常使用的搜索引擎,它们可是经过了几十年、数不清的评估和优化才达到今天的水平。你的RAG系统也需要这样不断"迭代进化"!

最后,送你一句话:

"没有评估的RAG,就像没有体检的身体,看起来健康,隐患却可能不少;
科学评估的RAG,才能真正做到'有问必答,答必精准'!"

现在,去给你的RAG系统安排一次全面体检吧!

相关文章:

给RAG打分:小白也能懂的AI系统评测全攻略

RAG系统评估听起来高深,其实跟我们生活中的尝鲜评测没啥两样!本文用轻松幽默的方式,带你从检索质量、生成质量到用户体验,全方位掌握如何科学评测RAG系统,避免踩坑,让你的AI应用又快又准。#RAG技术 #AI评估 #信息检索 #大模型 #数据科学你是不是经常被这些问题困扰: &qu…...

P8114 [Cnoi2021] 六边形战士

传送 非常好玩的题! 首先你大概率看过一些“无字证明”,其中很经典的是这个: 证明:用若干个边长为 \(1\),顶角为 \(60\) 度的菱形拼成一个边长为 \(n\) 的正六边形,三个方向的菱形个数一定相等。这是一个经典的无字证明,虽然前置的说明要费很大功夫,不过你不关心这个。…...

【GitHub每日速递 250918】开发者必藏!336k 星标项目告诉你:前端 / 后端 / AI 岗该怎么学才高效

原文:https://mp.weixin.qq.com/s/Oo5T6g68BNe9QUTL4bHrIg AI外语学习神器Enjoy上线!网页版、桌面版全攻略来袭 everyone-can-use-english 是一个帮助用户学习和使用英语的工具类应用。简单讲,它通过技术手段降低英语使用门槛,让每个人都能轻松练习和掌握英语。适用人群:英…...

css-4

定位布局...

【操作系统】从实模式到保护模式,

实模式...

Flutter CSV导入导出:大数据处理与用户体验优化

Flutter CSV导入导出:大数据处理与用户体验优化本文基于BeeCount(蜜蜂记账)项目的实际开发经验,深入探讨如何在Flutter应用中实现高效、用户友好的CSV数据导入导出功能。项目背景 BeeCount(蜜蜂记账)是一款开源、简洁、无广告的个人记账应用。所有财务数据完全由用户掌控,支…...

读人形机器人15未来城市

读人形机器人15未来城市1. 将机器人技术融入城市规划 1.1. 新一轮工业革命的曙光要求我们重新审视城市的设计与功能 1.2. 将机器人技术融入城市规划已不再是未来主义的概念,而是一种现实需要 1.3. 将机器人技术融入城市规划,能够将城市转变为充满活力的智能生态系统1.3.1. 通…...

解锁智能检索新境界:CriticGPT 赋能检索模型洞察人类偏好

随着大型语言模型技术的快速发展,检索增强生成 (RAG) 系统已成为连接海量知识与精准回答的关键桥梁。然而,传统 RAG 模型在理解和满足用户真实需求方面仍存在明显局限。2024 年 6 月 OpenAI 发布的 CriticGPT 技术,为突破这一瓶颈提供了全新思路。本文将深入剖析 Reward-RAG…...

NET 中 Async/Await 的演进:从状态机到运行时优化的 Continuation

NET 中 Async/Await 的演进:从状态机到运行时优化的 Continuation C# 的 `async/await` 长期以来是编写简洁、非阻塞代码的基石,但其传统实现——每个异步方法生成一个独立状态机——在高性能场景(如递归或链式异步调用)中暴露出显著局限性。2025 年的 .NET 9 和 .NET 10 …...

最长公共子序列

题目描述 给你一个序列X和另一个序列Z,当Z中的所有元素都在X中存在,并且在X中的下标顺序是严格递增的,那么就把Z叫做X的子序列。 例如:Z=是序列X=的一个子序列,Z中的元素在X中的下标序列为<1,2,4,6>。 现给你两个序列X和Y,请问它们的最长公共子序列的长度是多少? …...

使用 Ansible 管理服务器集群

Inventory Ansible 使用 /etc/ansible/hosts 管理受控服务器列表: --- ungrouped:hosts:node-1:ansible_host: 192.168.1.1ansible_user: johnnode-2:ansible_host: 192.168.1.2ansible_user: janenode-3:ansible_host: 192.168.1.3ansible_user: frank关于 inventory 文件的字…...

1现在处于非常破防的阶段,不知道为什么会打成这个样子。 ABC 过得很快。看到 D1 的第一眼就会了,发现转移只需要随便优化一下就能通过 D2,不太想写。E 看上去挺可做,F 看上去是板子题。于是开始写 F,不知道这种代码不长、没有任何思维难度的题怎么能写那么长时间,根本原因…...

Codeforces Round 1051 (Div. 2)

A. All Lengths Subtraction 题意:一个排列,对于每个\(k \in [1, n]\),你都要选择一个长度为\(k\)的子数组使得它们都减一,求有没有方案使得最终所有数都是\(0\)。 考虑\(k\)从大到小,发现做\(n\)的时候\(1\)变成\(0\),此时如果\(1\)不在两端,则\(k = n - 1\)时必然再把…...

再不学就晚了!RDT LeRobot与RDKS100部署详解

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 机械臂:LeRobot-SO101 数采机:MacBook-Pro Python3.10 开发机:Ubuntu 22.04, Cuda12.4,8 NVIDIA A100-SXM4-40GB 开发板:RDK OS 4.0.2 Based on Ubuntu 22.04, Python 3.10.12, OpenExplore 3.2.0 相…...

编译Unity4.3.1f1

参考: 编译 Unity 4.3.1 引擎_unity-source-4.3.1f1-CSDN博客 Unity 4.3.1f1编译调试 - 知乎 Unity source 4.3.1f1 源代码分析-腾讯游戏学堂 附: 早期版本下载(4.x之前的版本)...

【R课堂-电机专栏】为什么提高电机的电压时,转速会随之上升?

本文探讨的问题是 “为什么提高电机的电压时,转速会随之上升?”具体而言,就是当给电机绕组施加的电压升高(增大)时,为什么其转速会随之上升。这一现象看似理所当然,但其背后的原理却涉及诸多物理公式。这个问题对于深入了解电机原理非常关键,下面将为大家详细阐述。●问…...

抽象 CF

一道题在 CF 上有三倍经验,我有个细节假了: \(n \le 10^5\),84 个点的那道在 #64 寄了。 \(n \le 2 \times 10^5\),88 个点的那道在 #88 寄了。 \(n \le 5 \times 10^5\),111 个点的那道直接 A 了。...

单元测试之Mockito使用

测试中为什么需要Mock 在实际的测试中,被测试的对象并不都是可以通过简单的new操作符就可以创建出来的! 实际的业务代码中,一个业务类往往要依赖很多其他的类才能完成一个完整的业务方法,这些依赖包括第三方的rpc,db的查询等等,具体的拓扑如下图我们想测试ClassA,但是Cl…...

Jetson有Jtop,Linux有Htop,RDK也有Dtop!

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 本项目基于btop开源项目进行二次开发,旨在为RDK平台提供更强大的系统监控工具。 Linux系统下有Htop可以作为系统监控,英伟达的Jetson也有第三方的Jtop,咱们RDK虽然也提供了hrut_somstatus来查看BPU的使用…...

《原子习惯》-读书笔记4

2025.09.17 Day4 1、 养成习惯的过程可以分为四个简单的步骤:提示、渴求、反应和奖励。2、你的头脑在不断分析你的内外部环境,寻找奖励所在的线索。因为线索是我们已然接近奖励的第一个迹象,它自然会导致人们滋生渴求。3、提示的作用是让你注意到奖励的存在。渴求是想要得到…...

Java学习第二天

数据类型 Java、c++是一种强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用,安全性高,速度较慢 弱类型语言:安全性低,速度较快 Java数据类型分为两大类:基本类型、引用类型位:计算机内部数据存储的最小单位,11001100是一个八位二进制数 字节:是…...

Java学习第三天

顺序结构 package Scanner;import java.util.Scanner;public class Demo05 {public static void main(String[] args) {//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并非输出执行结果Scanner scanner=new Scanner(System.…...

Java学习第四天

break continue break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用) continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行…...

搜索百科(1):Lucene —— 打开现代搜索世界的第一扇门

大家好,我是 INFINI Labs 的石阳。 这是《搜索百科》专栏系列文章,每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。 搜索技术看似专业,但它早已深度融入我们的日常生活。无论是电商搜索、知识检索,还是 AI 语…...

02020308 .NET Core核心基础组件08-结构化日志和集中日志服务

02020308 .NET Core核心基础组件08-结构化日志和集中日志服务...

zookeeper的配置

问题:1.1号和二号虚拟机可以成功启动三号报错 2025-09-17 17:57:46,219 [myid:] - INFO [main:QuorumPeerConfig@133] - Reading configuration from: /export/server/apache-zookeeper-3.5.6-bin/bin/../conf/zoo.cfg 2025-09-17 17:57:46,228 [myid:] - INFO [main:Quorum…...

02020307 .NET Core核心基础组件07-什么是Logging、NLog

02020307 .NET Core核心基础组件07-什么是Logging、NLog...

算法第一周博客

算法第一周博客任务一,搜索大公司内部编码规范,列出本学期编码需遵守的规范 1.程序块要采用缩进风格编写,缩进的空格数为4个,使得层次分明。 2.控制每行最大长度不超120个字符,超过时换行并适当缩进,并且一行通常一个语句。 3.命名标识符(包括变量,函数,结构体等)时,…...

nid修改dbid/dbname

Table of Contents1. 简述 2. 操作步骤说明 3. 操作命令1. 简述2. 操作步骤说明如果配置了DBconsole,需要删除DBconsole对象。之后完全关闭,再启动到mount状态。 nid 命令支持修改dbid 和 dbname两个值。具体操作见之后示例。 但是在操作之前,需要明确是只需要修改dbid 还是同…...

攻防世界-parallel-comparator-200 - xxx

下载后得到是一个c语言文件,用vs创建一个项目后复制代码发现无法打开<pthread.h>,去网上搜了一下发现windows平台配置有点麻烦 于是就去搜索了一下这个的作用,后面分析代码的时候再提。 先看main函数user_string就是用户需要输入一个长度为20的字符串,然后去看能够触…...

Manim实现脉冲闪烁特效

在数学可视化中,脉冲闪烁特效能像聚光灯一样引导观众注意力,突出关键公式、特殊点或重要结论。 本文将介绍如何一步步通过代码来实现这个特效,并通过参数精准控制视觉效果。 1. 实现原理 脉冲闪烁特效的核心是周期性改变发光体的半径和透明度,模拟能量波动的视觉效果。 这个…...

2025.9.17总结

今天主要内容就是在IDEA里编写代码,后端还是springboot,前端vue3,数据库用hbase。 其他的和之前编写的web项目流程都一样。 就是数据库的使用,和数据库的读写,操作不太一样。 还有hbase,创建表,表结构,读写和常规的mysql不一样。在ai帮助下完成创建表,表结构,读写数据…...

office2024安装包下载安装教程(2025最新整理)office2024专业增强版下载安装教程

在当今数字化办公的时代,一款功能强大且稳定的办公软件是提高工作效率的关键。Office 2024 专业增强版作为微软办公软件家族中的佼佼者,集成了多种实用的办公组件,能够满足各类用户在文档处理、数据管理、演示汇报等多方面的需求。本文将为大家详细介绍 Office 2024 专业增强…...

2025竞赛学习资料

2025竞赛学习资料链接1、竞赛资源链接集 2、CSP-J/S资源链接1 3、C++竞赛综合 4、2025年3月GESP认证C++5级判断题真题详解 5、GESP考试集...

C++ 模板参数推导问题小记(模板类的模板构造函数)

本篇主要是为了记录在编写一个模板类的模板构造函数中遇到的初始化问题,以及针对这个问题展开的相关知识整理,文章就以引发这个问题的代码为标题了。 问题代码 在编写一个代表空间点的模板类 point 时,我打算为它添加一个模板构造函数:代码template<typename T, std::si…...

axios两种写法

// 登录 export const login = (data) => {return request.post(/login, data) }// 权限管理列表 get请求需要写在url上面 export const authAdmin = (params) => {return request.get(/auth/admin, { params }) } ///////////////////////////////////////////////////…...

adobe illustrator中使用画笔工具切割图形

001、测试图形 002、选择画笔工具 3、绘制想要切合的形状,然后同时选中这跟线和图形 004、窗口 + 路径查找器 005、 点击分割 006、 点击取消编组 007、 实现图形分割 。...

2025年了,在 Django 之外,Python Web 框架还能怎么选?

前言 大家好,我是曦远~ 前段时间我写过一篇文章 《Django过时了吗?从ASGI到AI时代的思考》,聊到在 AI 时代下,传统全家桶式框架(比如 Django)该如何面对新趋势。 最近在翻新 DjangoStarter 项目的时候,我顺便做了一些调研,发现 Python Web 生态的变化比我想象得还要快。…...

AtCoder Beginner Contest 423

D - Long Waiting 三个优先队列 #include<bits/stdc++.h> using namespace std; #define endl \n #define yes cout << "YES" << endl #define no cout << "NO" << endl #define pii pair<int,int> #define ll long l…...

SRAM和DRAM的特点和区别

SRAM 静态随机存取存储器 基本结构和工作原理:核心单元:SRAM每个cell 由6 个晶体管 组成,形成一个双稳态触发器电路。 工作原理:这种电路结构由两个稳定的状态,分别代表逻辑“0”和逻辑“1”。只要保持通电,状态就会一直保持下去,不需要额外的操作。 读写过程:通过字线…...

xml基本语法

1. xml的基本结构 XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输结构化数据的标记语言,核心特点是自定义标签和严格的语法规则.一个合法的 XML 文档必须包含文档声明和唯一根元素<?xml version="1.0" encoding="UTF-8"?&g…...

Java25新特性

🛠️ 1. 语言特性与开发者体验实例主方法 (Instance Main Methods)​: 支持省略 public static修饰符的 void main()方法,使初学者更易编写第一个Java程序。// 无需显式类声明和public static修饰符 void main() {IO.println("Hello, JDK 25!"); // java.lang.IO …...

Day17多维数组

多维数组可以看成数组的数组,即在数组中在嵌套一个数组 例如二维数组是一个特殊的一维数组,他的每一个元素都是一个一维数组(1,2,3,4,5.......) 格式与一维数组相似:int [] [] a = new int [i] [j]; 举例的二维数组可以看为两行五列的数组 public class ArrayDemo5 {pub…...

C++ lambda 匿名函数

1、基本介绍 C++11 引入的 lambda 匿名函数(Lambda Expression)是一种轻量级的函数对象,可在需要函数的地方直接定义,无需单独声明,极大简化了代码编写(尤其是回调函数、算法谓词等场景)。 基本语法: [capture-list] (parameter-list) mutable noexcept(optional) ->…...

D拼数

include<stdio.h> include<stdlib.h> #include<string.h> int compare(const void *a, const void *b) { char str1[40], str2[40]; // 1:a在前,b在后 sprintf(str1, "%d%d", *(int *)a, *(int *)b); // 2:b前a后 sprintf(str2, "%d%d&q…...

20250917 - WETToken 攻击事件:价格操控产生的套利空间

背景信息Alert:https://x.com/TenArmorAlert/status/1968223320693686423 TX:https://app.blocksec.com/explorer/tx/bsc/0xf92539acf7eadfd4a98925927a52af5349cb13c2a250908373a5baf8ea4b49adTrace 分析 发生攻击的位置在闪电贷的 callback 函数里面,执行完闪电贷后攻击合…...

题解:P6798 「StOI-2」简单的树

简单的树: 题意: 一颗树,每个节点有一个权值 \(c_i\)。 \(val_i\):\(i\) 为根的子树内所有 \(c_i\) 的最大值。 \(f(x,y)\):\(c_{x}\) 改为 \(y\) 后 \(val_i\) 之和。 每次询问给定 \((l,r,a)\) ,求 \(\sum\limits_{i=l}^{r}{f(a,i)}\)。 思路 首先一眼看出来几个性质:…...

题解:P11704 [ROIR 2025] 旅行路线

旅行路线: 很有参考价值的一道题,其他题解有点抽象,我来。 转化题意 题意转化为 \((1,2)→(n-1,m),(2,1)→(n,m-1)\) 的两条链不相交且经过所有关键点的方案数。 其他点没用,我们以下的点指关键点。 无不能相交限制的 DP 由于 \(x_i\le x_j,y_i\le y_j\),\(i\) 才可以转移…...

题解:P11292 【MX-S6-T4】「KDOI-11」彩灯晚会

彩灯晚会:\(n\) 点 \(m\) 边 \(k\) 种颜色,给每个点染色。 \(cnt_i\):第 \(i\) 种颜色长度为 \(l\) 的链的数量。其中 \(l\) 为题目给的一个常量。 求 \(\sum_{染色方案}\sum_{i=1}^k cnt_i^2\) 的和。一\(\sum_{染色方案}cnt_i\) 值都一样,钦定 \(pos\) 作为代表颜色,那么…...

算法课程第一周作业

《数学之美》第一章启示 《数学之美》的第一章,在算法工程师眼中,并非传授某个具体算法.而是重构了我们理解、设计和应用算法的底层思维框架,世界的基本问题是算法问题,而数学是寻找最优算法的终极语言。 启示一:所有问题本质上都是建模与算法选择问题.意味着世界是一个巨大的待…...