想象你开了一家奶茶店,雇了一位非常能干的店长小智。小智帮你接单、写文案、回客服消息,什么都干。但小智每干一件事,都要从收银机里拿钱去买“脑力原料”——这些原料就是 Token。他每处理一单生意,就是一次“调用”(Call)。月底你翻开账本会发现:接单花了多少、写文案花了多少、回消息花了多少,一目了然。可如果你从不记账,等到月底才发现钱花光了,那就来不及了。 Agent 成本追踪就是这个记账本。它记下每个 Agent 花了多少 Token、调用了多少次、每个环节多少钱,还能提前预警“照这个速度月底要超支”,甚至告诉你“用更便宜的原料也能做好奶茶”。这篇教程会带你把这个记账本从零搭起来:先看懂账单(成本构成),再学会记账(追踪指标),搞清怎么数原料(计量口径),装上报警器(监控预警),学会省钱(优化策略),最后把账分给各家分店(预算分摊)。

岗位关联

学会 Agent 成本追踪,你就能精确回答“AI 到底花了公司多少钱、钱花哪了、怎么省”,这是 AI 工程化落地时最有说服力的专业能力。

目录
  1. 可视化演示
  2. 成本构成分析——账单上都有什么
  3. 追踪指标体系——记账本上记什么
  4. 计量统计口径——怎么数珍珠才算对
  5. 监控预警机制——账本上的报警器
  6. 成本优化策略——省钱四妙招
  7. 预算分摊管理——总店如何给分店分账
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态展示Planner/Executor/Critic三Agent的Token消耗与费用归因至追踪系统的过程,切换per-call/per-session/per-agent/per-user四种粒度观察成本分布。

本节配有交互动效(进入视口后自动加载,约 3KB)。

成本构成分析——账单上都有什么

回到奶茶店。店长小智每接一单,柜台上的“原料清单”都会多出几行:茶叶、牛奶、珍珠、杯子,再加一只打包袋。在 AI 世界里,这张清单就是每次 API 调用的账单——Agent 读到的提示词是输入 Token,它生成的回答是输出 Token,就像顾客的订单和做出来的奶茶。账单左栏写着数量,右栏写着单价,末尾加总就是一次调用的总费用。看懂这张小票,是成本追踪的第一步。

值得留意的是,“一次任务”不等于“一次调用”。小智接到“推荐奶茶”的任务,可能要先查库存、再算成本、最后写推荐语,对应三次 API 调用(Call)。每一次调用都独立计费,而且输入和输出的单价往往不一样——高端模型好比金骏眉茶底,输出贵;轻量模型好比绿茶包,便宜得多。这也是为什么追成本要从“单次调用成本”这个最小单位算起,再把同一任务的多次调用叠加。

把一次调用拆开看,成本由两部分构成:输入 Token 量与输入单价之积,加上输出 Token 量与输出单价之积。厂商通常按“每千 Token”计价,所以 Token 数要除以 1000 再乘单价,公式如下:

除了这两笔大头,账单上还常藏着“附加费”:调用搜索或代码工具的计费、重试失败请求的支付、缓存命中的折扣价。就像打包袋和外卖配送费不起眼,积少成多却影响月底利润。老板若只盯着主料价格,就会漏掉这些悄悄漏钱的缝隙,而这正是成本追踪要全部纳入视野的原因。

Cost=Tin1000×Pin+Tout1000×Pout\mathrm{Cost} = \frac{T_{\mathrm{in}}}{1000} \times P_{\mathrm{in}} + \frac{T_{\mathrm{out}}}{1000} \times P_{\mathrm{out}}
一次调用的总费用 = 输入费用 + 输出费用,其中每一笔都按“Token 数 ÷ 1000 × 单价”计算。
  1. 输入 Token 计数 $T_{\mathrm{in}}$提示词、系统设定与多轮对话历史被切分后的 Token 总数,它是“问问题”的价格基础
    TinT_{\mathrm{in}}
  2. 输出 Token 计数 $T_{\mathrm{out}}$模型回答中实际生成的 Token 总数,它决定“给答案”的价格
    ToutT_{\mathrm{out}}
  3. 千 Token 换算 $\dfrac{T}{1000}$单价按每千 Token 发布,必须把 Token 数换算成“千 Token”单位才能正确相乘
    Tin1000, Tout1000\frac{T_{\mathrm{in}}}{1000},\ \frac{T_{\mathrm{out}}}{1000}
  4. 两段费用相加输入单价与输出单价通常不同,各自相乘再加总,得到本次调用的总成本
    Tin1000×Pin+Tout1000×Pout\frac{T_{\mathrm{in}}}{1000} \times P_{\mathrm{in}} + \frac{T_{\mathrm{out}}}{1000} \times P_{\mathrm{out}}

