大模型应用成本治理:Token 预算、缓存与质量约束 @ Lin | 2026-07-15T10:00:00+08:00 | 3 分钟阅读 | 更新于 2026-09-12T10:00:00+08:00

按成功任务核算成本,在权限和知识版本约束下评估缓存与上下文压缩。

本文于 2026-09-12 补充整理,按 2026-07 专题归档。示例为方案设计,参数用于说明方法,不代表已上线项目或实测成果。

先定义成本的计算单位

只看平均每次模型调用的费用,会鼓励把任务拆成很多看似便宜的调用。业务更关心的是完成一个有效任务需要多少钱,包括失败、重试、检索、重排和工具资源。

可以定义:

每成功任务成本
= 同批全部任务产生的总成本 / 成功任务数

分子包含失败任务的消耗。成功数为零时,该指标应标记为不可计算,而不是显示为零。退款或供应商补偿也应按明确口径处理。

用虚构价格说明计算方法

假设某实验模型的输入价格是每百万 token 2 个计费单位,输出价格是 8 个计费单位。一项任务进行了 3 次调用,每次输入 4000、输出 500 token:

输入:3 × 4000 / 1,000,000 × 2 = 0.024
输出:3 × 500 / 1,000,000 × 8 = 0.012
模型成本合计:0.036 个计费单位

这些数字纯粹用于演示,不对应任何供应商实时报价,也不包含重排、embedding 和存储。生产核算使用当时生效的价格表,并保存价格版本。

上下文预算按用途分配

提示词、必要证据、工具 schema、历史对话和输出预留共同占用上下文。可以先给每类设置预算,再按任务类型调整。对话越长越不应默认原样累积。

压缩时优先保留明确约束、已执行动作、未完成事项和证据引用。可以丢弃重复闲聊,但不能把“不要操作生产环境”压缩掉,也不能把“已准备提案”压成“已创建工单”。

压缩后的历史是新生成的数据,需要通过任务约束检查。节省 token 的同时若提高了错误率,整体成功任务成本反而可能上升。

缓存先判断正确性

缓存对象 适用条件 失效依据
文档 embedding 输入与模型相同 内容哈希、模型版本
检索候选 权限与知识快照一致 ACL、索引版本、查询配置
已验证答案 问题语义与访问范围稳定 证据版本、规则、时间
工具查询结果 业务允许短时陈旧 资源版本或短 TTL

写操作不应作为普通答案缓存复用。返回“已创建工单”的旧答案,不能代表当前用户的请求已经执行。

语义缓存的相似度也不等于业务等价。“测试环境如何清理”和“生产环境如何清理”可能非常相似,却要求完全不同的行为。关键实体、权限和时间条件应作为硬约束。

模型路由需要质量门槛

简单分类使用较小模型是否省钱,必须包含分类错误导致的后续重试和人工处理成本。复杂任务升级模型也要设置总预算,否则“先便宜尝试,再昂贵重做”可能比直接使用合适模型更贵。

使用同一评测集比较总任务成本与成功率,保留各类失败。不要只在最容易的样本上计算节省比例。

观测 token 与调用元数据可以参考 Spring AI 观测能力。本例的价格版本、预算结算和成功任务口径属于业务账务设计。

验收预算是否真的生效

构造不断要求更多检索的任务,确认模型调用和工具调用都能触发预算停止;模拟流式中断且没有 usage 的响应,确认它不会被计为零成本;撤销权限后检查旧答案缓存无法命中。

成本优化的前提是质量和权限约束保持成立。明确记录节省来自少调用、短上下文还是缓存复用,才能判断下一轮优化应该落在哪里。


查看系列导读与阅读路线

© 2019 - 2026 Lin 的博客

Powered by Hugo with theme Dream.

avatar
关于我

Lin 的 ❤️ 博客

技术专题:Java Agent 工程化:从知识库问答到可靠业务执行。围绕 RAG、工具治理、任务恢复与 Java 平台架构整理设计思路和验证方法。

记录一些 🌈 生活上,技术上的事

  • 🛠️ 技术阵地: 深耕 Java 开发 ,目前向 AI 应用领域探索与拓展。这里主要记录我从后端架构到 AI 赋能的进阶之路、技术思考以及日常的 debug 血泪史。始终致力于写出优雅且没有 bug 的代码(尽量)。
  • 🌈 生活侧写: 偶尔脱下极客的外衣,我也会在这里分享生活中的灵光一现。不管是好用的效率工具,还是周末的一场骑行,都是构成我真实生活的一部分。