EXPERIMENT REPORT · 编排范式对比 + 渲染验证

Trae (max_steps=200) vs Pi-EPEC 编排

同一模型 (glm-5.2) · 同一任务 (工时填报样例页生成) · 唯一变量: 编排范式 + 步数预算
路径 A trae 单体 200步  vs  路径 B pi-epec 5-subagent · 含真实浏览器渲染截图
核心结论: 给足步数 (50→200) 后, trae 能补齐样例页 (success=True, 78步完成), 证明"50步漏交付"是步数预算问题而非能力问题. 但两路径质量深度仍有差距: trae 引用 design token 却没有落地 token 文件 (token 名自创一套, 渲染靠沙箱补值); pi 有完整 design.scss + 独立 checker 闭环捕获边界越权. 编排范式的价值在于质量保障, 不在于"能否完成".

1 · 背景与目标

任务: 在已初始化的 RuoYi + Vue3 + FastAPI 脚手架内, 输入工时填报系统方案 V14 (HTML), 依据 agent-stack-kit 方法论 (ui skill 三维度 + conventions) 生成: ① module-split.md 模块清单 ② 业务模块目录骨架 ③ 工时填报样例页 index.vue.

本次聚焦: trae 在 50 步下漏交付样例页 (success=False, 撞限). 将 max_steps 提到 200 重跑, 与 pi-epec 编排在同模型下对比: 能否补齐? 质量深度如何? 并用真实浏览器渲染截图验证产物.

控制变量: 两路径都用 glm-5.2 (同一 endpoint/key), 同一起点项目副本.

2 · 实验环境与配置

2.1 模型 (两路径共用)

模型glm-5.2
endpointhttp://47.99.158.87:30030/v1 (pi fjbd provider, OpenAI 兼容)
截图沙箱独立 Vite (vue3 + element-plus 2.13) 渲染样例页, 绕开 RuoYi 路由守卫/后端; playwright headless chromium 截图 (viewport 1440×900 @2x)

2.2 工具链对比

维度路径 A — trae (200步)路径 B — pi-epec
框架trae-agent 单体, max_steps=200pi subagents, 5 角色 (explorer→planner→executor→checker)
编排自由探索, 无角色分工顺序依赖, orchestrator 传上下文
独立检查checker 角色 (PASS/FAIL)

2.3 trae 配置 (max_steps: 50 → 200)

agents:
  trae_agent:
    model: glm-5.2
    max_steps: 200          # ← 从 50 调到 200
    tools: [bash, str_replace_based_edit_tool, sequentialthinking, task_done]

2.4 pi-epec 编排配置 (节选)

subagents:
  - { name: pi-explorer,  type: pi, model: sub2api-completions/glm-5.2, thinking: medium, tools: [read,grep,find,ls,bash] }
  - { name: pi-planner,   type: pi, model: sub2api-completions/glm-5.2, thinking: medium, tools: [read,grep,bash] }
  - { name: pi-executor,  type: pi, model: sub2api-completions/glm-5.2, thinking: medium, tools: [read,write,edit,bash] }
  - { name: pi-checker,   type: pi, model: sub2api-completions/glm-5.2, thinking: medium, tools: [read,grep,find,ls,bash] }
# 每个 subagent 加载 .agents/skills/ui/SKILL.md, 用 pi-epec 生成的 *.j2 prompt 模板

3 · 任务 Prompt

两路径接收同一任务核心 (step2_generate.md), pi 路径由 orchestrator 拆解到 4 个角色:

任务: 阅读 timesheet_system_platform_plan_v14.html, 做有界第一刀生成.
1. 读 AGENTS.md + ui skill 三维度, 确认设计风格/目录/模块拆分规则
2. 写 docs/design/module-split.md (模块清单: 职责+边界)
3. 建模块目录骨架 (src/views/timesheet/<module>/)
4. **生成工时填报样例页 index.vue** (组件选择决策 + design token)
5. 对照 conventions 文档一致性原则自查

