plan-cost-concurrency.html
10 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Cost & Concurrency · LemonBoss PRD</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,300;9..144,500;9..144,700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="assets/shell.css" />
</head>
<body data-page="plan-cost-concurrency.html">
<div class="shell">
<aside id="sidebar"></aside>
<main class="page">
<header class="page-head">
<div class="crumb"><span class="pill">08 · PLAN</span><span class="sep">/</span><span>Cost & Concurrency</span></div>
<h1>成本与并发预算</h1>
<p class="deck">「项目最多花多少 token / 多少钱 / 跑多久 / 几个 agent 并发」的数字版。预算守护机制在 <a href="sdd-process.html">P-7</a>,本页给具体数字。</p>
</header>
<article class="body">
<section>
<h2>① 单次调用 Token 估算</h2>
<table>
<thead><tr><th>Agent</th><th>模型</th><th>输入 ≈</th><th>输出 ≈</th><th>典型 / 单次调用</th><th>备注</th></tr></thead>
<tbody>
<tr><td>PM</td><td>Sonnet 4.6</td><td>4K (memory + prd)</td><td>8K (新 PRD 章节 HTML)</td><td><b>12K</b></td><td>incremental ≈ 5K</td></tr>
<tr><td>Architect generate</td><td>Opus 4.7</td><td>15K (PRD + sdd + memory)</td><td>20K (4 MVCP 页 + JSON)</td><td><b>35K</b></td><td>含全套 SDD</td></tr>
<tr><td>Architect patch</td><td>Opus 4.7</td><td>8K</td><td>3K</td><td><b>11K</b></td><td>仅改一段</td></tr>
<tr><td>Coder implement</td><td>Sonnet 4.6</td><td>6K (sdd + upstream contracts)</td><td>4K (code + contract.json)</td><td><b>10K</b></td><td>per Unit</td></tr>
<tr><td>Coder retry</td><td>Sonnet 4.6</td><td>8K (含 history)</td><td>3K (差量 patch)</td><td><b>11K</b></td><td>反思加 ~2K</td></tr>
<tr><td>Tester</td><td>Sonnet 4.6</td><td>5K</td><td>4K (vitest spec + result)</td><td><b>9K</b></td><td>per Unit</td></tr>
<tr><td>Integrator</td><td>Sonnet 4.6</td><td>8K (units + spec)</td><td>3K</td><td><b>11K</b></td><td>L2 单轮</td></tr>
<tr><td>BugTriager</td><td><b>Opus 4.7</b></td><td>12K (含 code + logs)</td><td>3K (triage.json)</td><td><b>15K</b></td><td>归因质量决定 L2 收敛</td></tr>
</tbody>
</table>
</section>
<section>
<h2>② 典型项目总成本估算</h2>
<h3>2.1 小项目(TODO API · demo)</h3>
<p>3 个 Unit · 1 个 PRD rev · 1-2 个 L2 round。</p>
<table class="dense">
<thead><tr><th>调用</th><th>次数</th><th>Token</th></tr></thead>
<tbody>
<tr><td>PM init</td><td>1</td><td>12K</td></tr>
<tr><td>Architect generate</td><td>1</td><td>35K</td></tr>
<tr><td>Coder × 3 unit × 1.5 attempt(平均)</td><td>4.5</td><td>45K</td></tr>
<tr><td>Tester × 3 unit × 1.5 attempt</td><td>4.5</td><td>40K</td></tr>
<tr><td>Integrator</td><td>1</td><td>11K</td></tr>
<tr><td>BugTriager(如失败 1 次)</td><td>0.5</td><td>8K</td></tr>
<tr><td><b>合计</b></td><td>14.5</td><td><b>≈ 150K tokens</b></td></tr>
</tbody>
</table>
<h3>2.2 中项目(Auth + TODO + Profile · 5 feature)</h3>
<p>8 个 Unit · 2 个 PRD rev · 2 个 L2 round。</p>
<table class="dense">
<thead><tr><th>调用</th><th>次数</th><th>Token</th></tr></thead>
<tbody>
<tr><td>PM init + incremental × 1</td><td>2</td><td>17K</td></tr>
<tr><td>Architect generate + patch × 1</td><td>2</td><td>46K</td></tr>
<tr><td>Coder × 8 unit × 2 attempt</td><td>16</td><td>165K</td></tr>
<tr><td>Tester × 8 unit × 2 attempt</td><td>16</td><td>145K</td></tr>
<tr><td>Integrator × 2</td><td>2</td><td>22K</td></tr>
<tr><td>BugTriager × 1</td><td>1</td><td>15K</td></tr>
<tr><td><b>合计</b></td><td>39</td><td><b>≈ 410K tokens</b></td></tr>
</tbody>
</table>
<h3>2.3 默认 token_budget = 5M 的隐含假设</h3>
<p>5M 是单项目预算上限,能撑:</p>
<ul>
<li>~33 个小项目(150K each)</li>
<li>~12 个中项目(410K each)</li>
<li>1 个大型迭代(多人多反馈、20+ Unit)</li>
</ul>
<p>到达 80% 预算时发 SSE warning;100% 直接挂起。</p>
</section>
<section>
<h2>③ 美元成本(参考 2026-05 价格)</h2>
<p>按 Anthropic 公开价格估算(input/output 分别计),中项目场景:</p>
<table class="dense">
<thead><tr><th>模型</th><th>输入 ($/MTok)</th><th>输出 ($/MTok)</th><th>本项目消耗</th><th>美元 ≈</th></tr></thead>
<tbody>
<tr><td>Sonnet 4.6</td><td>~$3</td><td>~$15</td><td>input 220K · output 100K</td><td><b>$2.2</b></td></tr>
<tr><td>Opus 4.7</td><td>~$15</td><td>~$75</td><td>input 50K · output 25K</td><td><b>$2.6</b></td></tr>
<tr><td><b>中项目合计</b></td><td>—</td><td>—</td><td>410K tokens</td><td><b>≈ $4.8</b></td></tr>
<tr><td>小项目合计</td><td>—</td><td>—</td><td>150K tokens</td><td><b>≈ $1.7</b></td></tr>
</tbody>
</table>
<p class="sig">数字是 ballpark。实际取决于 caching 命中率(SessionPool 复用降低 input 重复成本)和具体功能复杂度。</p>
</section>
<section>
<h2>④ 并发预算</h2>
<p>三层并发上限:</p>
<table>
<thead><tr><th>层级</th><th>上限</th><th>原因</th><th>实现</th></tr></thead>
<tbody>
<tr><td><b>项目内 L1 并行</b></td><td>≤ 5 Unit 同时跑</td><td>每个 Claude CLI ~ 100MB RAM · 1 CPU core</td><td>scheduler.getExecutionGroups 自动分波,每波 ≤ 5</td></tr>
<tr><td><b>项目内 L2 串行</b></td><td>1 个 Integrator 实例</td><td>避免端口冲突 + 状态混乱</td><td>LoopController 内部用 Promise 队列</td></tr>
<tr><td><b>单机系统并发</b></td><td>≤ 20 个 ACP session</td><td>合理 RAM 占用 ≈ 2GB</td><td>SessionPool 全局上限(新增 <code>maxSessions</code> 配置)</td></tr>
<tr><td><b>同 company 项目并发</b></td><td>≤ 3 项目同时跑</td><td>避免单用户挤占</td><td>LoopController 入口检查</td></tr>
<tr><td><b>Bash 进程</b>(Coder/Tester/Integrator 起的)</td><td>≤ 50 系统总数</td><td>避免 fork bomb</td><td>process-guard 计数</td></tr>
</tbody>
</table>
</section>
<section>
<h2>⑤ 单项目墙钟估算</h2>
<table class="dense">
<thead><tr><th>项目规模</th><th>串行墙钟</th><th>L1 并行后</th><th>瓶颈</th></tr></thead>
<tbody>
<tr><td>小(3 Unit)</td><td>~15 min</td><td><b>~8 min</b></td><td>Architect generate + Integrator spawn</td></tr>
<tr><td>中(8 Unit)</td><td>~45 min</td><td><b>~20 min</b></td><td>L1 × 2 attempt × Coder + Tester</td></tr>
<tr><td>大(20 Unit + 3 L2 round)</td><td>~3h</td><td><b>~70 min</b></td><td>L2 整套 + 重写</td></tr>
</tbody>
</table>
<p class="sig">「并行后」假设 5 并行;scheduler 拓扑可能限制少于 5(fe 必须等 be 完)。北极星目标「小项目 < 30 min」对应中项目场景,余量充足。</p>
</section>
<section>
<h2>⑥ 监控指标</h2>
<p>在 <a href="ops-progress.html">ops-progress</a> 已经展示了 token_used/budget。补充几个隐含指标:</p>
<table class="dense">
<thead><tr><th>指标</th><th>看哪</th><th>告警阈值</th></tr></thead>
<tbody>
<tr><td>Tokens / Unit</td><td>项目 token_used / units_count</td><td>> 100K / Unit → 项目过度反思</td></tr>
<tr><td>Retry rate</td><td>units.json sum(retries) / count</td><td>> 2 平均 → Coder skill 退化或 spec 不清</td></tr>
<tr><td>L2 修复轮次</td><td>l2_rounds</td><td>≥ 2 → 该 PRD 有歧义</td></tr>
<tr><td>Agent 调用墙钟 P95</td><td>timeline.duration_ms 统计</td><td>> 5 min → 模型卡或 prompt 过长</td></tr>
<tr><td>SessionPool 利用率</td><td>active_sessions / maxSessions</td><td>> 80% → 限流</td></tr>
<tr><td>Bash 子进程数</td><td>process-guard tracked</td><td>> 30 → 等回收</td></tr>
</tbody>
</table>
</section>
<section>
<h2>⑦ 降本策略</h2>
<table class="dense">
<thead><tr><th>策略</th><th>预期降幅</th><th>难度</th></tr></thead>
<tbody>
<tr><td>SessionPool 复用 + 5min cache TTL</td><td>20-30% input token</td><td>免费(既有 ACP 行为)</td></tr>
<tr><td>Tester Sonnet 改 Haiku(如果反思质量够)</td><td>40% Tester 部分</td><td>低</td></tr>
<tr><td>PM/Coder/Tester 用 Sonnet · 只 Architect/Triager 用 Opus</td><td>已是默认</td><td>—</td></tr>
<tr><td>Memory 注入降到 top 3(从 top 5)</td><td>5-10% input</td><td>低,1 行配置</td></tr>
<tr><td>跳过 Tester 写文档代码(README/类注释)</td><td>10% output</td><td>低</td></tr>
<tr><td>cache busting:相同 unit 跑 1 次后用缓存(无 retry 时)</td><td>大幅,针对回归</td><td>中(需 contract_hash 索引)</td></tr>
</tbody>
</table>
</section>
</article>
<nav class="prev-next"></nav>
<footer class="site"><div><b>Section</b>08 · Plan</div><div><b>Page</b>plan-cost-concurrency.html</div></footer>
</main>
</div>
<script src="assets/shell.js"></script>
</body>
</html>