AI 编程 · 工作流最佳实践

烧额度的从来不是模型, 是没有边界的任务 和没有结构的对话。

客户反馈"AI 编程消耗特别快",绝大多数情况下不是工具贵,是用法没对 —— 让模型一口气做太大的事、上下文塞满了才想起压缩、压缩完没校验就继续改代码、改错了又没 checkpoint 可回滚。 这些动作每一个都在 浪费几万到几十万 token。

这份文档把"如何把额度花在刀刃上"沉淀成一套可复制的工作流: 拆任务、控上下文、留 checkpoint、按模板交接。

拆分 节制 校准 可回滚 可审计 可复用
向下阅读
01

核心认知:额度到底花在了哪里?

AI 编程的成本不等于模型单价乘以调用次数。真实的成本曲线是 —— 每一次"模型走神 / 重复踩坑 / 推翻重来 / 改错回滚",背后都是几万到几十万 token 的浪费。 这些浪费绝大部分不是模型的问题,是使用方式制造出来的。

🎯
一句话让 AI 做整个功能 模型边猜需求边写代码,方向错了就推倒重来
🌀
上下文塞满才想起压缩 模型已经开始遗忘和反复,再压只是延寿
❓
需求没想清楚就让 AI 动手 AI 不能替你想清楚需求,只会按它的猜测写
🔁
推翻重做、反复试错 同一个方案换三种写法,每一轮都从零开始
🩹
改 A 误伤 B,B 修了又坏 C 没有边界声明,模型修一处改一片
📜
裸用 /compact,不给结构 压缩出来的摘要丢了关键约束,后续接不上
🧱
一次性生成超大文件 输出截断后让 AI 续写,常常重复或漏段
🌫️
模型忘了用户限制和约束 "不要动 X""保留 Y" 在长对话里第一个被忘
🚫
没 git checkpoint 就动手 AI 错了没法回滚,只能继续让它"修回来"
真正烧额度的不是模型本身,
是没有边界的任务、没有结构的提示词、没有校验的压缩。
把它们变成有边界、有结构、有校验的工程动作 —— 额度自然就省下来了。
02

三大原则:拆分 · 节制 · 校准

所有"省额度"的具体技巧,背后都是三条原则。先把原则吃透,技巧才用得对。

原则一 · 拆分

大功能 = 小工程

不是一句话能交付的事。

登录注册、订单导出、报表页 —— 在产品口里是"一个功能",但在工程上是多个模块、多个接口、多份状态协同的结果。让 AI 一口气端到端做完,等于让它边猜架构边写代码,错了就推翻重来。

  • 先让 AI 列模块、接口、状态、风险点,不要让它直接动手
  • 分步走:前端接口先调通,再做 UI;后端模型先建好,再做接口
  • 前后端隔离:用 mock 数据让前端独立跑起来
  • 关键判断自己想透,不要把架构交给 AI
原则二 · 节制

控制上下文窗口

对话越久,模型越容易遗忘和反复。

模型的上下文窗口是有限资源,不是无限缓存。对话越长,模型可用注意力越紧张 —— 表现就是开始遗忘约束、推翻已确认的方案、重复试错、改 A 误伤 B。这一阶段每多说一句,都在烧额度。

  • 视模型窗口主动压缩,不要等爆才动手
  • 阶段性收尾:一个模块做完就压缩 + commit
  • 不要硬撑上下文,撑出来的代价是更高的后续踩坑额度
  • 具体阈值见 Section 05 工具对照表
原则三 · 校准

关键判断自己做

AI 是执行和起草,不是决策者。

AI 给出的方案、写出的代码、压缩后的摘要,都需要你校准。模型可能漏掉用户限制、写出"看起来对但实际不通"的逻辑、在摘要里悄悄删掉关键约束。每次让 AI 继续干活之前,都要先确认它对当前状态的理解是对的。

  • 让 AI 做事前:复述需求和约束,确认理解一致
  • 压缩后:让 AI 复述任务状态,校验无误再继续
  • 修完 Bug 后:回归验证本次功能 + 可能被影响的旧功能
  • 不要假设 AI 记得你说过的话 —— 它常常不记得
拆分让 AI 做对的事, 节制让 AI 在清醒状态下做事, 校准让 AI 做的事真的能用 —— 这是省额度的根,所有技巧都长在这根上。
03

