1. 核心大招:强制“增量输出”(Diff-Only)
这是节省 输出 Token 最有效的手段。默认情况下,大模型喜欢把整份代码文件重新写一遍,即便它只改了一行。
- 笨办法:“帮我修改这个文件的 bug。”(模型直接吐出 500 行代码)
- 妙招:在 Prompt 中明确限制输出格式。
Prompt 模板: “请只输出修改过的代码片段。未修改的部分请用
// ... 保持不变 ...或# ... existing code ...代替。如果可以,请直接以 Git Diff 的格式提供修改方案。”
2. 输入“骨架”而非全量代码(Skeleton Prompting)
当你需要让模型理解你的项目结构或某个工具类时,不要直接把几千行的源文件贴过去。
- 妙招:只给模型提供类型定义(Types/Interfaces)、函数签名(Function Signatures) 或 骨架代码。
- 例如(TS/JS):
// 不要贴整个实现,只给这个:
interface UserService {
getUser(id: string): Promise<User>;
updateProfile(id: string, data: Partial<User>): Promise<boolean>;
}
模型只需要知道“有什么方法可用”以及“入参和出参是什么”,并不需要知道你内部复杂的 SQL 是怎么写的。
3. 巧用 XML 标签(对 Claude 尤为有效)
Claude 对 XML 标签(如 <code_>)有着极强的敏感度。用 XML 标签包裹代码和指令,不仅能提高准确率,还能减少解释性废话。
<system_instruction>
你是一个极简主义的编程助手。请直接输出代码,不要解释,不要说“好的,我为你准备了以下代码”。
</system_instruction>
<source_code>
// 贴入你的核心代码
</source_code>
<task>
重构上面的代码,提高运行效率。
</task>
省流原理:明确的结构让模型不需要在 Prompt 里猜测“哪里是代码,哪里是要求”,从而大大减少了模型的推理和多余的客套话(“Certainly! Here is…” 也是要算 Token 的)。
4. 及时“断舍离”,开启新会话(Reset Context)
很多人习惯在一个聊天窗口里从早聊到晚,甚至聊上好几天。
- 痛点:每一次你发送新消息,大模型都会把之前所有的聊天记录重新打包发送一遍(这叫 Cumulative Token)。如果前文有 5 个版本的完整代码,你发一句“谢谢,搞定了”,这一句谢谢可能要消耗你几万 Token。
- 妙招:一个 Bug 解决后,立刻开新窗口。 开启前,可以把上一个窗口最终确定的方案或关键 Context 复制过去作为新会话的起点。
5. 清理输入代码的“水分”
在把代码贴给 LLM 之前,做一些简单的预处理:
- 删掉不必要的日志和注释(比如大段的 JSDoc/Docstring 或者是历史 debug 的
console.log)。 - 避免贴入无关静态资源:例如代码中嵌套的巨长 Base64 字符串、大型 SVG 矢量图代码、几百行的 mock 数据。贴入前把它们替换成
const logoSvg = "..." // SVG Content here。
⚖️ 省流策略对比表
| 场景 | 以前的做法(Token 刺客) | 现在的做法(Token 守财奴) | 预计节省率 |
|---|---|---|---|
| 修改已有代码 | 直接贴全文件,让它重新生成全文件 | 使用 // ... 保持不变 ... 指令,只输出修改点 |
50% - 80% |
| 让模型理解多文件关系 | 把相关的文件一股脑全贴过去 | 只贴相关文件的目录树(tree)和对外接口定义 | 70% - 90% |
| 多轮 Debug | 在同一个长对话里反复调试 | Debug 成功后,立刻复制正确代码,开新窗口继续下一步 | 30% - 60%(越往后省越多) |