成本与延迟优化:缓存、路由与预算
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。
一句话定义
RAG 的成本与延迟大头是 LLM 调用与检索链路,优化杠杆按性价比排序:语义缓存(同问不重答)、小模型路由(简单问题不请大模型)、上下文瘦身(少喂 token)、检索链裁剪(少跳路)、以及按查询复杂度的分级服务——每一项都要在质量回归的保护下做。
为什么重要
RAG 是 token 消耗大户:一次 GraphRAG 全局查询的索引+查询成本可达普通向量问答的数十倍(kp-024)。没有成本意识的 RAG 项目常死于账单;没有延迟意识的项目死于用户弃用。优化纪律与 kp-017 相同:先测量(成本/延迟分解)再动刀。
前置知识
kp-009(索引层)、kp-013/014(检索与上下文链)。
核心概念
- 语义缓存(semantic cache):按"问题语义"命中历史答案——嵌入相似度超阈值即返回缓存;必须带权限维度(kp-030)与新鲜度约束(时效问题不缓存)。命中率通常 20–40%,是最便宜的优化。
- 模型路由(model routing):按问题复杂度分级——闲聊/简单事实走小模型,复杂推理/多跳走旗舰模型;分类器或规则路由,成本差 10–50 倍。
- 上下文瘦身:上下文压缩(kp-014)、块数精简、prompt 模板去水分——输入 token 常占成本 60%+,每省 1k token 都是纯利润。
- 检索链裁剪:关闭无收益的环节(评测验证后),如非必要不跑 HyDE/多查询(kp-011 的成本账);重排窗口按 P95 延迟预算定。
- 异步与流式:全局类重查询异步化(返回任务 ID + 通知);答案流式输出改善体感延迟。
原理与机制
成本分解先行:把一次请求的成本拆为嵌入查询、检索(索引算力)、重排、生成(输入+输出 token)四段分别计量——优化打在最大的一段。经验分布:生成输入 token 占 50–70%,重排与大模型路由次之。
延迟预算分配(示例:端到端 2s)——嵌入+检索 100ms、重排 300ms、生成首 token 500ms(流式开始)、生成完成 1s。超预算时按段治理:重排窗口砍半、上下文压缩、小模型路由。延迟优化与质量优化的冲突点就在重排窗口与上下文长度——决策依据是评测曲线(质量-延迟权衡点),不是拍脑袋。
质量保护机制:所有成本优化都必须挂质量回归门禁——缓存答案抽样复检、小模型路由的错路率监控、压缩前后 faithfulness 对比。省下钱再赔进质量事故是净亏。
公式或模型
- 月成本 ≈ 请求数 × (输入 token × 输入价 + 输出 token × 输出价) × (1 − 缓存率) + 检索/重排算力。
- 缓存收益:成本节省 = 命中率 × 单次生成成本;风险 = 语义误命中(相似但不同问题)→ 阈值要偏高设置。
图示
请求 ─► 语义缓存(含权限维度) ─命中─► 直接返回(20~40%流量)
│未命中
├─ 路由器: 简单? → 小模型生成 (成本 1/20)
│ 复杂? → 旗舰模型 + 全链路
├─ 上下文: 压缩/精简 → 输入token↓50%
└─ 全局重查询 → 异步任务 + 通知
实例或案例
- 客服机器人优化实录:语义缓存命中率 35% + 70% 流量路由到小模型 + 上下文压缩 40%,月账单降至原 1/6,评测集指标不降。
- GraphRAG 全局查询异步化:同步 P95 从 25s 降到交互可用的 800ms(返回任务受理),完成率反而上升。
常见误区
- 误区一:"先上线再优化成本"。成本结构由架构决定(用不用图、重排窗口多大),后期改架构代价远大于设计期预算;成本是设计约束不是事后补丁。
- 误区二:"缓存阈值设低提高命中"。语义缓存误命中(相似问题不同答案)是静默事故;权限与新鲜度维度漏掉则是安全事故。
- 误区三:"小模型一定省"。错路率导致重试与差评处理的隐性成本可能吃掉差价;路由错误率要监控并设回退。
与其他知识点的关系
自测题
- 语义缓存必须带哪两个非语义维度?
答:权限维度(防跨用户命中越权答案)与新鲜度约束(时效性问题的缓存失效策略)。
- 成本优化的第一动作是什么?
答:把单请求成本按嵌入/检索/重排/生成四段分解计量,找出最大段再动刀;通常生成输入 token 是大头。
- 为什么所有成本优化要挂质量回归?
答:缓存误命中、小模型错路、压缩失真都是静默质量损失;无回归门禁的省钱=把成本转化为更贵的事故。
延伸阅读
- GPTCache / 各厂商语义缓存文档。
- Anthropic/OpenAI 模型分级与 batch API 定价页(路由的经济基础)。
- Google SRE 关于延迟预算(budget)分解的做法。