RAG烧钱?我建了个成本控制层来修复它(2026-08-04)
别让“智能”变成“吞金兽”
如果你正在生产环境跑RAG(检索增强生成),大概率上个月账单让你心梗——向量数据库存储费、Embedding API调用费、大模型Token费,三重费用叠加,一个百万级文档库的月成本轻松突破五位数。这还不是最痛的,最痛的是你发现80%的请求都在重复检索同样的高频段落。
我所在团队曾为此月烧掉4.7万元。今天分享我搭建的“成本控制层”,三个月内把RAG单位请求成本降低了63%,而效果几乎无损。
三个“出血点”与对症下药
1. 缓存层:拦截重复提问(省35%)
我们给RAG加了三级缓存:
- 语义缓存:对用户query做embedding,相似度>0.92直接返回历史答案(用轻量模型,成本仅为重计算的1/10)
- 段落级缓存:高频文档块(如产品FAQ、政策条款)在向量库中打标签,优先走内存检索,跳过重计算
- 整库快照:每晚对热门片段做预计算摘要,闲时用低价模型批量生成
实测数据:上线两周,缓存命中率冲到41%,每月省下约1.6万元。
2. 路由分流:别用“火箭”送“快递”(省22%)
原来所有query都走gpt-4级别模型。现在加了一个轻量路由模型(如GPT-4o-mini,成本低90%),先判断复杂度:
- 简单事实问题 → 走小模型+简短上下文(占全部请求的55%)
- 需要多文档推理 → 才升级到大模型,且强制要求只返回必要段落
效果:每月Token费用从2.3万降至1.2万,而用户满意度(按答案有用率计)只掉了2个百分点。
3. 索引瘦身:删掉“脂肪文档”(省6%)
我们清理了向量库中30%的重复/过期文档,并做了滑动窗口裁剪——长文档只保留关键段落向量。检索噪声降低后,Top-3命中准确率反而提升了11%。
实用建议:三步复刻这套控制层
# 伪代码:你的成本控制层
class RAGCostController:
def __init__(self):
self.semantic_cache = Cache(threshold=0.92)
self.router = LightweightRouter()
self.index = SlimmedVectorDB()
def answer(self, query):
cached = self.semantic_cache.get(query)
if cached: return cached
route_type = self.router.decide(query)
if route_type == "simple":
return self.small_model_quick_answer(query)
else:
return self.large_model_full_reason(query, top_k=3)
执行清单:
- 排查你日志里Top 20重复问题,先做规则缓存(一天搞定)
- 把模型从“一刀切”改为“按复杂度分档”
- 每周用
聚类脚本找出相似文档,合并或删除
从“烧钱”到“省钱”,只差一次重构
控制层不是扣扣搜搜,而是让每一分钱都花在产生价值的推理上。我所在的团队现在每月RAG成本压缩到1.8万元,而业务指标(如客服解决率)反而微涨。
你的下一步:今天就写下你调用链中最贵的三个环节,逐个问“这笔推理是否必需?”。如果觉得有难度,先从加一个简单的缓存字典开始——一周后你会看到账单变绿。
⚠️ 免责声明:本文所有成本数据均基于作者团队在2026年7月的实际测试环境,云服务商定价可能随时调整,请以你的实际账单为准。文中方法适用于中小规模RAG系统(百万级文档内),超大规模场景需结合分布式缓存与混合检索架构。不构成任何商业决策的唯一依据,投资或改造成本请谨慎评估。