trae: 5 项一次性塞给单体
pi:   explorer(读) → planner(拆任务+验证标准) → executor(生成+自验) → checker(独立复核)

4 · 路径 A: trae (200步) 执行记录

4.1 trajectory 实测

指标50步 (基准)200步 (本次)
successFALSETRUE
总步数50 / 50 (撞限截断)78 / 200 (主动完成)
执行时间825s1137s
工具调用bash×42 edit×10bash×47 edit×42 thinking×10
样例页 index.vue❌ 缺失✅ 209 行

关键转变: 给足步数后 trae 在第 78 步主动 task_done, 补齐了样例页. 证明"50步漏交付"是步数预算不足, 不是模型能力问题.

4.2 但暴露新问题: design token 未落地

trae 样例页引用了 var(--ts-*) token (13 处), 但整个项目没有 design token 落地文件 (无 design.scss), 且 token 名自创一套, 与项目约定不一致:

trae 自创 token项目约定 token (pi/design.scss)
--ts-color-bg--ts-color-canvas
--ts-space-md--ts-spacing-md
--ts-radius-md--ts-radius-card
--ts-shadow-card--ts-elevation-card

后果: 样例页引用的 token 全部未定义, 渲染时无样式. 本次截图靠沙箱手动补值才能正常显示 (见 §6). 这违反 ui skill "design token 单一入口" 原则.

根因: trae 单体无独立检查环节, 自报 success=True 就结束, 不会发现"token 引用了但没定义"的断裂.

5 · 路径 B: pi-epec 编排执行记录

5.1 编排执行记录

阶段角色turns耗时结果
探索pi-explorer pi1369s✅ 压缩上下文 + 风险预警 (design.md 缺失/UI库并存/主题冲突)
规划pi-planner pi1287s✅ 4 任务 + 每任务验证命令
执行pi-executor pi26706s✅ 全交付 + design.scss 落地 + 自验
检查pi-checker pi20129s⚠️ FAIL — 抓到 3 处边界越权
合计71~990s检查闭环触发

5.2 checker 捕获的边界越权 (trae 无此环节)

#问题性质
1改了 RuoYi 现有 index.scss (加 @use './design.scss')违反"只新增"约束
2docs/reference/README.md 引用不存在的 design/README.md死链
3design.scsssrc/assets/styles/ 而非任务允许路径路径超界

关键: pi 主动建立了 design.scss (token 落地), 并由 checker 复核; trae 没建. 这是质量深度的核心差异.

6 · 渲染截图对比 (所有页面)

用独立 Vite 沙箱 + playwright headless 渲染两路径所有生成的页面 (viewport 1440×900 @2x). 注意: 所有截图都注入了 design token CSS 变量才正常显示 — trae 项目本身无 token 文件, 不补值则是无样式白板.

6.1 核心样例页对比 (工时填报)

路径 A · trae200 (timesheet)

trae200 工时填报页
209 行 · 表格 No Data (无数据) · 无标题 · 4 按钮 · Charge Code 搜索缺失

路径 B · pi-epec (timesheet)

pi 工时填报页
342 行 · 标题“周工时填报” · Charge Code 远程搜索 · 有行数据 · 7 按钮

6.2 pi-epec 全部模块页面 (trae 只生成了 1 个页面, 无对应物)

pi 按模块拆分维度生成了 8 个业务模块页面; trae200 仅生成 1 个页面 (timesheet), 其余 7 个模块无对应产物. 下面是 pi 的其余 7 个模块页面 (均为占位骨架, 符合一期“骨架生成”定位, 每页有标题 + 模块职责说明 + design token 取值):

Charge Code 管理

charge-code
受控核算对象生命周期

审查审批

review
备案/确认/异常审批三线

预算管控

budget
额度/占用/预警

成本归集

costing
小时成本率/费用归集

管理看板

dashboard
经营驾驶舱

组织主体

organization
集团/公司/成本中心

期间管理

period
周度周期/月度锁定/状态机

