那天下午我才知道我的 AI 订阅服务到底做了什么,以及那 200 行代码如何让我的下一张账单减少了 41%。
我使用 Cursor 六个月后才注意到这个问题。当时我正在重命名一个函数,一个很短的函数,只有三行代码,一个调用点。这种重构最多只需要六秒钟的时间。
我当时打开了两个窗口。一个是 Cursor 聊天面板,我在那里输入了“rename getUser to fetchUser”。另一个标签页里是 Anthropologie 控制台,因为我之前调试过另一个项目,忘记关掉了。
在光标请求进行期间,Anthropic 控制台刷新了。我实时观察着令牌计数器的增加。对于这一个重命名请求,它最终显示的数字是 8400 个输入令牌。而我实际输入的提示信息只有 11 个单词。
我坐在那里片刻。然后我打开一个新的终端,直接通过 Anthropic API 发出同样的调用,并使用我自己编写的极简提示符。同样的模型,同样的意图,同样的结果。
直接调用使用了 1900 个输入标记。Cursor 发送了 6500 个额外的上下文标记来执行相同的重命名操作。
正是这个观察开启了我接下来四个小时的电子表格制作过程。
这6500个代币里装的是什么?
我对 Cursor 的内部机制并不了解。我只有自己的实验和公开文档,但两者都无法提供完整的信息。以下是我的实验结果:当我在代码库的不同部分运行相同的提示符 50 次时,输入标记的数量大约在 4,000 到 14,000 之间,中位数约为 8,000。这种变化与我打开的缓冲区数量以及我最近查看同一目录中的文件的时间大致相关。
合理的推断是,Cursor 向我发送了系统提示、根据我最近的活动推断出的索引上下文、代理框架的工具定义,以及我实际输入的提示。前三项是路由层在执行其功能。第四项是我在聊天面板中唯一能看到的提示。
了解一些上下文很有帮助。当我请求重构涉及多个文件时,Cursor 了解这些文件至关重要。当我请求重命名一个调用点仅需三行上下文即可描述的函数时,路由层发送 6500 个无关的缓冲区状态令牌,实际上是在替我采取一种更为稳妥的做法,而这种做法对 Cursor 的益处远大于对我的益处。
Cursor 收取固定席位费。Anthropic 则按代币向 Cursor 收费。作为重度用户,我的计算结果并不理想,因为代币的边际成本最终会体现在我直接调用 API 的费用上(Cursor 的席位费并不包含这些费用),再加上固定席位费本身。保守的上下文部署成本低,但使用成本高。这种利益分配显然是不合理的。
让我开始关注的那份账单
我的三月份账单在4月2日寄到了。Anthropic这一项连续三个月环比增长了50%。Cursor的费用是20美元,保持不变。Copilot的费用是10美元,也保持不变。费用变动的那一项是我通过自己的命令行界面(CLI)调用的API,用于处理Cursor无法胜任的任务。
工作量增加并非因为工作量增加。我查过了,每周记录的工作时长一直很稳定。增长的原因是,我花在人工智能通话上的时间比例越来越高,而这些通话是我更随意地进行的,因为人工智能变得越来越好用。
趋势是这样的。如果我按此推算,到八月份,我在 Anthropic API 上的直接支出将超过 Cursor 席位的费用,而我的 Cursor 席位在每次聊天面板切换时仍然会运行同样的保守上下文开销。账单将会同时在两个方面增长。
我周末取消了 Cursor 的订阅。
200行
我为了替代 Cursor 的路由组件而开发的这个东西非常小巧,以至于我几个月前没把它做出来都觉得惭愧。它是一个基于正则表达式的意图分类器,包含五条规则。简单的提示会路由到 Haiku 模型;代码提示会路由到 Sonnet 模型;规划提示会路由到 Opus 模型;嵌入式分类提示会路由到一个廉价的 OpenAI 模型;如果没有匹配项,则默认使用 Sonnet 模型。
这就是全部的路由逻辑。两百行 TypeScript 代码,包括导入语句、错误处理、定价表和一个记录每次调用的成本计算器。如果你的显示器很高,整个文件可以显示在一个屏幕上。
我用上周记录的一百条提示音进行了测试。结果差异显著。“十四行诗”的使用率从 70% 降至 25%。“俳句”的使用率从 0% 升至 60%。“作品”的使用率保持在 5%。测试集上的预估成本降低了 47%。
我一开始并不相信这个数字,以为系统出了问题。于是,我给路由器加装了监控设备,实时记录每次提示选择的实际模型及其成本,然后按照正常的工作流程运行了两周。5月2日的账单显示,实际成本降低了41%,但总调用次数却增加了30%,因为每次调用成本的降低促使我更频繁地使用人工智能。
我之前不明白的
路由层是目前 AI 工具栈中最有价值的部分,而封装器最想拥有的就是这一部分。
过去 90 天里,我接触过的所有编码工具都加入了模型下拉菜单。Cursor 添加了,GitHub Copilot 添加了,Windsurf 也添加了。它们都声称这是用户自主选择。但我认为,其背后的原因在于,它们都注意到了我四月份发现的同一个现象:用户可以自行路由调用。而且用户已经开始这么做了。如果这些封装工具不负责路由层,它们就只拥有聊天面板和自动完成功能,除此之外就没什么其他功能了。
聊天面板和自动补全功能确实很有价值。但对于更喜欢直接路由的重度用户来说,它们并不值每月 20 美元。它们的价值可能只有每月 5 到 10 美元,具体价值取决于它们实际节省的工作量。
我认为距离用户大量进行这项练习还有两个季度的时间。开发者们也意识到了这一点。定价页面也开始反映出这一点。
我会对三月份的自己说些什么呢?
三件事,按重要性排序。
首先:打开 Anthropic 控制面板。查看您三个常规 Cursor 回合的输入令牌计数。如果该数字超过您直接呼叫基线的 3 倍,则表示路由层在您的使用模式下未能发挥其应有的价值。这并不意味着取消服务,而是需要注意。
第二步:记录你一周内所有AI调用。包括每次调用的成本、选择的模型、提示音长度和输出长度。每个服务提供商的日志记录需要20行代码。数据会让你大吃一惊。你看不到账单,所以根本不可能找到真正有效的优化方法。
第三步:编写路由。两百行代码。第一个版本不必很智能。五个用于识别意图的正则表达式规则就能节省 70% 的代码量。之后可以再迭代优化这些规则。
我之所以要告诉三月份的自己这些,是因为:如果我三个月前就做同样的事情,就能省下大约 300 美元的订阅费。做这件事的成本:一个周六下午。不做这件事的代价:下个季度你的账单会涨到多少钱?对于大多数现在从事人工智能开发的人来说,这个数字比他们愿意承认的要大得多。
这并不能解决什么问题。
路由器不会给我提供多文件编辑代理。它不会为我的代码库建立索引。它不知道我打开的缓冲区。它不会自动补全内联代码。这些都不是它的职责。
我保留了 Copilot 用于 VS Code 中的内联幽灵文本功能,因为这是不同的产品,解决的是不同的问题,而且 10 美元的费用对我来说并不算什么。至于之前我会用 Cursor 处理的多文件代理工作,我现在改用终端里的 Claude Code,这项服务需要通过我的 Max 套餐单独付费。总的来说,这套方案比 Cursor 加上我之前直接使用 API 的费用要便宜。
如果你的使用习惯不同,计算结果也会不同。如果你主要在聊天面板内工作,很少离开聊天面板,那么 Cursor 可能仍然是一个不错的选择。但如果你的 AI 工作涵盖聊天、代理循环、嵌入式管道以及一次性的 CLI 调用,那么路由层才是真正值得你自行开发的组件。
结尾
账单于 4 月 2 日寄来。新账单于 5 月 2 日寄来。两者之间的差额为 41%,外加 200 行代码,以及一个我原本打算在周末下午昏昏欲睡地看电影的时间。
这个教训本应显而易见。封装层有动机发送超出实际需要的代币,而用户则有动机发送较少的代币。路由层正是这两种动机交汇之处。谁掌控了路由层,谁就获胜。
路由层可以是你的 200 行代码。
X记录空间