指标概述
为何指标至关重要
无法衡量,就无法改进。指标是实现迭代的反馈循环。
在 AI 系统中,进展依赖于进行大量实验——每个实验都是一个关于如何提升性能的假设。但如果没有清晰、可靠的指标,您就无法区分成功的实验(新分数与旧分数之间的正差值)和失败的实验。
指标为您提供指南。它们让您能够量化改进、检测性能衰退,并将优化工作与用户影响和业务价值对齐。
指标是用于评估 AI 应用程序性能的量化度量。指标有助于评估应用程序及其各个组件相对于给定测试数据的表现。它们在整个应用程序开发和部署过程中为比较、优化和决策提供了数值基础。指标对于以下方面至关重要:
- 组件选择:指标可用于比较 AI 应用程序的不同组件,如 LLM、检索器、Agent 配置等,并用您自己的数据从不同选项中选出最佳者。
- 错误诊断与调试:指标有助于识别应用程序的哪个部分导致了错误或性能不佳,从而使调试和优化更加容易。
- 持续监控与维护:指标能够跟踪 AI 应用程序的长期性能,有助于检测和响应数据漂移、模型退化或用户需求变化等问题。
AI 应用中的指标类型
1. 端到端指标
端到端指标从用户的角度评估整个系统的性能,将 AI 应用程序视为一个黑盒。这些指标仅基于系统的最终输出,量化用户深切关心的关键结果。
示例
- 答案正确性:衡量检索增强生成(RAG)系统提供的答案是否准确。
- 引用准确性:评估 RAG 系统引用的参考文献是否被正确识别且具有相关性。
优化端到端指标可确保与用户期望直接对齐的切实改进。
2. 组件级指标
组件级指标独立评估 AI 系统中各个部分的性能。这些指标可立即采取行动,并有助于有针对性的改进,但不一定与最终用户满意度直接相关。
示例
- 检索准确性:衡量 RAG 系统检索相关信息的有效性。较低的检索准确性(例如 50%)表明改进该组件可以提升整体系统性能。然而,单独改进一个组件并不能保证更好的端到端结果。
3. 业务指标
业务指标将 AI 系统的性能与组织目标对齐,并量化可衡量的业务成果。这些指标通常是滞后指标,在部署一段时间(天/周/月)后计算。
示例
- 工单偏转率:衡量因部署 AI 助手而减少的支持工单百分比。
Ragas 中的指标类型
根据底层使用的机制,指标可以分为两类:
基于 LLM 的指标:这些指标在底层使用 LLM 进行评估。为了得出分数或结果,可能会进行一次或多次 LLM 调用。这些指标可能有些不确定性,因为对于相同的输入,LLM 可能不会总是返回相同的结果。另一方面,这些指标已被证明更准确,更接近人类评估。
ragas 中所有基于 LLM 的指标都继承自 MetricWithLLM 类。这些指标要求在评分前设置一个 LLM 对象。
每个基于 LLM 的指标也会有关联的提示词,这些提示词是使用提示词对象编写的。
非基于 LLM 的指标:这些指标在底层不使用 LLM 进行评估。这些指标是确定性的,可用于在不使用 LLM 的情况下评估 AI 应用程序的性能。这些指标依赖传统方法来评估 AI 应用程序的性能,例如字符串相似度、BLEU 分数等。因此,这些指标与人类评估的相关性较低。
ragas 中所有非基于 LLM 的指标都继承自 Metric 类。
根据评估的数据类型,指标可以大致分为两类:
单轮指标:这些指标基于用户与 AI 之间的单轮交互来评估 AI 应用程序的性能。ragas 中所有支持单轮评估的指标都继承自 SingleTurnMetric 类,并使用 single_turn_ascore 方法进行评分。它还需要一个 单轮样本 对象作为输入。
from ragas.metrics import FactualCorrectness
scorer = FactualCorrectness()
await scorer.single_turn_ascore(sample)
多轮指标:这些指标基于用户与 AI 之间的多轮交互来评估 AI 应用程序的性能。ragas 中所有支持多轮评估的指标都继承自 MultiTurnMetric 类,并使用 multi_turn_ascore 方法进行评分。它还需要一个 多轮样本 对象作为输入。
from ragas.metrics import AgentGoalAccuracy
from ragas import MultiTurnSample
scorer = AgentGoalAccuracy()
await scorer.multi_turn_ascore(sample)
输出类型
在 Ragas 中,我们根据指标产生的输出类型对其进行分类。这种分类有助于阐明每个指标的行为方式以及如何解释或汇总其结果。这三种类型是
1. 离散型指标
这些指标从预定义的分类列表中返回单个值。类别之间没有固有的顺序。常见的用例包括将输出分类为通过/失败或好/一般/差等类别。
示例
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"
2. 数值型指标
这些指标返回指定范围内的整数或浮点值。数值型指标支持聚合函数,如平均值、总和或众数,使其适用于统计分析。
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. 排名型指标
这些指标一次性评估多个输出,并根据定义的标准返回一个排名列表。当目标是比较同一流水线中多个输出的相对优劣时,它们非常有用。
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. 单一方面聚焦 一个指标应只针对 AI 应用性能的一个特定方面。这确保了该指标既可解释又可操作,为所测量的对象提供了清晰的见解。
2. 直观且可解释 指标应设计得易于理解和解释。清晰直观的指标使沟通结果和得出有意义的结论变得更加简单。
3. 有效的提示流 在使用大型语言模型(LLM)开发指标时,应使用与人类评估紧密对齐的智能提示流。将复杂任务分解为带有特定提示的更小子任务,可以提高指标的准确性和相关性。
4. 鲁棒性 确保基于 LLM 的指标包含足够的、能反映预期结果的少样本示例。这通过为 LLM 提供上下文和指导来增强指标的鲁棒性。
5. 一致的评分范围 将指标分值归一化或确保它们落在特定范围内(例如 0 到 1)至关重要。这有助于不同指标之间的比较,并有助于在整个评估框架中保持一致性和可解释性。
这些原则为创建不仅有效,而且在评估 AI 应用时实用且有意义的指标奠定了基础。
为您的应用选择合适的指标
1. 优先考虑端到端指标
首先关注反映整体用户满意度的指标。尽管许多方面会影响用户满意度——例如事实正确性、回应语气和解释深度——但最初应集中于能提供最大用户价值的少数几个维度(例如,在基于 RAG 的助手中,答案和引用的准确性)。
2. 确保可解释性
设计的指标要足够清晰,以便整个团队都能解释和推理。例如
- 文本到 SQL 系统中的执行准确性:生成的 SQL 查询是否返回与领域专家编写的基准查询完全相同的数据集?
3. 强调客观指标而非主观指标
优先考虑具有客观标准的指标,以尽量减少主观判断。通过让团队成员独立标记样本并测量一致性水平来评估客观性。较高的评估者间一致性(≥80%)表明客观性更强。
4. 少数强信号优于多个弱信号
避免使用大量提供弱信号并妨碍清晰决策的指标。相反,应选择少数能提供强大、可靠信号的指标。例如
- 在对话式 AI 中,使用单个指标,如目标达成率(用户与 AI 互动的目标是否达成),比使用多个弱代理指标(如连贯性或有用性)更能提供系统性能的强代理。