diff --git a/docs/README.md b/docs/README.md index 9a43c84..7c9746e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -70,6 +70,7 @@ AgentEvalTool 是一个智能体质量评估工具集平台,用于评估 AI |------|------|------| | **归档索引** | 已验收阶段的目标、决策、证据与后续约束 | [archive/README.md](archive/README.md) | | **Campaign 架构深化** | 耐久作业、读模型、运行时和正式线交付总结 | [archive/campaign-architecture-deepening-20260811-v1.0.md](archive/campaign-architecture-deepening-20260811-v1.0.md) | +| **智能评估架构深化** | scheduler 抽取、去重内化、状态机归一、残留清理、标签单一出口 | [archive/intelligent-eval-architecture-deepening-20260821-v1.2.html](archive/intelligent-eval-architecture-deepening-20260821-v1.2.html) | ### 2.7 外部参考 diff --git a/docs/archive/README.md b/docs/archive/README.md index 6db7ac3..63beb6e 100644 --- a/docs/archive/README.md +++ b/docs/archive/README.md @@ -5,3 +5,4 @@ | 日期 | 阶段 | 结果 | 文档 | |---|---|---|---| | 2026-08-11 | Campaign 架构深化与正式线交付 | 已完成并部署 | [campaign-architecture-deepening-20260811-v1.0.md](campaign-architecture-deepening-20260811-v1.0.md) | +| 2026-08-21 | 智能评估架构深化(scheduler 抽取 / 去重内化 / 状态机归一 / 残留清理 / 标签单一出口) | 已完成并推送 | [intelligent-eval-architecture-deepening-20260821-v1.2.html](intelligent-eval-architecture-deepening-20260821-v1.2.html) | diff --git a/docs/archive/intelligent-eval-architecture-deepening-20260821-v1.2.html b/docs/archive/intelligent-eval-architecture-deepening-20260821-v1.2.html new file mode 100644 index 0000000..7c5efe1 --- /dev/null +++ b/docs/archive/intelligent-eval-architecture-deepening-20260821-v1.2.html @@ -0,0 +1,178 @@ + + + + + 架构审查总结 — AgentEvalTool + + + + + +
+ + +
+

架构审查总结 · AgentEvalTool

+

2026-08-20 ~ 21 · 智能评估子系统深化 · 5 个候选全部落地 · 零行为变化

+
+ + +
+
+
5
+
候选落地
+
+
+
4
+
提交推送
+
+
+
870
+
测试通过(原 863)
+
+
+
−412
+
app.py 行数(586→174)
+
+
+
0
+
行为变化
+
+
+ + +
+

深化后的智能评估子系统

+

四个深模块各守一职,web 层退回纯 HTTP 翻译与启停接线。

+
+flowchart TB
+  APP["web/app.py(174 行)
lifespan 只做启停"] -->|"start() / stop()"| SCH + ROUTER["routers(HTTP 翻译)"] -->|"approve / cancel / submit_report"| LC + subgraph SCH["scheduler.py — 节奏(deep)"] + direction TB + S1["scan_once 扫描节拍"] + S2["触发原语 docker exec"] + end + SCH -.调用.-> LC + SCH -.补录.-> DL + subgraph LC["lifecycle.py — 状态机(deep)"] + direction TB + L1["_TRANSITIONS 唯一真相"] + L2["fail_eval 判失败接缝(表校验+CAS)"] + end + subgraph DL["decision_logs.py — 留痕(deep)"] + direction TB + D1["create(agent 上报·去重)"] + D2["append(平台落账·纯追加)"] + D3["count_decisions 计数原语"] + end + subgraph DOM["domain.py — 调度知识(deep)"] + direction TB + M1["时段解析 · 欠账 · 优先级"] + end + LC -.计数.-> DL + SCH -.入队.-> TQ["task_queue.py"] + TQ -.调度知识.-> DOM + LC -.落账.-> DL + classDef deep fill:#0f172a,color:#e2e8f0,stroke:#0f172a,stroke-width:3px; + class SCH,S1,S2,LC,L1,L2,DL,D1,D2,D3,DOM,M1 deep +
+
+ +
+ + +
+
+

① scheduler 抽取

+ 182b0e5 + 已落地 +
+
    +
  • 痛点:web/app.py 住着约 400 行触发式执行编排,"worker 触发"一个概念散落四个模块
  • +
  • 深化scheduler.py runtime 单例(start()/stop()/scan_once()),worker/planner 两处重复触发合并为一个触发原语
  • +
  • 红利:locality——触发式执行知识收敛一处;interface 即测试面——10 个测试改驱动 scan_once(),摆脱 TestClient
  • +
+
+ + +
+
+

② 决策日志去重内化

+ 182b0e5 + 已落地 +
+
    +
  • 痛点:接缝泄漏——内部去重机制逼着 5 处调用方塞递增 attempt "骗过"它
  • +
  • 深化:双入口——create_decision_log(agent 上报·去重,Gitea #6 契约)与 append_decision_log(平台落账·纯追加);新增 count_decisions 计数原语收编 5 处裸查询
  • +
  • 红利:调用方不再需要知道去重存在;"数日志条数"知识只住在 decision_logs
  • +
+
+ + +
+
+

③ 状态机归一

+ 58c2ad0 + 已落地 +
+
    +
  • 痛点_TRANSITIONS 表存在却被 3 处 watchdog 直写绕过,每道 ADR-0011 新闸门都是一次新绕道机会
  • +
  • 深化:公开接缝 fail_eval——表校验 → repo CAS 条件写 → 决策日志留痕;CAS 冲突跳过不当故障
  • +
  • 红利:判失败只有一个写入口,非法转换与并发竞争各在一处被挡;4 个新契约测试锁定
  • +
+
+ + +
+
+

④ 删除 ADR-0008 过渡残留

+ 2a0bcdd + 已落地 +
+
    +
  • 痛点:过渡期"保签名"wrapper 完成使命后成噪声——2 个零调用死函数 + 6 个 1–3 行委托
  • +
  • 深化:直接删除,调用方改用 domain;5 个行为锁测试迁到 test_intelligent_eval_domain.py 直接锁定 domain
  • +
  • 红利:删除测试通过——复杂度直接消失;时段/欠账/优先级知识只剩 domain 一处
  • +
+
+ + +
+
+

⑤ 前端标签单一出口

+ d87aad5 + 已落地 +
+
    +
  • 痛点:三处手写标签映射与后端枚举字符串隐式耦合——后端加新类型前端静默显示裸字符串
  • +
  • 深化DECISION_TYPE_META + decisionTypeOf() 收进 status.ts(含审查报告外的第三处双轨 ExecutionProcess);STAT_CHIPS 从 EVAL_STATUS 派生
  • +
  • 红利:改标签只动一处;未识别类型显式标注"未识别·xxx"
  • +
+
+ +
+ + +
+

边界与余下的机会

+ +
+ + +
+ +