来玩个有趣的游戏:你是 CTO,AI 账单刚刚送到
Uber 在四月就把 2026 年全年的 AI 编码预算烧光了。CTO 回到了起点——不是因为工具不行,而是因为没人能把一美元的 token 消耗对应到任何一次实际交付的改动。Agent 没问题,问题在可见性这一层。下面是它看起来的样子,以及当每一次 agent 会话都变成结构化记录而不是一屏滚动输出之后,会发生什么变化。
来玩个有趣的游戏。你是一位 CTO。你给工程师们发了一张没有 对账单的信用卡,现在信用卡公司想找你聊聊。上个月 Uber 的 CTO 给这句"聊聊"配了个数字:全年的 AI 编码预算,四月就 没了。有意思的不是账单的大小,而是接下来那句话——「我得 回到起点重新规划,因为我以为足够用的预算已经被烧光了。」 把这句话从客套的高管腔翻译过来就是:我们付了账单,我们 清楚知道它花了多少钱,但我们说不出它买到了什么,而且我们 不想再这么下去了。
听着,现代购买软件的方式,就是给工程师们一个按 token 计费 的东西,告诉他们"省着点用",然后等着看。The Information 上个月 报道 说 Uber 的 CTO Praveen Neppalli Naga 等到了结果,发现他 2026 年全年的 AI 编码预算在四月就已经烧光,从进度上看, 这个雄心壮志相当可观。该公司 Claude Code 的使用量在一个 季度内几乎翻倍;到三月,84% 的 Uber 工程师被归类为 agentic coding 用户,挺好。 每位工程师的开销 大致在每月 $500 到 $2,000 之间,CTO 本人 在两小时的个人演示中烧掉了 $1,200—— 大致相当于纽约中城一家律师事务所初级律师的小时计费,但 人家至少会出一份工时单。Uber 在 2025 年的整体研发支出是 $3.4 billion, 所以不是没腾挪空间。问题是模型自己去找了更多的空间,找到了, 然后把它记进了账单。
按理说,这种时候你期待一家做安全和隔离的公司发的文章是 "用沙箱"。这不是那种文章。我们 已经写过那一篇了, 理所当然地写过。这篇是同一个问题的另一半——账单送到了, 你能看懂,但你回答不了所有人唯一想问的问题:好,但这是 买了什么。
账单没有问题。账单本身才是问题。
按席位计费曾经非常容易理解,既然它已经成为过去式,你应当 心存感激。你买了 200 个 GitHub Copilot 席位,每个 $19, 你得到一行 $3,800 一个月的账目,当有人问"我们花这些钱换到 了什么",答案是一个行业标准形状的耸肩——「大概是一些自动 补全吧」——然后大家就回到下一个会议去了。耸肩这件事的好处 是它可以扩展。$3,800 的耸肩没什么问题。$180 万的耸肩就会 开始引起大楼里那些有信托责任的人注意了。
按 token 计费的 agentic 工具是另一种形状,你必须用你的脸 去思考它。同一团队里两位工程师,做同类功能,开销可能差 四十倍。(四十倍。)一位打开一次新会话,问一件事,拿到 那件事,关掉会话——$50,搞定,回家做意面。另一位让一群 并行 agent 在一个重构上锤了六小时,构建坏了就重试,因为 另一个模型觉得第一次重试不对又重试,到第三次重试是因为 这事已经上升到面子问题。两位工程师都交付了代码。一位用了 $50 的模型时间。另一位花了 $2,000。账单不会告诉你哪个 是哪个。IDE 也不会。财务拿到一个单一的汇总数字,工程团队 拿到一个 Slack 帖说"Claude was amazing today",恕我 直言,这两样都不是度量。
让这件事变难的不是价格。是没有一笔花费 附着 在你三个月 后还能审计的东西上。于是一个 PR 合入了。PR 有 diff。diff 有 commit。commit 有作者。作者是人。这个人在某个时刻用了 agent——也许吧。用的哪个 agent?哪个会话?哪个 prompt? 用了多久?做了什么?线索在终端滚动缓冲区附近就断了,因为 终端窗口已经关了,没人会往上翻。这件事在财务里有个名字, 叫"shrinkage"(损耗),只是在软件行业我们还懒得给它起 名字。
无论如何,这个问题的形状比 agentic coding 更老,如果你 在这个行业里待得足够久足以感到疲惫,你立刻就会认出它。 云开销当年也是同样的轨迹。先是五年的"AWS 账单大得吓人, 没人知道为什么",然后一代 FinOps 工具开始把美元和团队、 服务以及单个请求挂上钩,现在的 AWS 账单依然大得吓人,但 人们知道为什么——听起来不起眼,但这就是整局游戏的全部。 解决方案不是少用 AWS。是让花费变得 可读。
Agentic coding 现在处于"前 FinOps"时代的云。花费是真的, 工具是好的,生产力是真实存在的——这些都没人争。缺的是 "这位工程师、在这个仓库、在这次会话"和"这些 token、 这些命令、这些文件、这个 PR"之间的连接组织。在这句话 存在之前,账单上的每一美元都是凭信仰支付的,而你和 CFO 那次对话,就是那种对话。
"可见性"必须意味着什么,超越那个写着大数字的仪表盘之外。
每个人都说"可观测性",每个人都点头,但几乎没人对它的 含义达成一致。Coding agent 厂商会很乐意给你看一个仪表盘。 仪表盘上有 token 计量。有采用率百分比。有一张能放进幻灯片 的、向右上方爬升的图表,也就是 2026 年所有软件图表共有的 形状。这些都不是答案。"你的开发者本周消耗了 23 亿个输入 token"不是一个答案;这只是把账单换个更大的字号重述一遍。
CTO 真正需要的,用来为预算辩护或要求加预算的东西,由四个 部分组成。
可以放进幻灯片的采用率
本周你有多少工程师真的用了 coding agent。用了多久。 在哪些项目上、哪些仓库里。不是已分发的席位许可,不是 持有 API key 的人数,也不是"已加入计划的人数"——而是 真的由人类发起的、关联到组织能叫出名字的对象的会话。
agent 触及的每一个文件
按会话、按仓库、按工程师——AI agent 创建、修改或删除 的精确文件集合,连同 diff,关联到启动会话的工程师和 使用的模型。工作单位是"一次文件变更",不是"一个 token"。token 是厂商计费的方式。文件才是你必须交付的 东西。
每条命令、每个来源
会话内 agent 执行的每一条 shell 命令、读过的每一个 文件、调用过的每一个工具、命中的每一个 API。实时捕获, 集中保留,可按团队、按仓库、按模型查询。"agent 昨天 装了什么"变成一次查询,而不是一次拿着手电筒和一位 初级 SRE 的考古挖掘。
完整的对话,已归档
Prompt、模型响应、工具调用——整段记录。放在某个稳定 的地方。可供安全团队审查、可供工程领导抽样、可导出到 你已经用来归档邮件和聊天的同一套留存系统里。会话现在 是一份记录,而不是某个曾经被人敲下的东西的记忆。
注意一下哪些东西不在这个清单上。Token 数量不在清单上。 它们在 账单 上。清单的意义在于把账单和它买到的东西并排 摆放,这样财务团队可以做除法,工程团队可以停止靠感觉吵架, 所有人可以把会议时间花在真正的问题上。
Bromure 是怎么做这套管道的。
Bromure 的 agentic coding 功能,说句 公道话,最初是为这场对话的"安全"那一半建造的。每个 coding agent 都在你 Mac 上的一个一次性 Linux VM 内运行。VM 只能 访问你挂载的项目文件夹;它没有 SSH 密钥、没有 AWS 凭据、 磁盘上也没有 GitHub token。宿主机上的凭据代理会在网络层 把占位 token 换成真 token,并且只对白名单端点这么做。这是 我们 已经讲过的故事: 一个被投毒的 npm 包试图带走你的密钥,结果一头撞上墙。
可观测性的故事是同一套管道,只是被用于不同的目的。 Hypervisor 坐在 agent 和它接触的一切之间。Agent 不打开 文件;VM 才打开。Agent 不运行 shell 命令;VM 才运行。 Agent 不发起 API 调用;宿主机上的代理才发起。这些操作中 的每一个——必须是,因为这份工作的安全那一半要求如此—— 都是一个命名事件,带时间戳、会话 ID、工程师身份和负载。 Bromure 已经在本地记录了所有这些。它叫 Session Tracer, 今天就随 Agentic Coding 一起发布。
为 CTO(以及 CFO、CISO、还有那位想知道自己采购了什么的 采购人员)合上这个闭环的那一块,是云那一侧。当开发者 Mac 上的 Bromure 客户端被纳入你的组织时,这些本地追踪 就不再只是本地调试辅助,而是变成结构化记录,被流式传输 到你的 Bromure 企业服务器。按工程师、按会话、按项目、 按模型。可过滤、可导出、可保留。agentic coding 页面 上的产品文案把这个叫做"AI usage monitoring",目前标记 为"即将推出"——为了避免歧义,这篇文章正是这件事提速的 部分原因。
这些事件之所以可靠,并不是因为有一个嵌在 agent 里的 sidecar,也不是因为有一个套在模型 API 外面的 wrapper—— 这两样东西如果 agent 想绕开,原则上都绕得开。事件之所以 可靠,是因为 agent 跑在一个 VM 里,而这个 VM 的 hypervisor 无论有没有人要求,都必须知道每一条命令和每一个文件。在 某种意义上,可观测性是免费的。你已经付过钱了。账单写的 是"隔离"。你拿到的东西同时还是一份日志。所以无论工程师 用的是 Claude Code 还是 CLI 模式的 Cursor,是 Codex 还是 Aider,又或是我们从没听说过的某个内部 agent——你都能拿到 同样的记录,因为记录的单位是"VM 做了什么事",而不是 "厂商这个季度决定暴露什么"。
一个季度之后的那场对话,听起来会是什么样。
Uber 那个数字之所以好用来思考,是因为里面没有一处是 失败。84% 的采用率。代码交付了。CTO 真的撸起袖子用了 这东西——顺带一句,更多 CTO 应该这么做,哪怕每场演示 $1,200。坏掉的是一个季度后的那场对话。「我们要不要加倍 押注?要不要收缩?要不要分层席位?要不要把某些类工作 推到更便宜的模型上?」这些决策没有一个能从一张汇总 token 账单上做出来。它们全都能从一张按工程师、按会话、按仓库 的表上做出来。决策没有变难。是那张表被拿走了。
下面是一小批会变得可回答的问题,大致按我们从那些试图为 某一行预算辩护的人那里听到的顺序排列:
- 哪些工程师拿到了超额回报,他们做得有什么不同? 看看那些"开销 / 文件变更比"落在分布好的那一角的 工程师。读几条他们的会话追踪。他们做得好的地方一部分 是风格,一部分是技巧,一部分只是他们伸手去拿哪个模型。 这些东西没有记录就看不见。(「Alice 怎么能用这么少的 钱交付这么多代码」是一个能产生有用的内部午餐分享会的 问题,前提是 Alice 的会话不是某处一个已关闭的终端。)
- 开销是不是集中在某一个团队、某一个仓库、某一类 工作上? 如果你 60% 的 AI 账单来自某个遗留服务, 而 agent 大部分时间在折腾不稳定的测试,那这就是一个 发现。这也不是关于 AI 的发现。
- 哪些项目在哪个模型上更有产出? "Claude 比 Cursor 好"是一条推。"上个月在我们的前端仓库上,Claude 每美元 交付的文件变更是 Cursor 的 3 倍,而在我们的 Go 服务 上正好相反"是一场采购对话。
- agent 装了什么,装在哪里? 这是安全团队的问题,
也是同一张表上的同一条查询。Agent 跑过的每一个
npm install、每一个pip install、每一个apt-get, 按会话、按仓库、按包名可过滤。当某天注册表上冒出一个 投毒包——这个,含糊地指向日历上的大多数星期——「我们 有任何 agent 接触过它吗」就是一个WHERE子句,而 不是一场消防演习。
值得当心的一点:上面这些问题从模型厂商的仪表盘里同样 回答不了,而且不可能回答。厂商看到的是 token。厂商有时 能在一次请求期间看到 prompt 和补全。厂商看不到你的仓库、 你的文件变更、你的 shell 命令,也看不到你组织里是哪位 工程师敲了哪句话。厂商做不到。厂商在电线的错误那一端。 可见性这一层必须活在你这一边——在开发者机器上,在 VM 里, 在你的企业服务器上——因为工作真正发生的地方就在那里。 Token 计量只是从前线寄来的一张明信片。
免责声明,理所应当。
讲几句老实话,因为这种文章最糟糕的版本,就是那种承诺 一份历史终结式财务报告、然后只交付一个仪表盘的版本。
Bromure 的记录告诉你 agent 做了 什么。它不告诉你 agent 做的事情是 好的。一次写了 40 个文件并交付了一个 PR 的 会话,仍然可能交付了 40 个坏文件。记录让它们更容易被找到、 更容易被讨论、更容易被回滚。但它本身并不审查它们。Diff review 还是你的活,是回路中那位人类的活,是下午五点那位 非常疲惫的资深工程师的活。
Bromure 的记录覆盖 agent 在 VM 内做的事。它不覆盖工程师 在打开 agent 之前脑子里做的事。工程师在 IDE 里跟 Claude 进行的、在真正会话开始之前的那五分钟对话,不在这盘磁带上。 这是一个真实存在的空白。我们不假装能填上,因为不靠一个 更怪的产品我们填不上。
Bromure 的记录在你这一边电线上,这正是它的全部意义所在—— 但这也意味着保留策略、访问控制和数据处理合约必须活在 你 这一边。Prompt 里包含代码。代码里包含本不该被你的 开发者贴进去但绝对被贴进去过的密钥。记录的敏感度和工作 本身一样高,你应该这样对待它。存储是你的;责任也是你的。 (「这件事在财务里有个名字,叫 'shrinkage'」,只是现在 shrinkage 是一张 SQL 表,你可以审计它。)
最后,这只是更大故事的一个部分。另一个部分我们已经讲过—— 让 coding agent 在带凭据代理的 VM 里运行,就是你拦住下一 个投毒 npm 包带走 SSH 密钥的方法。安全的故事和可观测性的 故事是同一套管道。它们只是在不同的日子里报销不同名目的 费用。
付那张账单。但要在知道它买了什么的前提下付。
Uber 那句话——I'm back to the drawing board because the budget I thought I would need is blown away already——今年会是 很多 CTO 的台词。这件事本来就要发生。对一个胃口只受 "模型在下午两点感觉有多雄心壮志"约束的工具按 token 计费, 注定会在每一家采用它但不为它装上仪表的公司里产生这句话。 问题不在 agent。问题在管道。
Bromure Agentic Coding 不情愿地,正是 这套管道做好它的工作时该有的样子。每个 agent 跑在自己 的 VM 里,每次会话都是一份结构化记录,每份记录都流到 一个你的财务团队和你的 CISO 都能查询的地方,而你已经 喜欢的 agent 保持原样。你还是会付那张账单。你只是终于 知道它买了什么——这件事,最后一次有人核对,是信用卡公司 对客户的最低要求。