成本优化往哪下手
成本优化有三个方向:减少 token(压缩上下文、限制输出长度、精简提示词)、减少调用次数(精确缓存与语义缓存、合并请求)、换更便宜的资源(简单问题路由到小模型、按需扩缩)。每项都要和质量指标一起评估,因为省下的钱如果换来更多错误答案,后面补客服与返工的成本更高。
基本信息
| 方向一 | 减少 token:上下文压缩、输出上限、精简提示词 |
|---|---|
| 方向二 | 减少调用:精确缓存与语义缓存、批处理合并请求 |
| 方向三 | 换资源:小模型分流、量化索引、按需扩缩容 |
| 评估要求 | 每项改动都同时看成本与质量指标 |
典型使用场景
- 账单超预算:先定位成本集中在哪一段,再决定优化方向
- 常见问题复用:客服高频问题用缓存直接返回,省下生成费
- 分流试点:把意图明确的短问题交给小模型,逐步按类别放量
- 索引瘦身:用量化降低内存需求,减少机器配置费用
- 按需扩缩:低峰期缩减副本,控制常态资源开销
语义缓存与分流
语义缓存与分流
import hashlib
def cache_key(question):
norm = " ".join(question.lower().split()) # 归一化后做精确缓存键
return hashlib.sha256(norm.encode()).hexdigest()
# 命中缓存的问答直接返回;语义缓存可用向量相似度匹配历史问题
if is_simple(query): # 意图明确、文本较短的问题
model = SMALL_MODEL # 成本更低,需按类别评测后放量
else:
model = LARGE_MODEL
优化手段与风险
| 手段 | 节省点 | 风险 |
|---|---|---|
| 精确缓存 | 重复问题零调用 | 文档更新后仍返回旧答案 |
| 语义缓存 | 相近问题复用答案 | 相似但不同的问题被误命中 |
| 小模型分流 | 单次成本明显下降 | 复杂问题质量悄悄下滑 |
| 上下文压缩 | 输入 token 减少 | 关键条件在压缩中丢失 |
缓存与分流都要防误伤:缓存要能强制刷新(文档更新时清空相关键),分流要按问题类别评测后再放量。
优化顺序按占比来:先用日志把成本拆成索引期、检索期与生成期,找到占比最高的那段再动手,否则容易在无关环节省小钱。