判据只有一条:第二天早上能不能打开那次运行
没有链路追踪、token 记账和失败重放的 AI 工作流不算在生产,只是运行时间更长的演示,而第一次真正花钱的故障会以一封客户邮件的形式到达。
第二天早上的测试很简单。生产系统里我打开那一次运行:有序的步骤、实际收到的输入、回答它的模型版本、花掉的钱,改一个变量就能复现故障。演示里只有一条 200 OK 的日志和一个无法验证的猜测。
没有链路追踪、token 记账和失败重放的 AI 工作流不算上生产,只是运行时间更长的演示——第一次花真钱的故障无法复现,而无法复现的故障只能用观点回答。
观点能过技术评审,过不了成本审阅:问「你怎么知道修好了」的人,握着明年的预算签字权。
不复现的故障,代价落在四个地方
四个地方都不在模型账单上:缺陷触发不了就改不掉,工作流带着故障上线;范围分不清,只能蒙眼接受风险或把流程关掉;修复无法被证明,下一次审批又是一次信任投票;事故没有金额,就没法和提前防住它的成本放进同一张表。
我交付过的系统里见过三次同样的走向:资深工程师的注意力被占掉一周,原因没人写下来,流程被悄悄改回人工复核。
三个原语,各自回答一个问题
链路、token 记账和重放会分别失效,多数团队只有其中一个。
链路不是日志。日志是按时间排的行,链路是带 run id 和父级 span id 的树,你能从失败那一步往回走到产生它的判断。没有父级 id,第四步的一次重试只是第二条同名记录,你分不清它替换了第一次还是并行跑过,故障于是无从复现。
token 记账把成本和 token 挂到「运行」上,不是账号或日期上。缺了它,推理开销就是没有分母的月度汇总,效率说法无法被证伪。
重放用冻结环境重新执行一次抓取下来的运行:同样的输入、检索结果和 prompt 版本,模型回答从记录里取,不再发实时请求。只有它能确立因果关系:它必须在模型调用之前开始,并决定这次运行要不要发生——在我交付的工作流里,这个决定来自第一次模型调用之前就用幂等键认领运行的编排层,它也让重试可以安全重放,而不是第二次扣费。
谁来回答哪一种故障
| 你实际会遇到的故障 | 靠什么回答 | 没有它,多久才有答案 | 谁先发现 |
|---|---|---|---|
| 某客户的报价低了 20% | 带当次价目表的运行链路 | 翻日志翻几天 | 客户,在续约时 |
| 用量没变,某月开销上涨 | 按运行归集的成本与重试次数 | 到季度结账那天 | 财务 |
| 质量下滑,说不清哪天开始 | 模型、prompt、schema 的版本戳 | 几周的模式比对 | 一位评审,偶然发现 |
| 供应商在没变的别名后换了模型 | 记录里的版本串与冻结样例比对 | 直到有人升级为止 | 公司外部 |
| 法务要求删除某客户的数据 | 运行记录上按主体建的索引 | 临时手工翻找 | 法务,在被要求之后 |
最后三行决定流程能不能留在生产。算力超支只是难堪,带着可信数字的错误输出是负债:一次运行两美分,产出的是一份错掉的 40 万元报价。
一次运行多少钱,其中多少是重试
单位价格用示例值,换成你供应商的现行价目,结构不变:缓存输入 8,000 token 按每百万 $0.25,新输入 2,000 按每百万 $2.50,输出 1,200 按每百万 $10.00,一次尝试约 1.9 美分。每月 2,400 次成功运行,理想路径约 $46。
再把尝试次数和运行次数分开数:18% 的运行重试一次、4% 重试两次,多出 528 次尝试、约 $10,账单读数 $56——重试比理想路径高 22%,占整月账单的 18%,没有按运行的记录就无法归因。
我见过这个倍数走得更远:一条工作流把 schema 校验失败当成临时抖动反复重试,而不是交给人工,八天里跑到理想成本的 3.4 倍,因为所有汇总表里失败的那一步都像噪声。
写进合同的数字是每次成功运行成本:窗口内总花费除以同一窗口内的成功运行次数,放弃和失败的运行留在分子里。财务审的就是这个数。
要让重放成立,运行当时必须记下什么
一切能改变输出的东西都要在运行那一刻记下:输入引用及其哈希、渲染后的 prompt 及其哈希、模型 id 与供应商返回的版本串、工具 schema 版本、工具返回或其哈希、解码参数、尝试序号、终态。少一个字段,重放比较的就是两个不同的实验。
有三样东西会在不报错的情况下改变:供应商能在别名不变时更新模型,检索到的数据会在事后排查时轮换,prompt 可以被编辑而不留版本戳。只拿得到别名时,为每个 prompt 版本冻结二十组输入输出对每周比对,静默变更会表现为精确匹配率下降和输出长度漂移。
重放有硬上限:托管模型不会对同样的输入返回逐字节相同的结果。所以要跑两遍——第一遍用确定性壳层重放、模型回答从记录里取,确立原因;第二遍重发实时调用,检验故障是否还在。只做第一遍,等于拿上个月的模型确认修复。
代价的另一面:链路是客户数据的一份副本,所以要有保留窗口和按主体可检索的索引:完整载荷留 30 到 90 天,骨架留十三个月,全部可按主体 id 删除。一条十二步的运行记录只有几十 KB,每月 2,400 次运行不到 100 MB。链路长在供应商平台里时,把导出写进合同。
批下一张 AI 账单之前问四个问题
- 给我看上周最差的那次运行:完整的链路、有序的步骤、它实际收到的输入、成本。
- 上个月每次成功运行的成本是多少,其中重试和放弃的尝试占多少?
- 某一天发出去的那份输出,是哪个模型版本、哪个 prompt 版本、哪批检索结果产生的?
- 把上个月最严重的故障重跑一遍。原因在壳层里复现吗,修复在实时调用下仍然成立吗?
第四个是上线闸门,也是存疑的 CFO 唯一需要听到的问题:它把「这套 AI 系统能跑」换成了「这是同一次故障、这是原因、这是它不再发生的那次运行」。
闸门该放在哪里
要重放,不要报告。挑财务暴露最大的那条流程——错一次要用合同而不是 token 来计量的那条——在不问原作者的前提下从运行记录还原上个月最差的一次输出。超过十分钟还没还原出来,你就是在按生产的价钱买一个演示,下一次事故将由谁更会争辩来决定。构建时花两到四个人日把记录做出来是便宜的那个选项;补做要两到四周,因为你要重建没人写下来的决策。
继续阅读
- 人在回路设计:让人审决策和证据,而不是一屏模型输出2026-02-226 分钟AI 系统架构
- MCP 服务端设计:收自然语言指令的工具,写不出回归测试2026-02-147 分钟AI 系统架构
- 企业 AI 落地:卡住的地方是流程归属,不是模型能力2026-03-266 分钟AI 落地