# 使用 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 --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 对话) - [ ] 查看实时执行日志 - [ ] 查看评测报告和用例明细