AgentEvalTool/docs/evaluation-workflow.md
sinohqb a77cd83e6a v0.2.0-dev: 文件管理 + 页面布局统一 + 6 个 bug 修复
## 新增功能
- 文件管理模块:分类树 + 文件上传/下载/删除
- 文件上传支持拖拽(Dragger)+ 手动上传(customRequest 模式)

## 页面布局统一(参照评测执行页)
- 仪表盘/评测对象/评测场景/评测报告 全部改为全高 flex 布局
- 统一内联页头样式(h2 + 竖线分隔 + 描述)
- 表格撑满高度、overflow 处理
- 每页添加刷新按钮

## Bug 修复
- 分类树操作按钮 hover 不可见(CSS 规则缺失)
- 文件上传失败(multipart boundary 缺失)
- LLM API 响应 content blocks 数组格式支持(_extract_content_from_api_response)
- response_time_max_ms 被静默忽略(隐式规则传空 params)
- 空 messages 导致 IndexError 崩溃
- poll_reply 异常中止整个 run(缺 try/catch)
- engine finally 未关闭 session
- 3 个页面 UTC 时间戳解析偏差 8 小时

## 后端
- EvalEngine: poll_reply 异常保护、空 dialog 保护、session 关闭
- LLM API 响应解析支持 content-block-array 格式
- 隐式 response_time 规则正确传递 max_ms 参数

## 前端
- api.ts: 移除手动 Content-Type(让浏览器自动添加 boundary)
- Files.tsx: customRequest 替代 beforeUpload、布局优化
- index.css: 分类树 hover 规则
- Targets/Scenarios/Home/Reports: 全高布局改造
- 3 个页面时间戳改用 formatDateTime()(修复 UTC 偏差)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-16 15:25:22 +08:00

7.0 KiB
Raw Blame History

使用 OpenClaw + AgentEvalTool 进行 AI 评测的流程

整体架构

┌─────────────────────────────────────────────────────────────────┐
│                      AgentEvalTool 管理后台                       │
│                     http://192.168.8.145:8001                    │
│                                                                  │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────────┐ │
│  │ 评测对象  │  │ 评测场景  │  │ 评测执行  │  │ AI 助手(OpenClaw)│ │
│  │ (Target) │  │(Scenario)│  │  (Run)   │  │                  │ │
│  └──────────┘  └──────────┘  └──────────┘  └──────────────────┘ │
└──────────────┬───────────────────────────────┬──────────────────┘
               │ HTTP API + 轮询               │ iframe 嵌入
               ▼                               ▼
        ┌──────────────┐              ┌──────────────┐
        │  tutu-api    │              │  OpenClaw    │
        │  (被评测对象)  │              │  容器        │
        │  AI 客服      │              │  doubao-     │
        └──────────────┘              │  seed-2.0    │
                                      └──────────────┘

角色说明:

组件 角色 说明
AgentEvalTool 评测引擎 发送消息、收集回复、执行评测规则、生成报告
tutu-api 被评测对象 AI 数字员工 / AI 助手,通过 tutu 聊天 API 收发消息
OpenClaw AI 助手 + 编排者 可通过对话触发评测,也可直接在管理后台使用

第一步配置评测对象Target

评测对象是你要测试的 AI 系统。在管理后台「评测对象」页面新增。

配置信息

{
  "base_url": "https://tutu-gateway.lovebenefits.com/tutu-api",
  "token": "Bearer JWT Token",
  "tenant": "sx-jczs",
  "chat_channel_id": "0qlox3lg",
  "chat_contact_id": "vooddlwv"
}
字段 说明
base_url tutu-api 网关地址
token 鉴权 JWT Token
tenant 租户标识
chat_channel_id 聊天频道 ID
chat_contact_id 聊天联系人 ID模拟用户身份发消息

验证连通性

配置完成后点击「测试」按钮,系统会调用 GET /api/{tenant}/v1/chat/message 验证连通性。


第二步创建评测场景Scenario

评测场景包含一组测试用例,每个用例定义要发送的消息和评测规则。

场景 JSON 格式

[
  {
    "id": "case-001",
    "type": "single",
    "messages": [
      "你好,我想问下你们那边是否有做三伏灸"
    ],
    "expectations": {
      "response_time_max_ms": 30000,
      "keywords_include": ["三伏灸"]
    },
    "eval_rules": [
      {
        "type": "keyword_match",
        "params": { "keywords": ["三伏灸"] }
      },
      {
        "type": "response_time",
        "params": { "max_ms": 30000 }
      }
    ]
  }
]

多轮对话用例

{
  "id": "case-002",
  "type": "multi_turn",
  "messages": [
    "你们医院在哪里",
    "周末可以看诊吗"
  ],
  "eval_rules": [
    {
      "type": "response_time",
      "params": { "max_ms": 30000 }
    }
  ]
}

字段说明

字段 类型 说明
id string 用例唯一标识
type single / multi_turn 单轮 / 多轮对话
messages string[] 依次发送给被评测对象的消息列表
eval_rules object[] 评测规则列表(见下方)
expectations object 预期结果(可自动推导规则)

评测规则

规则类型 说明 参数
keyword_match 检查回复是否包含/不包含指定关键词 keywords: 必须包含的关键词列表
response_time 检查回复延迟是否在阈值内 max_ms: 最大允许延迟(毫秒)
llm_score 调用 LLM 对回复质量打分 api_url, api_key, model, criteria, min_score

提示:如果不写 eval_rules,系统会根据 expectations 自动推导规则。


第三步启动评测Run

方式一Web 管理后台

  1. 打开「评测执行」页面
  2. 选择评测对象和评测场景
  3. 点击「启动评测」
  4. 右侧抽屉实时显示 WebSocket 推送的执行日志

方式二CLI 命令

agenteval run start --target-id <target_id> --scenario-id <scenario_id>

方式三OpenClaw AI 助手

在管理后台的「AI 助手」页面,通过对话让 OpenClaw 帮你触发评测:

请帮我执行一次评测评测对象是社区医院AI客服场景是社区医院基础服务评测

OpenClaw 会通过插件调用 agenteval run start CLI 命令,并返回评测报告。


第四步:查看评测结果

执行过程(实时)

评测启动后,系统对每个用例依次执行:

发送消息 → 轮询等待回复最长30秒→ 记录对话 → 执行评测规则 → 输出结果

WebSocket 实时推送以下事件:

事件 说明
case_start 开始执行某个用例
turn_end 一轮对话完成(含用户消息 + AI 回复 + 延迟)
rule_result 一条评测规则的判定结果
turn_error 消息发送或回复超时

评测报告

评测完成后,在「评测报告」页面查看:

  • 统计数据:总用例数、通过数、失败数、通过率
  • 元信息:评测对象、场景、开始/完成时间
  • 用例明细:每个用例的逐轮对话内容 + 规则判定结果

也可以导出 HTML 报告。


当前已配置的资源

评测对象

名称 平台 通道 状态
社区医院AI客服 AI 数字员工 tutu-api active

评测场景

名称 用例数 标签
社区医院基础服务评测 2 health, basic-service
科室导航与挂号咨询 3 health, department, navigation

历史评测记录

已执行 8 次评测全部通过pass_rate 100%),平均响应时间约 11 秒。


快速上手 Checklist

  • 确认评测对象连通性(管理后台 → 评测对象 → 测试)
  • 创建或选择评测场景
  • 启动评测Web UI / CLI / OpenClaw 对话)
  • 查看实时执行日志
  • 查看评测报告和用例明细