低成本使用 AI Coding:把昂贵推理留给决策,把廉价 Token 用于执行
把昂贵推理留给决策,把廉价 Token 用于执行:通过压缩问题空间、沉淀上下文、减少人类中断,实现 AI Coding 的长期成本优化。
长期使用 AI 编程以后,我逐渐形成了一种比较朴素的成本观:
不是所有任务都值得使用最强模型。
很多时候,模型成本高,并不是因为任务本身难,而是因为:
我没有提前把问题想清楚。
如果一个任务同时要求 AI:
- 理解陌生项目;
- 猜需求;
- 做架构;
- 判断产品规则;
- 修改代码;
- 自己验证;
那确实非常依赖顶级模型。
但如果我提前解决最困难的部分:
- 问题定义;
- 核心架构;
- 数据模型;
- 约束;
- 验收条件;
那么剩下大量工作实际上只是:
Execution。
而执行类任务并没有想象中那么需要顶级智能。
这就是我现在使用 AI Coding 最重要的成本优化原则:
昂贵推理用于决策,廉价 Token 用于执行。
AI Coding 的成本不只是 Token
讨论 AI 成本时,很容易只看:
一个模型多少钱。
但真实成本至少有四种:
模型成本
+
人工等待成本
+
返工成本
+
人工决策成本
例如一个便宜模型执行任务花了十分钟,但最终方向错了,需要我重新阅读代码、重新设计,再运行一次。
它实际上可能比昂贵模型更贵。
反过来也一样。
如果一个任务本来只是:
按照明确方案修改 20 个接口错误码。
却交给最昂贵的推理模型。
其实也是资源浪费。
所以真正的问题不是:
哪个模型最便宜?
而是:
什么复杂度的任务,应该分配什么等级的推理能力?
我现在把任务分成两类
第一类是:
Decision-heavy。
例如:
- 架构设计;
- 数据模型设计;
- 跨服务改造;
- 复杂线上 Bug;
- 数据一致性问题;
- 历史兼容;
- 大型重构;
- 模糊需求澄清。
这些任务真正昂贵的是:
判断。
需要理解很多上下文,并且错误决策的下游成本很高。
这种任务值得:
- 自己深度参与;
- 使用更强模型;
- 多模型 Review;
- 多轮推演。
第二类是:
Execution-heavy。
例如:
- 按方案实现接口;
- 批量修改;
- 补测试;
- 重命名;
- 清理 Deprecated Code;
- 根据规范生成 CRUD;
- 编写迁移脚本初稿;
- 扫描依赖;
- 整理文档。
这些任务主要需要:
准确执行约束。
这时候中等能力模型往往已经足够。
真正决定成功率的反而是输入质量。
一个重要变化:先压缩问题空间
以前我会直接把任务交给 AI:
帮我把会员系统重构一下。
这个任务的问题空间非常大。
AI 需要自己决定:
- 哪些表要改;
- 哪些接口要改;
- 什么叫“重构完成”;
- 老数据怎么办;
- 旧接口怎么办;
- 哪些边界情况重要。
模型自然需要大量推理。
现在我更倾向于自己先把问题压缩成:
目标:
会员状态只允许从 subscriptions 表读取。
约束:
users 表历史字段继续保留,但停止作为业务数据源。
需要修改:
profile
refresh
redeem
webhook
不可修改:
老版本兼容接口。
验收:
集成测试覆盖免费用户、有效会员、过期会员、续费四种状态。
这时 AI 面对的问题已经完全不同。
它不需要:
发明方案。
只需要:
实现方案。
问题空间被压缩以后:
- Token 更少;
- 错误率更低;
- 返工更少;
- 对顶级模型依赖更低。
这实际上比单纯找一个更便宜的 API 更重要。
Context 本身也是成本
很多人使用 AI Coding 时,还有一种隐藏浪费:
不断让模型重新理解项目。
例如每次任务都让 AI:
- 扫整个仓库;
- 阅读大量 README;
- 重新判断目录结构;
- 猜编码规范。
这会消耗大量 Token,也增加误解概率。
我更倾向于把长期稳定的上下文显式沉淀下来,例如:
AGENTS.md
ARCHITECTURE.md
TESTING.md
ERROR_CODE.md
DATABASE.md
或者通过 Skills 把操作流程固定下来。
这样 AI 不需要每次重新推理:
这个项目应该怎么工作?
而是直接读取既有约束。
本质上,这是在把:
Runtime Reasoning
转化成:
Precomputed Knowledge。
对于高频任务,这个收益会不断复利。
最贵的是人类中断
后来我发现,AI Coding 最大的成本甚至不是 Token。
是:
它不断打断我。
例如 Agent 执行一个任务:
运行
↓
报错
↓
问我
↓
继续运行
↓
发现另外一个问题
↓
再次问我
一个任务可能只消耗几块钱模型费用。
但让我发生五次上下文切换。
对于开发者来说,这可能才是最昂贵的部分。
所以我现在越来越关心:
如何减少 Agent 需要向我提问的次数。
例如提前告诉它:
- 可以修改哪些文件;
- 哪些错误允许自行修复;
- 测试失败如何处理;
- 什么情况下必须停止;
- 什么情况可以自己做决定。
理想状态是:
Task
↓
Agent Execution
↓
Tests
↓
Auto Fix
↓
Result
只有遇到真正的:
Architecture Decision
才返回给我。
这比省一点 Token 更有意义。
模型应该像计算资源一样被调度
现在我越来越倾向于把模型看成一种计算资源。
类似:
CPU
Memory
GPU
不同任务需要不同资源规格。
例如:
简单搜索
→ 低成本模型
机械修改
→ 中等模型
复杂 Debug
→ 强模型
架构决策
→ 人 + 强模型 + Review
没有必要所有任务都申请最大的机器。
同样,也没有必要为了省钱,所有任务都跑最低规格。
核心是:
模型能力和任务复杂度匹配。
人真正应该承担什么
如果目标是长期降低 AI 成本,人最重要的工作并不是:
自己多写代码。
而是提前把以下信息变清楚:
Problem Model
系统到底在解决什么问题?
Architecture
职责和数据边界在哪里?
Constraints
哪些东西绝对不能违反?
Acceptance Criteria
什么状态叫完成?
只要这四件事情清楚,大量 Coding Work 就会退化成 Execution Work。
而 Execution Work 是最容易:
- 自动化;
- 并行化;
- 使用低成本模型;
- 交给 Agent。
这也是我认为程序员使用 AI 后仍然值得持续提高架构能力的原因。
不是因为:
未来还需要亲自写复杂代码。
而是因为:
你对系统理解得越深,越能把复杂问题降维成廉价任务。
我的基本策略
目前我大概采用这样的资源分配方式:
高价值人工注意力
→ 需求、架构、风险、决策
高成本模型
→ 高不确定性推理
普通模型
→ 大部分实现工作
自动化系统
→ 测试、验证、重复检查
这样最终优化的不是:
每百万 Token 的价格。
而是:
每一个正确交付结果,需要消耗多少人工认知。
我认为这是更值得优化的指标。
最后的判断
AI Coding 的长期成本优化,不应该只是不断寻找更便宜的模型。
真正有效的方式是:
降低任务本身需要的智能水平。
通过更好的:
- 架构;
- 文档;
- Constraints;
- Skills;
- Tests;
- Workflow;
把一个原本需要顶级模型才能完成的模糊任务,压缩成普通模型可以稳定执行的确定性任务。
所以我现在越来越认可一句话:
把昂贵智能留给不确定性,把廉价 Token 留给确定性执行。
这可能比“永远使用最强模型”更接近 AI Coding 的长期工程化形态。