想象你是一位语文老师,给学生出了一道开放题:“请描述你最喜欢的一个季节,并说明理由。”学生的答案五花八门——有人写春天,有人写秋天,甚至有人从“季节”联想到“人生的四季”。没有标准答案,你怎么判断学生有没有“答在点子上”?你想到一个聪明的办法:遮住题目,只读正文,反推“这篇作文大概率是在回答什么问题”。如果从“桂花、落叶、秋风”能轻松猜出题目是“最喜欢的季节”,说明作文扣题;如果读完整篇都是“红烧肉的二十八种做法”,完全猜不出原题,那多半跑题了。 这正是 RAGAS 框架中 Answer Relevance(答案相关性)指标的底层逻辑。当我们让大模型在检索增强生成(RAG)系统中回答用户问题时,如何判断答案有没有“答到点子上”?RAGAS 的做法与那位语文老师如出一辙——让大模型从答案反推出若干“可能的问题”,再计算这些反推问题与原始问题的语义相似度,取平均作为相关性得分。分数越高,答案越扣题;分数越低,答案越“答非所问”。 这篇文章,就以这位“逆向猜题的语文老师”为导游,带你从零认识 Answer Relevance:它是什么、怎么算、如何落地,以及有哪些坑要避开。

岗位关联

对 AI 从业者而言,Answer Relevance 是 RAG 系统质量评测的三大核心指标之一。掌握它,你就能用数据回答“模型到底有没有答在点子上”,为系统迭代提供硬指标。

目录
  1. 可视化演示
  2. 指标定义价值
  3. 逆向问题生成
  4. 语义相似度计算
  5. 评分公式解析
  6. 评测流程实现
  7. 架构适配方案
  8. 效果对比局限
  9. 落地实践建议
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示RAG系统的检索-生成-评测三要素流程,以及RAGAS框架的忠实度、相关性、精确率等核心指标。

本节配有交互动效(进入视口后自动加载,约 3KB)。

RAG三要素评测流程 问题检索:Query→检索相关文档上下文 生成回答:基于检索上下文生成答案 三要素评估:检索质量+生成质量+端到端 RAG = Retrieve(ctx) + Generate(ans) + Eval 检索与生成质量共同决定RAG效果

指标定义价值

语文老师批改开放题的第一步,不是逐字看对错,而是先判断“这篇作文有没有扣题”。有的学生文笔优美却写了别的题目,有的学生大白话却句句踩在点上。在打“对错分”之前,老师心里其实先有一个“扣题分”。这就是答案相关性(Answer Relevance,简称 AR)这个概念的雏形:先不问“答得对不对”,只问“有没有答在点子上”。

在 RAG(检索增强生成)系统中,用户提出问题 Q,系统结合检索到的资料生成答案 A。Answer Relevance 评估的正是 A 与 Q 之间的“扣题度”。它与两个容易混淆的指标相互独立:忠实性(Faithfulness)检查答案是否忠于检索资料,上下文相关性(Context Relevance)检查检索资料是否配得上问题。一个答案可以既扣题又错误,也可以忠实却跑题——就像一篇作文可以紧扣题目却通篇胡说八道。

RAGAS 将 Answer Relevance 设计为“无监督指标”:不需要人工撰写标准答案,只需要问题、答案和一个大模型。它的核心洞察是:直接比对“问题”与“答案”的语义往往很困难,因为两者句式、详略差异巨大;不如借力打力——让模型从答案反推问题,再比对“反推问题”与“原始问题”,从而绕开“问题与答案形态不同”的鸿沟。

就像语文老师先打“扣题分”再打“文采分”,Answer Relevance 先回答“有没有答在点子上”,再交由忠实性等指标回答“答得对不对、全不全”。这一维度划分,让 AI 评测第一次有了人类评卷那种“分项打分”的精细结构。

