cost/latency 度量
Day37 我们用 accuracy Δ + token 倍数比了单 vs 多 agent,但 accuracy 只是可靠性的一个面。今天在 B1→B18 曲线上把「可靠性」从一维(准确率)扩成三维:
阶段: B4 · reasoning/planning/multi-agent + 何时不用 agent(Day 31-40) 标签: #reliability #p95-latency #unit-cost #variance
今日导引(由浅入深)
Day37 我们用 accuracy Δ + token 倍数比了单 vs 多 agent,但 accuracy 只是可靠性的一个面。今天在 B1→B18 曲线上把「可靠性」从一维(准确率)扩成三维:
- accuracy
- 延迟(p50/p95)
- 单位成本
原因是评审一定会追问「这套架构多快、多贵、抖不抖」——只报 accuracy 是 B4 明令禁止的单维偷懒。最小可判定产出:workflow / 单 agent / supervisor-worker × cost / p95 / variance 的 3×3 = 9 数字矩阵(依赖真实 model 跑的数字待 key)。
1. 机理精读
可靠性是三维,不是一维。一个 agent 方案能不能上生产,由三个正交维度共同决定:
① accuracy(Day33-37 已建口径):judge.label==='pass' 占比,配 bootstrap 95% CI。
② 延迟(latency)。关键是报 p95/p99 而非均值。
- LLM agent 延迟分布长尾很重:多数请求 2s,少数因重试 / 工具超时 / 长上下文飙到 20s。
- 均值被长尾拖偏又掩盖长尾;p95(95% 请求快于此值)才暴露用户实际感知的「卡顿天花板」。
- p50 给典型体验,p95 给最坏可接受边界,p99 给极端尾部。
③ 单位成本(unit cost)。
单位 token 成本 = (prompt + completion tokens) × 单价。- 这是把 Day37 的 token 倍数换算成钱:多 agent token 翻 2× 直接意味着成本翻 2×。
- AISA 选型论证里「为什么不上多 agent」最有说服力的就是这条单位成本。
variance 本身就是可靠性维度。同一任务多次跑,若 accuracy/延迟方差很大(一会儿对一会儿错、一会儿快一会儿卡),即便均值好看,生产里也不可用——用户要的是可预测。所以 variance(用 std 度量)要和均值并列报,这呼应 Day33《Don't Pass@k》对「只报均值不报方差」的批评。
参考 Anthropic《Demystifying evals》(2026-01)的多维度量主张:eval 不是单个准确率数字,而是 accuracy + 成本 + 延迟 + 校准的组合。
2. 推导 / 手算 / 代码走读
本仓 src/agent/eval/stats.ts 已实现今天三维度量需要的全部纯函数(无 key、确定性),逐条走读:
mean(xs)(stats.ts:5)/sd(xs)(stats.ts:10):均值与样本标准差(分母n-1,n<2返回 0)。sd就是 variance 维度的度量函数。percentile(sorted, p)(stats.ts:17):线性插值分位数。p95延迟 = 把 n-run 的延迟样本排序后取percentile(sorted, 95)。注意输入须已排序。summarizeLatency(samplesMs)(stats.ts:76):一步出{ n, p50, p95, p99, mean },内部先[...samplesMs].sort()再调percentile。文件注释明示「p95/p99 surface the tail that the mean hides」——正是今天的机理。pairedBootstrap(stats.ts:36):算 accuracy Δ 的 95% CI(Day35 用过),三维里 accuracy 列的显著性背书。- 延迟/成本的真实采集点在
src/agent/eval/agentEval.ts:makeModelGenerate(agentEval.ts:150)里latencyMs: Date.now() - t0(:163)记真实墙钟延迟;costUsd仅当MODEL_PRICES[modelName]命中且 token usage 存在时才由estimateCost算出,否则留 undefined 而非静默 0(agentEval.ts:159-163,文件注释强调「never a silent 0」)——这保证成本数字不会被臆造。
最小手算(p95 取法,占位样本):
- 8 任务各跑 5 次得 40 个延迟样本 → 排序。
idx = (95/100) × (40 − 1) = 0.95 × 39 = 37.05。lo = 37, hi = 38, w = 0.05。- p95 =
sorted[37] × (1 − 0.05) + sorted[38] × 0.05。
真实数字待 key 后由 summarizeLatency 产出;这里只走通插值口径。
为什么 variance 用样本 std(n-1)而非总体 std(n):
- 我们只有 8 任务的样本,不是全体任务总体;用
n-1(贝塞尔修正)让样本方差对总体方差无偏,避免低估抖动。 stats.ts:13的xs.reduce(... ) / (xs.length - 1)正是这个修正;n<2时sd()返回 0(stats.ts:11),避免除零。- 这一选择与 Day35 的
requiredNForDelta(stats.ts:59,用样本 sd 估所需 N)一致,统计口径全仓统一。
三维如何喂给 Day40 的 gate:
- accuracy 列 →
pairedBootstrap出 95% CI,判 agent 是否显著更准; - p95 列 →
summarizeLatency().p95,判延迟是否在可接受边界内; - variance 列 →
sd(),判方案是否可预测; - cost 列 →
estimateCost累加,判单位成本。 - 四列任一让 workflow 占优、且 accuracy CI 跨 0,gate 即倾向「不用 agent」。这就是把「多维度量」从一张报表变成一条可执行判据。
三维矩阵的形状(9 个数字,真实数字待 key):
| 方案 \ 指标 | cost | p95 | variance |
|---|---|---|---|
| workflow | … | … | … |
| 单 agent | … | … | … |
| supervisor-worker | … | … | … |
3. 今日实战
- 对三方案(workflow / 单 agent / supervisor-worker)各在 8 任务上采集三列:cost、p95 延迟、variance。
- cost:从
agentEval.ts的makeModelGenerate返回的costUsd累加(未定价模型保持 undefined,不算 0)。 - p95:把 n-run 各次
latencyMs收集成数组,调summarizeLatency().p95。 - variance:把各次 accuracy/延迟样本调
sd()。 - 填进 3×3 矩阵(行 = 三方案,列 = cost / p95 / variance),写进对比文档。
4. 今日实测 / 产出
stats.ts的mean/sd已实现测试绿。- 矩阵 9 个数字含真实 model 跑的成本/延迟,故「待跑(需 key)」。
- p95/variance 计算管线离线可验。
- 产出:3 方案 × 3 指标 = 9 个数字矩阵。
5. 常见误区 / 陷阱
- 只看 accuracy 单维:评审必问成本/延迟,单维选型会被当场问倒。
- 用均值代替 p95:均值被长尾拖偏又掩盖长尾,生产卡顿全藏在 p95-p99 区间。
- 未定价模型把成本当 0:
costUsd必须保持 undefined,silent 0 会让多 agent「看起来免费」误导选型。 - 忽略 variance:均值好看但方差大 = 不可预测 = 不可上生产。
6. 学习资源(每条带 YYYY-MM)
- Anthropic《Demystifying evals》(2026-01)——多维度量(accuracy + 成本 + 延迟 + 校准)主引用。
- 本仓
src/agent/eval/stats.ts(mean/sd/percentile/summarizeLatency纯函数,离线可验)。 - 本仓
src/agent/eval/agentEval.ts(makeModelGenerate真实采集 latencyMs / costUsd,never silent 0)。 - 本仓
src/agent/shared/cost.ts(MODEL_PRICES+estimateCost,单位成本来源)。
SOTA检查 (2026-06 更新)
《Demystifying evals》(2026-01) 是当前 eval 方法论主引用,多维度量(accuracy / 延迟 / 成本 / 校准)现行有效。
- 避免:只看 accuracy 单维——评审会问成本/延迟;用均值掩盖长尾(必报 p95/p99);未定价模型把成本算成 0。
- 下次复查点:Anthropic 是否在 2026 后续更新 eval 方法论(关注是否新增校准/红队维度);模型单价(
MODEL_PRICES)执行当周复验。
衔接
- 昨天:Day 37 — 单 agent vs 多 agent(accuracy Δ + token 倍数)。
- 今天:把可靠性扩成 accuracy + p95 延迟 + 单位成本 + variance 三维,产出 3×3 矩阵。
- 明天:Day 39 — pass@k + pass^k 实测(用可靠性的「全过」口径找脆弱任务)。