post cover

技术热点落地:模型分层路由实战——把 GPT-5.6 Luna 降价 80% 真正落到账本上(2026-07-31)


技术热点落地:模型分层路由实战——把 GPT-5.6 Luna 降价 80% 真正落到账本上

热点来源:OpenAI 于 7/30 宣布 GPT-5.6 Luna 降价 80%(输入降至 $0.20/M token、输出降至 $1.20/M token),Terra 同步降 20%,Sol 不变。Hacker News 热帖(580 分)讨论中;The DecoderArtificial Analysis 交叉验证。

前情提要


适用场景与目标

这个热点解决了什么问题?

降价公告本身不会自动省钱。绝大多数团队的现状是:所有请求打同一个 model 名,账单按总量计费。OpenAI 把 Luna 降到 $0.20/$1.20 之后,如果你还在用 Sol 跑”总结一段客服对话”这类简单任务,等于主动放弃 80% 的价格红利。反过来,如果把复杂推理任务盲目切到 Luna,省下的钱会变成质量事故和返工成本。

这次降价的底层信号是:模型厂商的竞争维度已经从”谁最强”转向”谁的单位成本低”。Sol/Terra/Luna 三档(复杂推理 / 均衡 / 高速低价)不再是营销话术,而是一个可量化的工程决策变量——你选择哪个档位,直接决定你的毛利。

适用场景

场景价值
客服 / 内容总结 / 分类打标等高频简单任务切到 Luna,单任务成本降 80%,吞吐翻倍
代码生成 / 复杂推理 / 长链 Agent 任务保留 Sol,质量不降级
批处理 / 异步管道(文档解析、数据清洗)Luna + prompt caching,成本可忽略
多产品共用 API key 的团队路由 + 预算隔离,成本可归因到业务线

目标:D+7 内上线一套可观测、可回滚、有质量回归保障的分层路由,把 Luna 的价格红利落袋——混合账单下降 40%~60%,且质量指标不回落。


最小可行方案(MVP)步骤

第 0 步:拆账单,建立”任务 × 模型”画像(半天)

在写任何代码之前,先回答三个问题:

  1. 你每月的 token 消耗按任务类型怎么分?(对话、总结、代码、抽取……)
  2. 每个任务当前用哪个模型、单价多少?
  3. 哪些任务”切到便宜档位质量也不会崩”?

用 OpenAI 用量报表或 LiteLLM 的 spend logs 导出近 30 天数据,按模型 × 任务分组。这一步的输出是后面所有决策的依据,别跳过。

第 1 步:用 LiteLLM Proxy 搭统一网关(半天)

所有业务代码不再直连 OpenAI,而是连一个本地网关。网关负责:模型分组(group)、fallback、预算、用量记录。

# 官方推荐 Docker 部署(也可 pip install litellm[proxy])
docker run -d --name litellm \
  -p 4000:4000 \
  -v $(pwd)/config.yaml:/app/config.yaml \
  ghcr.io/berriai/litellm:main-latest \
  --config /app/config.yaml

第 2 步:定义模型分组 + fallback 链(1 小时)

业务代码只认 sol / terra / luna 三个逻辑名,背后具体是哪个版本由配置决定(见”关键实现细节”)。

第 3 步:先上”静态路由”,别急着上分类器(第 1-2 天)

最稳的起步方式:在业务代码里显式声明任务档位

# 路由前:所有请求一个模型
# resp = client.chat.completions.create(model="gpt-5.6-sol", ...)

# 路由后:按任务类型显式选档
ROUTE = {
    "summarize": "luna",      # 简单总结 → 最便宜
    "extract_json": "terra",  # 结构化抽取 → 均衡
    "code_review": "sol",     # 代码审查 → 最强
    "classify": "luna",
}

def chat(task_type: str, messages, **kw):
    return client.chat.completions.create(
        model=ROUTE[task_type],  # 逻辑分组名,由网关解析
        messages=messages,
        **kw,
    )

静态路由零风险:不改任何提示词,只是换路由目标。先跑 2-3 天,把账本数字拿到手,再决定要不要上动态分类。

第 4 步:接入成本观测 + 每日预算告警(第 3 天)

网关记录每次请求的 token 与费用,每天生成”任务 × 档位 × 成本”报表;设月度硬预算,超限自动降级到 Luna 或熔断。

第 5 步:质量回归集(golden set)兜底(第 3-5 天)

每个任务类型准备 20-50 条典型样本(含边界 case),切档前后用同一批样本对比输出质量。没有 golden set 就切流,等于盲飞。


关键实现细节

1. LiteLLM 网关配置(可直接复制)

