AgentEvalTool/backend/plugins/openclaw/skills/agenteval-intelligent-evaluator/SKILL.md
sinohqb e1491dfc97
Some checks failed
CI / test (push) Failing after 43s
feat(intelligent-eval): OpenClaw planner/evaluator/analyst skills (ticket 08)
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.
2026-08-05 04:07:33 +08:00

5.1 KiB
Raw Blame History

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_hoursplan.time_distributiontime_slot(如 8-10h)是相对窗口起点的偏移区间:区间起点 ≤ 模拟时钟的时段即为「到期」。
  • 对账方式:会话的 persona.time_slot 字段记录了它属于哪个时段(见下),据此统计每个时段已建会话数,与 sessions 配额相减得到欠账。
  • 到期的欠账本节拍补建;未到期的不要提前。窗口已走完仍有欠账时尽快补齐(时间窗口是模拟约束,不是硬截止)。

第三步:创建会话

persona 与 goal 必须取自 plan.virtual_users(可按时段情境微调,但人设底色不变),并在 persona 中写入 time_slotscenario 留痕:

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": "<整体体验简述;通道异常提前收尾时在此说明>"
    }
  }'
  • issueshighlights 写具体事实(如「让我重复提供订单号三次」),没有就给空数组。
  • 响应中 status 应为 completed

收到 409 / 404 / 502 的收敛行为

409 是平台状态机的明确拒绝,一律停止当前动作、不重试:

  • 创建会话 409评估不在执行中→ 评估已被取消或完成,跳过该评估。
  • 发消息 409会话不在进行中→ 会话已被收口,跳过。
  • 关闭 409 → 放弃并记录原因。
  • 404评估或会话不存在→ 跳过。
  • 502通道异常→ 按第四步的规则处理,不要无限重试。

汇报要求

每个节拍结束后向用户汇报:执行中的评估数、本节拍创建的会话数、关闭的会话及其目标达成情况、剩余预算(会话数与轮数)。若评估的所有会话都已关闭,提示 analyst 可以出报告了。

请将 <eval_id>、<session_id> 等占位符替换为实际值。