AI 编程 · 工作流最佳实践
烧额度的从来不是模型, 是没有边界的任务 和没有结构的对话。
客户反馈"AI 编程消耗特别快",绝大多数情况下不是工具贵,是用法没对 —— 让模型一口气做太大的事、上下文塞满了才想起压缩、压缩完没校验就继续改代码、改错了又没 checkpoint 可回滚。 这些动作每一个都在 浪费几万到几十万 token。
这份文档把"如何把额度花在刀刃上"沉淀成一套可复制的工作流: 拆任务、控上下文、留 checkpoint、按模板交接。
核心认知:额度到底花在了哪里?
AI 编程的成本不等于模型单价乘以调用次数。真实的成本曲线是 —— 每一次"模型走神 / 重复踩坑 / 推翻重来 / 改错回滚",背后都是几万到几十万 token 的浪费。 这些浪费绝大部分不是模型的问题,是使用方式制造出来的。
/compact,不给结构
压缩出来的摘要丢了关键约束,后续接不上
真正烧额度的不是模型本身,
是没有边界的任务、没有结构的提示词、没有校验的压缩。
把它们变成有边界、有结构、有校验的工程动作 —— 额度自然就省下来了。
三大原则:拆分 · 节制 · 校准
所有"省额度"的具体技巧,背后都是三条原则。先把原则吃透,技巧才用得对。
大功能 = 小工程
不是一句话能交付的事。
登录注册、订单导出、报表页 —— 在产品口里是"一个功能",但在工程上是多个模块、多个接口、多份状态协同的结果。让 AI 一口气端到端做完,等于让它边猜架构边写代码,错了就推翻重来。
- 先让 AI 列模块、接口、状态、风险点,不要让它直接动手
- 分步走:前端接口先调通,再做 UI;后端模型先建好,再做接口
- 前后端隔离:用 mock 数据让前端独立跑起来
- 关键判断自己想透,不要把架构交给 AI
控制上下文窗口
对话越久,模型越容易遗忘和反复。
模型的上下文窗口是有限资源,不是无限缓存。对话越长,模型可用注意力越紧张 —— 表现就是开始遗忘约束、推翻已确认的方案、重复试错、改 A 误伤 B。这一阶段每多说一句,都在烧额度。
- 视模型窗口主动压缩,不要等爆才动手
- 阶段性收尾:一个模块做完就压缩 + commit
- 不要硬撑上下文,撑出来的代价是更高的后续踩坑额度
- 具体阈值见 Section 05 工具对照表
关键判断自己做
AI 是执行和起草,不是决策者。
AI 给出的方案、写出的代码、压缩后的摘要,都需要你校准。模型可能漏掉用户限制、写出"看起来对但实际不通"的逻辑、在摘要里悄悄删掉关键约束。每次让 AI 继续干活之前,都要先确认它对当前状态的理解是对的。
- 让 AI 做事前:复述需求和约束,确认理解一致
- 压缩后:让 AI 复述任务状态,校验无误再继续
- 修完 Bug 后:回归验证本次功能 + 可能被影响的旧功能
- 不要假设 AI 记得你说过的话 —— 它常常不记得
拆分让 AI 做对的事, 节制让 AI 在清醒状态下做事, 校准让 AI 做的事真的能用 —— 这是省额度的根,所有技巧都长在这根上。
任务分层:大功能怎么拆才不烧额度
"拆分"不是抽象口号,是有具体执行步骤的。下面以"给项目加一个登录注册功能"为例,演示一个真实可复用的拆分流程。
❌ 错误做法
一句话:"帮我加一个登录注册功能。"
模型会同时开始想:用户表怎么建?密码怎么加密?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 输出"阶段交付摘要"。
上下文压缩的本质
很多人把 /compact 理解成"清屏续命" —— 上下文要满了,按一下就能再聊半天。这是个根本误解。
压缩不是延长聊天,而是给后续 AI 留一份可靠的工作交接文档。
⛔错误理解
压缩 = 聊天记录保留 —— 把对话记录折叠成更短的版本,模型记得"我们之前聊过什么",然后继续做。
实际后果:摘要里丢了关键约束("不要动 X""保留 Y"),模型继续写代码,把之前明确禁止的事重新做了一遍。
这是裸用 /compact 最常见的踩坑场景。
✅正确理解
压缩 = 任务交接文档 —— 把当前任务状态结构化地写下来:目标、约束、已读文件、已改文件、已排除方案、未解决问题、下一步。
实际效果:后续 AI 哪怕完全不知道之前聊过什么,只看摘要也能正确接续。
⚠️ 关键提示
压缩不是无损操作。 它本质上是让模型生成一份摘要,然后用摘要替代原始对话。
摘要质量越高,后续工作越可靠;摘要质量越差,后续越容易遗忘约束、重复踩坑、误改代码。
所以压缩的关键不在"按命令",在"按命令时给的提示词结构"。
主流工具上下文管理对照
下表所有数字均来自工具的官方文档或开源代码,每条事实在表尾附完整出处。 不要把一个工具的命令直接套到另一个工具上 —— 这是客户最常踩的坑。
| 维度 | 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调整
📚 官方出处一览
- Claude Code 官方 - 模型配置 / 扩展上下文:https://code.claude.com/docs/en/model-config
- Claude Code 官方 - 成本管理 / Compact Instructions:https://code.claude.com/docs/en/costs
- Claude Code 官方 - Settings 参考(
autoCompactEnabled/DISABLE_AUTO_COMPACT):https://code.claude.com/docs/en/settings - Claude Code 官方 - 目录结构 / Transcript 位置:https://code.claude.com/docs/en/claude-directory
- OpenAI Codex 仓库源码 - 默认上下文常量(
model_info.rs):github.com/openai/codex/.../model_info.rs - OpenAI Codex CLI 官方 - Slash Commands:https://developers.openai.com/codex/cli/slash-commands
- OpenAI Codex 仓库源码 -
effective_context_window_percent常量:同 [5] - OpenAI Codex CLI 官方 - 配置参考(
model_auto_compact_token_limit/model_context_window):https://developers.openai.com/codex/config-reference - OpenAI Codex 仓库 Issue - GPT-5.5 在 Codex 端被 cap 在 400K:github.com/openai/codex/issues/20761
同一份方法论,不同的工具按钮。
团队选定工具后,把"压缩动作"沉淀成内部 SOP,写进 onboarding 文档 ——
不要让每个新人自己摸索每个工具的默认行为,否则同样的坑会被踩 N 遍。
何时该压缩 / 何时不该压缩
压缩本身有成本(要消耗 token 生成摘要、要承担丢失关键信息的风险),所以 不是越早越好,也不是拖到爆才压。掌握时机,比掌握命令更重要。
✅应该主动压缩的时刻
- 一个阶段完成时后端写完、UI 做完、Bug 定位收尾 —— 自然工程边界是最佳压缩点
- 即将进入下一阶段时从"读代码"切到"动手"、从"调试"切到"修复"、从"实现"切到"测试"
- 读完一批文件之后一次性读了十几个文件做需求分析,文件原文不需保留,结论才需要
- 模型开始反复 / 跑题 / 遗忘约束这是上下文已经"软爆"的信号,立刻压缩 + 强调被遗忘的约束
- 上下文占用达到工具阈值前Claude Code 看
/usage;Codex 在 95% 自动触发前主动压 - 准备让另一个会话 / 团队成员接手时压缩出来的摘要就是任务交接文档
⛔不应该压缩的时刻
- 刚开始任务、还没读几个文件上下文还没成型,压出来等于摘要一段没结论的对话
- 需求还没分析清楚AI 的理解里只有"用户大概想做 X",压缩会把模糊状态固化进摘要
- 正在比较多个技术方案方案 A/B/C 还没下结论,这时压缩等于让 AI 替你做选择
- 用户刚补充了关键约束这些约束还没消化进代码,立刻压缩可能漏
- 当前任务状态混乱AI 已跑题、改错文件 —— 先
git restore回干净状态再压 - 刚粘贴报错、还没排查报错栈是线索,一压线索就没了,等于清理侦探现场
不要等上下文快爆才压缩 —— 要在阶段性节点上主动压缩。
前者是"灭火",后者是"工程动作"。
压缩三步法
什么时候压、压完之后怎么校验,这两件事比"按哪个命令"重要。下面把整个压缩流程拆成 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 的方式不是少压,而是每次都压对。
三大压缩模板
真实工作中场景不同,需要不同的模板。把模板沉淀成 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 修复版 → 保证已排除方向不再重复踩;
代码生成版 → 保证已生成内容不被反复重写。
配套实践:Git 才是 AI 编程的安全网
压缩管的是上下文,Git 管的是代码。两者必须同时到位 —— 否则 AI 错了就只能"让 AI 自己改回去",而这正是烧额度的重灾区。
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"
分支隔离
长任务一律开独立 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"
多任务并行 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 条写进团队 onboarding 文档 / Code Review 检查清单,让"省额度"从个人习惯变成团队 SOP。
- 禁止一句话让 AI 做整个功能 —— 必须先做需求拆分
- 大功能必须先用阶段 0 输出 需求文档,由人审阅修正后再动手
- 每阶段独立 commit,前缀用 checkpoint:,AI 错了能 1 秒回滚
- 长任务一律开独立分支,不要在 main / dev 直接让 AI 跑
- 禁止裸用 /compact,必须带 Section 08 的结构化模板
- 压缩前必须先让 AI 复述当前状态,错了立刻纠正
- 压缩后必须先让 AI 复述摘要内容,对了再继续
- 修 Bug 时必须记录已排除方向,避免重复踩坑
- 任何代码改动完成后必须做回归验证(本次功能 + 可能被影响的旧功能)
- 关键约束写进项目级配置文件(CLAUDE.md / AGENTS.md),不要只写在 chat 里
AI 编程不是「让 AI 写代码」,
是「用软件工程流程驾驭 AI」。
拆分让 AI 做对的事,节制让 AI 在清醒状态下做事,校准让 AI 做的事真的能用。
省下来的不是 token,是你团队的精力、信任和迭代速度。