원클릭으로
review-architecture
审查项目架构健康度 — 检查 GitOps 合规、Plugin 可插拔性、CLI/Web 复用。当用户要求架构审查、代码重构后验证、或新增模块后检查依赖关系时使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
审查项目架构健康度 — 检查 GitOps 合规、Plugin 可插拔性、CLI/Web 复用。当用户要求架构审查、代码重构后验证、或新增模块后检查依赖关系时使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when analyzing ESL-Bench evaluation reports - extracting scores by difficulty dimension, comparing methods, checking fail rates, token costs, duration per query. Triggers on keywords like eslbench report, benchmark results, group by difficulty.
集成外部 benchmark 数据集到 HolyEval 框架 — 从论文/仓库到可执行评测的端到端流程。
Scaffold a new EvalAgent plugin (config + implementation + registration).
Scaffold a new TargetAgent plugin (config + implementation + registration).
引导项目初始化 — 环境安装、配置、验证、启动 Web UI(含 hma-web 公开评测平台)。
Run all benchmark test cases or a filtered subset.
| name | review-architecture |
| description | 审查项目架构健康度 — 检查 GitOps 合规、Plugin 可插拔性、CLI/Web 复用。当用户要求架构审查、代码重构后验证、或新增模块后检查依赖关系时使用。 |
| argument-hint | ["focus-area"] |
对 HolyEval 项目进行结构化架构审查,输出检查报告并标注违规项。
根据 $ARGUMENTS 决定审查范围(默认 all):
| 参数 | 审查内容 |
|---|---|
gitops | 仅检查 GitOps 合规 |
plugin | 仅检查 Plugin 可插拔性 |
reuse | 仅检查 CLI/Web 复用 |
all | 全部检查 |
原则: 所有代码、benchmark 数据、评测报告都在 Git 仓库中管理,便于版本追踪和协作维护。
benchmark 数据目录结构
benchmark/data/<name>/ 每个 benchmark 包含 metadata.json + *.jsonlls benchmark/data/*/,确认无游离文件report 输出在仓库内
benchmark/report/ 目录存在且镜像 data/ 子目录结构{dataset}_{target_label}_{YYYYMMDD_HHmmss}.json 格式ls benchmark/report/*/ 检查.gitignore 合理性
.env 被忽略(含 API Key)__pycache__、.venv 被忽略benchmark/report/ 不被忽略(报告需入库)cat .gitignore,检查以上规则无硬编码路径或环境依赖
evaluator/ 和 web/ 中是否有硬编码绝对路径rg '/Users/|/home/|C:\\\\' evaluator/ web/ benchmark/.env + evaluator/utils/config.py 读取,不散落在代码中依赖管理
pyproject.toml 存在且包含完整依赖声明uv.lock 存在且已提交(锁定版本)git ls-files pyproject.toml uv.lock## GitOps 合规检查
- [x] benchmark 数据目录结构规范
- [x] report 输出在仓库内
- [ ] ⚠️ .gitignore 缺少 xxx 规则
- [x] 无硬编码路径
- [x] 依赖管理完整
原则: Plugin 通过 __init_subclass__ 注册,core/ 层仅依赖抽象接口,新增/删除 plugin 不影响框架核心。
core/ 不导入具体 plugin 类
evaluator/core/ 中搜索是否直接 import 了 plugin 实现类名rg 'from evaluator\.plugin\.' evaluator/core/import evaluator.plugin.xxx (触发注册的 side-effect import)from evaluator.plugin.xxx import XxxAgent (直接引用具体类)web/ 不直接导入 plugin 实现
rg 'from evaluator\.plugin\.\w+\.\w+ import' web/import evaluator.plugin.xxx (注册触发)Schema 集中定义
EvalInfo, TargetInfo, UserInfo)定义在 evaluator/core/schema.py*Info 配置类rg 'class \w+Info\(BaseModel\)' evaluator/plugin/Registry 反射使用
evaluator/utils/agent_inspector.py 通过 get_all() 反射发现 pluginrg 'get_all\(\)|get\(' evaluator/utils/agent_inspector.pyPlugin 间无交叉依赖
rg 'from evaluator\.plugin\.' evaluator/plugin/ --glob '*.py'__init__.py 中(注册用)自动派生检查
bench_schema.py 中的 _TARGET_TYPE_MAP 通过 _derive_target_type_map() 自动从 Union 派生agent_inspector.py 中的 config map 从 Discriminated Union 自动派生## Plugin 可插拔性检查
- [x] core/ 不直接导入 plugin 实现
- [x] web/ 不直接导入 plugin 实现
- [x] Schema 集中定义在 schema.py
- [x] Registry 反射使用
- [ ] ⚠️ plugin A 导入了 plugin B: xxx
- [x] 自动派生无硬编码映射
原则: CLI 和 Web 共享同一套底层能力(evaluator/utils/ + evaluator/core/),不重复实现。
共享层位置正确
evaluator/utils/ 或 evaluator/core/ 中:| 能力 | 期望位置 |
|---|---|
| benchmark 读取 (list/load/detail/filter) | evaluator/utils/benchmark_reader.py |
| report 读写 | evaluator/utils/report_reader.py |
| agent 元数据 | evaluator/utils/agent_inspector.py |
| target 解析 | evaluator/core/bench_schema.py |
| 批量执行 | evaluator/core/orchestrator.py |
| BenchItem→TestCase | evaluator/core/bench_schema.py |
Web services 层是纯 re-export
web/app/services/benchmark_reader.py 应为 from evaluator.utils.benchmark_reader import *web/app/services/report_reader.py 应为 from evaluator.utils.report_reader import *web/app/services/agent_inspector.py 应为 from evaluator.utils.agent_inspector import *wc -l web/app/services/benchmark_reader.py web/app/services/report_reader.py web/app/services/agent_inspector.py无跨包逆向依赖
web/ 不导入 benchmark/(benchmark 是 CLI runner,不是共享层)evaluator/ 不导入 web/ 或 benchmark/rg 'from benchmark\.' web/
rg 'from web\.' evaluator/
rg 'from benchmark\.' evaluator/
CLI 和 Web 调用同一入口
benchmark/basic_runner.py 和 web/app/services/task_manager.py 都调用:
bench_item_to_test_case()resolve_runtime_target()build_bench_report()BatchSession / do_batch_test()## CLI/Web 复用检查
- [x] 共享层位置正确
- [x] Web services 层纯 re-export
- [ ] ⚠️ web/ 导入了 benchmark/: xxx
- [x] CLI 和 Web 调用同一入口
evaluator/core/ ← 核心接口 + schema(不依赖 plugin/utils 以外的任何包)
evaluator/utils/ ← 共享工具层(仅依赖 core/)
evaluator/plugin/ ← 可插拔实现(依赖 core/ + utils/)
benchmark/ ← CLI runner(依赖 core/ + utils/,不被 web/ 依赖)
web/ ← Web UI(依赖 core/ + utils/,不依赖 benchmark/)
generator/ ← 数据转换工具(独立,仅依赖 core/schema)
违反此图的导入方向即为架构问题。