Trae (max_steps=200) vs Pi-EPEC 编排
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 |
| endpoint | http://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=200 | pi 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步 (本次) |
|---|---|---|
| success | FALSE | TRUE |
| 总步数 | 50 / 50 (撞限截断) | 78 / 200 (主动完成) |
| 执行时间 | 825s | 1137s |
| 工具调用 | bash×42 edit×10 | bash×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 pi | 13 | 69s | ✅ 压缩上下文 + 风险预警 (design.md 缺失/UI库并存/主题冲突) |
| 规划 | pi-planner pi | 12 | 87s | ✅ 4 任务 + 每任务验证命令 |
| 执行 | pi-executor pi | 26 | 706s | ✅ 全交付 + design.scss 落地 + 自验 |
| 检查 | pi-checker pi | 20 | 129s | ⚠️ FAIL — 抓到 3 处边界越权 |
| 合计 | — | 71 | ~990s | 检查闭环触发 |
5.2 checker 捕获的边界越权 (trae 无此环节)
| # | 问题 | 性质 |
|---|---|---|
| 1 | 改了 RuoYi 现有 index.scss (加 @use './design.scss') | 违反"只新增"约束 |
| 2 | docs/reference/README.md 引用不存在的 design/README.md | 死链 |
| 3 | design.scss 在 src/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)
路径 B · pi-epec (timesheet)
6.2 pi-epec 全部模块页面 (trae 只生成了 1 个页面, 无对应物)
pi 按模块拆分维度生成了 8 个业务模块页面; trae200 仅生成 1 个页面 (timesheet), 其余 7 个模块无对应产物. 下面是 pi 的其余 7 个模块页面 (均为占位骨架, 符合一期“骨架生成”定位, 每页有标题 + 模块职责说明 + design token 取值):
Charge Code 管理

审查审批

预算管控

成本归集

管理看板

组织主体

期间管理

6.3 渲染证据 (playwright DOM 实测)
| 维度 | trae200 | pi-epec |
|---|---|---|
| 生成页面数 | 1 (仅 timesheet) | 8 (timesheet + 7 模块) |
| 样例页行数 | 209 | 342 |
| 样例页 el-button 数 | 4 | 7 |
| 样例页 el-select (Charge Code 搜索) | 0 | 1 |
| 样例页标题 | 无 (查询失败) | “周工时填报” |
| 样例页表格数据 | 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处 |
| 总 turns | 78 | 71 (4角色) |
7.2 执行效率
| 指标 | trae200 | pi-epec |
|---|---|---|
| 总 turns | 78 (主动完成) | 71 (4角色合计) |
| 耗时 | 1137s | ~990s |
| 探索占比 | bash 47次 (含探索+验证混合) | explorer 13 turns 专职 (18%) |
8 · 结论
8.1 核心结论
差异不在"能否交付", 而在质量保障深度: token 是否落地、交付物是否有独立复核、隐患能否被发现.
8.2 三点关键发现
- 步数预算是硬约束: trae 50步漏交付, 200步能补齐. 单体 agent 的完成度强依赖 max_steps 配置.
- 单体无检查 = 隐患自留: trae 引用未定义的 token 却自报 success=True, 这种"断裂"单体无法发现; pi 的 checker 是捕获它的唯一手段.
- 编排的价值是质量下限: pi 多花的设计.scss 落地 + checker 闭环, 把"看起来完成但有隐患"变成"FAIL 可返工". 这是单体 agent 给不了的.
8.3 适用场景
| 场景 | 推荐 | 理由 |
|---|---|---|
| 步数预算充足 + 简单生成 | trae | 单体直接, 200步内能完成 |
| 交付质量要求高 / 需可信验收 | pi-epec | checker 闭环保证无悬空隐患 |
| design token 等基础设施必须落地 | pi-epec | checker 会查 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 张)/tmp/trae-agent/trajectories/trajectory_20260627_055758.jsonagent-stack-kit · trae200 vs pi-epec 对比 + 渲染验证 · 2026-06-26 · 模型 glm-5.2