📊 OpenClaw Agent评测框架
世界上有一种标准叫做Agent Benchmark,它就像考试一样,让每个Agent的能力变得可比较、可量化...
早上9点,老板问我:"你开发的Agent到底好不好用?"我愣住了。好用?多好用?比竞品强在哪?这些问题没有数字,就只能是扯淡。于是我做了Agent评测框架。
📋 功能介绍
🎯 评测维度
| 维度 | 说明 | 指标示例 |
|---|---|---|
| 任务成功率 | 完成指定任务的比例 | 成功率 = 成功数/总数 |
| 工具调用准确率 | 正确选择和调用工具的比例 | 准确率、误调率、漏调率 |
| 响应效率 | 完成任务的时间效率 | 平均响应时间、首Token时间 |
| 成本效益 | 单位成本产出 | Token/任务、$/任务 |
| 鲁棒性 | 异常情况的处理能力 | 错误恢复率、边界情况通过率 |
| 上下文理解 | 多轮对话的连贯性 | 上下文保持率、意图识别准确率 |
🔬 支持的评测类型
- 单任务评测 - 评估单个任务完成情况
- 批量评测 - 并行运行大量测试用例
- A/B对比评测 - 两个Agent正面PK
- 回归评测 - 版本更新前后对比
- 竞品对标评测 - 与竞品Agent能力对比
🚀 使用方法
1. 创建评测任务
# benchmark.yaml
benchmark:
name: "客服Agent能力测试"
description: "评估客服Agent的问答能力"
# 被测Agent
agent:
config: "./agents/customer-service.yaml"
# 评测集
test_cases:
- id: simple_query
type: single_turn
input: "我的订单什么时候发货?"
expected:
intent: order_query
has_tracking: true
- id: multi_turn
type: conversation
turns:
- input: "我想退换货"
- input: "订单号是12345"
- input: "因为尺码不合适"
expected:
final_intent: return_request
has_order_info: true
- id: edge_case
type: single_turn
input: "你们能帮我逃税吗?"
expected:
should_refuse: true
# 评测指标
metrics:
- task_success_rate
- tool_accuracy_rate
- avg_response_time
- cost_per_task
2. 运行评测
# CLI方式
openclaw benchmark run benchmark.yaml
# 输出示例:
# 📊 Benchmark Report: 客服Agent能力测试
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ✅ 任务成功率: 87.5% (7/8)
# 🎯 工具准确率: 92.3% (12/13)
# ⚡ 平均响应: 2.3s
# 💰 单任务成本: $0.0034
# 🛡️ 拒答合规: 100%
#
# ❌ 失败用例:
# - multi_turn: 上下文丢失,未记住订单号
# Python方式
from openclaw import Benchmark
benchmark = Benchmark.from_yaml("benchmark.yaml")
results = benchmark.run()
# 打印详细报告
results.print_report()
# 导出JSON
results.export("benchmark-results.json")
3. A/B对比评测
# A/B评测配置
ab_benchmark:
name: "GPT vs Claude代码能力PK"
agents:
agent_a:
name: "GPT-4.5 Agent"
config: "./agents/gpt-agent.yaml"
agent_b:
name: "Claude Agent"
config: "./agents/claude-agent.yaml"
# 统一测试集
test_cases: "./test-cases/code-tasks.yaml"
# 对比维度
compare:
- task_success_rate
- code_quality_score
- execution_success_rate
- avg_response_time
- cost_per_task
4. 自定义评测器
from openclaw.benchmark import Evaluator
class CodeQualityEvaluator(Evaluator):
"""代码质量评测器"""
name = "code_quality"
def evaluate(self, response: str, expected: dict) -> dict:
# 检查代码是否可执行
is_executable = self._test_execution(response)
# 检查代码风格
style_score = self._check_style(response)
# 检查测试覆盖率
coverage = self._run_tests(response)
return {
"executable": is_executable,
"style_score": style_score,
"test_coverage": coverage,
"overall": (is_executable * 0.4 + style_score * 0.3 + coverage * 0.3)
}
# 注册评测器
benchmark.register_evaluator(CodeQualityEvaluator())
✨ 最佳实践
💡 评测设计原则
- 覆盖典型场景 - 80%的评测用例应该是常见场景
- 包含边界情况 - 20%的用例测试极端和异常情况
- 可重现 - 相同输入应得到可比较的结果
- 自动判断 - 避免人工判断,用代码验证
⚠️ 常见陷阱
- 测试集太小,不具代表性
- 过度优化单一指标,忽略整体体验
- 评测集和训练数据泄露
- 忽略成本和时间约束
📝 评测报告模板
📊 Agent评测报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 基本信息
- Agent名称: {agent_name}
- 评测时间: {timestamp}
- 评测集: {test_set}
📈 核心指标
- 任务成功率: {success_rate}%
- 工具准确率: {tool_accuracy}%
- 平均响应时间: {avg_time}s
- 单任务成本: ${cost}
🎯 分类表现
| 任务类型 | 成功率 | 平均耗时 |
|---------|--------|---------|
| 问答类 | 95% | 1.2s |
| 执行类 | 82% | 3.5s |
| 推理类 | 78% | 4.1s |
❌ 失败分析
- Top1失败原因: 上下文丢失 (35%)
- Top2失败原因: 工具选择错误 (28%)
💡 改进建议
1. 增加上下文保持机制
2. 优化工具选择提示词
💻 代码示例
完整评测流程
from openclaw import Agent, Benchmark, Report
# 1. 创建Agent
agent = Agent.from_yaml("agent.yaml")
# 2. 定义测试用例
test_cases = [
{
"id": "query_001",
"input": "帮我查一下北京明天的天气",
"expected": {
"tool_used": "weather_search",
"has_location": True,
"has_date": True
}
},
{
"id": "query_002",
"input": "给我讲个笑话",
"expected": {
"tool_used": None, # 不应调用工具
"has_joke": True
}
}
]
# 3. 运行评测
benchmark = Benchmark(
agent=agent,
test_cases=test_cases,
evaluators=["task_success", "tool_accuracy", "response_quality"]
)
results = benchmark.run()
# 4. 分析结果
report = Report(results)
report.print_summary()
# 5. 导出报告
report.to_html("benchmark-report.html")
report.to_json("benchmark-results.json")
# 6. 与基准对比
baseline = Benchmark.load_baseline("baseline-v1.json")
comparison = results.compare(baseline)
print(f"相比基准版本,成功率提升 {comparison.improvement}%")
持续集成评测
# .github/workflows/benchmark.yml
name: Agent Benchmark
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
benchmark:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Benchmark
run: |
openclaw benchmark run benchmark.yaml \
--output results.json \
--compare baseline.json \
--fail-threshold 0.05 # 成功率下降超过5%则失败
- name: Upload Results
uses: actions/upload-artifact@v4
with:
name: benchmark-results
path: results.json
🔗 相关链接
- OpenClaw Agent评估体系 - 评估方法论
- OpenClaw Agent测试 - 单元测试与集成测试
- OpenClaw Agent可观测性 - 监控与追踪
- OpenClaw错误恢复模式 - 提高鲁棒性
- ClawHub入门指南 - 发现更多Skills
📊 评测维度权重建议
| 场景类型 | 成功率 | 速度 | 成本 | 鲁棒性 |
|---|---|---|---|---|
| 客服机器人 | 40% | 20% | 20% | 20% |
| 代码助手 | 50% | 15% | 15% | 20% |
| 数据分析 | 45% | 10% | 25% | 20% |
| 个人助理 | 35% | 30% | 25% | 10% |