# ai-coding-cost-calculator
**Repository Path**: monkeyapi-net/ai-coding-cost-calculator
## Basic Information
- **Project Name**: ai-coding-cost-calculator
- **Description**: 可运行的 AI 编程 API Token 成本与计费倍率计算器
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-02
- **Last Updated**: 2026-08-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AI Coding API 成本计算器
AI 编程已经从补全几行代码进入仓库级检索、修改、测试和修复流程。调用次数、上下文长度、输出 Token 和计费倍率会一起放大成本,只看单次价格很容易低估一个月的真实支出。
这个零依赖小工具用 22 个变量估算 Codex、Claude Code、Grok 类客户端的 API 日成本、30 天成本、月预算请求容量、RPM、TPM、并发、P95 超时和上下文窗口负载,并在发请求前检查 Base URL 与请求路径:
- 输入 Token 单价;
- 输出 Token 单价;
- 每天调用次数;
- 月度预算;
- 单次平均输入 Token;
- 单次平均输出 Token;
- 实际计费倍率;
- 缓存输入 Token 单价;
- 输入 Token 缓存命中率;
- 计划每分钟请求数;
- 每分钟请求上限;
- 每分钟 Token 上限;
- 单次平均请求耗时(秒);
- 并发请求上限;
- P95 请求耗时(秒);
- 客户端请求超时(秒);
- 预留最大输出 Token;
- 模型上下文窗口 Token;
- 触发重试的请求占比;
- 每个重试请求的平均额外次数。
## 2026-08-14 更新:固定月预算请求容量
只看预计月成本,仍然很难回答“这个月的预算最多能跑多少次计划请求”。新版增加:
- 每次计划请求的预期倍率后成本;
- 当前月度计划支出、预算利用率、剩余和超额;
- 月度与每日最大计划请求数。
容量计算会同时使用输入与输出 Token、缓存命中率、计费倍率和预期重试。月预算只是用户填写的成本上限,不是 MonkeyAPI 套餐、充值余额、现金或可提现额度。单次预期成本为 0 时,工具不会显示无限请求,而会标记为无法计算。完整公式和边界见 [月预算请求容量说明](./MONTHLY_BUDGET_CAPACITY.md)。
## 2026-08-11 更新:Base URL 与请求路径排错
接口不通不一定是模型或密钥问题,Base URL 和请求路径拼接错误也会直接导致 404、401 或协议不匹配。新版增加两个本地检查字段:
- `Base URL`:填写服务根地址,例如 `https://api.example.com/v1`;
- `请求路径`:填写相对路径,例如 `chat/completions`。
工具会规范化末尾斜杠,拼出最终请求端点,并提示重复 `/v1`、把完整网址误填到请求路径、Base URL 带查询参数或凭据、生产环境使用明文 HTTP 等问题。它只做本地字符串和 URL 解析,不会发起网络请求,也不会验证 API Key、模型权限或服务端路由。完整边界和排错顺序见 [Base URL 排错说明](./BASE_URL_DIAGNOSTICS.md)。
## 2026-08-03 更新:重试预算
模型名错误、接口协议不兼容、限速或网络中断都可能触发自动重试。新版会同时显示:
- 含重试的每日实际调用次数;
- 重试带来的倍率后额外日成本;
- 含重试的日成本和 30 天成本。
例如,计划每天调用 50 次,其中 20% 各重试一次,则实际调用次数是 60 次。详细假设、公式和排错步骤见 [重试预算说明](./RETRY_BUDGET.md)。
## 2026-08-04 更新:缓存预算
缓存命中率不能只当成一个性能指标。输入 Token 是否按缓存单价计费,会直接改变每次请求的输入成本;输出 Token 通常仍按输出单价计算。新版增加:
- 缓存输入 Token 单价;
- 输入 Token 缓存命中率;
- 相对“全部未命中缓存”的倍率后日节省。
工具不预设某个模型的缓存折扣。请从当前服务页面或实际用量记录填写缓存输入单价和命中率。公式、示例和核对方法见 [缓存预算说明](./CACHE_BUDGET.md)。
## 2026-08-08 更新:并发预算
RPM 和 TPM 都没有超限,也不代表请求可以同时执行。流式输出、工具调用和网络延迟会拉长单次请求占用连接的时间;当平均耗时较长时,较低的 RPM 也可能把并发数推过服务端上限。新版增加:
- 单次平均请求耗时(秒);
- 估算并发请求数;
- 并发利用率、余量和超额请求数。
例如计划每分钟 30 个请求、每次平均耗时 4 秒,估算并发数为 `30 × 4 ÷ 60 = 2`。如果服务端并发上限为 4,利用率是 50%,余量是 2 个请求。这个估算不替代服务端实际连接数、排队策略或突发限制;平均耗时应从真实请求日志中统计,并按模型和接口分别核对。详细公式和排错步骤见 [并发预算说明](./CONCURRENCY_BUDGET.md)。
## 2026-08-09 更新:P95 超时预算
平均耗时适合估算并发,但不能直接代表超时风险。少量慢请求会被平均值掩盖,而客户端通常按固定秒数主动中断。新版增加:
- P95 请求耗时(秒);
- 客户端请求超时(秒);
- P95 超时利用率、余量和超额秒数。
例如 P95 请求耗时为 18 秒、客户端超时设置为 30 秒,利用率为 60%,余量为 12 秒。若 P95 升到 45 秒,同一个 30 秒超时会超额 15 秒,尾部请求进入高风险区间。这个估算不替代完整延迟分布,也不能区分客户端取消、网关超时和上游超时;应从真实请求日志统计 P50/P95/P99,并按模型、接口和流式模式分别核对。详细公式和排错步骤见 [P95 超时预算说明](./TIMEOUT_BUDGET.md)。
## 2026-08-10 更新:重试负载放大
重试不仅会增加日成本,也会把同一分钟内的请求数和 Token 吞吐一起放大。原始 RPM、TPM 看起来没有超限时,重试请求仍可能把有效负载推过服务端限制。新版增加:
- 重试新增请求负载和 Token 负载;
- 含重试的 RPM、TPM 总量与利用率;
- 含重试的 RPM、TPM 超额。
例如计划 40 RPM、20% 请求各重试一次,则重试新增 8 RPM,有效负载是 48 RPM;若单次输入加输出共 2,800 Token,重试新增吞吐是 22,400 TPM。限速排错时应先看含重试的有效负载,再决定是否降低重试次数、增加退避或缩小请求。
重试率、额外次数和 Token 仅用于预算估算,不代表服务商一定采用相同的重试策略。实际重试可能按错误类型、客户端版本、网关策略和幂等性规则变化;不要对不确定是否安全的请求无限重试。详细公式和排错步骤见 [重试负载说明](./RETRY_LOAD_BUDGET.md)。
## 2026-08-05 更新:429 限速预算
低倍率只能降低同等实际用量的扣费,不能解决请求在短时间内集中到达的问题。新版增加:
- 计划每分钟请求数(RPM);
- 已知的每分钟请求上限;
- RPM 限速利用率;
- 每分钟请求余量和超额请求数。
这只是请求数上限的预算,不替代服务端真实限速。实际限制还可能包含 Token/分钟、并发数、突发窗口、模型分组和动态配额。遇到 `429` 时应先查看响应头和用量记录,再设置退避与抖动,不要无条件立即重试。公式和排错步骤见 [429 限速预算说明](./RATE_LIMIT_BUDGET.md)。
## 2026-08-06 更新:TPM 吞吐预算
请求数没有超过 RPM 上限,不代表 Token 吞吐没有超限。新版使用计划 RPM 和单次平均输入、输出 Token,新增:
- 计划每分钟 Token 吞吐;
- TPM 限速利用率;
- 每分钟 Token 余量和超额 Token。
例如每分钟 40 个请求、单次平均输入 2,000 Token、输出 800 Token,计划吞吐是 112,000 TPM。若已知限制为 100,000 TPM,请求数量仍在 60 RPM 以内,但 Token 吞吐已经超出 12,000 TPM。公式、边界和排错方法见 [TPM 吞吐预算说明](./TPM_BUDGET.md)。
## 2026-08-07 更新:上下文窗口预算
“支持某个模型”不代表每个请求都能装进上下文窗口。新版增加:
- 计划上下文 Token(当前输入 Token + 预留最大输出 Token);
- 上下文窗口利用率;
- 上下文窗口余量、超额 Token 和最大安全输入 Token。
例如当前输入与历史、工具结果合计 110,000 Token,再为输出预留 20,000 Token,计划上下文是 130,000 Token。若只按 128,000 Token 的示例窗口预算,就会超出 2,000 Token。这个数字仅用于公式演示,不代表任何具体模型的窗口承诺;真实窗口和截断策略要以模型、客户端版本及接口协议为准。详细边界见 [上下文窗口预算说明](./CONTEXT_WINDOW_BUDGET.md)。
## 立即使用
下载仓库后直接用浏览器打开 `index.html`,无需安装依赖或填写 API Key。
计算公式:
```text
单次基础成本 = 输入 Token / 1,000,000 × 输入单价
+ 输出 Token / 1,000,000 × 输出单价
倍率后日成本 = 单次基础成本 × 每日调用次数 × 计费倍率
倍率后月成本 = 倍率后日成本 × 30
每次计划请求的预期成本 = dailyCalls 设为 1 时的倍率后日成本
当前月度计划支出 = 每日计划请求数 × 每次计划请求的预期成本 × 30
月度最大计划请求数 = floor(月预算 ÷ 每次计划请求的预期成本)
每日最大计划请求数 = 月度最大计划请求数 ÷ 30
预算利用率 = 当前月度计划支出 ÷ 月预算 × 100%
重试调用次数 = 计划调用次数 × 重试率 × 平均额外重试次数
实际调用次数 = 计划调用次数 + 重试调用次数
缓存后输入成本 = 输入 Token / 1,000,000
× (普通输入单价 × 未命中率 + 缓存输入单价 × 命中率)
RPM 利用率 = 计划每分钟请求数 / 每分钟请求上限 × 100%
每分钟超额请求 = max(0, 计划 RPM - RPM 上限)
计划 TPM = 计划 RPM × (单次平均输入 Token + 单次平均输出 Token)
TPM 利用率 = 计划 TPM / 每分钟 Token 上限 × 100%
每分钟超额 Token = max(0, 计划 TPM - TPM 上限)
估算并发请求数 = 计划 RPM × 单次平均请求耗时(秒) / 60
并发利用率 = 估算并发请求数 / 并发请求上限 × 100%
并发超额 = max(0, 估算并发请求数 - 并发请求上限)
P95 超时利用率 = P95 请求耗时 / 客户端请求超时 × 100%
P95 超时余量 = max(0, 客户端请求超时 - P95 请求耗时)
P95 超时超额 = max(0, P95 请求耗时 - 客户端请求超时)
重试新增 RPM = 计划 RPM × 重试率 × 平均额外重试次数
含重试 RPM = 计划 RPM + 重试新增 RPM
含重试 TPM = 含重试 RPM × (单次平均输入 Token + 单次平均输出 Token)
计划上下文 Token = 当前输入 Token + 预留最大输出 Token
上下文窗口利用率 = 计划上下文 Token / 模型上下文窗口 × 100%
上下文超额 Token = max(0, 计划上下文 Token - 模型上下文窗口)
最大安全输入 Token = max(0, 模型上下文窗口 - 预留最大输出 Token)
```
例如,`0.5` 倍表示按基础模型费用的 50% 做预算估算。低倍率会直接影响同等 Token 用量下的扣费,但还需要同时核对模型单价、缓存计费、限速、失败重试和用量记录。
## 接入前检查
不要只确认“支持某个模型”,至少逐项核对:
1. API Key 的权限和有效期;
2. Base URL 是否完整,是否包含 `/v1`;
3. 客户端使用的接口协议;
4. 实时支持的准确模型名称;
5. 流式输出与工具调用兼容性;
6. 用量查询、额度、限速、退款和售后边界。
不同工具的接口不一定互通。Codex 常见于 OpenAI 兼容接口,Claude Code 通常需要确认 Anthropic 兼容协议,Grok 类客户端还要核对模型别名与工具调用字段。
## 运行测试
需要 Node.js 18 或更高版本:
```bash
node --test calculator.test.js
```
## MonkeyAPI
本仓库由 MonkeyAPI 运营方维护,并可能介绍 MonkeyAPI 的第三方 API 调用与用量管理服务。
- 官网:
- 微信号:`niuhulu_lzp`
咨询前请说明准备使用的客户端和模型,以便先核对 API Key、Base URL、接口协议、支持模型、实际倍率、额度、限速和用量查询。
## 重要说明
- MonkeyAPI 是第三方 API 调用与管理服务,不是 OpenAI、Anthropic 或 xAI 的官方账号、会员或充值服务。
- 本工具只做数学估算,不是账单。真实费用可能受缓存、长上下文、图片、工具调用、重试、路由和价格调整影响。
- 价格、倍率、活动资格、额度、有效期、模型支持和限速以官网及登录后的实时页面为准。
- 不要在代码、Issue 或截图中提交真实 API Key。
- 产品名称仅用于说明兼容场景,相关商标归各自权利人所有。
## License
[MIT](./LICENSE)