AgentEvalTool/docs/plan-v0.3.md
sinohqb 12481cd1b8 v0.3-s1: 规则层异步化 + 工具函数去重 + HTTP 通道
## 核心变更

### 规则层全面异步化(DEBT-1)
- EvalRule.evaluate() 签名改为 async def,全量同步改造(无兼容层)
- LlmScoreRule._call_llm: requests.post → httpx.AsyncClient,彻底消除事件循环阻塞
- engine._save_rule_results: rule.evaluate() → await rule.evaluate()

### 工具函数去重(DEBT-2)
- 新建 agenteval/utils/llm.py,统一三个函数:
  - extract_reply_text (原 5 处重复)
  - extract_content_from_llm_response (原 2 处重复)
  - parse_json_from_llm_text (统一 LLM 输出 JSON 解析)
- engine.py / llm_score.py / runs.py / report.py 全部切换到 utils.llm

### HTTP 通用通道(S1-3)
- 新建 channels/http.py (HttpChannel)
  - 配置化 send_url / reply_url 模板 ({message}, {msg_id} 占位)
  - dot-path 提取 msg_id 和 reply_text
  - 可选 reply_ready_path 就绪标志
  - 长连接 AsyncClient 复用
- ChannelFactory 注册 ChannelType.HTTP → HttpChannel

### 测试
- 新增 tests/unit/test_http_channel_and_rules.py (19 个测试)
- _get_path / health_check / send / poll_reply / 超时 / 就绪标志 / async 规则评估
- 测试总数:24 → 43,全部通过

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-17 10:52:32 +08:00

10 KiB
Raw Blame History

AgentEvalTool v0.3 「拓」迭代规划

版本: v0.3.0(规划) 制定日期: 2026-07-16 基线: v0.2.0-dev已部署 t480含文件管理 + 布局统一 + 6 bug 修复) 代号: 「拓」(Extensibility milestone) 状态: 待评审


一、版本定位

v0.3 是「先稳后拓」战略的第二步。v0.2 已让核心闭环具备生产可用性v0.3 的使命是:

把「单通道 + 3 规则」的稳定闭环,扩展成「多通道 + 可组合规则」的评估平台, 并打通 OpenClaw 双向集成,让评估能力可被 AI 助手自主编排。

v0.1 (07-09) MVP 闭环
v1.1 (07-10) Ant Design 前端重构
v0.2 (07-14) 「稳」async + 安全 + 测试 + 部署
  └─ (07-16) 文件管理 + 布局统一 + bug 修复
v0.3 (规划)  「拓」← 本文档
  └─ 多通道 · 规则扩展 · OpenClaw 深度集成 · 报告升级

二、现状评估

2.1 已具备的能力

层面 现状
引擎 async EvalEngine真取消可配置超时并发信号量
通道 tutu-api(工厂已预留 register 扩展点)
规则 3 种keyword_match / response_time / llm_score
报告 JSON + HTML
存储 SQLite + Alembic + 级联删除 + 文件管理
安全 X-API-Key + .env + CORS 收紧
测试 24 个后端测试57% 覆盖率
部署 一键脚本 + 镜像版本 tag + /api/health 校验

2.2 技术债务盘点v0.3 前置或并行处理)

编号 债务 严重度 影响
DEBT-1 规则评估层同步阻塞EvalRule.evaluate()def 而非 async defllm_score 用同步 requests.post(timeout=60) 🔴 架构级 阻塞事件循环,与 v0.2 async 化目标矛盾;是 P0 规则扩展的前置阻塞项
DEBT-2 后端 _extract_text/_extract_reply_text 重复 5 处,_extract_content_from_api_response 重复 2 处 🟡 一处修复遗漏另一处即产生 bug
DEBT-3 前端 PageWrapper 已成死代码6 页面重复布局 JSXstatusColor 多页重复 🟡 改布局需改 6 处
DEBT-4 测试盲区rules 覆盖率 15-30%,文件管理零测试,_generate_messages 无测试 🟡 规则/文件功能回归无保护
DEBT-5 WebSocket 断线无自动重连;前端 bundle ~2.8MB 🟢 体验问题