追踪指标体系——记账本上记什么

有了小票,接下来得决定记账本上写哪些数字。奶茶店老板每天早上会看三样东西:昨晚总营收、每单均价、最热卖的品类。对应到 Agent 成本追踪,就是三个核心指标:累计 Token 消耗、单次调用成本、成本趋势。累计 Token 是“总共多少杯”,单次调用成本是“平均一杯多少钱”,成本趋势则是“最近一周是涨是跌”。

上下文长度是一个容易被忽略的指标。多轮对话里,历史记录每轮都要作为输入重新发送,就像顾客每加一次“少冰”,小智都要把整张订单重新读一遍。对话越长,每次调用的输入 Token 就越多,成本呈“复利式”上涨。所以追踪指标不仅要看单次请求,还要监控上下文长度随轮次的增长曲线,它往往是成本悄悄变高的元凶。

把多次调用的成本累加起来,就得到累计总成本。若把每次调用的成本记为 $\mathrm{Cost}_i$,任务共调用 $N$ 次,则总成本是:

这套指标体系就像奶茶店的日报表:有了累计、均值、趋势三个维度,老板不仅能回答“花了多少”,还能回答“花得值不值”“下个月会不会更多”。账本上的数字不再是冷冰冰的总量,而是可以指导经营决策的仪表盘。

Ctotal=∑i=1N(Tin(i)1000×Pin+Tout(i)1000×Pout)\mathrm{C_{total}} = \sum_{i=1}^{N} \left( \frac{T_{\mathrm{in}}^{(i)}}{1000} \times P_{\mathrm{in}} + \frac{T_{\mathrm{out}}^{(i)}}{1000} \times P_{\mathrm{out}} \right)
累计成本 = 把每一次调用的“输入费 + 输出费”全部相加,循环做 N 次求和。
  1. 单次成本 $\mathrm{Cost}_i$第 $i$ 次调用的输入输出费用,是整个累加的基本单位
    Costi=Tin(i)1000×Pin+Tout(i)1000×Pout\mathrm{Cost}_i = \frac{T_{\mathrm{in}}^{(i)}}{1000} \times P_{\mathrm{in}} + \frac{T_{\mathrm{out}}^{(i)}}{1000} \times P_{\mathrm{out}}
  2. 累加上标 $i=1$ 到 $N$从第一次调用加到第 $N$ 次调用,一个任务内的全部调用都不遗漏
    ∑i=1N\sum_{i=1}^{N}
  3. 总成本 $\mathrm{C_{total}}$所有调用成本之和,对应账本上“本月总支出”那一行
    Ctotal\mathrm{C_{total}}

计量统计口径——怎么数珍珠才算对

记账之前先得解决一个根本问题:珍珠到底怎么数?是按粒数,还是按重量?不同数法,同一碗珍珠奶茶能数出不同的结果。Token 的计数也是一样——它不等于字符数,而是由模型自带的 Tokenizer 按“词元”切分出来的。英文里“world“是一个 token,中文”你好”可能被切成一个或两个 token,代码里的特殊符号又有自己的切法。

这就是为什么很多新手用“字符数除以 4”估算 Token 会翻车。那条经验法则只对英文文本大致成立,对中文、混合语言、JSON 结构文本误差很大。正确的做法是:用目标模型的 Tokenizer 对实际文本做离线计数,再把结果与厂商账单比对;日常开发时可以先用经验公式做数量级估算,但一旦涉及对账、预算,就必须以 Tokenizer 和调用日志为准。