AR(A,Q)∈[0,1]\displaystyle \text{AR}(A, Q) \in [0, 1]
这个式子只是告诉你 AR 是一个以答案 A 和问题 Q 为输入、输出落在 0 到 1 之间的分数,越接近 1 越扣题。
  1. 符号身份AR 是 Answer Relevance 的缩写,代表“答案相关性”这个评测分数。
    AR\displaystyle \text{AR}
  2. 入参含义A 是被评测的答案,Q 是用户提出的原始问题,括号表示该分数由二者共同决定。
    (A,Q)\displaystyle (A, Q)
  3. 取值区间∈ [0, 1] 表示分数归一化到 0 到 1 之间,越接近 1 越扣题,越接近 0 越跑题。
    ∈[0,1]\displaystyle \in [0, 1]

逆向问题生成

老师看不透学生的心思,但她可以做一件巧妙的事——把答案拿在手里,遮住题目,反过来猜“这答案到底是在回答哪道题”。猜得越准,说明答案越没有跑题;猜不出来,说明这篇作文写到了九霄云外。这个“遮题猜题”的动作,就是 RAGAS 逆向问题生成(Reverse Question Generation)的灵感来源。

在技术实现上,RAGAS 把答案 A 单独交给一个大语言模型(LLM),提示它“请生成 N 个该答案可能回答的问题”。比如答案是“注意力机制是一种让模型在处理序列时动态分配权重的方法”,模型可能反推出“注意力机制是什么?”“什么是动态权重分配?”等多个问题。注意关键细节:输入里只有答案,没有原始问题。如果同时给了原始问题,模型就会“抄答案”,逆向生成就失去了意义。

这一步的工程细节直接影响评测质量:其一,采样数量 N 是超参数,RAGAS 常见默认值是 3,N 太小则分数波动大,N 太大则调用成本上升;其二,生成时要鼓励问题多样性,覆盖答案的不同侧面,而不是反复生成同一个问题;其三,逆向生成的质量决定了整个指标的上限——就像老师猜题能力再强,也要建立在“答案本身信息量充足”的基础上。

逆向生成的质量决定了这个“扣题分”的上限。就像老师猜题能力再强,也要建立在“答案本身别太离谱”的基础上——如果答案是“哈哈哈”三个字,任何老师都没法猜出它在回答什么。