任务分层:大功能怎么拆才不烧额度

"拆分"不是抽象口号,是有具体执行步骤的。下面以"给项目加一个登录注册功能"为例,演示一个真实可复用的拆分流程。

❌ 错误做法

一句话:"帮我加一个登录注册功能。"

模型会同时开始想:用户表怎么建?密码怎么加密?token 怎么签发?前端用什么表单库?路由怎么跳?中间件怎么写?—— 然后开始写代码。半小时后你看到一堆改动,但其中关键判断(加密算法、token 过期策略、表单校验规则)都是 AI 默认选的,不一定是你想要的。改一处就要回头串一遍。几十万 token 烧在"我想的不是这个"上。

✅ 正确做法 · 分 4 阶段

阶段 0 · 需求梳理(不写代码)

让 AI 列出:
- 涉及的数据库表和字段
- 涉及的接口和请求/响应结构
- 涉及的前端页面和组件
- 关键技术选型的可选项(让你选,不要它替你选)
- 已知的风险点和边界情况

输出:一份需求文档。你审阅、修正、确认。

阶段 1 · 后端接口先行

基于需求文档,让 AI 写:
- 数据库迁移
- 注册 / 登录 / token 校验接口
- 中间件
- 单元测试(自验证用)

阶段结束:commit,记为 checkpoint: backend api done

阶段 2 · 前端 mock 联调

后端接口先用 mock 数据,让前端独立开发:
- 登录页 / 注册页
- 表单校验
- 状态管理
- 路由守卫

阶段结束:commit,记为 checkpoint: frontend with mock

阶段 3 · 真接口接入 + 回归

- 切换前端到真接口
- 跑通完整流程
- 回归验证原有功能(用户中心、订单页等可能被中间件影响的地方)

阶段结束:commit,PR。

为什么这样能省额度
收益原因
错了便宜回滚每阶段独立 commit,错了 reset 单阶段,不是从头重来
AI 上下文小、注意力集中每阶段只处理一类问题(数据库 / 接口 / UI),不混
关键判断在你手里阶段 0 把架构判断从 AI 手里拿回来了
前后端可并行mock 让两边不互等,省的是时间,时间也是 token
通用拆分公式:
大功能 → 需求梳理 → 后端 → 前端 mock → 真接口接入 → 回归
每个阶段独立 commit,每个阶段结束让 AI 输出"阶段交付摘要"。
04

上下文压缩的本质

很多人把 /compact 理解成"清屏续命" —— 上下文要满了,按一下就能再聊半天。这是个根本误解。 压缩不是延长聊天,而是给后续 AI 留一份可靠的工作交接文档。

⛔错误理解

压缩 = 聊天记录保留 —— 把对话记录折叠成更短的版本,模型记得"我们之前聊过什么",然后继续做。

实际后果:摘要里丢了关键约束("不要动 X""保留 Y"),模型继续写代码,把之前明确禁止的事重新做了一遍。 这是裸用 /compact 最常见的踩坑场景。

✅正确理解

压缩 = 任务交接文档 —— 把当前任务状态结构化地写下来:目标、约束、已读文件、已改文件、已排除方案、未解决问题、下一步。

实际效果:后续 AI 哪怕完全不知道之前聊过什么,只看摘要也能正确接续。

⚠️ 关键提示

压缩不是无损操作。 它本质上是让模型生成一份摘要,然后用摘要替代原始对话。 摘要质量越高,后续工作越可靠;摘要质量越差,后续越容易遗忘约束、重复踩坑、误改代码。

所以压缩的关键不在"按命令",在"按命令时给的提示词结构"。

05

主流工具上下文管理对照

下表所有数字均来自工具的官方文档或开源代码,每条事实在表尾附完整出处。 不要把一个工具的命令直接套到另一个工具上 —— 这是客户最常踩的坑。