关键判断DEBT-1 必须在 P0 规则扩展之前解决。semantic_similarity调 embedding API、safety调 moderation API本质都是网络 IO 规则,若继续在同步 evaluate() 上叠加每条规则都会阻塞整个事件循环v0.2 的异步化收益被规则层抵消。


三、v0.3 范围

3.1 做什么In Scope

P0 — 核心能力(必须交付)

P0-0 规则评估层异步化(前置技术改造)

  • EvalRule.evaluate()async def evaluate()
  • engine._save_rule_results 相应 await rule.evaluate(...)
  • llm_score._call_llmrequestshttpx.AsyncClient
  • 涉及文件:evaluation/rules/base.pykeyword.pyresponse_time.pyllm_score.pyevaluation/engine.pytests/unit/test_engine.py
  • 验收4 个规则全部 asyncpytest 全绿;并发评测时 LLM 评分不阻塞 WebSocket 推送

P0-1 多通道插件化

  • 新增 HttpChannel(通用 HTTP 请求/响应通道,配置化 request 模板 + response JSONPath 提取)
  • 新增 OpenClawChannel(直接对接 OpenClaw WS复用现有 proxy 认证逻辑)
  • ChannelFactory 补齐 HTTP / OPENCLAW 映射
  • 可选entry_points 插件发现 —— 见决策点 D3
  • 涉及文件:channels/http.py(新)、channels/openclaw.py(新)、channels/factory.pymodels.pyChannelType 已有枚举)
  • 验收:可创建 HTTP 通道类型的评测对象并跑通一次评测;连通性测试可用

P0-2 规则扩展 + 组合逻辑

  • 新增规则:
    • semantic_similarity回复与参考答案的语义相似度embedding + 余弦)
    • json_schema(回复 JSON 结构校验)
    • safety(敏感内容检测,可接 moderation API 或关键词黑名单降级)
  • 组合逻辑Case 支持 rule_logic: "all" | "any" | "weighted"weighted 支持每规则权重 + 阈值
  • 涉及文件:rules/semantic.py(新)、rules/json_schema.py(新)、rules/safety.py(新)、rules/__init__.pymodels.pyCase 加 rule_logic 字段)、engine.py组合判定逻辑、Alembic 迁移
  • 验收3 个新规则注册可用weighted 组合的 pass_rate 计算正确;前端场景编辑器模板包含新规则示例

P1 — 重要能力

P1-1 OpenClaw 深度集成(双向)

  • OpenClaw skill 可触发评测(现有 CLI 调用链打通 + 结构化返回)
  • 评测完成 webhook 通知(POST 到配置的回调地址,附报告摘要)
  • 涉及文件:plugins/openclaw/agenteval_skill.pyweb/routers/runs.pywebhook hookconfig/settings.pywebhook 配置)
  • 验收OpenClaw 对话触发评测后能收到完成通知

P1-2 报告能力升级

  • 对比报告:选两次 runside-by-side 展示规则/用例差异
  • Markdown 导出(补充现有 JSON/HTML
  • 报告模板外置Jinja2 模板从代码抽到 templates/ 目录)
  • 涉及文件:web/routers/reports.pyevaluation/report.pytemplates/(新)、前端 pages/Reports.tsx
  • 验收对比视图可用Markdown 导出格式正确

P1-3 测试补全(还 DEBT-4

  • rules 单测:每个规则(含 3 个新规则)覆盖 pass/fail/边界
  • 文件管理测试:上传/下载/分类级联删除
  • 前端引入 vitestsessionReducer 单测v0.2 已抽纯函数,就等测试)
  • 验收:后端覆盖率 → 70%+;前端有首批 reducer 测试

P2 — 体验优化

P2-1 场景能力增强

  • 内置场景模板库(单轮问答 / 多轮对话 / 压力测试 / 动态生成)
  • 参数化场景(变量占位 + 批量实例化)

