## 先看这里:这条 Issue 在解决什么 系统目前不管使用哪个模型,都用同一组单价估算费用。但不同厂商、不同模型以及缓存 Token 的价格差别很大,所以预算判断可能明显不准。 ### 举个例子 同样使用 10 万 Token,便宜模型和高价模型的真实费用可能相差很多。固定单价会让便宜模型过早停止,也可能让昂贵模型已经超支却继续运行。 ### 修改后应该是什么样 根据 Provider 和模型名称选择对应价格,分别统计输入、输出和缓存 Token。遇到未知模型时明确显示“无法准确估算”,而不是悄悄套用一个看似精确的默认价格。 ### 第一次看代码,从哪里开始 先看 `ExecutionContext.is_over_budget()` 的两个默认价格,再追踪模型名称和 usage 如何进入 Runner。第一阶段使用可注入、带版本号的本地价格表即可,不需要联网抓价格。 --- 下面是实现时需要参考的技术细节和验收标准。 ## 问题 `src/sztu_code/core/context.py:200` 的 `is_over_budget()` 默认硬编码输入 3 USD/百万 token、输出 15 USD/百万 token。该估算不区分 Provider/模型,也忽略 cache read、cache creation 和可能的定价层级。 因此同一个 `max_budget_usd` 在 DeepSeek、OpenAI、Anthropic 或缓存命中请求上可能错误地提前停止,也可能严重超支;当前 API 却把结果表现为精确美元成本。 ## 目标 建立由 Provider/模型标识驱动、可测试且明确标注估算状态的成本账本。 ## 实现范围 - 定义可注入的 pricing policy/catalog,以规范化 Provider、模型和定价版本为键。 - 分别累计 input、output、cache read、cache creation 等 Provider 可报告的 usage。 - 未知模型不得套用一个看似精确的默认价格;提供明确的 unknown 状态和可配置的 fail-open/fail-closed 策略。 - RunStats、事件和 Trace 输出估算成本、币种、定价来源/版本以及是否完整。 - 价格表可通过配置更新,测试不访问网络。 - 明确一次 run 中模型切换或子代理使用不同模型时的聚合方式。 ## 验收标准 - 固定 usage 和固定价格表能精确计算输入、输出与缓存费用。 - 同 token 数的不同模型得到不同成本。 - 未知模型显示 unknown/incomplete,不再默认为 3/15 USD。 - `max_budget_usd` 的终止决策与配置的未知价格策略一致且可审计。 - 增加 `tests/unit/test_context_usage.py` 和 Runner stats/事件测试,全程离线。 ## 非目标 不要求自动抓取厂商实时价格;第一阶段使用版本化本地配置即可。
Activity
[-][Agent Core] 引入模型感知的运行成本账本,替代硬编码 USD 估算[/-][+][Agent Core] 按实际模型价格计算成本,不再使用固定估价[/+]161142272 commentedon Aug 15, 2026
你好,我想认领这个 Issue。
我的想法是先不做联网价格抓取,也不改模型路由或上下文预算策略,只把现在固定 3/15 USD 的估价逻辑换成一个本地、可测试的价格表和成本计算方法。
实现思路上,参考了 LiteLLM 的 model cost map / cost calculator,以及 Langfuse 里按模型定义记录 token 成本的做法。第一步先支持用 provider + model 找到对应价格,再根据 usage 里的 input、output、cache read、cache creation token 分项计算成本。遇到未知模型时返回明确的 unknown / incomplete 状态,不再静默套用默认价格。
测试方面会先用固定 usage 和测试用价格表写离线用例,覆盖同样 token 用量下不同模型成本不同、缓存 token 单独计费、未知模型不使用旧默认估价,以及
max_budget_usd在未知价格策略下的判断,先做一版测试的,后面确定可行了就在更新成这些模型对应的价格。预计能在 2–4 天内提交 Draft PR。