维度 Claude Code Codex CLI
默认上下文窗口 Sonnet / Opus / Haiku 200K;Fable 5 始终 1M [1] 默认 272,000 tokens(源码常量);GPT-5.5 在 Codex 端可达 400K [5]
扩展 1M 上下文 官方订阅渠道:Opus 1M 在 Max/Team/Enterprise 自动启用; Sonnet 1M 在任何订阅计划下都需 usage credits 单独付费,否则调用会失败。
AWS 官方 Kiro 渠道:Sonnet 1M 无此限制,无须单独付费 [1]
取决于所选模型与配置:
GPT-5.4:底层模型支持 1M tokens;Codex 默认走 272K,用户可在 ~/.codex/config.toml 显式配置 model_context_window = 1_000_000 + model_auto_compact_token_limit = 512_000 开启 1M [8]。
GPT-5.5:底层同样支持 1M,但 Codex 端 cap 在 400K(官方限制,非模型本身的能力上限) [9]
显式压缩命令 /compact [instructions] ✅ 支持带提示词 [2] /compact ❌ 不支持参数 [6]
自动压缩 ✅ 接近上下文限制时触发,官方未公开百分比 [2] ✅ 默认 95%(源码常量 effective_context_window_percent: 95,272K 时 ≈258K)[7]
关闭自动压缩 autoCompactEnabled: false 或环境变量 DISABLE_AUTO_COMPACT=1 [3] 调整 model_auto_compact_token_limit 间接控制 [8]
阈值配置项 官方未开放百分比配置 [3] model_auto_compact_token_limit(绝对 token 数)+ model_context_window [8]
持久压缩指令 CLAUDE.md 的 # Compact Instructions 区段(每次压缩自动重新加载)[2] 官方未提供等价机制
原始对话可否找回 ✅ Transcript:~/.claude/projects/<project>/<session>.jsonl [4] 官方未明示

⚠️ Sonnet 1M 常见误解

很多 Max / Team 订阅用户以为升级到了高阶订阅,Sonnet 也就自动有了 1M 上下文 —— 实际不是。

官方订阅的真实情况:

  • Opus 1M 在 Max / Team / Enterprise 自动启用
  • Sonnet 1M 在任何订阅计划(包括 Max)下都需先开通 usage credits,否则一切到 sonnet[1m] 就报错

AWS 官方 Kiro 渠道则没有这个限制,Sonnet 1M 可直接使用,无需 usage credits。 实际选型时请确认你所用的接入渠道。

Claude Code

坑:裸用 /compact 不带任何提示词时,模型按默认策略生成摘要,摘要质量参差不齐,常常丢失"不要动 X""保留 Y"这类硬约束。

  • 永远 /compact <结构化要求>(模板见 Section 08)
  • 跨会话硬约束写进 CLAUDE.md 的 # Compact Instructions 区段
  • 团队规定:裸用 /compact 视为违规操作

Codex CLI

坑:/compact 不支持参数。摘要内容完全由 Codex 自行决定,用户无法在命令里直接给压缩指令。

  • 压缩前用一条普通消息告诉 Codex:"下面我会执行 /compact,请保留:① ② ③"
  • 让模型先把要求消化进上下文,然后再执行 /compact
  • 默认 95% 触发,可在 ~/.codex/config.toml 设 model_auto_compact_token_limit 调整

📚 官方出处一览

  1. Claude Code 官方 - 模型配置 / 扩展上下文:https://code.claude.com/docs/en/model-config
  2. Claude Code 官方 - 成本管理 / Compact Instructions:https://code.claude.com/docs/en/costs
  3. Claude Code 官方 - Settings 参考(autoCompactEnabled / DISABLE_AUTO_COMPACT):https://code.claude.com/docs/en/settings
  4. Claude Code 官方 - 目录结构 / Transcript 位置:https://code.claude.com/docs/en/claude-directory
  5. OpenAI Codex 仓库源码 - 默认上下文常量(model_info.rs):github.com/openai/codex/.../model_info.rs
  6. OpenAI Codex CLI 官方 - Slash Commands:https://developers.openai.com/codex/cli/slash-commands
  7. OpenAI Codex 仓库源码 - effective_context_window_percent 常量:同 [5]
  8. OpenAI Codex CLI 官方 - 配置参考(model_auto_compact_token_limit / model_context_window):https://developers.openai.com/codex/config-reference
  9. OpenAI Codex 仓库 Issue - GPT-5.5 在 Codex 端被 cap 在 400K:github.com/openai/codex/issues/20761
同一份方法论,不同的工具按钮。
团队选定工具后,把"压缩动作"沉淀成内部 SOP,写进 onboarding 文档 ——
不要让每个新人自己摸索每个工具的默认行为,否则同样的坑会被踩 N 遍。
06

