指标概览
为什么指标重要
你无法改进无法衡量的东西。指标是让迭代成为可能的反馈循环。
在 AI 系统中,进步依赖于运行大量实验——每一次实验都是关于如何提升性能的假设。但如果没有清晰、可靠的指标,你就无法区分一次成功的实验(新分数与旧分数之间的正增量)和一次失败的实验。
指标给你指南针。它们让你能量化改进、发现回退,并把优化工作与用户影响和业务价值对齐。
指标是用于评估 AI 应用性能的定量度量。指标帮助评估应用以及组成应用的各个组件,相对于给定测试数据的表现。它们为比较、优化,以及贯穿应用开发与部署过程的决策提供数值依据。指标对于以下方面至关重要:
- 组件选择:指标可用于在你自己的数据上比较 AI 应用的不同组件,如 LLM、Retriever、Agent 配置等,并从不同选项中选出最佳者。
- 错误诊断与调试:指标帮助识别应用中哪一部分导致错误或次优性能,从而更容易调试和精炼。
- 持续监控与维护:指标使你能跟踪 AI 应用随时间的性能,帮助检测并应对数据漂移、模型退化或用户需求变化等问题。
AI 应用中的指标类型
1. 端到端指标
端到端指标从用户视角评估整体系统性能,把 AI 应用当作黑盒。这些指标仅基于系统最终输出,量化用户真正关心的关键结果。
示例:
- Answer correctness(答案正确性):衡量检索增强生成(RAG)系统给出的答案是否准确。
- Citation accuracy(引用准确度):评估 RAG 系统所引用的参考文献是否被正确识别且相关。
优化端到端指标,能确保改进切实可见,并直接与用户期望对齐。
2. 组件级指标
组件级指标独立评估 AI 系统的各个部分。这些指标可立即付诸行动,便于针对性改进,但不一定直接与终端用户满意度相关。
示例:
- Retrieval accuracy(检索准确度):衡量 RAG 系统检索相关信息的效果。低检索准确度(例如 50%)表明改进该组件可以提升整体系统性能。然而,单独改进某个组件并不保证端到端结果更好。
3. 业务指标
业务指标把 AI 系统性能与组织目标对齐,并量化切实的业务结果。这些指标通常是滞后指标,在部署一段时间(数天/数周/数月)后计算。
示例:
- Ticket deflection rate(工单拦截率):衡量因部署 AI 助手而减少的支持工单百分比。
Ragas 中的指标类型
指标思维导图
指标可以按底层所用机制分为两类:
LLM-based metrics(基于 LLM 的指标):这些指标在底层使用 LLM 进行评测。可能进行一次或多次 LLM 调用以得到分数或结果。这些指标可能具有一定非确定性,因为 LLM 对相同输入不一定总返回相同结果。另一方面,这些指标已被证明更准确、更接近人工评测。
ragas 中所有基于 LLM 的指标都继承自 MetricWithLLM 类。这些指标在打分前需要设置一个 LLM 对象。
from ragas.metrics import FactualCorrectness
scorer = FactualCorrectness(llm=evaluation_llm)
每个基于 LLM 的指标也会有与之关联的 prompt,使用 Prompt Object 编写。你可以自定义这些 prompt,以适配你的领域和用例。详见 Modifying Prompts in Metrics(在指标中修改 Prompt) 指南。
Non-LLM-based metrics(非 LLM 指标):这些指标在底层不使用 LLM 进行评测。这些指标是确定性的,可以在不使用 LLM 的情况下评估 AI 应用性能。它们依赖传统方法来评估 AI 应用性能,例如字符串相似度、BLEU score 等。因此,这些指标与人工评测的相关性通常较低。
ragas 中所有非 LLM 指标都继承自 Metric 类。
指标也可以按所评测的数据类型大致分为两类:
Single turn metrics(单轮指标):这些指标基于用户与 AI 的单轮交互来评估 AI 应用性能。ragas 中所有支持单轮评测的指标都继承自 SingleTurnMetric 类,并使用 single_turn_ascore 方法打分。它还期望以 Single Turn Sample 对象作为输入。
from ragas.metrics import FactualCorrectness
scorer = FactualCorrectness()
await scorer.single_turn_ascore(sample)
Multi-turn metrics(多轮指标):这些指标基于用户与 AI 的多轮交互来评估 AI 应用性能。ragas 中所有支持多轮评测的指标都继承自 MultiTurnMetric 类,并使用 multi_turn_ascore 方法打分。它还期望以 Multi Turn Sample 对象作为输入。
from ragas.metrics import AgentGoalAccuracy
from ragas import MultiTurnSample
scorer = AgentGoalAccuracy()
await scorer.multi_turn_ascore(sample)
输出类型
在 Ragas 中,我们按指标产生的输出类型对其进行分类。这种分类有助于阐明每个指标的行为方式,以及其结果如何被解释或聚合。三类分别是:
1. Discrete Metrics(离散指标)
这些指标从预定义的类别列表中返回单个值。类别之间没有隐含顺序。常见用例包括将输出分类为 pass/fail 或 good/okay/bad。离散指标直接接受自定义 prompt,非常适合快速自定义评测。
示例:
from ragas.metrics import discrete_metric
@discrete_metric(name="response_quality", allowed_values=["pass", "fail"])
def my_metric(predicted: str, expected: str) -> str:
return "pass" if predicted.lower() == expected.lower() else "fail"
若要修改现有集合指标(如 Faithfulness、FactualCorrectness)中的 prompt,请参见 Modifying prompts in metrics(在指标中修改 Prompt)。
2. Numeric Metrics(数值指标)
这些指标返回指定范围内的整数或浮点值。数值指标支持 mean、sum 或 mode 等聚合函数,适用于统计分析。
from ragas.metrics import numeric_metric
@numeric_metric(name="response_accuracy", allowed_values=(0, 1))
def my_metric(predicted: float, expected: float) -> float:
return abs(predicted - expected) / max(expected, 1e-5)
my_metric.score(predicted=0.8, expected=1.0) # Returns a float value
3. Ranking Metrics(排序指标)
这些指标一次评估多个输出,并基于定义的准则返回排序列表。当目标是比较同一流水线的多个输出之间的相对优劣时,它们很有用。
from ragas.metrics import ranking_metric
@ranking_metric(name="response_ranking", allowed_values=[0,1])
def my_metric(responses: list) -> list:
response_lengths = [len(response) for response in responses]
sorted_indices = sorted(range(len(response_lengths)), key=lambda i: response_lengths[i])
return sorted_indices
my_metric.score(responses=["short", "a bit longer", "the longest response"]) # Returns a ranked list of indices
指标设计原则
为 AI 应用设计有效指标,需要遵循一组核心原则,以确保其可靠性、可解释性和相关性。以下是我们在 ragas 中设计指标时遵循的五条关键原则:
1. Single-Aspect Focus(单方面聚焦) 单个指标应只针对 AI 应用性能的一个具体方面。这确保指标既可解释又可行动,对被衡量内容提供清晰洞察。
2. Intuitive and Interpretable(直观且可解释) 指标应设计得易于理解和解释。清晰直观的指标让沟通结果和得出有意义的结论更简单。
3. Effective Prompt Flows(有效的 Prompt 流程) 使用大语言模型(LLM)开发指标时,使用与人工评测紧密对齐的智能 prompt 流程。把复杂任务分解为带有特定 prompt 的更小子任务,可以提高指标的准确性和相关性。
4. Robustness(稳健性) 确保基于 LLM 的指标包含足够的、能反映期望结果的 few-shot 示例。这通过为 LLM 提供要遵循的上下文和引导,增强指标的稳健性。
5.Consistent Scoring Ranges(一致的打分范围) 将指标分数归一化,或确保它们落在特定范围内(例如 0 到 1),这一点至关重要。这便于不同指标之间比较,并有助于在整个评测框架中保持一致性和可解释性。
这些原则是创建指标的基础,这些指标不仅有效,而且在评测 AI 应用时切实、有意义。
为你的应用选择合适的指标
1. 优先考虑端到端指标
首先关注反映整体用户满意度的指标。虽然许多方面会影响用户满意度——例如事实正确性、回复语气和解释深度——但最初应集中在少数能带来最大用户价值的维度上(例如,基于 RAG 的助手中的答案与引用准确度)。
2. 确保可解释性
设计足够清晰的指标,让整个团队都能解释并据此推理。例如:
- 文本转 SQL 系统中的 Execution accuracy(执行准确度):生成的 SQL 查询是否返回与领域专家编写的 ground truth 查询完全相同的数据集?
3. 强调客观指标而非主观指标
优先选择带有客观标准、尽量减少主观判断的指标。通过让团队成员独立标注样本并衡量一致性来评估客观性。高评分者间一致性(≥80%)表明客观性更高。
4. 少量强信号优于大量弱信号
避免指标泛滥,它们只提供弱信号并阻碍清晰决策。相反,选择更少、能提供强且可靠信号的指标。例如:
- 在对话式 AI 中,使用单一指标如 goal accuracy(用户与 AI 交互的目标是否达成),比连贯性或有用性等多个弱代理更能强有力地代表系统性能。