一个常用的经验估算法则:英文文本约 4 个字符对应 1 个 token,中文文本每字约 0.6 到 1 个 token。写成公式就是:

回到奶茶店:精确数珍珠要用专门的小秤(Tokenizer),而“目测大概多少粒”(字符估算)只能用于开店前的成本预估。真正月底对账时,还是得抓着小票(调用日志)一粒粒核对,绝不能用估算值糊弄供应商——这就是计量口径的意义。

T^≈Nchar4(英文),T^≈0.6×Nhanzi(中文)\widehat{T} \approx \frac{N_{\mathrm{char}}}{4} \quad(\text{英文}),\qquad \widehat{T} \approx 0.6 \times N_{\mathrm{hanzi}} \quad(\text{中文})
估算 Token 数:英文看字符数除以 4,中文看汉字数乘以 0.6,结果只用于快速估算,不能替代 Tokenizer 精确计数。
  1. 字符数 $N_{\mathrm{char}}$把文本长度按字符统计出来,这是最容易获得的原始数据
    NcharN_{\mathrm{char}}
  2. 英文经验系数 $\dfrac{1}{4}$英文平均每 4 个字符约等于 1 个 token,来自大量语料的统计平均
    Nchar4\frac{N_{\mathrm{char}}}{4}
  3. 中文经验系数 $0.6$中文每个汉字平均约 0.6 个 token,比英文“更省 token”,但受分词影响波动大
    0.6×Nhanzi0.6 \times N_{\mathrm{hanzi}}
  4. 估算符号 $\approx$这不是精确等号,误差可能在 10%–30%,只用于开发期粗估
    T^≈⋯\widehat{T} \approx \cdots

监控预警机制——账本上的报警器

奶茶店的冰箱上贴着一张库存表,珍珠低于红线就亮红灯,提醒你赶紧补货。成本追踪同样需要一个报警器:当累计成本接近预算,或者某一次调用的花费异常暴涨,系统要立刻喊停。否则等月底看到账单才惊呼“怎么这么多”,一切已经来不及。报警器要解决两个问题:一是阈值设在哪,二是怎么滤掉噪声避免误报。

阈值设定有个常见误区:把预警线设在预算的 100%,等用完再响。可成本是连续增长的,等响铃时钱已经花出去了。正确做法是分级预警:70% 提醒、90% 限流、100% 熔断。另一面,单次调用的成本天然有波动——某次任务上下文特别长,某次搜索工具返回特别大,都会造成尖峰。直接用原始数据设阈值,容易被尖峰反复触发,让人产生“狼来了”的疲劳。

要识别真实的趋势信号,可以对成本序列做指数移动平均(EMA)平滑。令 $C_t$ 为当日成本,$\alpha$ 为平滑系数,则:

报警器装好后,还要配上异常检测:当某一次调用的成本超出历史均值好几个标准差,立刻记录调用链、定位是哪个子任务烧的钱。就像奶茶店冰箱既看整体库存,也查是哪一包原料受潮变质。有了这层机制,成本问题不再是月底的“惊吓”,而是日常经营里随时可以处理的小波澜。

St=α×Ct+(1−α)×St−1S_t = \alpha \times C_t + (1-\alpha) \times S_{t-1}
今天的平滑值 = 今天的实际成本乘一个权重,加上昨天的平滑值乘剩余权重;$\alpha$ 越大,越追随最新数据。
  1. 当日成本 $C_t$第 $t$ 天(或第 $t$ 个统计周期)记录的真实成本
    CtC_t
  2. 平滑系数 $\alpha$取值范围 0 到 1,控制新数据的影响权重,习惯取 0.2–0.5
    α∈(0,1)\alpha \in (0,1)
  3. 昨日平滑值 $S_{t-1}$上一期计算出的平滑结果,相当于“带记忆的昨日账单摘要”
    St−1S_{t-1}
  4. 加权合成 $S_t$新数据与历史记忆按权重混合,尖峰被摊薄,趋势浮出水面
    St=αCt+(1−α)St−1S_t = \alpha C_t + (1-\alpha) S_{t-1}

