GPT-5.6 API同时提供Sol、Terra和Luna三个能力层级。本文不做简单参数对比,而是给出一套可落地的三级路由:Luna处理高频低风险任务,Terra承接默认流量,Sol只用于复杂、高影响或前级验证失败的请求,并用Python实现选择、校验、升级与成本测算。

OpenAI在2026年7月9日正式发布GPT-5.6系列后,API侧不再只有一个"默认大模型"可选,而是同时提供三个层级:
gpt-5.6-sol:旗舰能力,适合复杂推理与专业工作;gpt-5.6-terra:在能力与成本之间取平衡;gpt-5.6-luna:面向高吞吐、成本敏感型任务。
这些模型ID和定位均已列入OpenAI官方模型目录。
很多团队迁移时的第一反应是:既然Sol最强,那就把所有请求都切到Sol。
这当然省事,但通常不是一个好的生产方案。
分类、字段提取、格式转换和短摘要,不会因为换成最贵的模型就自动产生同等比例的业务收益;而真正复杂的架构判断、跨文件排错和最终审查,又不应该为了节省一点Token强行压到Luna。
更合理的做法不是"只选一个模型",而是给不同任务建立三级路由。
一、先算清楚三个模型的价差
OpenAI当前公布的标准文本Token价格如下,单位均为每100万Token:
| 模型 | 输入价格 | 输出价格 | 更适合的角色 |
|---|---|---|---|
| GPT-5.6 Luna | 1美元 | 6美元 | 高频、低风险、结构明确的任务 |
| GPT-5.6 Terra | 2.5美元 | 15美元 | 大多数生产请求的默认层 |
| GPT-5.6 Sol | 5美元 | 30美元 | 复杂、高影响、质量优先的任务 |
Sol的输入、输出单价分别是Luna的5倍。价格来自GPT-5.6官方发布说明,实际使用前仍应重新核对。
但这不等于"能用Luna就绝不用Sol"。
模型路由真正应该优化的是一次成功任务的总成本,而不是一次API请求的表面价格。
一次Luna调用虽然便宜,如果连续失败三次,还要人工返工,最终成本可能比一次Sol更高。因此路由必须同时包含两部分:
- 首次应该选择哪个模型;
- 验证失败后如何升级。
二、我采用的三级路由原则
第一级:Luna处理高频、低风险、可验证任务
优先交给Luna的任务通常具备三个特征:
- 输入和输出格式明确;
- 结果可以用程序快速验证;
- 单次失败不会造成高影响。
例如:
- 文本分类与标签生成;
- 从固定格式内容中提取字段;
- JSON、Markdown和表格之间的转换;
- 短文本改写、去重和摘要;
- 大批量工单预分流。
关键不在于任务看起来是否简单,而在于结果能否被自动验收。能验收,才适合优先使用低成本模型。
第二级:Terra作为默认主力
如果一项任务不能明确归入Luna,也没有足够理由直接使用Sol,我会先交给Terra。
典型场景包括:
- 基于检索结果回答业务问题;
- 解释一段中等复杂度代码;
- 生成普通接口、测试或文档初稿;
- 执行有限步骤的工具调用;
- 处理需要一定上下文理解、但可以快速复核的任务。
生产路由不应该默认从最低档开始,否则大量本来一次能够完成的请求,会因为反复升级增加延迟。
Terra更适合充当默认层,Luna是有明确证据时的降本层。
第三级:Sol处理复杂、高影响或升级请求
以下情况可以直接使用Sol,或者在前一级验证失败后升级到Sol:
- 系统架构取舍与跨模块影响分析;
- 长链路、跨文件、难以复现的故障定位;
- 安全修复、权限边界与最终代码审查;
- 多份材料的矛盾核验和最终结论;
- 同一任务在Terra上已经验证失败;
- 错误结果会产生较高返工或业务损失。
高影响任务即使使用Sol,也不能取消测试、人工审核和回滚方案。模型层级是资源选择,不是责任转移。

