OpenAI 为 GPT‑6 家族增加了 Sol 和 Luna。两款模型沿用了与 Astra 相似的训练方法,目标是把 Astra 在专业工作、事实性、编程和计算机使用上的进步,放进响应更快、成本更低的模型中。定位也很清楚:它们不是替代 Astra 的新旗舰,而是位于 Astra 之下、适合规模化调用的选择。
这次最容易量化的变化来自价格。来源摘要明确提到,原 GPT‑5.6 Sol 迁移为 GPT‑6 Sol 后,输入价格从 4 美元降到 2 美元,相当于减半。由于摘要没有提供完整的输出价格和计费单位,生产预算仍应以控制台中的正式价目表为准,不宜自行补全数字。
Sol、Luna 和 Astra 应该怎样分工
便宜模型最常见的误用,是把“继承旗舰能力进步”理解成“与旗舰能力完全相同”。更稳妥的理解是:Sol 和 Luna采用了相近的训练路线,但产品能力仍被放在 Astra 之下。
可以按任务风险划分模型:
| 任务类型 | 建议起点 | 原因 |
|---|---|---|
| 分类、抽取、改写、摘要 | Sol 或 Luna | 请求量大,格式较稳定,便于自动验收 |
| 常规代码生成与测试补全 | Sol 或 Luna | 可通过编译、单元测试和静态检查兜底 |
| 复杂架构设计、疑难调试 | Astra | 错误路径较长,失败成本更高 |
| 高风险事实判断 | Astra 加检索与引用校验 | 模型档位不能替代事实验证 |
| 计算机操作 | 先用便宜模型规划,关键动作升级或审批 | 外部操作可能产生不可逆影响 |
Sol 与 Luna 之间如何进一步分配,不能只看名称。应该用自己的提示词、上下文长度和输出结构做测试,重点测以下指标:
- 任务成功率:答案是否真正完成业务目标,而不只是语言流畅。
- 事实错误率:涉及内部文档、时间和数字时,是否能给出可验证依据。
- 代码通过率:生成结果能否通过测试、类型检查和安全扫描。
- 延迟分位数:除平均值外,还要记录 P50、P95 和超时率。
- 单个成功任务成本:总费用除以成功请求数,比单纯比较 token 单价更有意义。
用真实请求做一轮小型基准测试
下面是一个可以直接改造的 Python 测试脚本。它调用 Responses API,记录各模型的延迟、token 用量和完整输出,并将结果写入 JSONL 文件。
这里有两个需要明确的假设:模型 ID 使用了 gpt-6-sol、gpt-6-luna 和 gpt-6-astra 作为示例;运行前必须替换成账户中实际可用的 ID。价格也不写死在程序里,应从官方控制台确认后通过环境变量传入。
安装 SDK 并配置环境:
python -m pip install -U openai
export OPENAI_API_KEY="your-api-key"
export MODELS="gpt-6-sol,gpt-6-luna,gpt-6-astra"
# 可选:按每百万输入/输出 token 填入控制台中的实际价格
export MODEL_PRICES='{"gpt-6-sol":{"in":2,"out":0}}'
将下面内容保存为 bench_models.py:
import json
import os
import time
from pathlib import Path
from openai import OpenAI
client = OpenAI()
models = [m.strip() for m in os.environ["MODELS"].split(",") if m.strip()]
prices = json.loads(os.getenv("MODEL_PRICES", "{}"))
cases = [
{
"name": "structured_extraction",
"prompt": (
"从下面文本中提取项目名、负责人和截止日期,只输出 JSON。\n"
"文本:支付网关升级由林晨负责,计划在 2026-05-18 前完成。"
),
},
{
"name": "coding",
"prompt": (
"编写一个 Python 函数,合并重叠时间区间。"
"同时给出至少 5 个 pytest 测试,只输出代码。"
),
},
{
"name": "factual_discipline",
"prompt": (
"仅根据以下材料回答;材料没有的信息必须回答‘无法从材料确认’。\n"
"材料:服务 A 的默认超时为 3 秒。\n问题:服务 A 的重试次数是多少?"
),
},
]
def estimate_cost(model, input_tokens, output_tokens):
price = prices.get(model)
if not price:
return None
return round(
input_tokens / 1_000_000 * price["in"]
+ output_tokens / 1_000_000 * price["out"],
8,
)
results = []
for model in models:
for case in cases:
started = time.perf_counter()
response = client.responses.create(
model=model,
input=case["prompt"],
)
latency = time.perf_counter() - started
usage = response.usage
row = {
"model": model,
"case": case["name"],
"latency_seconds": round(latency, 3),
"input_tokens": usage.input_tokens,
"output_tokens": usage.output_tokens,
"estimated_cost_usd": estimate_cost(
model, usage.input_tokens, usage.output_tokens
),
"output": response.output_text,
}
results.append(row)
print(json.dumps(row, ensure_ascii=False))
Path("benchmark-results.jsonl").write_text(
"\n".join(json.dumps(r, ensure_ascii=False) for r in results) + "\n",
encoding="utf-8",
)
运行:
python bench_models.py
这个脚本只负责采样,不会自动判断答案好坏。结构化抽取可以增加 JSON Schema 校验,代码题应把生成内容放进隔离容器执行测试,事实性任务则需要预先准备标准答案。不要直接执行模型生成的任意代码,也不要让测试代理访问生产凭据。
不要只看每 token 价格
输入价格从 4 美元降到 2 美元很醒目,但实际节省取决于流量结构。一个上下文很长、输出很短的检索或分析服务,会更直接地受益于输入降价;如果应用以长篇生成为主,输出价格和输出长度可能更影响账单。
评估成本时可以使用下面的公式:
请求成本 = 输入 token 数 × 输入单价 + 输出 token 数 × 输出单价
成功任务成本 = 所有请求总成本 ÷ 通过质量门槛的任务数
第二个指标尤其重要。假设便宜模型的单次请求成本下降 50%,但为了修正失败结果需要重试,或者需要 Astra 再审核一次,最终节省比例就会明显缩小。
延迟也应按完整链路计算。模型生成更快,并不代表用户体验一定更快;检索、工具调用、代码执行和重试都可能成为新的瓶颈。
更稳妥的上线方式:分层路由而不是一次性替换
生产迁移可以从低风险、高频任务开始:
- 从线上流量抽取脱敏样本,建立 Sol、Luna、Astra 的离线对照集。
- 为每类任务定义硬性门槛,例如 JSON 合法率、单元测试通过率和引用准确率。
- 先让新模型以影子模式运行,不直接影响用户结果。
- 小比例放量,并监控质量、P95 延迟、重试率和单个成功任务成本。
- 为失败请求保留升级到 Astra 的路径,同时限制最大重试次数。
- 对计算机操作、外部写入和资金相关动作保留人工确认或策略审批。
Sol 和 Luna 的价值不只是“更便宜”,而是让模型路由有了更细的成本档位。合理的目标并非把所有 Astra 请求迁走,而是让大量可验证任务停留在便宜模型上,只把真正复杂、模糊或高风险的请求升级给 Astra。这样才能把价格下降转化为稳定的生产收益,而不是把节省下来的模型费用重新花在重试和事故处理上。