成本优化策略——省钱四妙招

记账和报警都做好了,接下来是老板最关心的话题:怎么省钱?奶茶店省钱有四招:换更便宜的原料、减少浪费、优化配方、批量采购。对应到 Agent 成本,就是模型降级、提示词精简、缓存复用、上下文压缩。四招不冲突,可以叠加使用,效果往往立竿见影。

先看最简单的一招:模型降级。并不是所有任务都需要最贵的大模型。回一句“订单已收到”,用轻量小模型就足够,就像普通奶茶用基础茶包而高端特调才用金骏眉。其次是提示词精简,把 prompt 里冗长的背景说明压缩成要点,输入 Token 直接变少。如果说降级是换原料,精简就是少放料——两者都能立刻降低成本。

第三招是缓存复用。如果多个用户问同样的问题,或者同一个 Agent 反复处理相似的指令,可以把计算结果缓存下来。缓存命中率的公式很直观:

第四招是上下文压缩:多轮对话过长时,把历史记录做摘要,只保留关键信息,而不是每次原样重发。就像小智不用把每个顾客三年前的偏好都背下来,只记一张“口味卡”就够了。四招配合,成本通常能降 30%–60%,而用户体验几乎不受影响——这才是让老板睡得着觉的省钱妙招。

Rhit=NhitNtotalR_{\mathrm{hit}} = \frac{N_{\mathrm{hit}}}{N_{\mathrm{total}}}
缓存命中率 = 命中缓存的调用次数 ÷ 总调用次数;命中率越高,重复计算越少,省钱效果越明显。
  1. 命中次数 $N_{\mathrm{hit}}$请求命中缓存、无需重新调用模型完整计算的次数
    NhitN_{\mathrm{hit}}
  2. 总调用次数 $N_{\mathrm{total}}$某段时间内全部 API 调用次数,含命中和未命中
    NtotalN_{\mathrm{total}}
  3. 命中率 $R_{\mathrm{hit}}$两者相除得到比例,通常希望控制在 30%–60% 以上才有显著收益
    Rhit=NhitNtotalR_{\mathrm{hit}} = \frac{N_{\mathrm{hit}}}{N_{\mathrm{total}}}

预算分摊管理——总店如何给分店分账

最后一步,是算总账。奶茶店开了三家分店,总部每月给一笔总预算,怎么分?按各分店上月营业额的比例最公平。Agent 成本也一样:公司总共批了 $B_{\mathrm{total}}$ 的 AI 预算,要分给客服、搜索、内容生成等项目,合理的依据是各项目的预估调用量占比。

这个分配过程就是成本分摊。实际操作中,先统计每个项目过去一段时间的 Token 消耗和调用次数,预测下个月的用量,再按占比切预算。某项目预估调用量为 $M_i$,所有项目总预估为 $\sum M_j$,则该项目分得的预算是:

分摊之后,还要做到账单透明:每个项目组能看到自己的累计成本、调用明细和剩余预算,就像分店店长能随时看到自家营业额和成本。定期导出账单、按项目归档,既方便财务结算,也为下一次预算预测提供了数据基础。到这一步,奶茶店的账本才真正闭环——从看懂小票,到记账、报警、省钱、分账,Agent 成本追踪的完整体系就搭建起来了。

Bi=Mi∑j=1KMj×BtotalB_i = \frac{M_i}{\displaystyle\sum_{j=1}^{K} M_j} \times B_{\mathrm{total}}
项目分到的预算 = 该项目的预估用量占比 × 总预算;用量大的团队多分钱,同时也承担更高的成本责任。
  1. 项目预估用量 $M_i$基于历史日志预测的第 $i$ 个项目下月 Token 消耗量
    MiM_i
  2. 总预估用量 $\displaystyle\sum_{j=1}^{K} M_j$把所有 $K$ 个项目的预估用量相加,得到全公司分母
    ∑j=1KMj\sum_{j=1}^{K} M_j
  3. 占比 $\dfrac{M_i}{\sum M_j}$该项目在总盘子中的份额,决定它能分到总预算的百分之几
    Mi∑j=1KMj\frac{M_i}{\sum_{j=1}^{K} M_j}
  4. 分得预算 $B_i$占比乘以总预算,得到该项目的成本上限,超了就要自己优化或申请追加
    Bi=Mi∑Mj×BtotalB_i = \frac{M_i}{\sum M_j} \times B_{\mathrm{total}}