三、用Python实现一个可解释的路由器
下面的代码没有再调用一个大模型判断该使用哪个模型,而是先使用可审计的业务规则,避免"为了选择模型,先多花一次模型调用"的递归成本。
python
from dataclasses import dataclass
from enum import Enum
from openai import OpenAI
client = OpenAI()
class Tier(str, Enum):
LUNA = "luna"
TERRA = "terra"
SOL = "sol"
MODEL_ID = {
Tier.LUNA: "gpt-5.6-luna",
Tier.TERRA: "gpt-5.6-terra",
Tier.SOL: "gpt-5.6-sol",
}
@dataclass
class Task:
prompt: str
kind: str
input_chars: int
output_is_machine_checkable: bool = False
requires_tools: bool = False
high_impact: bool = False
previous_validation_failures: int = 0
LUNA_KINDS = {
"classify",
"extract",
"format",
"short_summary",
"rewrite",
}
def choose_tier(task: Task) -> Tier:
# 高影响任务、连续失败任务直接走Sol
if task.high_impact or task.previous_validation_failures >= 2:
return Tier.SOL
# 可机器验收的固定任务优先走Luna
if (
task.kind in LUNA_KINDS
and task.output_is_machine_checkable
and not task.requires_tools
and task.input_chars <= 20_000
):
return Tier.LUNA
# 其余请求默认由Terra承接
return Tier.TERRA
def call_model(task: Task, tier: Tier) -> str:
effort = {
Tier.LUNA: "low",
Tier.TERRA: "medium",
Tier.SOL: "high",
}[tier]
response = client.responses.create(
model=MODEL_ID[tier],
reasoning={"effort": effort},
input=task.prompt,
)
return response.output_text
OpenAI的当前迁移指南建议通过Responses API使用GPT-5.6,并根据实际任务设置reasoning.effort。支持的级别和迁移建议可查看官方Model guidance。
四、失败升级要靠验证,不要让模型自报置信度
不建议让模型自己输出一个0到100的置信度,再用这个数字决定是否升级。
模型说"我有95%的把握",不等于结果真的有95%的正确率。
更可靠的方法是根据业务结果验收。例如JSON提取任务可以检查:
- 能否正常解析;
- 必填字段是否存在;
- 字段类型是否正确;
- 枚举值是否在允许范围内;
- 金额、日期和数量是否满足业务约束。
下面是一个最小升级框架:
python
import json
UPGRADE = {
Tier.LUNA: Tier.TERRA,
Tier.TERRA: Tier.SOL,
}
def validate_json(text: str, required_keys: set[str]) -> bool:
try:
data = json.loads(text)
except json.JSONDecodeError:
return False
return (
isinstance(data, dict)
and required_keys.issubset(data.keys())
)
def run_with_escalation(
task: Task,
required_keys: set[str],
) -> tuple[str, Tier]:
tier = choose_tier(task)
while True:
result = call_model(task, tier)
if validate_json(result, required_keys):
return result, tier
if tier == Tier.SOL:
raise ValueError(
"Sol输出仍未通过业务校验,转人工处理"
)
tier = UPGRADE[tier]
这里还有一个容易踩的坑:
如果失败原因是JSON Schema写错、工具参数不兼容、权限不足或上游数据缺失,升级模型通常解决不了问题。
生产系统应该区分两类失败:
- 模型质量失败:可以考虑升级模型;
- 工程链路失败:应该修复Schema、工具、权限或数据。
网络超时、限流和服务端错误也不属于模型能力问题,应在调用层做指数退避、限次重试和熔断,不能一报错就从Luna升级到Sol。
五、用一个简单案例测算成本
假设某服务每月处理1万次请求,每次平均消耗:
- 输入2000 Token;
- 输出500 Token。
月度总量约为2000万输入Token、500万输出Token。
| 方案 | 理论月成本 |
|---|---|
| 全部使用Sol | 250美元 |
| 全部使用Terra | 125美元 |
| 全部使用Luna | 50美元 |
| 40% Luna+50% Terra+10% Sol | 107.5美元 |
三级路由相较全部使用Sol,理论上减少约57%的Token费用,同时又没有把所有任务都压到Luna。
python
PRICE_PER_MILLION = {
Tier.LUNA: {"input": 1.0, "output": 6.0},
Tier.TERRA: {"input": 2.5, "output": 15.0},
Tier.SOL: {"input": 5.0, "output": 30.0},
}
def estimate_cost(
tier: Tier,
input_tokens: int,
output_tokens: int,
) -> float:
price = PRICE_PER_MILLION[tier]
return (
input_tokens / 1_000_000 * price["input"]
+ output_tokens / 1_000_000 * price["output"]
)
这只是静态估算,没有计入缓存、重试、工具调用、模型输出长度变化和批处理折扣。
真正上线时,应该记录每类任务的成功率、人工返工率、P95延迟和实际Token消耗,再调整路由比例。
六、缓存不能替代路由,但可以继续降成本
GPT-5.6支持显式Prompt缓存断点。官方当前规则是:
- 缓存写入按照未缓存输入价格的1.25倍计费;
- 缓存读取继续享受90%的缓存输入折扣。
因此不要把每一段动态内容都强行写入缓存,更合适的做法是:
- 把稳定的系统提示词、规则和工具说明放在固定前缀;
- 把用户问题、检索结果和实时数据放在后部;
- 统计
cached_tokens和缓存写入量; - 只有重复读取足够多时,显式缓存才真正划算。
先做任务路由,再优化缓存。
两者解决的是不同问题:路由决定该使用哪一档能力,缓存决定重复输入是否还要按原价计算。
七、上线前至少记录这5个指标
建议为每个任务类型记录:
- 首次选择的模型层级;
- 自动验收通过率;
- Luna升Terra、Terra升Sol的比例;
- P50与P95响应延迟;
- 单次成功任务的真实成本。
如果Luna调用很便宜,但某类任务有60%都要升级,它就不应该继续从Luna开始。
如果Terra在某类代码解释任务上的一次通过率已经足够高,也没有必要为了追求理论最强而全部切到Sol。
最终应该优化的是:
在质量达标的前提下,用尽可能低的成本和延迟完成一次成功任务。
这才是Sol、Terra和Luna三级路由真正有价值的地方。