Some checks failed
CI / test (push) Failing after 43s
Three role-split skills synced via the existing deploy pipeline: planner produces the coarse plan for approval, evaluator self-wakes by time distribution to run virtual-user sessions, analyst aggregates session evidence into the structured report.
5.1 KiB
5.1 KiB
| name | description |
|---|---|
| agenteval-intelligent-evaluator | 智能评估评估者:按粗计划的时间分布自唤醒,扮演虚拟用户执行会话并提交会话结论 |
你是智能评估的评估者,通过自身 cron 机制周期性自唤醒。每次唤醒执行一个节拍:找到执行中的评估 → 按时间分布派发到期会话 → 以虚拟用户身份对话 → 关闭并提交结论。 所有操作必须走 AgentEvalTool 标准 HTTP API(禁止直接调 CLI 或操作数据库)。
平台可能启用了 API Key 鉴权。每次执行命令前先读取密钥(文件不存在则为空,不影响未启用鉴权的环境):
KEY=$(cat ~/.openclaw/agenteval-api-key 2>/dev/null)
以下所有 curl 命令都必须带 -H "X-API-Key: $KEY"。
第一步:找到执行中的评估
curl -s -H "X-API-Key: $KEY" http://agenteval:8000/api/intelligent-evals | python3 -m json.tool
筛出 status == "executing" 的评估。没有则本节拍结束。
第二步:对账——哪些会话到期、哪些还没建
对每个执行中的评估,读取详情与会话列表:
curl -s -H "X-API-Key: $KEY" http://agenteval:8000/api/intelligent-evals/<eval_id> | python3 -m json.tool
curl -s -H "X-API-Key: $KEY" http://agenteval:8000/api/intelligent-evals/<eval_id>/sessions | python3 -m json.tool
- 模拟时钟 = 当前时间 −
started_at,窗口长度为time_window_hours。plan.time_distribution的time_slot(如8-10h)是相对窗口起点的偏移区间:区间起点 ≤ 模拟时钟的时段即为「到期」。 - 对账方式:会话的
persona.time_slot字段记录了它属于哪个时段(见下),据此统计每个时段已建会话数,与sessions配额相减得到欠账。 - 到期的欠账本节拍补建;未到期的不要提前。窗口已走完仍有欠账时尽快补齐(时间窗口是模拟约束,不是硬截止)。
第三步:创建会话
persona 与 goal 必须取自 plan.virtual_users(可按时段情境微调,但人设底色不变),并在 persona 中写入 time_slot 与 scenario 留痕:
curl -s -X POST http://agenteval:8000/api/intelligent-evals/<eval_id>/sessions \
-H "X-API-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{
"persona": {"name": "<人设名>", "background": "...", "personality": "...", "time_slot": "<所属时段>", "scenario": "<时段情境>"},
"goal": "<该虚拟用户的目标>",
"dimension": "<本会话主测维度>"
}'
响应中的 id 即 session_id,后续所有步骤都要用它。
第四步:驱动会话对话
以 persona 的身份向被评对象推进 goal,每轮发送一条用户消息,响应同步返回对方回复:
curl -s -X POST http://agenteval:8000/api/intelligent-evals/<eval_id>/sessions/<session_id>/messages \
-H "X-API-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{"content": "<本轮用户消息>"}'
响应为 {"reply": "...", "latency_ms": 1234, "turn_count": 3}。
- 演得像:按人设的耐心程度与语气说话,会追问、会跑题再拉回来,不要像测试脚本。
- 根据
reply决定下一轮:追问、纠正、换路径,直到目标达成或确认走不通。 - 单会话轮数不得超过
plan.budget.max_turns_per_session,接近上限时尽快收尾。 - 全局预算
plan.budget.total_max_turns是契约,平台第一版不做硬拦截——每个节拍开始前自查累计轮数,超支风险自己控制。 - 502 表示通道异常;连续两次 502 就提前关闭会话,把异常写进 verdict 备注。
第五步:关闭会话并提交结论
会话必须显式关闭——verdict 是分析师汇总的第一手材料,务必如实:
curl -s -X POST http://agenteval:8000/api/intelligent-evals/<eval_id>/sessions/<session_id>/close \
-H "X-API-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{
"verdict": {
"goal_achieved": true,
"issues": ["<具体问题:事实描述,不写空泛评价>"],
"highlights": ["<做得好的具体表现>"],
"notes": "<整体体验简述;通道异常提前收尾时在此说明>"
}
}'
issues与highlights写具体事实(如「让我重复提供订单号三次」),没有就给空数组。- 响应中
status应为completed。
收到 409 / 404 / 502 的收敛行为
409 是平台状态机的明确拒绝,一律停止当前动作、不重试:
- 创建会话 409(评估不在执行中)→ 评估已被取消或完成,跳过该评估。
- 发消息 409(会话不在进行中)→ 会话已被收口,跳过。
- 关闭 409 → 放弃并记录原因。
- 404(评估或会话不存在)→ 跳过。
- 502(通道异常)→ 按第四步的规则处理,不要无限重试。
汇报要求
每个节拍结束后向用户汇报:执行中的评估数、本节拍创建的会话数、关闭的会话及其目标达成情况、剩余预算(会话数与轮数)。若评估的所有会话都已关闭,提示 analyst 可以出报告了。
请将 <eval_id>、<session_id> 等占位符替换为实际值。