模型接入之后,第二个阶段的问题往往不是能不能用,而是 “账单不可预测、高峰不可承受”。这两件事看起来分属成本与稳定性,实际同源:都没有把 token 与并发当成可度量、可回收的资源。下面给一份按 “度量、优化、兜底” 组织的方案,每一节都对应一个可验证的指标,避免停留在概念层面。
先说清楚计价结构。input 包括 system prompt、tools 的 JSON Schema 定义、历史轮次与检索命中内容;图片按分辨率折算;output 单独计价,单价通常高于输入数倍;缓存写入有额外费用,缓存读取则明显便宜。
发送前可以用 /v1/messages/count_tokens 做估量,比按字符数除以经验系数准。但真正要落地的是在业务层把 input、output、cache 三类分别打点,按天聚合。只记总消耗的话,等账单出来再想拆分,基本拆不动。
prompt caching 有几条硬约束:cache_control 最多四个断点;写入贵、读取便宜;TTL 五分钟,命中会刷新计时。
因此内容排布必须调整:system prompt、工具定义、固定参考文档放最前并打断点,每轮变化的用户提问与检索结果放最后。顺序反过来,缓存永远不命中。
验证指标只有一个:同一段长前缀连发两次,第二次的 cache_read_input_tokens 应显著大于 0。词元无忧的用量明细把这两项分开列,做缓存改造前后对比时可以直接量化省下的比例,而不是凭感觉说 “好像快了”。
第一层是客户端限流,按分钟级 QPS 设上限,防止突发流量把额度打穿;第二层是队列隔离,把批处理、离线摘要这类非实时任务与交互式请求分开排队,避免互相拖慢;第三层是熔断,窗口内 429/529 超阈值就快速失败,而不是让请求在链路里越积越多。
只做第一层是常见错误:结果高峰期所有请求一起挂起,用户体验比直接报错更差 —— 等了一分钟才收到失败。
生产环境建议准备两条路径。一是模型降级映射:交互场景主用 Sonnet,529 集中出现时切到更小规格的模型保可用性,把复杂任务排入队列等恢复。二是多通道切换,但必须带健康检查,否则可能把流量倒进一个同样不健康的节点。
关键细节是降级不能静默:响应体里要标注实际使用的模型,否则排查时会出现 “同一个 prompt 效果忽好忽坏” 的错觉,而真正的原因是模型已经换了。
每次调用至少留五个字段:request-id、模型名、三类 token、首字延迟、总耗时。按天聚合出 P50 与 P95,P95 才是决定体感的那条线。
出现 “某天开始变慢” 时,request-id 是唯一能和服务方对上号的凭据。词元无忧支持按 request-id 回溯单次调用的 token 与耗时,做故障定位时可以直接锁定某次异常请求,比翻全量日志更省时间。
把上面四节压成一个闭环:先按 request-id 抽样一周的调用记录,算出 token 结构与 P95;再对最长前缀做一次缓存改造,对比 cache_read 比例;然后用 5 到 10 路并发压三天,统计 429 与 529 的出现规律;最后按压测结果设定限流阈值与降级触发条件。四步走完,成本和稳定性的边界就变成了具体数字,而不是一句 “大概还行”。
长上下文场景下的治理,落点在三件事:把 token 按类别度量、把缓存断点打在稳定内容上、把并发与失败分三层处理。做到这三点,账单可预测、峰值可承受、故障可定位。再配上一个按 request-id 串联的观测口径,这套方案不仅对单一接入服务有效,换通道之后同样可以复用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。