缓存、延迟与成本
本节目标
建立一个先测量、再优化的方法,理解前缀缓存、精确答案缓存和语义缓存的命中条件与风险。
三个目标不是同一件事
- 延迟:用户等多久,需分首字节/首token时间、完成时间和p95/p99尾延迟。
- 吞吐:单位时间能完成多少任务,可能通过批处理提高,却让单个用户等更久。
- 成本:不只有token价格,还包含检索、工具、评测、存储、运维和失败重试。
优化前先定义用户任务与质量底线。将任务换成更便宜的模型而导致返工或人工介入,可能让单次API成本下降、端到端成本上升。
用Trace分解总延迟
总延迟
= 排队 + 网关 + 检索 + 模型首token
+ 模型生成 + 工具循环 + 后处理 + 重试这是诊断分解,不要把它当成所有架构的固定公式。先从Trace找最大或最不稳定的部分。如果等待主要来自一个慢工具,只缩短Prompt不会解决问题。
三种缓存
前缀/供应商Prompt缓存
它重用相同输入前缀的中间计算,通常不是直接重用最终答案。提高命中率的通用思路是将稳定指令与示例放在前面,用户变量放在后面。但具体最小token、计费、保留时间和显式缓存参数都是供应商动态特性,不应把教程数值写死在架构里。
精确答案缓存
当规范化后请求完全相同时返回已保存答案。键必须包含会改变输出的所有版本,例如:
hash(租户 + 权限 + 规范化输入 + release_id
+ 知识快照 + 语言 + 安全策略)忽略租户或权限可能跨用户泄露数据;忽略知识快照会长期返回过期规定。缓存值还需经过与正常输出相同的安全处理。
语义缓存
它对请求做Embedding,在相似度足够高时重用过去答案。这会把“字面相似”变成“业务上可互换”的决策,风险远高于普通前缀缓存。“如何取消订单”和“如何取消已发货订单”可能向量相似,但规则不同。它必须在任务级回归集、权限分区、知识过期和不确定时回退上单独验证。
成本台账
对每个任务记录:输入、缓存读/写、输出token,模型和工具调用次数,重试次数,计费策略版本与项目/用户归属。价格表应带生效时间或版本,不要用当今价格回算历史请求后声称它是当时实际费用。
优化顺序通常从“减少无价值工作”开始:不调用就能解决、不重复检索、限制无界Agent循环、避免重试风暴,再考虑缩短Prompt、选更小模型或批处理。任何改动都要回到相同评测集。
常见误区
- 只看平均延迟:尾延迟才可能是大量用户的真实痛点。
- 把流式输出当总时间降低:流式主要改善首字可见体验,不一定减少完成时间。
- 缓存命中率高就算成功:若命中的是过期或跨权限答案,系统只是更快地做错事。
- 直接记录整个Prompt来算成本:统计token和版本通常足够;原文记录需另行证明必要性。
练习与自测
为“内部制度问答”设计缓存键和失效规则,要求制度每周更新且不同部门权限不同。然后回答:
- 为什么语义相似度阈值不能直接从另一个项目复制?
- 模型价格下降后,为什么不能说历史请求的实际费用也下降了?
- 你会用哪些Trace span找出重试风暴?
小结与下一步
缓存与路由是质量、成本、时效和隐私的共同决策。下一步用 Trace与隐私边界 获得足够细、但又不过度收集的证据。
参考资料
- OpenAI Prompt caching(访问于2026-07-14;适用模型、命中条件和计费会变化)
- OpenAI Latency optimization(访问于2026-07-14)
- OpenAI Cost optimization(访问于2026-07-14)