6.3 渲染证据 (playwright DOM 实测)

维度trae200pi-epec
生成页面数1 (仅 timesheet)8 (timesheet + 7 模块)
样例页行数209342
样例页 el-button 数47
样例页 el-select (Charge Code 搜索)01
样例页标题无 (查询失败)“周工时填报”
样例页表格数据No Data (空)有行数据
design token 落地文件❌ 无 (token 名自创)✅ design.scss (44行)

pi 不仅样例页更完整, 还多生成了 7 个模块页面骨架; trae 只交付了单个样例页. 且 trae 的 token 引用“悬空” (无落地文件).

6.4 pi 样例页 design token 落地 (design.scss, 44 行)

:root {
  --ts-color-canvas: #f7f3ed;      // 页面暖白背景
  --ts-color-surface: #fffdfa;     // 卡片表面
  --ts-color-primary: #a77b4c;     // 品牌强调(焦糖)
  --ts-color-data-blue: #2869e7;   // 数据/链接
  --ts-color-ink: #2a2520;         // 正文墨色
  --ts-color-danger: #c0392b;      // 风险
  --ts-spacing-md: 16px;           // 8px 网格
  --ts-radius-card: 8px;
  --ts-elevation-card: 0 1px 3px rgba(42,37,32,.06);
}

trae 无此文件. 样例页的 var(--ts-color-bg) 等引用全部未定义.

7 · 对比分析

7.1 交付与质量

维度trae (200步)pi-epec
能否完成样例页✅ 能 (78步)✅ 能 (executor 26步)
生成页面总数1 (仅 timesheet)8 (timesheet + 7 模块骨架)
样例页完整度209行, 交互少, 空数据342行, 交互全, 有数据
design token 落地❌ 无文件, token 名自创✅ design.scss 完整
独立检查❌ 无 (success=True 但有隐患)✅ checker FAIL 捕获3处
总 turns7871 (4角色)

7.2 执行效率

指标trae200pi-epec
总 turns78 (主动完成)71 (4角色合计)
耗时1137s~990s
探索占比bash 47次 (含探索+验证混合)explorer 13 turns 专职 (18%)

8 · 结论

8.1 核心结论

给足步数后, trae 单体"能完成"; 但 pi-epec 编排"完成得更扎实".
差异不在"能否交付", 而在质量保障深度: token 是否落地、交付物是否有独立复核、隐患能否被发现.

8.2 三点关键发现

  1. 步数预算是硬约束: trae 50步漏交付, 200步能补齐. 单体 agent 的完成度强依赖 max_steps 配置.
  2. 单体无检查 = 隐患自留: trae 引用未定义的 token 却自报 success=True, 这种"断裂"单体无法发现; pi 的 checker 是捕获它的唯一手段.
  3. 编排的价值是质量下限: pi 多花的设计.scss 落地 + checker 闭环, 把"看起来完成但有隐患"变成"FAIL 可返工". 这是单体 agent 给不了的.

8.3 适用场景

场景推荐理由
步数预算充足 + 简单生成trae单体直接, 200步内能完成
交付质量要求高 / 需可信验收pi-epecchecker 闭环保证无悬空隐患
design token 等基础设施必须落地pi-epecchecker 会查 token 文件存在性

一句话总纲

步数预算决定"能否完成", 编排范式决定"完成得多扎实". 单体能交付不等于交付无误 — 独立检查闭环是发现"悬空 token"这类隐患的唯一手段.


截图沙箱
trae-verify/screenshot-sandbox/ (vue3 + element-plus + vite + playwright)
截图产物
bench/screenshots/: trae-timesheet.png · pi-{timesheet,charge-code,review,budget,costing,dashboard,organization,period}.png (共 9 张)
trae200 trajectory
/tmp/trae-agent/trajectories/trajectory_20260627_055758.json

agent-stack-kit · trae200 vs pi-epec 对比 + 渲染验证 · 2026-06-26 · 模型 glm-5.2