Skip to content

[Agent Core] 按实际模型价格计算成本,不再使用固定估价 #76

Open

Description

@rojim666

先看这里:这条 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

  1. added
    bug可复现的缺陷或行为回归
    area/agent-coreAgent Loop、Runner、预算、取消与运行时生命周期
    on Aug 9, 2026
  2. changed the title [-][Agent Core] 引入模型感知的运行成本账本,替代硬编码 USD 估算[/-] [+][Agent Core] 按实际模型价格计算成本,不再使用固定估价[/+] on Aug 9, 2026
  3. 161142272 commented on Aug 15, 2026

    @161142272
    Contributor

    你好,我想认领这个 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。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/agent-coreAgent Loop、Runner、预算、取消与运行时生命周期area/context上下文管理bug可复现的缺陷或行为回归priority/P1重要功能

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions