我的 AI 写作技能写一篇博客烧 268 万 token:从会话日志算账到砍工序的完整重构实录
我用一个自建的 AI 技能(写复盘博客的提示词文件)每天写总结,最近明显感觉越来越慢。昨天它写一篇博客,我让 AI 军师把会话日志拆开算账:19 分 10 秒、34 次 LLM 请求、268 万 token(全口径:每次请求的完整输入含缓存+输出,一次请求光输入峰值就 21.3 万)。这篇文章讲三件事:这笔账是怎么从日志里精确算出来的、钱花在了哪、砍完之后实测快了多少。方法通用,脚本可抄。
先算账:Kimi Code 的 wire.jsonl 里藏着每篇博客的真实账单
Kimi Code 每次会话都会在本地落一份完整事件日志:
C:/Users/<你>/.kimi-code/sessions/<工作区ID>/<会话ID>/agents/<代理>/wire.jsonl
每行一个 JSON 事件。和成本相关的四种记录:
turn.prompt:每次用户输入,带毫秒时间戳——用来定位"写博客那一轮"从哪开始;usage.record:每次 LLM 请求一条,字段inputOther(非缓存输入)/inputCacheRead(缓存命中输入)/inputCacheCreation/output——逐请求实测值,不是估算;tool.call(包在context.append_loop_event里):每次工具调用的名称和参数;file_history.tracked:文件写入的精确时间。
统计脚本(Python 标准库,直接可跑):
import json
recs = [json.loads(l) for l in open("wire.jsonl", encoding="utf-8") if l.strip()]
# 1. 定位目标轮次:找到触发技能的输入
t0 = next(r["time"] for r in recs
if r.get("type") == "turn.prompt" and "ai-dev-blog" in json.dumps(r["input"], ensure_ascii=False))
# 2. 该轮之后所有 usage.record 全量求和(主代理;子代理 wire 在同级 agent-N/ 目录,同样方法加总)
u = {"input": 0, "output": 0, "n": 0}
for r in recs:
if r.get("type") == "usage.record" and r["time"] >= t0:
x = r["usage"]
u["input"] += x.get("inputOther", 0) + x.get("inputCacheRead", 0) + x.get("inputCacheCreation", 0)
u["output"] += x.get("output", 0)
u["n"] += 1
print(u, "总 token:", u["input"] + u["output"])
三个坑提前说:
- 子代理有独立日志。主代理派的子代理在同级
agent-N/wire.jsonl,漏了就是漏报; - 缓存命中也是真实发送的输入。每次请求都把整个会话上下文重发一遍——本轮首次请求输入 196,327,峰值 213,038,"一轮对话起步十几万输入"是实测不是感觉。统计必须全口径计入(输入含缓存+输出),只报"非缓存增量"会把大头藏起来:本篇增量口径 299,625,全口径 2,680,425,差了近 9 倍;
- 报账时两个口径都可以给,但全口径是主指标,增量只作备注。
账单出来,根因藏不住了
那篇博客的实测账单:
| 指标 | 数值 |
|---|---|
| 总耗时 | 19 分 10 秒(08:24:23 → 08:43:33) |
| LLM 请求 | 34 次(主代理 28 + 质监子代理 6) |
| token 总消耗(全口径) | 2,680,425(输入 2,647,841 + 输出 32,584) |
| 单次请求输入 | 首次 196,327 / 峰值 213,038 / 均值约 9 万 |
| 工具调用 | 35 次 |
文件实际写入只占约 6 分钟。剩下 13 分钟在干嘛?把 35 次工具调用按名称一聚合就清楚了:12 次 Read 里一大半在加载"写作栈材料"——33 种 AI 痕迹模式清单、爆款声口样本、人格置换规则、标题评分技能、外加团队规则文件七节;写完还跑两遍质量检查脚本,再派一个"质监岗"子代理判卷 3.6 分钟(全口径又烧 13.9 万 token)。
根因一句话:一篇写作的活儿,把整条内容产线的品控工艺全背在了身上。这个技能文件一个月里只加不减,已经涨到 247 行,超出我自己定的 150 行预算 65%。
动刀:三轮重构,每一刀都对着账单砍
第一刀:砍品控机器,247 行 → 105 行。 标题评分工作流、声口判据、五维评分、质检脚本、分发配套件——全部从写作环节删除,它们属于发布路径上的工序,不属于写作。技能只保留三条硬判据:事实零虚构(时间锚必须对上 git 时间戳)、数字可溯源、私密信息红线。
第二刀:撤掉自我设限。 技能里原来写着"定位:初稿,不是成品"。我的原话:"如果你能快速,准确,全面还能把文章写好,我直接发布,何尝不能当成品用?"——路由决策(走产线还是直发)不该写成技能的自我定位。军师当场认账,验收标准改成四条:全面、快速、准确、写好。
第三刀:砍工序 + 换检索。 质监岗判卷环节全稿类删除——优化一道白烧的工序,不如直接开除它。取数流程原来靠整读大文件(一份排产规划当轮读了两遍),改成 kb 本地知识库 FTS5 检索优先:
.venv/Scripts/python.exe -m kb search "主题关键词" -n 5
一条命令扫完全库 1,570 条目/863 万字,返回排序片段,命中才打开具体条目。改完当下就立功:重构这篇技能时,kb 检索直接查出它的"发福史"——8 月 5 日加流量工程两节、8 月 12 日强制阅读四份材料,一个月加到 247 行。
验证:同一个技能,第二天再写两篇
| 指标 | 重构前(09-12 媒体稿) | 重构后·复盘(09-13) | 重构后·S3 媒体稿(09-13) |
|---|---|---|---|
| 耗时 | 19.2 分钟 | 7.3 分钟(-62%) | 3.5 分钟(-82%) |
| token(全口径) | 2,680,425 | 680,763(-75%) | 425,571(-84%) |
| LLM 请求 | 34 | 7 | 4 |
| 工具调用 | 35 | 8 | 3 |
| 质监环节 | 3.6 分钟独占 | 0 | 0 |
诚实声明:重构后两轮的全口径 token 里,大头是既有会话上下文的缓存继承(每次请求重发前文),这部分换什么技能都要花;真正的边际消耗看增量口径——两轮分别 106,299 和 9,827,对比基准 299,625,降幅 65%/97%。两个口径摆在这,读者自己算。
经验总结(可直接抄走)
- 先算账再动刀。AI 工作流"变慢"是体感,wire.jsonl 里
usage.record逐请求全量求和才是账单:输入含缓存+输出全计入,含子代理,不虚报不漏报。 - 工具调用按名称聚合。
tool.call事件一 Counter,慢在哪一步立刻现形——慢不在写,在"写作前强制读 N 份风格材料"。 - 砍工序优先于优化工序。质监岗 3.6 分钟/13.9 万 token,调提示词优化它不如直接删除它;配置文件会发福,每月加法式治理必须配减法式审计。
- 检索优先于翻文件。本地知识库建了 FTS5 索引就用
search拿片段,命中再开全文;整读大文件是最贵的取数方式。 - 技能文件给自己立行数预算。超预算 50% 就是拆分信号,别等"感觉慢"才动手——这次从诊断落账到动刀隔了 4 天,还是靠人发话,教训。
素材点
- 一篇 AI 写的博客全口径烧 268 万 token/19 分钟——臃肿技能的实测账单(数字全部可溯源到会话日志)
- wire.jsonl 四种记录(turn.prompt/usage.record/tool.call/file_history.tracked)就能把任何一轮 AI 工作的成本算清
- token 统计口径之争:增量 30 万 vs 全口径 268 万,差 9 倍——缓存命中也是真实发送的输入
- "砍工序比优化工序值钱":质监岗 3.6 分钟直接开除
- 配置文件发福史:一个月加法加到 247 行,一次减法砍回 106 行
