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

224 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 使用 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 系统。在管理后台「评测对象」页面新增。
### 配置信息
```json
{
"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 格式
```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 }
}
]
}
]
```
### 多轮对话用例
```json
{
"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 命令
```bash
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 对话)
- [ ] 查看实时执行日志
- [ ] 查看评测报告和用例明细