{q1′,q2′,…,qN′}=LLMgen(A)\displaystyle \{q_1', q_2', \ldots, q_N'\} = \mathrm{LLM_{gen}}(A)
这个式子的意思是:把答案 A 喂给负责生成问题的大模型,得到 N 个“可能是原题”的问题,作为后续打分的素材。
  1. 集合符号花括号表示“一组问题”,q_i' 表示第 i 个逆向生成的问题,右上角撇号用于区分“生成的问题”与“原始问题”。
    {q1′,q2′,…,qN′}\displaystyle \{q_1', q_2', \ldots, q_N'\}
  2. 生成器含义\mathrm{LLM_{gen}} 表示“负责逆向生成的大语言模型”,它只看到答案,不看到原始问题。
    LLMgen\displaystyle \mathrm{LLM_{gen}}
  3. 输入来源A 是被评测的答案文本,整个式子的含义是“从答案反推出 N 个可能的问题”。
    (A)\displaystyle (A)

语义相似度计算

老师猜出若干“可能的题目”后,怎么判断哪道题与真实试题最像?她靠的是语感;机器靠的则是“语义向量”。所谓语义向量,就是先把文本通过嵌入模型(Embedding Model,如 BGE、text-embedding 系列)转成一串数字,让“意思相近的句子”在数字空间中方向也相近。

有了向量,就能用数学工具度量“像不像”。最常用的是余弦相似度(Cosine Similarity):把两个向量想象成从原点出发的两条射线,夹角的余弦值越接近 1,说明两条射线方向越一致,文本语义越接近。这个指标对文本长度不敏感——答案写得长或短、句式怎么变,都不影响“方向是否一致”,就像老师判断扣题时不会被华丽辞藻带偏。

在 Answer Relevance 的流程中,系统会逐对计算:把每个逆向问题 q_i' 与原始问题 Q 的向量做余弦相似度,得到 N 个 0 到 1 之间的分数。相似度高,说明答案确实是奔着这个题目来的;相似度低,说明答案写的是另一个方向。

这一过程用大白话讲,就是老师在心中把猜到的题目和真实题目做“语感比对”:语感越一致,说明答案确实是奔着这个题目来的;语感越不一致,说明答案写偏了。

cos⁡(θ)=q⋅qi′∥q∥⋅∥qi′∥\displaystyle \cos(\theta) = \frac{\mathbf{q} \cdot \mathbf{q_i'}}{\lVert \mathbf{q} \rVert \cdot \lVert \mathbf{q_i'} \rVert}
这个公式计算的是“原始问题的向量”与“第 i 个逆向问题的向量”之间的余弦相似度,结果越接近 1 越相似。
  1. 分子点积\mathbf{q} \cdot \mathbf{q_i'} 是两个向量的点积,把两个向量对应位置的数字相乘再求和,衡量“方向重叠程度”。
    q⋅qi′\displaystyle \mathbf{q} \cdot \mathbf{q_i'}
  2. 分母模长\lVert \mathbf{q} \rVert 和 \lVert \mathbf{q_i'} \rVert 分别表示两个向量的长度,用来把点积“归一化”,抵消文本长度的影响。
    ∥q∥⋅∥qi′∥\displaystyle \lVert \mathbf{q} \rVert \cdot \lVert \mathbf{q_i'} \rVert
  3. 整体含义\cos(\theta) 是两向量夹角的余弦值,取值在 -1 到 1 之间;对语义向量而言,实践上通常在 0 到 1 之间,越接近 1 越相关。
    cos⁡(θ)\displaystyle \cos(\theta)

评分公式解析

有了 N 个“语感分”,怎么汇总成一个总分?老师的做法简单实用——取平均。RAGAS 的 Answer Relevance 最终分数,就是 N 个余弦相似度的平均值。这个平均值把“每一处是否扣题”揉进一个 0 到 1 的分数里,方便横向对比不同系统、不同版本。

假设系统从答案中逆向生成了 3 个问题,与原题的相似度分别是 0.95、0.61、0.12,那么 AR 就是三者之和除以 3,约等于 0.56。这个分数会清晰地告诉你:答案主体信息相关,但存在明显的离题内容,需要优化。值得注意的是,均值策略有一个特性——它如实反映“局部跑题”:哪怕只有一个逆向问题与原题完全无关,它也会把总分显著拉低,就像一篇作文只要有一段明显跑题,老师对整篇的“扣题印象分”就会大打折扣。

实践中有几个细节需要注意:一是文本向量的余弦值通常落在 0 到 1 之间,所以 AR 一般也落在这个区间,不会出现负数;二是个别实现会用指数变换拉大分数区分度,或者取 N 个相似度中的最大值以保留“最相关”的证据,但主流的 RAGAS 实现默认使用均值;三是逆向问题中混入“万金油式”问题(比如“这是什么?”)时,均值会被异常值干扰,因此往往需要结合人工抽检。

平均值策略像极了语文老师打“扣题印象分”的方式:一篇作文只要有一段明显跑题,整体扣题印象就会打折。均值把局部的跑题如实反映到总分上,不掩盖问题。

AR=1N∑i=1Ncos⁡(q,qi′)\displaystyle \text{AR} = \frac{1}{N} \sum_{i=1}^{N} \cos(\mathbf{q}, \mathbf{q_i'})
这是 Answer Relevance 的完整计算公式:把所有逆向问题与原问题的余弦相似度加起来,除以问题数量 N,得到最终分数。
  1. 求和符号\sum_{i=1}^{N} 表示从第 1 个到第 N 个逆向问题逐个累加相似度,把 N 个“语感分”汇成总和。
    ∑i=1N\displaystyle \sum_{i=1}^{N}
  2. 平均系数\frac{1}{N} 是取平均的系数,把总和除以问题数量,得到“每个逆向问题的平均相似度”。
    1N\displaystyle \frac{1}{N}
  3. 完整含义\cos(\mathbf{q}, \mathbf{q_i'}) 是原始问题向量与第 i 个逆向问题向量的余弦相似度;整个式子输出 0 到 1 之间的 AR 分数。
    cos⁡(q,qi′)\displaystyle \cos(\mathbf{q}, \mathbf{q_i'})

评测流程实现

老师批完一篇作文,还要批一个班。评测一套 RAG 系统,也需要一批“考卷样本”——通常是几十到几百条真实用户问题,组成一个评测集。评测集的代表性越强,AR 分数越能反映系统在真实场景下的“扣题水平”。

完整的评测流程分四步:第一步,准备评测集,从线上日志或人工整理中抽取 M 条问题;第二步,让被测的 RAG 系统为每条问题生成答案;第三步,逐条调用 RAGAS 计算 Answer Relevance;第四步,汇总所有样本的分数,得到系统整体的相关性报告。RAGAS 在实际使用中通常同时运行三个指标——忠实性、上下文相关性、答案相关性——形成“铁三角”,从三个角度给系统做体检。

这个指标最大的亮点是“零标注”:不需要人工写标准答案,逆向问题生成与相似度计算全部自动化,因此可以低成本扩展到成百上千条样本。这也意味着评测质量依赖于所用大模型和嵌入模型的质量——逆向模型越聪明、嵌入模型越精准,AR 就越可信。

就像老师不用给每篇作文都写长篇评语,只看“扣题分”分布就知道班级整体水平——评测流程把单条分数聚合起来,就形成了 RAG 系统整体的“扣题质量画像”。

D={(qj,aj,cj)}j=1M\displaystyle \mathcal{D} = \{(q_j, a_j, c_j)\}_{j=1}^{M}
这个式子表示评测集的结构:每条样本由原始问题 q、系统答案 a、检索上下文 c 三部分组成,共 M 条。
  1. 数据集符号\mathcal{D} 是评测集的数学记号,花括号与下标 j=1 到 M 表示它包含 M 条样本。
    D\displaystyle \mathcal{D}
  2. 样本结构(q_j, a_j, c_j) 是一个三元组:第 j 条样本的问题、答案和检索上下文,三者缺一不可。
    (qj,aj,cj)\displaystyle (q_j, a_j, c_j)
  3. 遍历范围j=1 到 M 表示遍历全部 M 条样本,评测最终会把每条样本的 AR 分数汇总成整体报告。
    {⋅}j=1M\displaystyle \{ \cdot \}_{j=1}^{M}

架构适配方案

不同的班级配不同的教法,不同的 RAG 架构也有不同的评测策略。但好消息是:Answer Relevance 只关心“问题”和“最终答案”,所以它天然与检索架构解耦——无论底层是简单的单次检索,还是复杂的多路召回,只要拿到了最终的问答对,就能计算 AR。

具体来看:朴素 RAG(一次检索、一次生成)直接套用标准流程即可,没有任何额外适配成本;高级 RAG(查询改写、混合检索、重排序)中,答案可能源于改写后的查询,但评估时我们只关心“原始问题 Q”与“最终答案 A”的语义关系,AR 依旧适用;多路召回场景下,答案融合了多份文档的信息,AR 也只看最终答案有没有扣题,不看中间过程。

真正需要调整的是“定位问题”的方法:当 AR 偏低时,要结合上下文相关性分层排查——如果检索文档就偏了,答案再努力也“回怼”不到点上,这是检索环节的问题;如果上下文相关性高而 AR 仍然低,说明生成环节跑题了。这种“先看试卷出没出偏、再看学生写没写偏”的排查逻辑,让 AR 在不同架构下都能发挥哨兵作用。

这就像老师拿到一个班整体很低的扣题分,不会急着批评学生,而是先看是“试卷出偏了”(检索问题)还是“学生写偏了”(生成问题)。架构怎么变,这条排查逻辑都不变。

AR‾=1M∑j=1MARj\displaystyle \overline{\text{AR}} = \frac{1}{M} \sum_{j=1}^{M} \text{AR}_j
这个式子表示系统整体 AR 的聚合方式:把 M 条样本各自的 AR 分数再取一次平均,得到系统级别的“扣题度”。
  1. 整体标记\overline{\text{AR}} 是带横线的 AR,表示“整体平均答案相关性”,对应系统级报告中的总分数。
    AR‾\displaystyle \overline{\text{AR}}
  2. 逐条求和\sum_{j=1}^{M} \text{AR}_j 把每条样本的 AR 分数加起来,M 是评测集的样本总数。
    ∑j=1MARj\displaystyle \sum_{j=1}^{M} \text{AR}_j
  3. 再次平均\frac{1}{M} 对总分取平均,得到可用于跨版本、跨架构对比的单一数值。
    1M\displaystyle \frac{1}{M}

效果对比局限

老师的猜题法虽妙,但遇上“文不对题却文笔华丽”的答案,也会误判。Answer Relevance 同样存在明确的边界。和传统的人工评分或 LLM 直接打分相比,它的优势是快速、可复现、无需标注:同一套问答数据,任何团队跑出来的分数几乎一致。但它不是万能的——它完全不校验事实正确性,一个扣题满分的答案可能在细节上全是编造。

一个常见的局限性是“对逆向生成模型的依赖”:如果所调用的大模型总是生成“万金油式”问题(如“这个主题重要吗?”),那么无论答案实际质量如何,逆向问题与原题的相似度都会被抬高,AR 全线飘红,失去区分度。另一个局限是“信息量盲区”:高度相似但毫无信息量的答案(例如把问题原样复述一遍)可能拿到高分,就像学生把作文题目抄了一遍交上来,字字扣题却什么都没写。

因此,业界通常把 AR 定位为“初筛指标”,而不是唯一的质量标准。在对比不同模型版本时,AR 的变化能敏锐暴露“跑题式退化”:新版本可能更流畅,却开始答非所问。此时需要结合忠实性指标区分“相关但错了”与“无关却对了”两种失败模式,才能给出准确的调优方向。

落地实践建议

老师看完一摞卷子,会写评语、给建议。落到工程上,就是拿 AR 分数指导 RAG 系统的迭代。首先说阈值设定:一般经验是 AR ≥ 0.8 视为扣题良好,0.7 到 0.8 为可接受,0.7 以下需要抽检与调优——但具体数值一定要结合业务复杂度实测校准,不同领域的“好答案”标准差异很大。

其次是样本选取策略:评测集要覆盖高频问题、困难问题和边界问题,比如包含模糊提问、多轮指代、专业术语的样本,避免只测“送分题”导致分数虚高。最后是评测报告的输出:建议按分数段对样本分组,每组附上典型问答样例,让研发、产品、测试都能一眼看懂“哪类问题在跑题”。

更进一步,建议把 Answer Relevance 接入 CI 流水线:每次模型更新或提示词调整后自动运行评测,分数回退即报警。同时定期人工抽检逆向问题的质量,防止评测器“自我麻醉”——毕竟逆向问题是大模型生成的,它也可能出错。

好的老师不仅会打分,还会把评分标准教给学生。把 Answer Relevance 内化为 RAG 系统的质检习惯,你的系统才能真正做到“有问必答,答必扣题”。

AI 应用场景

RAG 客服机器人质检

阶段:模型评测与质量监控

解决的问题:客服机器人最经典的翻车方式就是“答非所问”——用户问退款流程,它回答营业时间。传统方式是人工抽听录音,成本高且滞后,无法及时发现大面积的跑题。用 RAGAS 的 Answer Relevance 自动扫描客服问答日志,可以给每轮对话实时打“扣题分”,把低分会话筛出来转人工。

具体案例:某电商平台每晚用 AR 指标扫描当日 10 万条客服对话,AR 低于 0.6 的会话自动进入人工复核队列,误答率在一个季度内下降约 40%。复盘发现,跑题主要来自“多意图问题”——用户一句话里问了两个问题,模型只答了其中一个。

大模型版本回归测试

阶段:模型开发与版本发布

解决的问题:模型升级后可能出现“跑题式退化”——新版本更流畅、更会写漂亮话,却开始离题万里。用固定评测集加 Answer Relevance 指标自动对比新旧版本,能在上线前拦住这类隐性回退。

具体案例:某知识库问答系统在 v2 版本升级后,自动评测发现 AR 从 0.86 跌到 0.74,定位到提示词修改导致答案风格偏离用户问题,回滚后分数恢复。这次事故让团队把 AR 纳入了发布门禁,分数回退超过 0.05 就禁止上线。

生成内容上屏前过滤

阶段:在线服务保障

解决的问题:金融投顾助手如果把“如何开户”的问题答成“今天是星期几”,这种低质答案直接上屏会严重损害用户信任。在生成管线中加入 Answer Relevance 实时过滤,可以在答案到达用户之前拦截跑题内容。

具体案例:某券商投顾助手对每轮回答实时计算 AR,低于阈值的回答改为兜底话术并触发一次重新检索;重新检索后 AR 仍不达标就转人工。上线后用户满意度提升约 15%,暴露了检索召回阶段的一个类目缺失问题。

Python 演示

python78 行
#!/usr/bin/env python# -*- coding: utf-8 -*-"""小型 Answer Relevance 评测器:逆向问题生成 + 语义余弦相似度(词袋版)""" import mathimport re # 模拟"预训练语义词典",真实系统中由嵌入模型(如 text-embedding)提供SEMANTIC_TERMS = [    '注意力机制', '什么', '作用', '为什么',    '权重', '序列', '位置编码', '长序列', '处理', '重点'] def reverse_generate_questions(answer, n=3):    """模拟大模型根据答案逆向生成 n 个可能的问题"""    topic = ''    for term in SEMANTIC_TERMS:        if term in answer:            topic = term            break    if topic:        questions = [            topic + '是什么?',            topic + '的作用是什么?',            '为什么要用' + topic + '?'        ]    else:        sentences = re.split(r'[。!?!?]', answer)        questions = [s.strip() for s in sentences if len(s.strip()) >= 4]    return questions[:n] def sentence_vector(text):    """把句子转成词袋向量(简化版嵌入)"""    vec = {}    for term in SEMANTIC_TERMS:        if term in text:            vec[term] = vec.get(term, 0) + text.count(term)    return vec def cosine_similarity(vec_a, vec_b):    """两向量的余弦相似度"""    if not vec_a or not vec_b:        return 0.0    common = set(vec_a) & set(vec_b)    dot = sum(vec_a[t] * vec_b[t] for t in common)    norm_a = math.sqrt(sum(v * v for v in vec_a.values()))    norm_b = math.sqrt(sum(v * v for v in vec_b.values()))    return dot / (norm_a * norm_b) if norm_a and norm_b else 0.0 def answer_relevance(question, answer, n_questions=3):    """Answer Relevance 主流程:逆向生成 -> 相似度 -> 取均值"""    generated = reverse_generate_questions(answer, n_questions)    if not generated:        return 0.0, []    q_vec = sentence_vector(question)    details = []    total = 0.0    for g in generated:        sim = cosine_similarity(q_vec, sentence_vector(g))        details.append((g, round(sim, 4)))        total += sim    return round(total / len(generated), 4), details if __name__ == '__main__':    q = '什么是注意力机制?'    answers = [        '注意力机制是一种让模型在处理序列时动态分配权重的方法,'        '它通过计算词与词之间的相关程度来突出重点,'        '并通过位置编码来提升长序列效果。',        '今天是个好天气,适合去公园散步,晚上可以吃火锅。'    ]    for a in answers:        score, details = answer_relevance(q, a)        print('原始问题:' + q)        print('评估答案:' + a)        for g, s in details:            print('  逆向问题:' + g + '  相似度:' + str(s))        print('==> Answer Relevance = ' + str(score) + '\n')
目的:用纯 Python 实现一个迷你版 Answer Relevance 评测器,用“语义关键词表”替代嵌入模型、用规则模板模拟大模型逆向生成,演示完整评测流程。
  1. def reverse_generate_questions(answer, n=3):模拟大模型从答案反推问题;先找答案中的核心主题词,再围绕它生成三个候选问题。
  2. if term in answer:在简化版的“语义词典”里查找答案主题,真实系统中这一步是让大模型理解答案主旨。
  3. sentence_vector(text)把句子转成词袋向量,这是真实嵌入模型的超简化替代品。
  4. cosine_similarity(vec_a, vec_b)计算两个向量的余弦相似度,对应正文中“语义语感比对”这一环。
  5. total = 0.0累加所有逆向问题与原题的相似度,最后除以数量得到 AR 均值。
  6. score, details = answer_relevance(q, a)调用主流程,返回总分和每个逆向问题的相似度明细,方便排查。

常见误区

误区“AR 分数高,说明这个答案是对的,可以放心上线了。我每次看到分数高就心情很好,直接让答案通过质检。”

正解AR 只衡量“扣题”,不衡量“对错”。就像学生作文写得很扣题,但里面的论据全是编的。RAGAS 里有一个专门的指标“忠实性(Faithfulness)”负责检查答案是否忠于检索资料。跑题的错误用 AR 抓,事实的错误用忠实性抓,两个指标要配合使用,缺一不可。

为何常见:“相关性”这个评分名字太有迷惑性,初学者容易把它当成“质量总分”;而且评分维度不像人工评卷那样分项,看到单一高分就容易放松警惕。

误区“答案写得越长越详细,覆盖的内容越多,AR 分数肯定越高。所以我把 RAG 生成的 prompt 改成'请尽量详细回答'。”

正解余弦相似度看的是语义方向而非篇幅。答案写得冗长,逆向生成的问题反而可能发散——答案里十个信息点只有一个与题相关,生成的三个问题可能都落在无关信息上,均值被拉得很低。就像作文写了三千字,一半在写题外话,扣题分反而更低。

为何常见:直觉上“内容多 = 信息多 = 更相关”,忽略了相关性衡量的是“与题目的对齐程度”,不是信息总量。

误区“RAG 系统跑题了,那肯定是我检索出来的文档不相关。反正都叫 Relevance,先用上下文相关性去调就行。”

正解这是两个评测对象完全不同的指标。Answer Relevance 衡量“答案 ↔ 问题”的对齐程度,Context Relevance 衡量“检索文档 ↔ 问题”的对齐程度。类比来说:前者是学生作文扣不扣题,后者是发下来的参考资料合不合题意。一个系统可能检索得很好(上下文相关性高),但生成环节跑题(答案相关性低),必须分别评测才能定位问题。

为何常见:两个指标名字里都带 Relevance,评测报告又常常同屏展示,非常容易混为一谈。

误区“逆向问题生成和相似度计算全是模型自动完成的,不需要任何人工标注,所以这个指标绝对客观,我完全相信它。”

正解逆向问题依赖大模型,相似度依赖嵌入模型,两者都有自己的偏差。如果大模型总生成“万金油式”问题,所有答案的分数都会被虚高;如果嵌入模型对否定词不敏感,AR 可能把“我不喜欢”和“我喜欢”当成相似。所以需要定期人工抽检逆向问题质量,就像学校会抽查老师的评卷尺度是否稳定。

为何常见:“无监督”和“自动化”给人“无偏差”的错觉,忽略了评测器本身也是模型、也会犯错的事实。

面试题

Q1. 在 RAGAS 框架中,Answer Relevance 主要用于衡量什么?

单选题 · easy

  • A.答案与检索文档的共同点
  • B.答案与原始问题的匹配度← 正确答案
  • C.生成速度与响应延迟
  • D.检索结果的数量规模

答案:B。Answer Relevance 衡量的是“答案有没有答在点子上”,即答案与原始问题的语义匹配程度。选项 A 是上下文相关性的职责,C 和 D 与相关性无关。就像老师看作文扣不扣题,而不是看参考资料多不多。

Q2. RAGAS 计算答案相关性时,逆向问题是怎么来的?

单选题 · easy

  • A.由大模型根据答案生成← 正确答案
  • B.从知识库中随机抽取
  • C.用正则表达式自动拼接
  • D.由用户事先手动标注

答案:A。逆向问题由大模型基于答案文本生成,而且刻意不输入原始问题,避免模型“抄答案”。B、C、D 都不符合“从答案反推问题”的设计,相当于让学生自己出题再自己答题,失去了评测意义。

Q3. 文本向量化之后,一般用什么公式计算两个文本的语义相似度?

单选题 · mid

  • A.余弦相似度公式← 正确答案
  • B.欧几里得距离公式
  • C.标准差计算公式
  • D.交叉熵损失公式

答案:A。RAGAS 默认使用余弦相似度衡量向量方向的接近程度,它对文本长度不敏感。欧几里得距离虽可比较向量,但易受长度影响;标准差和交叉熵用于统计和训练损失,不用于语义比对。

Q4. 一个答案明显“答非所问”,Answer Relevance 分数一般会怎样?

单选题 · easy

  • A.分数会接近 0← 正确答案
  • B.分数会接近 1
  • C.分数固定为 0.5
  • D.分数必然为负数

答案:A。答案越跑题,逆向问题与原题的相似度越低,均值越接近 0。分数不会固定为 0.5,也不会必然为负——文本向量的余弦值通常落在 0 到 1 之间,选 0 最符合“答非所问”的直觉。

Q5. 逆向问题采样数量 N 过小,会导致什么后果?

单选题 · mid

  • A.分数方差变大不稳定← 正确答案
  • B.评测速度一定变慢
  • C.分数一定被高估
  • D.模型完全无法运行

答案:A。N 太小意味着只从答案中取少数几个角度来判断扣题,抽样噪声大,分数波动剧烈。N 变大反而会增加耗时,所以 B 说反了;C 和 D 都没有必然关系。

Q6. Answer Relevance 得分很高时,以下哪些问题仍然可能存在?

多选题 · mid

  • A.答案事实完全虚构← 正确答案
  • B.答案未引用检索文档← 正确答案
  • C.答案与问题毫无关系
  • D.答案仅复述一遍问题← 正确答案

答案:ABD。AR 只衡量“扣题”不衡量“事实”:答案可以扣题但全文编造(A),也可以扣题但完全没有忠实于检索文档(B),还可能只是把问题复述一遍、毫无信息量(D)。C 与“得分很高”矛盾,因为 AR 高意味着语义相关。

Q7. 下列哪些属于 RAGAS 框架的核心评测指标?

多选题 · mid

  • A.忠实性这一核心指标← 正确答案
  • B.上下文相关性这个指标← 正确答案
  • C.答案相关性这个指标← 正确答案
  • D.模型参数量大小评估

答案:ABC。RAGAS 的“铁三角”是忠实性(Faithfulness)、上下文相关性(Context Relevance)和答案相关性(Answer Relevance),分别从“答得真不真、查得对不对、答得扣不扣题”三个角度评测 RAG 系统。模型参数量不属于评测指标。

Q8. RAGAS 中 Answer Relevance 与忠实性 Faithfulness 的核心区别是什么?

单选题 · hard

  • A.前者看扣题后者看真实← 正确答案
  • B.前者看真实后者看扣题
  • C.前者看速度后者看成本
  • D.两者几乎完全没有区别

答案:A。Answer Relevance 判断答案与问题是否语义相关,Faithfulness 判断答案是否忠实于检索资料。一个扣题但胡编乱造的答案会得到“高相关性 + 低忠实性”,就像学生作文扣题却全是编造论据,两个指标必须配合使用。

Q9. 某 RAG 系统检索到的文档完全相关,但生成的答案严重跑题,此时指标表现如何?

单选题 · hard

  • A.上下文相关高而答案相关低← 正确答案
  • B.答案相关高而上下文相关低
  • C.两个指标会同时明显升高
  • D.两个指标会同时降为零

答案:A。上下文相关性只评价“检索文档与问题”的匹配,文档相关所以该指标高;答案相关性评价“最终答案与问题”的匹配,答案跑题所以该指标低。这种“查得对却答得偏”的失败模式,恰恰说明两个指标需要分层排查。

Q10. 以下哪些做法能提升 Answer Relevance 评测的可靠性?

多选题 · extreme

  • A.增大逆向问题采样数量← 正确答案
  • B.多次运行后取平均结果← 正确答案
  • C.只评测单条测试样本
  • D.人工抽检逆向问题质量← 正确答案

答案:ABD。增大采样数量能降低单次抽样的随机波动,多次运行取平均能抵消模型随机性,人工抽检能发现“万金油”逆向问题和嵌入模型偏差。只评测单条样本则完全不具备统计意义,会让分数失去代表性。