📊 OpenClaw Agent评测框架

世界上有一种标准叫做Agent Benchmark,它就像考试一样,让每个Agent的能力变得可比较、可量化...

早上9点,老板问我:"你开发的Agent到底好不好用?"我愣住了。好用?多好用?比竞品强在哪?这些问题没有数字,就只能是扯淡。于是我做了Agent评测框架。

📋 功能介绍

🎯 评测维度

维度 说明 指标示例
任务成功率 完成指定任务的比例 成功率 = 成功数/总数
工具调用准确率 正确选择和调用工具的比例 准确率、误调率、漏调率
响应效率 完成任务的时间效率 平均响应时间、首Token时间
成本效益 单位成本产出 Token/任务、$/任务
鲁棒性 异常情况的处理能力 错误恢复率、边界情况通过率
上下文理解 多轮对话的连贯性 上下文保持率、意图识别准确率

🔬 支持的评测类型

🚀 使用方法

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())

✨ 最佳实践

💡 评测设计原则
⚠️ 常见陷阱
📝 评测报告模板
📊 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

🔗 相关链接

📊 评测维度权重建议

场景类型 成功率 速度 成本 鲁棒性
客服机器人 40% 20% 20% 20%
代码助手 50% 15% 15% 20%
数据分析 45% 10% 25% 20%
个人助理 35% 30% 25% 10%