GPT-6.1 Sol:用五分之一的 Token 价格承接高强度智能任务

2026-09-29 18 预计阅读时间: 1 分钟
来源: openai.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

GPT-6.1 Sol 的定位很明确:在编码、计算机操作和专业工作上提供接近 Astra 的智能水平,同时将标准 API 的输入与输出 Token 单价降至 Astra 的五分之一。对生产系统而言,这不只是“多了一个便宜模型”,而是可能改变默认模型、升级策略和预算分配方式。

需要注意的是,“接近 Astra”并不意味着所有任务都能无差别替换。更稳妥的做法,是把 Sol 放进真实工作负载中测试,再决定哪些请求默认交给它,哪些高风险任务仍需升级到 Astra。

真正值得关注的是单位任务成本

API 价格降低五倍,不代表端到端成本一定同步降低五倍。一次任务的实际成本还取决于上下文长度、输出长度、失败重试、工具调用次数和人工复核时间:

单次任务成本 = 输入 Token 成本
             + 输出 Token 成本
             + 工具与基础设施成本
             + 重试成本
             + 人工复核成本

假设一个工作流在 Astra 上需要一次调用,而 Sol 因质量波动平均需要 1.3 次调用,那么纯 Token 成本仍可能约为 Astra 的 26%,但节省幅度已经不是理论上的 80%。反过来,如果 Sol 在代码生成或文档分析中能一次完成任务,它就很适合成为高并发系统的默认层。

评估时建议同时记录以下指标:

  • 任务成功率:结果是否真正满足验收条件,而非只看文字是否流畅。
  • 输入与输出 Token:分别统计,因为两类 Token 的价格和优化方法不同。
  • 工具调用成功率:特别是浏览器、终端和内部 API 操作。
  • P50/P95 延迟:专业工作流往往受尾延迟影响。
  • 重试与升级率:有多少 Sol 请求最终仍要交给 Astra。
  • 人工修订时间:对编码和分析任务,这通常比 Token 费用更重要。

三类工作负载,三种验收方式

编码任务:让测试结果说话

编码能力不应只靠主观阅读判断。可以准备一组来自真实仓库、但已经脱敏的任务,例如修复边界条件、补充单元测试、迁移依赖版本和解释陌生模块。验收标准应包含:

  • 项目能否编译或启动;
  • 原有测试是否仍通过;
  • 新增测试是否覆盖目标缺陷;
  • 是否引入无关改动;
  • 静态检查和安全扫描是否通过。

如果 Sol 的补丁通过同一套 CI,就可以逐步扩大覆盖面;如果只是在说明文字上表现不错,却经常生成不可运行的修改,就不应仅因低价而替换现有模型。

计算机操作:限制权限比选择模型更重要

计算机操作涉及点击、输入、下载、上传和执行命令。即使模型能力接近更高档产品,也应坚持最小权限:

  • 在隔离的浏览器或容器中运行;
  • 默认禁用付款、删除、发布和权限变更;
  • 对外发邮件、提交表单等动作增加人工确认;
  • 保存截图、工具参数和执行结果,便于审计;
  • 为循环操作设置步数、时间和预算上限。

价格下降可能让团队更愿意运行长链路代理,但调用更便宜并不会降低误操作风险。

专业工作:建立证据边界

在合同审阅、财务分析、研究摘要等场景中,可以让 Sol 承担信息提取、初稿生成和格式转换,但应要求输出引用依据,并把最终判断留给专业人员。关键事实、数字和条款需要回到原始材料核验。

可复制的双模型评测脚本

下面是一个可改造的 Python 评测骨架,用相同任务比较 Sol 与 Astra 的成功率、延迟和 Token 使用量。由于摘要没有给出正式 API 路径、模型标识或请求结构,示例假设服务兼容常见的 Chat Completions JSON 格式;运行前请按照实际文档修改 API_URL、模型名和响应解析逻辑。

将代码保存为 compare_models.py:

import json
import os
import time
import urllib.request

API_URL = os.environ.get("API_URL", "https://api.example.com/v1/chat/completions")
API_KEY = os.environ["API_KEY"]
SOL_MODEL = os.environ.get("SOL_MODEL", "gpt-6.1-sol")
ASTRA_MODEL = os.environ.get("ASTRA_MODEL", "astra")

CASES = [
    {
        "name": "python_edge_case",
        "prompt": (
            "Write a Python function parse_port(value) that accepts integers or "
            "decimal strings from 1 to 65535. Reject booleans, whitespace-only "
            "strings, floats, and out-of-range values. Include unit tests."
        ),
    },
    {
        "name": "incident_summary",
        "prompt": (
            "Create a concise incident report from these facts: API errors began "
            "at 09:12 UTC, peaked at 18%, rollback started at 09:24, recovery "
            "completed at 09:31, and the cause is not yet confirmed. Separate "
            "facts from hypotheses."
        ),
    },
]


def call_model(model, prompt):
    payload = json.dumps({
        "model": model,
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0,
    }).encode("utf-8")

    request = urllib.request.Request(
        API_URL,
        data=payload,
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        method="POST",
    )

    started = time.perf_counter()
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
    latency = time.perf_counter() - started

    return {
        "model": model,
        "latency_seconds": round(latency, 3),
        "input_tokens": result.get("usage", {}).get("prompt_tokens"),
        "output_tokens": result.get("usage", {}).get("completion_tokens"),
        "answer": result["choices"][0]["message"]["content"],
    }


for case in CASES:
    for model in (SOL_MODEL, ASTRA_MODEL):
        try:
            row = {"case": case["name"], **call_model(model, case["prompt"])}
        except Exception as exc:
            row = {"case": case["name"], "model": model, "error": str(exc)}
        print(json.dumps(row, ensure_ascii=False))

配置环境变量后运行:

export API_URL="https://你的服务地址/v1/chat/completions"
export API_KEY="你的 API 密钥"
export SOL_MODEL="实际的 Sol 模型标识"
export ASTRA_MODEL="实际的 Astra 模型标识"
python compare_models.py > results.jsonl

这个脚本只负责收集原始结果。代码任务还应在临时目录或容器中提取代码、运行测试并检查退出码;专业文本任务则可以配套人工评分表,避免用另一个模型的主观偏好代替真实验收。

更适合生产环境的路由策略

相比一次性全量替换,可以采用分层路由:

  1. 默认把低风险、可验证的请求交给 Sol。
  2. 遇到测试失败、工具异常或低置信度结果时自动重试一次。
  3. 重试仍失败,再升级到 Astra。
  4. 涉及付款、生产变更、法律结论等高风险动作时直接进入人工审批或高等级模型流程。

可以用一个简单指标判断迁移是否划算:

有效任务成本 = 总模型费用 / 最终通过验收的任务数

如果 Sol 的有效任务成本更低,同时成功率、延迟和风险都处于可接受范围,它就适合成为默认模型;若升级率过高,理论价格优势会被重试和人工修订吞噬。

上线前的检查清单

  • 用真实任务建立固定评测集,不只测试演示提示词。
  • 分别统计输入、输出、缓存、工具和重试成本。
  • 为计算机操作设置沙箱、审批点和完整审计日志。
  • 对模型标识、API 格式、速率限制和正式价格进行文档核验。
  • 先做小流量灰度,观察失败类型,而不是只看平均分。
  • 保留快速回退到 Astra 或旧模型的能力。

GPT-6.1 Sol 最有价值的用法,不是简单贴上“廉价 Astra”的标签,而是重新设计模型分层:让 Sol 承担大多数可验证工作,把更昂贵的能力留给真正困难、高风险或多次失败的请求。五分之一的 Token 单价提供了很强的优化空间,但最终决策仍应由真实任务的有效成本和验收结果驱动。


相关推荐