何时该压缩 / 何时不该压缩

压缩本身有成本(要消耗 token 生成摘要、要承担丢失关键信息的风险),所以 不是越早越好,也不是拖到爆才压。掌握时机,比掌握命令更重要。

✅应该主动压缩的时刻

  • 一个阶段完成时后端写完、UI 做完、Bug 定位收尾 —— 自然工程边界是最佳压缩点
  • 即将进入下一阶段时从"读代码"切到"动手"、从"调试"切到"修复"、从"实现"切到"测试"
  • 读完一批文件之后一次性读了十几个文件做需求分析,文件原文不需保留,结论才需要
  • 模型开始反复 / 跑题 / 遗忘约束这是上下文已经"软爆"的信号,立刻压缩 + 强调被遗忘的约束
  • 上下文占用达到工具阈值前Claude Code 看 /usage;Codex 在 95% 自动触发前主动压
  • 准备让另一个会话 / 团队成员接手时压缩出来的摘要就是任务交接文档

⛔不应该压缩的时刻

  • 刚开始任务、还没读几个文件上下文还没成型,压出来等于摘要一段没结论的对话
  • 需求还没分析清楚AI 的理解里只有"用户大概想做 X",压缩会把模糊状态固化进摘要
  • 正在比较多个技术方案方案 A/B/C 还没下结论,这时压缩等于让 AI 替你做选择
  • 用户刚补充了关键约束这些约束还没消化进代码,立刻压缩可能漏
  • 当前任务状态混乱AI 已跑题、改错文件 —— 先 git restore 回干净状态再压
  • 刚粘贴报错、还没排查报错栈是线索,一压线索就没了,等于清理侦探现场
不要等上下文快爆才压缩 —— 要在阶段性节点上主动压缩。
前者是"灭火",后者是"工程动作"。
07

压缩三步法

什么时候压、压完之后怎么校验,这两件事比"按哪个命令"重要。下面把整个压缩流程拆成 3 步,每一步都是必做项。

整理

压缩前,先让 AI 把状态摊在桌面上

用一条普通消息让 AI 复述当前状态 —— 不动代码、不压缩,只是让 AI 自查。AI 列错了你能当场纠正,这是压缩质量的最后一道防线。

执行

永远带结构化要求压缩,禁止裸命令

基于第一步摊开的状态,执行压缩命令并强制要求按结构生成摘要。3 个工具的具体执行方式见下方对照。

校验

压缩完,先校对再继续

压缩完成后不要立刻让 AI 改代码。先让 AI 基于摘要复述当前状态 —— 准确就继续,有偏差立刻纠正。这一步能挡掉摘要里漏掉的硬约束。

📝 Step 01 提示词模板

压缩前先列一下当前任务状态:
1. 当前任务目标
2. 用户明确的约束 / 禁止项
3. 已读的关键文件(带路径)
4. 已改的关键文件(带路径 + 改动点)
5. 已排除的方案(避免重复踩)
6. 当前未解决的问题
7. 下一步计划
8. 必须回归验证的功能

先列,不要动代码,不要压缩。

🛠️ Step 02 两大工具执行方式

工具怎么执行 Step 02
Claude Code 直接 /compact <Section 08 的结构化模板>
Codex CLI /compact 不带参 —— 先用一条消息说"按这个结构生成摘要",再执行 /compact

🔍 Step 03 校验模板

基于刚才的压缩摘要,请复述以下内容:
1. 当前任务目标
2. 已完成的工作
3. 已修改的文件
4. 禁止修改的内容
5. 当前未解决的问题
6. 下一步计划
7. 必须回归验证的功能

先复述,不要修改代码。

判断:复述准确 → 继续干活;复述有偏差 → 立刻纠正再继续。 摘要里漏掉的硬约束只有这一步能发现,一旦放过、直接继续,可能要花几十万 token 修被 AI 误改的代码。

整理 · 执行 · 校验 —— 缺任何一步,压缩就从"工程动作"退化为"赌运气"。
省 token 的方式不是少压,而是每次都压对。
08

三大压缩模板

真实工作中场景不同,需要不同的模板。把模板沉淀成 3 个标准版本 —— 任务交接版 / Bug 修复版 / 代码生成版。日常 95% 的压缩场景都能套上。

