成本控制:避免额度跑飞
这一页讲的是怎么防止 AI 编程工具把额度花超,不是记账或财务教程。它覆盖事前限制、事中约束和事后核对;具体的额度、价格、日志和账单字段仍以你的服务商控制台为准。
相关页面:
- 账户余额、令牌额度、倍率和预扣的概念:概念说明
- 创建 Key 时能设置的限制:准备 API Key
- Key 权限收窄和泄漏处理:API Key 安全与轮换
- 额度不足、费用对不上等常见问题:常见问题
平台差异
余额、令牌额度、模型限制、IP 白名单、过期时间、日志和账单的字段与是否支持,因服务商而异。本文给出通用做法;具体操作以服务商控制台为准。
先分清三个概念
成本失控通常不是单一原因,先把三层限制分开看:
| 层级 | 是什么 | 谁会受它影响 | 典型控制方式 |
|---|---|---|---|
| 账户余额 | 整个账户的总预算 | 账户下所有 Key 和所有工具 | 充值金额、账户级限额、告警 |
| 令牌额度 | 单个 Key 的预算上限 | 使用这个 Key 的工具或环境 | 关闭“无限配额”,给 Key 设上限 |
| 单次请求用量 | 一次调用实际消耗的 token 和费用 | 这一次请求本身 | 控制上下文、输出上限、重试和并发 |
一次请求会同时受这三层影响:账户余额不够会失败,令牌额度不够会失败,单次请求过大则可能直接推高费用或触发上下文限制。
无限配额不等于无限预算
“无限配额”通常只取消 Key 这一层的限制,账户余额仍然会被扣。只要账户里还有余额,脚本就可能继续消费。要控制成本,必须至少设置账户级预算、Key 级额度或两者之一。
事前控制
事前控制的目标是:即使工具出错、脚本跑飞或 Key 泄漏,损失也有上限。
按工具分别建 Key
给 Codex、Claude Code、OpenCode、Copilot CLI 以及 IDE 工具各建一个独立 Key。这样能:
- 看出是哪个工具花了钱
- 某个工具出问题时只吊销它自己的 Key
- 给高风险工具单独设置更低的额度
创建方法见准备 API Key。
设置令牌额度上限
如果服务商支持,关闭“无限配额”,给每个 Key 设置明确的额度上限。额度单位可能是金额或 token,以控制台为准。
推荐做法:
- 先设一个很小的额度,跑通流程
- 确认用量符合预期后,再逐步调高
- 高风险场景(自动化脚本、CI、批量任务)单独建 Key,并设置更低的额度
- 不要把所有工具都设成“无限配额”
设置过期时间
给 Key 设置合理的过期时间,尤其是临时测试、CI 和共享环境:
- CI 和临时任务:使用短有效期
- 个人本地使用:也建议设置一个需要定期复查的期限
- 长期有效的 Key 更容易在泄漏后被持续滥用
到期后 Key 会自动失效,能限制长期风险。时区和可选范围由服务商决定。
限制模型范围
用模型限制把 Key 收窄到确实需要的模型:
- 日常对话和简单任务:限制到便宜、够用的模型
- 复杂编码任务:单独建 Key,只放开必要的高价模型
- 避免让一个通用 Key 能调用账户里所有昂贵模型
模型名必须和 /v1/models 返回的 ID 完全一致;限制字段和是否支持以服务商控制台为准。
使用 IP 白名单
如果服务支持,给 Key 配置 IP 白名单,只允许公司、家庭或 CI 出口 IP 使用。IP 白名单不是唯一的安全手段,但能减少 Key 泄漏后被其他来源调用的机会。
代理、CDN、VPN 和公司网络可能改变网关看到的来源 IP;配置后要确认实际出口 IP 仍然匹配,见企业网络、代理与自定义 CA。
优先使用便宜模型
在满足任务要求的前提下,优先选择便宜或免费的模型:
- 简单问答、格式转换、摘要:优先小模型
- 日常编码:先用中等价位模型,确认不够用再升级
- 复杂重构、长上下文任务:再使用高价模型
- 批量任务先确认模型能力,避免因为工具调用失败反复重试
不要只看模型单价,还要看它是否支持 tool call、长上下文和你要用的协议。便宜但频繁失败、需要反复重试的模型,最终可能更贵。
事中控制
事中控制的目标是:在请求运行过程中,及时发现并阻止费用继续增长。
控制上下文长度
上下文越长,输入 token 越多,费用越高。常见做法:
- 不要每次对话都携带无关的历史消息
- 长文档先摘要,再让模型基于摘要工作
- 定期新开会话,避免历史无限增长
- 只把必要的文件片段交给模型,不要一次塞进整个仓库
- 关注工具的上下文压缩或历史裁剪设置
限制最大输出
输出 token 通常比输入更贵。给长任务设置合理的最大输出:
- 简单任务使用较小的输出上限
- 只在确实需要长内容时调高
- 不要在批量任务里使用过大的默认输出
- 不同工具的字段名不同,例如
max_tokens、max_output_tokens或界面里的“最大输出长度”
避免无限重试
重试可能产生第二次上游请求,从而重复计费。控制方式:
- 4xx 通常不应自动重试,先修请求
- 429 按
Retry-After或指数退避,并限制最大次数 - 5xx 可以有限重试,但不要无限循环
- 流式请求已经输出内容后,不要盲目自动重试
- 在工具里设置最大重试次数和超时,不要依赖默认值
相关错误处理见错误码与排障。
流式请求及时中断
流式请求会在持续输出时不断产生 token。发现方向不对时,及时手动中断,而不是等它输出完:
- 输出明显跑偏、重复或开始编造时立即停止
- 批量任务设置总超时
- 不要让无人值守脚本无限等待
- 中断后检查日志,确认是否计费以及是否可以安全重试
中断是否退还预扣、已输出内容是否计费,取决于服务商规则,以账单和请求日志为准。
批量任务先小样本试跑
在批量处理前先做小样本验证:
- 先用 1 到 5 个样本跑通。
- 检查输出质量、token 用量和失败率。
- 确认成本在可接受范围内,再扩大批量。
- 给批量任务设置最大次数、最大并发和总预算。
- 出现大量失败时先暂停,不要让它继续自动重试。
事后检查
事后检查的目标是:确认实际花费、发现异常,并在必要时立即止损。
看日志
在服务商的日志或请求记录里,按时间范围筛选并核对:
- 请求时间、模型 ID、端点和 request ID
- 输入 token、输出 token、缓存 token
- 预扣金额和最终结算金额
- 请求状态、错误码和重试次数
如果日志支持按 Key 筛选,优先按工具对应的 Key 查看,能更快定位是哪一个工具花的钱。
核对预扣与结算
流式或长请求可能先预扣,再按真实用量结算。看到“先扣了一笔”不一定是最终费用:
- 预扣是暂占额度,最终按实际用量多退少补
- 失败、中断、超时和重试是否计费,以服务商规则为准
- 并发请求可能同时占用多笔预扣额度
- 如果可用余额突然变少,先看是否有多笔预扣尚未结算
按时间范围筛选
出现费用异常时,先缩小时间范围:
- 对比异常发生前后同一时间段的用量
- 看是否集中在某个模型、某个 Key 或某个工具
- 看是否有非工作时间的调用
- 看是否有异常高的单次 token 量或异常并发
发现异常立即吊销 Key
如果确认或怀疑 Key 泄漏、脚本跑飞或被滥用:
- 先在服务商控制台吊销或禁用相关 Key,停止继续消费。
- 检查日志和账单,记录异常时间、模型、来源和用量。
- 按最小权限创建新 Key,设置更低的额度和更严格的模型限制。
- 更新所有工具、环境变量和 CI secrets。
- 按API Key 安全与轮换清理泄漏源。
不要只删除本地配置文件;文件删掉不等于服务端的 Key 失效。
给 AI 的提示词
如果 AI 工具能读取你的本机配置,可以把下面这段提示词交给它,让它只做检查、不直接修改。不要粘贴完整 Key,只提供变量名、配置路径和脱敏信息。
请检查我当前的 AI 编程工具配置,找出可能导致费用失控的设置。先只检查并列出问题,不要修改任何文件。
请重点检查:
1. 是否有 Key 开启了“无限配额”,或没有设置额度上限
2. 是否有 Key 没有设置过期时间
3. 是否有 Key 可以调用账户里所有模型,没有模型限制
4. 是否多个工具共用一个 Key,无法区分费用来源
5. 是否配置了过大的上下文窗口、最大输出或过长的历史保留
6. 是否启用了无限重试、过长超时或过高并发
7. 是否有批量任务、定时任务或 CI 使用高额度 Key
8. 配置文件中是否出现明文 Key,是否可能被提交到 Git
请按“风险等级 / 所在文件或配置项 / 当前值 / 建议值 / 是否需要我确认”列出结果。不要输出完整 Key,不要直接修改配置。如果 AI 不能访问本机文件,它只能给你检查清单和命令,无法替你确认实际配置。
常见误区
| 误区 | 实际情况 | 正确做法 |
|---|---|---|
| “无限配额”就是无限免费 | 只取消 Key 级上限,账户余额仍会被扣 | 设置账户级预算或 Key 级额度,并监控用量 |
| 缓存命中就是免费 | 缓存通常只是折扣,是否计费、折扣多少由服务商决定 | 以账单和模型计费说明为准 |
| 失败请求一定不收费 | 上游已经产生 token、流式中断或超时的情况可能计费 | 查看请求日志和结算规则,不要靠重试试探 |
| 重试不会重复计费 | 重试可能创建第二次上游请求并重复计费 | 限制重试次数,流式输出后不要盲目重试 |
| 只在本地删掉 Key 就安全了 | 服务端的 Key 仍然有效,别人仍可能使用 | 先在控制台吊销,再清理本地和 CI 配置 |
| 便宜模型一定更省钱 | 频繁失败、需要反复重试时可能更贵 | 结合成功率、工具调用能力和实际用量评估 |
快速检查
配置阶段:
- [ ] 每个工具使用独立 Key
- [ ] 关闭无限配额,或设置明确的令牌额度
- [ ] 设置合理的过期时间
- [ ] 限制到必要的模型
- [ ] 服务支持时配置 IP 白名单
- [ ] 批量任务使用单独的低额度 Key
使用阶段:
- [ ] 控制上下文长度,定期新开会话
- [ ] 设置合理的最大输出
- [ ] 限制重试次数,避免无限重试
- [ ] 流式请求跑偏时及时中断
- [ ] 批量任务先小样本试跑
检查阶段:
- [ ] 按时间范围和 Key 查看日志与账单
- [ ] 核对预扣与最终结算
- [ ] 发现异常立即吊销 Key
- [ ] 按最小权限创建替代 Key 并更新配置