# config.yaml
model_list:
  - model_name: sol
    litellm_params:
      model: openai/gpt-5.6-sol        # 逻辑名 → 真实模型
      api_key: os.environ/OPENAI_API_KEY
  - model_name: terra
    litellm_params:
      model: openai/gpt-5.6-terra
      api_key: os.environ/OPENAI_API_KEY
  - model_name: luna
    litellm_params:
      model: openai/gpt-5.6-luna
      api_key: os.environ/OPENAI_API_KEY

router_settings:
  routing_strategy: usage-based-routing-v2  # 按健康度/延迟自动分配
  num_retries: 2
  # fallback 链:高往低降级,绝不让请求失败
  fallbacks:
    - {"sol": ["terra", "luna"]}
    - {"terra": ["luna"]}
  cooldown_time: 30           # 模型异常后的冷却秒数
  max_fallbacks: 2            # 最多降级 2 次,防止雪崩

general_settings:
  master_key: sk-your-admin-key
  database_url: postgresql://user:pass@db:5432/litellm   # 用量落库,必须有

litellm_settings:
  drop_params: true           # 忽略不支持的参数,兼容多模型
  # 预算:超过即熔断(单位 USD)
  max_budget: 1000
  budget_duration: "30d"

业务侧用法(OpenAI SDK 兼容,只需改 base_url):

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:4000/v1",
    api_key="sk-your-virtual-key",   # 网关的 virtual key,可设独立预算
)
# 之后 model 参数直接写 "sol" / "terra" / "luna"

2. 动态分类器:用最便宜的模型做路由决策

当任务类型无法在代码里静态判断时,让 Luna 自己当分类器——注意这个”以省钱的模型省钱”的反直觉点:绝不能用 Sol 做分类,否则分类成本会反超节省。

import json
from openai import OpenAI

client = OpenAI(base_url="http://localhost:4000/v1", api_key="sk-xxx")

SCHEMA = {
    "type": "object",
    "properties": {
        "tier": {"type": "string", "enum": ["sol", "terra", "luna"]},
        "confidence": {"type": "number", "minimum": 0, "maximum": 1},
        "reason": {"type": "string"},
    },
    "required": ["tier", "confidence", "reason"],
}

def route_task(task: str) -> str:
    resp = client.chat.completions.create(
        model="luna",                       # ← 分类器用最便宜档
        messages=[
            {"role": "system", "content": (
                "你是模型路由分类器。判断任务所需的推理深度:"
                "复杂推理/长链规划/代码生成→sol;结构化抽取/中度推理→terra;"
                "总结/分类/简单问答→luna。返回 JSON。" )},
            {"role": "user", "content": task},
        ],
        response_format={"type": "json_schema", "json_schema": SCHEMA},
        temperature=0,
        max_tokens=200,
    )
    d = json.loads(resp.choices[0].message.content)
    # 关键:低置信度一律上调档位,宁贵勿错
    if d["confidence"] < 0.75:
        return "sol"
    return d["tier"]

实测建议:分类器本身单次成本约 $0.0002 级,只有当它把 5% 以上的流量从 Sol 正确搬到 Luna 时,分类开销才回本——所以先用第 3 步的静态路由跑出流量分布,再决定分类器是否值得

3. 成本核算:别只看 token 单价

GPT-5.x 系列输出含 reasoning_tokens(思考 token),思考 token 也计费且只出现在 usage 明细里。切档后必须按真实 usage 核算:

# 从响应里读完整 usage,落日志
usage = resp.usage
row = {
    "model": resp.model,
    "prompt_tokens": usage.prompt_tokens,
    "completion_tokens": usage.completion_tokens,
    "reasoning_tokens": getattr(usage, "reasoning_tokens", 0),  # 思考 token
    "total_tokens": usage.total_tokens,
    "cost_usd": (usage.prompt_tokens * 0.20 + usage.completion_tokens * 1.20) / 1_000_000,
}

注意:上面的单价是 Luna 的。写进代码的单价表要配置化(从网关或定价 API 拉取),因为价格战期间 30 天就可能变一次。

4. 预算告警与熔断

# 伪代码:每日对账任务,跑在 cron 里
spend_today = query_spend(start=now - 24h)
if spend_today > daily_budget * 0.8:
    alert("接近日预算 80%", channel="oncall")
if spend_today > daily_budget:
    set_router_policy("force_tier=luna")   # 全量降级到 Luna,保业务不中断

5. 质量回归:golden set 对比

# 每个任务类型一份 golden set:[(input, expected_keywords_or_judge), ...]
def eval_tier(tier: str, golden: list) -> float:
    ok = 0
    for q, expected in golden:
        out = client.chat.completions.create(
            model=tier, messages=[{"role": "user", "content": q}],
            temperature=0,
        ).choices[0].message.content
        ok += int(any(k in out for k in expected))   # 关键词命中或 LLM-as-judge
    return ok / len(golden)

# 切流前必须满足:luna_score >= sol_score - 0.05(允许 5% 质量损失)

常见坑与规避清单