适用场景:功能开发、需求实现、模块改造 —— 任何一个清晰阶段做完、要继续下一阶段时。

/compact 请生成一份高质量的任务交接摘要,后续模型要能无缝继续当前工作。

请严格按以下结构输出:

【当前任务目标】
说明当前要解决什么问题、最终交付物是什么。

【用户明确需求】
列出用户已明确提出的需求,不要遗漏。

【用户明确约束与禁止项】
列出所有不能修改、不能破坏、不能重构、不能影响的内容。

【当前项目背景】
说明当前项目技术栈、相关模块、当前任务所在业务范围。

【已读关键文件】
列出已经查看过的文件路径,并说明每个文件的作用。

【已改关键文件】
列出已经修改过的文件路径,并说明每个文件改了什么。

【当前采用的技术方案】
说明当前决定采用什么实现方式、以及为什么采用这个方案。

【已经排除的错误方向】
说明哪些方案、原因、猜测已经验证过不可行,避免后续重复踩坑。

【当前未解决的问题】
说明目前还剩哪些问题、Bug、报错、风险点。

【下一步执行计划】
按优先级列出后续应该继续做什么。

【必须回归验证的功能】
列出修改完成后必须验证的功能,避免修 A 坏 B。

要求:
1. 文件路径必须完整
2. 用户约束必须完整
3. 不要保留无关闲聊
4. 不要遗漏已确认的结论
5. 不要把不确定内容写成事实
6. 不要重复已经排除的方案
7. 后续继续任务时,必须严格遵守这份摘要

适用场景:修 Bug、线上问题、回归问题、循环依赖问题 —— 任何"定位 → 修复 → 验证"链路里的压缩。

/compact 请生成一份 Bug 修复任务的上下文交接摘要,后续模型要能继续定位和修复问题。

请严格按以下结构输出:

【问题现象】
描述用户看到的 Bug 是什么。

【复现路径】
说明如何复现这个问题。

【影响范围】
说明这个 Bug 影响哪些功能,不影响哪些功能。

【相关文件】
列出已经读取或分析过的关键文件路径,并说明每个文件的作用。

【已排查内容】
说明已经检查过哪些逻辑、接口、组件、状态、数据流。

【已排除原因】
说明哪些方向已经确认不是根因,后续不要重复尝试。

【当前判断】
说明目前最可能的根因是什么,如果不确定,要明确标注"不确定"。

【已修改内容】
列出已经修改过的文件和具体修改点。

【禁止修改内容】
列出用户明确要求不能改的文件、模块、逻辑、接口字段及历史兼容逻辑。

【必须保持不变的功能】
列出所有不能被影响的功能。

【下一步计划】
说明后续应该做什么、验证什么、排查什么。

要求:
1. 优先最小改动
2. 不要扩大修改范围
3. 不要重复尝试已排除方案
4. 修复后必须做回归验证
5. 特别注意不要出现"修 A 坏 B、修 B 坏 C"的问题

适用场景:让 AI 生成新功能、模块改造、需求实现、生成 HTML / CSS / JS / 文档 / 配置等大段内容。

/compact 请生成一份代码开发任务的上下文交接摘要,后续模型要能基于这份摘要继续开发。

请严格按以下结构输出:

【项目背景】
说明当前项目、技术栈、业务模块和开发目标。

【当前需求】
列出本次需要实现的功能点。

【需求边界】
说明哪些属于本次范围,哪些不属于本次范围。

【关键约束】
列出所有不能改、不能破坏、不能重构的地方。

【已读文件】
列出已经查看过的文件路径,并说明每个文件的作用。

【已改文件】
列出已经修改过的文件路径,并说明具体改动。

【核心实现方案】
说明当前采用的实现方式,包括组件设计、状态管理、接口调用、数据处理等。

【兼容性要求】
说明哪些旧功能、旧接口、旧数据结构必须保持兼容。

【风险点】
说明当前改动可能影响哪些地方。

【未完成内容】
列出还没有完成的部分。

【下一步计划】
给出后续开发清单,按优先级排序。

【回归验证清单】
列出开发完成后必须验证的页面、功能和边界场景。