AI 应用场景

场景一:客服机器人的月度成本看板

阶段:AgentOps 监控观测

解决的问题:客服机器人每月 API 账单模糊,只知道“花了一万多”,却分不清哪个技能在烧钱。传统靠月底人工翻日志,效率低且容易漏计多轮对话的重复输入。

具体案例:某电商团队接入成本追踪后,按“退货咨询、物流查询、优惠券计算”三个技能维度统计 Token 与 Call,发现优惠券查询因上下文拼接过长,贡献了 60% 的成本。随后对提示词做精简并引入缓存,次月账单下降 42%。

场景二:多 Agent 协作的预算熔断

阶段:异常检测与限流

解决的问题:规划、调用工具、总结三个子 Agent 协同完成任务时,某个子 Agent 陷入死循环,导致调用次数暴涨。人工发现时账单已经失控,需要自动熔断机制。

具体案例:某 RPA 团队为每个任务设置单任务成本上限 0.5 美元,成本追踪器实时累计各子 Agent 的 Token 消耗。当某子 Agent 的成本超过阈值时,自动暂停该任务并回退人工处理,同时记录完整调用链用于复盘。

场景三:大促前的成本压测与预估

阶段:成本预测与容量规划

解决的问题:上线新 Agent 功能前,无法估算大促流量下会烧多少钱。传统做法是“先上线再看账单”,容易在活动高峰期超支。

具体案例:某内容平台在 618 大促前,用历史调用日志拟合成本回归模型,预测活动期间日均 Token 消耗量。压测时发现生成的总结提示词存在大量冗余,压缩后单次调用成本下降 35%,最终活动预算精确控制在 3% 的误差内。

Python 演示

python65 行
class AgentCostTracker:    """模拟一个 Agent 调用成本追踪器,记录 Token 与 Call 成本"""     def __init__(self, price_in=0.003, price_out=0.004, budget=2.0, cache_price=0.0003):        self.price_in = price_in        self.price_out = price_out        self.budget = budget        self.cache_price = cache_price        self.calls_list = []        self.cache_hits = 0        self.total_calls = 0     def estimate_tokens(self, text):        """按字符数粗估 Token 数(中文约 0.6 token/字)"""        return max(1, int(len(text) * 0.6))     def log_call(self, prompt, reply, cached=False):        """记录一次调用,按是否命中缓存分别计价"""        if cached:            cost = self.estimate_tokens(prompt + reply) / 1000 * self.cache_price            self.cache_hits += 1        else:            t_in = self.estimate_tokens(prompt)            t_out = self.estimate_tokens(reply)            cost = t_in / 1000 * self.price_in + t_out / 1000 * self.price_out        self.total_calls += 1        self.calls_list.append(cost)     def total_cost(self):        """返回累计总成本"""        return sum(self.calls_list)     def avg_cost(self):        """返回单次调用平均成本"""        if not self.calls_list:            return 0.0        return self.total_cost() / len(self.calls_list)     def hit_rate(self):        """返回缓存命中率"""        if self.total_calls == 0:            return 0.0        return self.cache_hits / self.total_calls     def over_budget(self):        """判断是否超预算"""        return self.total_cost() >= self.budget  def main():    tracker = AgentCostTracker(budget=0.05)    for i in range(10):        prompt = "请推荐一份三天的北京旅游行程" + str(i)        reply = "第一天去故宫,第二天去长城,第三天去颐和园。" * 3        cached = i % 3 == 0        tracker.log_call(prompt, reply, cached=cached)        print("第{}次调用: 成本${:.4f}, 累计${:.4f}".format(            i + 1, tracker.calls_list[-1], tracker.total_cost()))    print("平均单次成本: ${:.4f}".format(tracker.avg_cost()))    print("缓存命中率: {:.1f}%".format(tracker.hit_rate() * 100))    print("是否超预算: {}".format("是" if tracker.over_budget() else "否"))  if __name__ == "__main__":    main()
目的:用 60 行左右实现一个微型成本追踪器,复现“单次调用计价、累计成本、缓存命中率、预算熔断”的核心逻辑。
  1. def estimate_tokens(self, text):模拟 Tokenizer 按字符粗估 token 数,中文经验系数 0.6。
  2. cost = t_in / 1000 * self.price_in + t_out / 1000 * self.price_out复现正文核心公式:输入输出分开计价再相加。
  3. self.calls_list.append(cost)每一笔 Call 都落账,后续可以算累计和均值。
  4. self.cache_hits += 1命中缓存单独计数,用于计算命中率。
  5. return self.cache_hits / self.total_calls命中率公式的代码化,命中率越高说明复用越好。
  6. if tracker.over_budget():模拟预算熔断:累计成本触碰上限即触发告警逻辑。