P2-2 前端体验 + 债务清理(还 DEBT-3 / DEBT-5

  • WebSocket 自动重连(指数退避)
  • PageWrapper 复用改造 或 删除;statusColor 抽到 tokens
  • bundle 优化:路由级懒加载

3.2 不做什么Out of Scope

明确排除,维持「个人/小团队」定位,避免过度设计:

  • 多租户 / RBAC 权限系统
  • PostgreSQL / 分布式数据库SQLite 足够)
  • Celery / RQ 任务队列async + asyncio.Task 足够)
  • 移动端适配
  • entry_points 全动态插件市场(见决策点 D3倾向轻量注册

四、迭代节奏

按「先还债、再扩展、后体验」组织为 4 个 Sprint。工作量按人天PD估算基于项目快速迭代节奏。

Sprint 主题 工作项 估算
S1 还债 + 通道 P0-0 规则异步化 + P0-1 多通道 + DEBT-2 后端工具函数合并 4-5 PD
S2 规则扩展 P0-2 新规则 + 组合逻辑 + P1-3 规则测试同步 5-6 PD
S3 集成 + 报告 P1-1 OpenClaw 双向 + P1-2 报告升级 4-5 PD
S4 体验 + 收尾 P2-1 场景模板 + P2-2 前端债务清理 + 文件管理测试 3-4 PD

合计约 16-20 PD≈ 3-4 周),与原 release notes 的 4-5 周估算基本吻合本计划把还债前置S1 会略慢)。

里程碑验收点

  • M1S1 末HTTP 通道跑通一次评测,规则层全 asyncpytest 全绿
  • M2S2 末5 种规则 + weighted 组合可用,后端覆盖率 65%+
  • M3S3 末OpenClaw 对话触发评测 + 收到 webhook对比报告可用
  • M4S4 末):场景模板库 + WebSocket 重连v0.3 部署 t480

五、需要拍板的决策点

以下决策会显著影响实现,建议在 S1 启动前确认:

编号 决策 选项 倾向
D1 semantic_similarity 的 embedding 来源 A) 外部 API豆包/OpenAI embedding成本+网络依赖) B) 本地 sentence-transformers部署重+模型体积) A:与现有 llm_score 一致的外部 API 模式,部署轻
D2 safety 规则实现深度 A) 接 moderation API B) 关键词黑名单 C) 两者API 不可用时降级黑名单 C默认黑名单保证可用API 可选增强
D3 通道/规则插件机制 A) entry_points 动态发现 B) 现有工厂 register + 装饰器注册 B:小团队无需插件市场,现有机制已够,避免过度设计
D4 规则异步化是否 breaking evaluate 签名会影响所有规则 全量改造4 规则少,一次到位),无需兼容层
D5 v0.3 是否顺带升级前端数据层TanStack Query A) 引入 B) 维持 useState + 手动 load B当前页面数据量小S4 仅做重连 + 懒加载Query 留 v0.4

六、风险

风险 影响 缓解
规则异步化牵连 engine + 全部规则 + 测试 S1 工期 规则数量少4 个),且有 24 个测试兜底,一次改到位
semantic/safety 依赖外部 API 稳定性 评测可靠性 规则内 try/exceptAPI 失败降级为「规则跳过 + 明确 reason」不中止 run
OpenClaw webhook 依赖外部可达性 P1-1 集成 webhook 失败不影响评测结果,仅记录日志
组合逻辑 weighted 的 pass_rate 语义变化 报告一致性 明确定义weighted 下 case 通过 = 加权分 ≥ 阈值;文档 + 测试锁定

七、验收标准v0.3 Definition of Done

  1. 可创建 tutu-api / HTTP / OpenClaw 三类通道的评测对象并各跑通一次评测
  2. 5 种规则3 旧 + semantic/json_schema/safety 选交付)可用,支持 all/any/weighted 组合
  3. 规则评估层全 async并发评测时 LLM/embedding 调用不阻塞 WebSocket 推送
  4. OpenClaw 对话可触发评测并收到完成通知
  5. 报告支持 JSON/HTML/Markdown 导出 + 两次 run 对比
  6. 后端测试覆盖率 ≥ 70%,前端有首批 reducer 测试
  7. 后端工具函数去重DEBT-2前端布局债务清理DEBT-3
  8. v0.3 部署 t480/api/health 显示 0.3.0 版本

八、下一步

  1. 评审本计划,确认第五节 5 个决策点
  2. 确认后按 Sprint 拆分为可执行 issue每项含涉及文件 + 验收)
  3. 从 S1规则异步化 + 多通道)启动