要求:
1. 不要遗漏文件路径
2. 不要遗漏用户限制
3. 不要擅自扩大需求范围
4. 不要反复重构
5. 后续开发必须围绕当前方案继续
3 个模板不是 3 种"格式",是 3 种工程动作:
任务交接版 → 保证下一个会话能"无缝接班";
Bug 修复版 → 保证已排除方向不再重复踩;
代码生成版 → 保证已生成内容不被反复重写。
09

配套实践:Git 才是 AI 编程的安全网

压缩管的是上下文,Git 管的是代码。两者必须同时到位 —— 否则 AI 错了就只能"让 AI 自己改回去",而这正是烧额度的重灾区。

第 1 层 🛡️

Checkpoint 提交

每完成一个阶段(即将压缩之前),强制 commit。

核心信念

不要指望 AI 永远不踩雷 —— 要保证 AI 踩雷后能快速回滚。Checkpoint 是回滚的锚点,没有锚点就只能靠"让 AI 自己改回去",那才是真正烧额度的开始。

推荐命令
git status
git diff
git add .
git commit -m "checkpoint: before fixing order pagination"
git commit -m "checkpoint: before refactoring user profile"
第 2 层 🌿

分支隔离

长任务一律开独立 feature 分支,不要直接在 main / dev 上让 AI 跑。

为什么

分支隔离让 AI 改坏了不影响主干;squash merge 保持主分支历史干净;想推翻整个任务也只是 git branch -D 一条命令,不是 git reset --hard 满怀心跳。

推荐工作流
git switch -c feature/ai-auth-module

# 阶段性 checkpoint commit
git commit -m "checkpoint: backend api done"
git commit -m "checkpoint: frontend mock done"

# 验证完毕后 squash merge
git switch main
git merge --squash feature/ai-auth-module
git commit -m "feat(auth): add login/register module"
第 3 层 🗂️

多任务并行 worktree

同时处理多个任务时,用 git worktree 给每个任务开独立目录,避免分支切换破坏 AI 的上下文。

为什么

不需要在分支之间来回切(切分支 = AI 上下文失效);同一仓库、多任务、多 AI 会话并行不打架;不污染主工作区的暂存区和未提交改动。
官方文档 →

推荐命令
cd ~/projects/my-app

# 给 AI 开个并行 worktree
git worktree add ../my-app-ai feature/ai-refactor

# 主目录正常工作 / ../my-app-ai 让 AI 全权负责
# AI 任务完成后清理
git worktree remove ../my-app-ai
AI 编程的安全感不来自"AI 不犯错",
来自"AI 犯错后能秒级回滚"。
省 token 的第一步,是让"撤销"变成 1 秒的操作,不是 10 万 token 的对话。
10

团队统一要求

方法论再好,没人执行也是白搭。把以下 10 条写进团队 onboarding 文档 / Code Review 检查清单,让"省额度"从个人习惯变成团队 SOP。

  • 禁止一句话让 AI 做整个功能 —— 必须先做需求拆分
  • 大功能必须先用阶段 0 输出 需求文档,由人审阅修正后再动手
  • 每阶段独立 commit,前缀用 checkpoint:,AI 错了能 1 秒回滚
  • 长任务一律开独立分支,不要在 main / dev 直接让 AI 跑
  • 禁止裸用 /compact,必须带 Section 08 的结构化模板
  • 压缩前必须先让 AI 复述当前状态,错了立刻纠正
  • 压缩后必须先让 AI 复述摘要内容,对了再继续
  • 修 Bug 时必须记录已排除方向,避免重复踩坑
  • 任何代码改动完成后必须做回归验证(本次功能 + 可能被影响的旧功能)
  • 关键约束写进项目级配置文件(CLAUDE.md / AGENTS.md),不要只写在 chat 里
11 · 最终定义

AI 编程不是「让 AI 写代码」,
是「用软件工程流程驾驭 AI」。

拆分让 AI 做对的事,节制让 AI 在清醒状态下做事,校准让 AI 做的事真的能用。
省下来的不是 token,是你团队的精力、信任和迭代速度。

✓ 拆分任务 —— 大功能分阶段,关键判断自己做 ✓ 节制上下文 —— 阶段性主动压缩,不等爆才动手 ✓ 校准摘要 —— 压缩前列状态,压缩后查偏差 ✓ Git 安全网 —— Checkpoint + 分支隔离 + Worktree ✓ 团队 SOP —— 不要让每个新人自己摸索默认行为