常见误区

误区我只要把模型官网的单价和总 Token 数相乘,就能知道这个月花了多少钱,不需要拆开看输入和输出。

正解不同模型的输入输出单价不同,多轮对话时历史输入会反复计费,工具调用还有独立计费项。就像奶茶店不能只按“总杯数 × 均价”算成本——中杯大杯、原价团购价都不同。必须按“输入/输出分别计价 + 每次调用独立记账”才能得到真实账单。

为何常见:厂商只公布“每千 Token 单价”,看起来是一个数,容易让人忽略调用结构是双层嵌套(多轮、多调用),总量平均把真实结构掩盖了。

误区我数一下 prompt 的字符数除以 4,就知道 token 数了,这个数字可以直接用来对账。

正解“除以 4”只是英文文本的经验法则。中文一个汉字约 0.6–1 个 token,代码和 JSON 又是另一套切分规则。精确计费必须用目标模型的 Tokenizer 离线切分;经验公式只能用于开发期粗估,误差可能达 30% 以上。

为何常见:开发时字符数最容易获得,而 Tokenizer 的 BPE 子词切分对多语言不透明,导致大家贪方便用粗略换算。

误区既然命中了缓存,就不用再付钱了,缓存这一项的成本应该归零。

正解主流平台的缓存命中也按输入 Token 收取折扣价(通常约为正常输入价的 10%),而且输出 Token 照常计费。另外缓存可能返回过期信息,带来准确性风险。省钱的同时要记录缓存失效和业务损失,不能只盯着节省额。

为何常见:直觉上“缓存 = 免费”,忽略了厂商计费规则中缓存仍是收费项,只是单价更低。

误区把预警阈值设到预算的 100%,等用完了再告警,这样不会误报、也不会打扰团队。

正解成本是随调用实时增长的连续过程,等 100% 再报警,钱已经花完了,高速增长期往往一小时内就超支。经验做法是 70% 预警、90% 限流、100% 熔断三档,并配合 EMA 平滑滤掉尖峰噪声。

为何常见:人习惯“满了再提醒”的直觉,但成本像水位一样持续上涨,报警必须在到达满溢点之前触发才能起作用。

面试题

Q1. 一次 API 调用的费用主要由什么决定?

单选题 · easy

  • A.网络延迟与带宽成本
  • B.输入输出 Token 及单价← 正确答案
  • C.GPU 服务器的规模大小
  • D.用户提问的措辞风格

答案:B。单次调用的费用取决于输入 Token、输出 Token 以及各自的单价,网络和 GPU 是基础设施成本,不会直接出现在调用账单里。就像奶茶成本看原料与配方,不看店里的空调费。

Q2. "Call" 在 Agent 成本追踪语境中指的是什么?

单选题 · easy

  • A.一次完整的 API 请求← 正确答案
  • B.一个 Token 的基本含义
  • C.一次模型参数更新操作
  • D.一次用户注册登录行为

