2. 定义关键性能指标(KPI)
任务目标
为AI Agent建立可量化的性能评估体系,定义三类核心KPI:响应时间(效率维度)、准确率(质量维度)、任务完成率(可靠性维度),并给出明确的计算公式与采样窗口。最终交付一份可直接落地的KPI定义文档及对应的Python计算实现。
KPI定义与计算方法
| KPI | 定义 | 计算公式 | 采样说明 |
|---|---|---|---|
| 响应时间 (RT) | 从用户请求发出到Agent返回最终结果的端到端耗时 | RT = Tend − Tstart,统计P50/P95/P99分位数 | 单次请求计时,排除网络重试;按业务场景分别统计 |
| 准确率 (Accuracy) | Agent输出结果与标准答案一致的比例 | Accuracy = 正确输出数 / 总测试样本数 × 100% | 使用标注测试集,每样本独立判定对错 |
| 任务完成率 (Completion Rate) | Agent在限定轮次/时间内成功完成任务的占比 | Completion = 成功完成任务数 / 总请求数 × 100% | 超时、连续错误、死循环均视为未完成 |
最小实现代码
以下Python代码实现KPI计算逻辑,包含模拟数据生成与指标输出:
```python import time import random from statistics import quantiles class AgentKPI: def __init__(self, timeout_sec=30, max_retries=3): self.timeout = timeout_sec self.max_retries = max_retries self.records = [] # 每条: {"rt": float, "correct": bool, "completed": bool} def run_evaluation(self, test_cases, agent_fn): """执行评估:对每个测试样本调用agent_fn,记录KPI原始数据""" for case in test_cases: start = time.time() completed = False correct = False try: result = agent_fn(case["input"]) rt = time.time() - start if rt <= self.timeout: completed = True correct = (result == case["expected"]) else: rt = self.timeout # 超时按上限记录 except Exception: rt = self.timeout self.records.append({ "rt": rt, "correct": correct, "completed": completed }) def compute_kpis(self): """计算三类KPI指标""" n = len(self.records) if n == 0: return {"error": "无评估数据"} # 响应时间分位数(仅统计已完成请求) rt_list = sorted(r["rt"] for r in self.records if r["completed"]) rt_kpis = {} if rt_list: p50, p95, p99 = quantiles(rt_list, n=100, method="inclusive")[49], \ quantiles(rt_list, n=100, method="inclusive")[94], \ quantiles(rt_list, n=100, method="inclusive")[98] rt_kpis = {"P50": round(p50, 3), "P95": round(p95, 3), "P99": round(p99, 3)} else: rt_kpis = {"P50": None, "P95": None, "P99": None} # 准确率(基于正确标记) accuracy = sum(1 for r in self.records if r["correct"]) / n * 100 # 任务完成率 completion = sum(1 for r in self.records if r["completed"]) / n * 100 return { "样本总数": n, "响应时间(s)": rt_kpis, "准确率(%)": round(accuracy, 2), "任务完成率(%)": round(completion, 2) } # 使用示例:模拟Agent与测试数据 def mock_agent(text): """模拟Agent:简单规则,含随机延迟与错误""" time.sleep(random.uniform(0.1, 0.8)) if "error" in text: raise ValueError("模拟异常") return "ok" if random.random() > 0.1 else "wrong" test_data = [ {"input": f"query_{i}", "expected": "ok"} for i in range(50) ] + [{"input": "error_case", "expected": "ok"} for _ in range(5)] kpi = AgentKPI(timeout_sec=2.0) kpi.run_evaluation(test_data, mock_agent) result = kpi.compute_kpis() # 输出结果 for k, v in result.items(): print(f"{k}: {v}") ```运行与验证
运行方式:将上述代码保存为 agent_kpi.py,直接执行 python agent_kpi.py。代码内置55条模拟测试样本(50条正常+5条触发异常),无需额外依赖。
验证方法:
- 观察输出是否包含样本总数=55、响应时间P50/P95/P99三个分位数、准确率与完成率百分比;
- 验证逻辑正确性:由于mock_agent中约10%概率返回
"wrong",且5条error_case必然抛异常,准确率应接近90%、完成率约91%(50条正常中约5条超时或错误,5条异常全部未完成); - 修改
timeout_sec为0.1可观察完成率显著下降,验证超时判定逻辑生效。
通过条件:程序无异常退出,输出的三类KPI数值与上述预期范围一致,且修改超时参数后指标产生符合逻辑的变化。