#风险规避
1全量切 Luna 不看任务类型复杂推理/代码质量崩盘golden set 先行,按任务分批切
2用 Sol 当路由分类器分类成本吃掉节省分类器固定用 Luna,见上文代码
3只算单价忽略 reasoning tokens账单”降了”实际没降usage.reasoning_tokens 真实核算
4fallback 链配置错误静默降级 / 重试风暴max_fallbacks: 2 + 指数退避 + 降级日志
5模型名硬编码在业务代码每次调档都要发版逻辑分组名 + 配置驱动
6先跑再观测出了问题无法归因第一天就接 spend logs + 每日快照
7忽略竞品跟进降价路由策略一个月就过时比价周期改为每周,配置热更新

🚫 坑 1:复杂任务切到 Luna,质量静默劣化

症状:切流后线上 P95 正常,但代码生成类任务的返工率上升、用户投诉变多——质量劣化往往不体现在延迟上

规避:每个任务类型独立灰度(10% → 50% → 100%),每档灰度跑一次 golden set + 线上指标对比(通过率、返工率、用户反馈情绪)。发现劣化立即回滚到上一档,回滚是配置操作,不是发版。

🚫 坑 2:429 限流引发重试风暴

症状:Luna 便宜所以流量暴增,触发 RPM/TPM 限流;客户端无脑重试,网关排队,延迟雪崩。

规避:网关层 num_retries: 2 + 指数退避(0.5s/1s/2s),cooldown_time: 30;超限后走 fallback 到 Terra 而不是死等 Luna。同时给 Luna 流量做客户端侧并发上限。

🚫 坑 3:缓存与批处理红利没吃到

症状:批处理任务按单条请求计费,忽略了 prompt caching(相同前缀输入打折)和批处理接口(50% 折扣)。

规避:把相同 system prompt 的请求合并前缀;纯批处理任务走 Batch API,成本再降一半。这两项与分层路由叠加,才是完整的降本公式。


成本 / 性能 / 维护权衡

以下为一个示例测算(假设:日 50M 输入 + 5M 输出 token,其中 70% 简单任务、30% 均衡任务;价格为 7/30 公告后):

方案日成本(估算)延迟 p50质量上限维护复杂度风险
全量 Sol(不变价)高(≈原账单)最高
全量 Terra(降 20%)$160中高
全量 Luna(降 80%)≈$12.6(35M×$0.2 + 3.5M×$1.2)最低中低质量风险高
静态标签路由(Luna 70% + Terra 30%)≈$59中高
动态分类路由(+ Sol 兜底)≈$59 + 分类开销
自托管开源(GLM 5.2 / Kimi K3 等,见 7/30 文)取决于 GPU 利用率中高运维风险

数字为示例假设,用于展示量级关系;真实数字请用自己账单代入。关键结论:静态标签路由用 1/3 的工程成本拿到动态路由 90% 的收益,动态分类器是”利润增量”,不是”必需品”。

替代方案对比

方案优势劣势
只调模型名(什么都不做)零改动账单不变,降价与你无关
静态路由(推荐起步)零风险、可回滚、当天上线无法覆盖无法静态分类的长尾任务
动态分类器覆盖全量流量、自动适配分类器本身有成本与误判,需 golden set 持续维护
网关托管(OpenRouter 等)免运维多一层代理延迟,控制力弱,价格透明但难做预算隔离

一周内可执行行动清单

Day 1-2:摸底与地基

  • 导出近 30 天账单,按任务 × 模型拆分,列出”可降档任务清单”
  • Docker 部署 LiteLLM 网关,配好 sol/terra/luna 三个分组 + fallback 链
  • 建 golden set 初版(每个任务类型 20-50 条)

Day 3-4:静态路由上线

  • 业务代码改走网关,按任务类型显式选档(先只改 2-3 个最安全的简单任务到 Luna)
  • 接 spend logs + 每日对账脚本 + 预算告警
  • 用 golden set 对比 Luna vs Sol 输出,记录基线分数

Day 5:评估与扩容

  • 跑 24h 观察:成本下降 X%、质量指标无劣化
  • 把可降档任务清单扩大(分批,每批 24h 观察)

Day 6-7:动态化与固化

  • (可选)上线 Luna 分类器,低置信度兜底 Sol,灰度 10%
  • 产出《档位选择手册》:每个任务类型的默认档位 + 降级规则
  • 把比价设为每周例行:OpenAI / Anthropic / Google / 开源模型价格都要盯

参考资源


写在最后:降价 80% 是一个”给了你工具,但没替你干活”的新闻。真正把钱省下来的是那套路由 + 观测 + 回归的工程闭环——而这套闭环在下一轮价格战(Anthropic、Google、开源模型跟进降价)里会继续复利。先上静态路由,再谈动态分类器:一周内能落地的方案,才是好方案。