答案:A。Call 指一次完整的 API 调用,包含输入和输出;一个 Task 往往包含多个 Call。参数更新是训练阶段的事,与推理成本追踪无关。

Q3. 某模型输入 3 美元/百万 Token,输出 6 美元/百万 Token,一次调用输入 5000 Token、输出 2000 Token,成本约为?

单选题 · mid

  • A.0.027 美元← 正确答案
  • B.0.033 美元
  • C.0.045 美元
  • D.0.018 美元

答案:A。输入费用 = 5000 / 1000000 × 3 = 0.015 美元,输出费用 = 2000 / 1000000 × 6 = 0.012 美元,相加得 0.027 美元。这正好是正文公式的直接应用。

Q4. 为什么不能直接用“字符数 ÷ 4”精确估算 Token 数?

单选题 · mid

  • A.中英文切词粒度差异很大← 正确答案
  • B.Token 是随机生成的数字
  • C.字符数计算必须依赖联网
  • D.模型只接受英文输入

答案:A。Tokenizer 按子词切分,中文每字约 0.6–1 个 Token,英文约 4 字符 1 个 Token,代码和符号又有自己的规则,所以统一的"÷4"只适合英文粗估。Token 是模型词表的编号,不是随机数字。

Q5. 关于缓存复用降低成本,下列说法正确的是?

单选题 · mid

  • A.只要命中缓存就一定零成本
  • B.缓存命中也计价且有实效风险← 正确答案
  • C.缓存会撤销模型的一切能力
  • D.缓存只对输出 Token 生效

答案:B。缓存命中通常按输入 Token 收取折扣价,并非零成本,同时可能返回过期信息。缓存不会撤销模型能力,且主要影响输入侧计费,输出仍正常计费。

Q6. 用 EMA 平滑监控成本趋势,主要目的是什么?

单选题 · mid

  • A.把成本精确到小数点后十位
  • B.消除单次峰值波动看趋势← 正确答案
  • C.增加 API 调用的次数
  • D.替代 Tokenizer 做分词

答案:B。EMA 通过加权平均摊薄单次尖峰,让真实趋势浮出水面。它不负责精度、分词或增加调用量,纯粹是信号处理手段。

Q7. 以下哪些属于 Agent 成本追踪中的“附加费用”?

多选题 · mid

  • A.工具调用与搜索执行计费← 正确答案
  • B.失败重试产生的费用← 正确答案
  • C.模型训练时的显卡折旧
  • D.缓存命中的读写计费← 正确答案

答案:ABD。工具调用、失败重试、缓存命中都发生在推理调用过程中,直接影响账单;显卡折旧是训练阶段的固定成本,不属于单次调用的附加费。

Q8. 以下哪项做法能最稳妥地实现“成本压降”?

单选题 · hard

  • A.无差别降低所有任务模型规格
  • B.优化缓存策略与压缩上下文← 正确答案
  • C.直接删除所有调用日志
  • D.把输出 Token 上限设为零

答案:B。按任务特点做缓存复用和上下文压缩,能在不明显影响效果的前提下降本。无差别降低规格会让复杂任务质量崩坏,删除日志破坏审计,输出上限为零会导致无法回答。

Q9. 成本追踪结果上报到哪个环节,可以帮助团队合理分配预算?

单选题 · easy

  • A.项目账单与成本分摊表← 正确答案
  • B.模型的权重参数文件
  • C.训练所需的数据集合
  • D.用户的登录密码信息

答案:A。成本分摊表把 Token/Call 消耗按项目归类,是预算分配的直接依据。权重、数据集、密码都与预算分配无关。

Q10. 关于“预算预警与熔断”,以下哪些做法是合理的?

多选题 · hard

  • A.设置分级阈值,70% 预警、100% 熔断← 正确答案
  • B.只用平均成本判断,忽略单次尖峰
  • C.结合 EMA 趋势预测提前告警← 正确答案
  • D.每天只记录一次全部成本

答案:AC。分级阈值和 EMA 趋势预测能提前发现并阻止超支。只看平均成本会掩盖尖峰,每天只记录一次则报警粒度太粗,都无法实现有效熔断。