AI最新资讯 153

在 Amazon Bedrock 上上手 OpenAI GPT-5.6 Sol、Terra 与 Luna

OpenAI GPT-5.6 的 Sol、Terra、Luna 三个能力档位已在 Amazon Bedrock 上正式可用。做 agent 编码、长程推理,或需要高吞吐、低延迟推理时,你可以用熟悉的 OpenAI API 形态调用它们,而不必自己搭一套模型基础设施。

三个模型都走 bedrock-mantle 端点上的 OpenAI Responses API。Sol 面向深度推理与自主编码,Terra 照顾日常生产里的性能与成本平衡,Luna 偏向分类、摘要、路由这类快且便宜的调用。价格与 OpenAI 官方一致,用量可以计入既有的 AWS commitment。默认情况下,提示词和补全不会用来训练模型,也不会共享给模型提供商。

下面按选型、接入、推理控制、缓存、Codex 与配额,把落地路径理一遍。

三个能力档位怎么选

GPT-5.6 用数字表示代际,用 Sol / Terra / Luna 表示可独立演进的能力档位。在 Bedrock 上的关键规格如下:

模型 Model ID 更适合 可用区域
Sol openai.gpt-5.6-sol 自主编码、安全研究、科学分析、多步深度推理 美国东部(弗吉尼亚北部)、美国东部(俄亥俄)
Terra openai.gpt-5.6-terra 通用生产负载,兼顾推理、性能与成本 上述两区 + 美国西部(俄勒冈)
Luna openai.gpt-5.6-luna 高吞吐、延迟敏感:分类、摘要、路由等 上述两区 + 美国西部(俄勒冈)

共性也很明确:都支持文本和图像输入、文本输出,上下文窗口 272K token,统一用 Responses API;reasoning effort 都支持 nonelowmediumhighxhighmax。因此换档位时,往往只需改 model ID,不必重写集成层。

选型可以很直接:复杂重构、多步排查用 Sol;常规业务接口用 Terra;批量分类或路由用 Luna。同一套客户端可以按任务切换。

通过 bedrock-mantle 调用 Responses API

端点形态

Base URL:

text
https://bedrock-mantle.{region}.api.aws

Responses API 路径:

text
/openai/v1/responses

{region} 换成支持区域,例如 us-east-1openai/v1 这条路径专用于 OpenAI 模型,兼容 OpenAI 的 Python 与 TypeScript SDK。已有 OpenAI SDK 应用迁到 Bedrock 时,通常只要改 base URL、换成 Bedrock 上的 model ID,并用 Bedrock API key 或 AWS 凭证认证。

权限与 SDK

账号需要对 bedrock-mantle 具备推理权限。一种做法是给 IAM 主体挂上托管策略 AmazonBedrockMantleInferenceAccess,其中包含示例所需的 bedrock-mantle:CreateInferencebedrock-mantle:CallWithBearerToken 等读与推理创建权限。

OpenAI Python SDK 需要 2.45.0 及以上:

bash
pip install "openai>=2.45.0"

两种认证方式

1. 自动刷新的短期 key(更适合生产)

BedrockOpenAI,配合 token provider,按请求从 AWS 凭证生成并刷新短期 key:

python
from aws_bedrock_token_generator import provide_token
from openai import BedrockOpenAI

region = "us-east-1"
client = BedrockOpenAI(
    aws_region=region,
    bedrock_token_provider=lambda: provide_token(region=region),
)

2. 环境变量里的短期 key

把 key 放在 AWS_BEARER_TOKEN_BEDROCK。这种 key 不会自动刷新,最长约 12 小时就会过期。生产环境更建议自动刷新,或把 key 放进 AWS Secrets Manager。

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://bedrock-mantle.us-east-1.api.aws/openai/v1",
    api_key=os.environ["AWS_BEARER_TOKEN_BEDROCK"],
)

第一次推理

Responses API 用单一 input 字段,生成文本在 output_text

python
response = client.responses.create(
    model="openai.gpt-5.6-terra",
    input="Explain the benefits of prompt caching for agentic workloads.",
    max_output_tokens=512,
    store=False,
)
print(response.output_text)

调节 reasoning effort

复杂多步任务可以让模型在作答前多花一些 reasoning token,结果通常更好,但延迟和费用也会上去。通过 reasoning 参数设定档位,并按任务匹配即可:

python
response = client.responses.create(
    model="openai.gpt-5.6-sol",
    input=(
        "A train leaves at 3 PM at 60 km/h. Another leaves an hour later at "
        "90 km/h from the same station. When does the second catch up?"
    ),
    reasoning={"effort": "high"},
)
print(response.output_text)

Sol、Terra、Luna 都支持从 nonemax 的同一套档位,换模型时推理强度接口保持一致。

工具调用(tool calling)

模型可以请求你定义的工具,由应用侧执行后把结果回传,再生成最终回答。下面是一次客户端侧 round-trip 的完整形状:定义 get_weather,把用户问题与 tools 一并送出,解析 function_call,追加 function_call_output,再请求最终回复。

python
import json

tools = [
    {
        "type": "function",
        "name": "get_weather",
        "description": "Get the current weather for a given location",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "City and country (for example, Seattle, US)",
                },
                "unit": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"],
                    "description": "Temperature unit",
                },
            },
            "required": ["location"],
        },
    }
]

input_list = [{"role": "user", "content": "What's the weather like in Seattle?"}]
response = client.responses.create(
    model="openai.gpt-5.6-terra",
    input=input_list,
    tools=tools,
)

# 下一轮要带上模型输出(可能含 reasoning items)
input_list += response.output

for item in response.output:
    if item.type == "function_call":
        args = json.loads(item.arguments)
        result = {
            "location": args["location"],
            "temperature": 64,
            "condition": "Partly cloudy",
        }
        input_list.append(
            {
                "type": "function_call_output",
                "call_id": item.call_id,
                "output": json.dumps(result),
            }
        )

final_response = client.responses.create(
    model="openai.gpt-5.6-terra",
    input=input_list,
    tools=tools,
)
print(final_response.output_text)

有一点容易漏:GPT-5.6 会先推理再回复,多轮时必须把 response.output(可能包含 reasoning)一并带回。生产环境还可叠加 Amazon Bedrock Guardrails,按用例与负责任 AI 策略加护栏。

在控制台先试再写代码

GPT-5.6 跑在新一代推理引擎上,对应新版 Amazon Bedrock 控制台:面向 bedrock-mantle,并兼容 OpenAI / Anthropic 风格 API。体验是 project 制——建项目、分配模型、配置 API key,还可并排对比,不必先写应用代码。

简要步骤:

  1. 打开模型可用区域(如美国东部弗吉尼亚北部)的新版 Bedrock 控制台;若在旧控制台,选择 Try the new Bedrock console。
  2. 创建或打开 project。
  3. 在 model catalog 里查看 GPT、Claude 与开源权重模型,最多并排对比 3 个模型的能力、模态、上下文、定价与区域。
  4. 把某个 GPT-5.6 模型加入项目。
  5. 发起 evaluation,输入 prompt,查看回复;同一 prompt 最多可选 3 个模型对比。

用 prompt caching 压低重复前缀成本

Agent 与多步工作流里,系统指令、工具定义、参考文档常在请求间重复,只有最新输入在变。GPT-5.6 在 Bedrock 上提供两种 prompt caching:

  • 隐式缓存:默认开启,符合条件的请求会自动缓存,不必改代码结构。
  • 显式缓存:用 cache breakpoint 精确标记可复用前缀。

两种模式都能在请求量上去后减少对共享上下文的重复计费处理。缓存读相对未缓存输入有 90% 折扣;写入缓存的 token 按未缓存输入价的 1.25 倍 计费。具体费率以 Amazon Bedrock 定价页为准。

缓存内容至少保留约 30 分钟,够覆盖一次 agent burst 调用。每个断点前缀至少 1,024 tokens,单请求最多 4 个 cache checkpoint。前缀不足最小长度时请求仍会成功,但不会写入缓存,cached_tokens 为 0。

显式断点

在可复用段落末尾的 content block 上加 prompt_cache_breakpoint,并把 prompt_cache_options 设为 explicit。跨请求使用稳定的 prompt_cache_key,有助于命中同一缓存。系统指令放在断点前,用户问题放在断点后,问题变化不会打掉已缓存前缀:

python
# system_prompt 需为真实内容且至少 1,024 tokens
system_prompt = "You are a technical support agent for Example Corp. ...(1,024+ tokens)..."

def ask(question):
    return client.responses.create(
        model="openai.gpt-5.6-terra",
        prompt_cache_key="support-agent:system-prompt-v1",
        prompt_cache_options={"mode": "explicit"},
        input=[
            {
                "type": "message",
                "role": "developer",
                "content": [
                    {
                        "type": "input_text",
                        "text": system_prompt,
                        "prompt_cache_breakpoint": {"mode": "explicit"},
                    }
                ],
            },
            {
                "type": "message",
                "role": "user",
                "content": [{"type": "input_text", "text": question}],
            },
        ],
    )

first = ask("How do I configure single sign-on?")
print("write:", first.usage.input_tokens_details.cache_write_tokens)

second = ask("How do I reset a password?")
print("read: ", second.usage.input_tokens_details.cached_tokens)
print(second.output_text)

前缀足够大时,第一次调用应看到非零 cache_write_tokens,第二次看到非零 cached_tokens。Agent 循环里前缀大且稳定时,显式模式更合适,因为你能钉死缓存边界,减少无用写入。

隐式缓存

不设置 prompt_cache_options 时走默认隐式模式。端点会在最新 message 上放自动断点,也会尊重你加的显式断点。静态内容(系统指令、工具定义、参考文档)放前面,可变内容放后面,再配上稳定的 prompt_cache_key,就能复用已处理前缀:

python
response = client.responses.create(
    model="openai.gpt-5.6-terra",
    prompt_cache_key="support-agent:kb-v1",
    input=[
        {
            "type": "message",
            "role": "developer",
            "content": [{"type": "input_text", "text": system_prompt}],
        },
        {
            "type": "message",
            "role": "user",
            "content": [{"type": "input_text", "text": "How do I configure single sign-on?"}],
        },
    ],
)
print(response.output_text)

隐式模式省事,但你无法精确指定缓存边界。聊天、RAG 这类前缀天然稳定的场景更合适;agent 大前缀更适合显式。两种模式计费规则相同。若要关闭缓存,可把 prompt_cache_options 设为 explicit 且不添加任何断点。

监控命中率

每次响应的 usage 里可看缓存活动:input_tokens_details.cached_tokens 是从缓存读入的输入 token,cache_write_tokens 是写入量。cached_tokens 已计入总 input_tokens,命中率可用 cached_tokens / input_tokens 估算:

python
usage = response.usage
details = usage.input_tokens_details
cached = getattr(details, "cached_tokens", 0) or 0
cache_write = getattr(details, "cache_write_tokens", 0) or 0
total_input = usage.input_tokens
hit_rate = cached / total_input if total_input else 0.0

print(f"Cached tokens: {cached}")
print(f"Written tokens: {cache_write}")
print(f"Total input: {total_input}")
print(f"Cache hit rate: {hit_rate:.1%}")

一次命中的典型信号是 cached_tokens > 0cache_write_tokens == 0。仅凭 cache_write_tokens == 0 不能确认命中,因为什么都没缓存时也会是 0。即便前缀相同,也不保证每次必中,应跨多次请求统计,而不是盯单次结果。

bedrock-mantle 会把账户、项目、模型级 token 指标发到 CloudWatch 命名空间 AWS/BedrockMantle,但没有专门的 cache 指标;缓存测量以响应里的 usage 为准。应用日志里汇总 cached_tokenscache_write_tokens 即可长期跟踪。

把 Codex 接到 Bedrock

OpenAI Codex 是面向开发者的编码 agent,能操作本地文件、仓库、终端与开发环境:写功能、修 bug、跑测试、开 PR。Codex CLI、VS Code / JetBrains 扩展,以及 ChatGPT 桌面应用,都可以把模型推理路由到 Amazon Bedrock,在你的 AWS 账号内做 In-Region 处理,并沿用前述访问控制。

~/.codex/config.toml 指定模型与 provider(新版 Bedrock 控制台的 Clients 区也会生成连接说明):

toml
model = "openai.gpt-5.6-sol"
model_provider = "amazon-bedrock"

[model_providers.amazon-bedrock.aws]
region = "us-east-1"

认证优先读 AWS_BEARER_TOKEN_BEDROCK,否则走 AWS SDK 凭证链。ChatGPT 桌面应用和 IDE 扩展未必继承 shell 环境,可把变量写在 ~/.codex/.env

bash
AWS_BEARER_TOKEN_BEDROCK=<your-api-key>

改完 config.toml.env 后重启应用或扩展。CLI 则可以在 shell 里 export 同一变量。Codex 通过支持的商业区域里的 bedrock-mantle 发推理。复杂重构、调试适合更高 reasoning;日常小改用较低档位更快。ChatGPT 桌面端可为任务选择 Light、Medium、High、Extra High 等推理强度。

安全与数据处理

每次调用都受你的 IAM 策略约束,可在 VPC 内运行,并记入 AWS CloudTrail。In-Region inference 把请求留在你指定的区域,方便满足数据驻留要求。

Sol、Terra、Luna 是 OpenAI 第三方模型,通过 Bedrock 提供,并受 OpenAI 条款约束。被 classifier 标记的流量,最长可保留 30 天 做自动化离线滥用检测;保留的输入输出由 AWS 存储与处理,默认不共享给模型提供商(除非你 opt-in)。保留策略可通过 data retention mode 配置。

配额、限流与清理

调用走 on-demand、Standard 服务层级,按 token 付费,无需预留容量。bedrock-mantle模型 + 区域管理两道配额:每分钟输入 token、每分钟输出 token;没有 requests-per-minute 配额。通过 prompt caching 读到的缓存输入 token 不计入每分钟输入 token 配额,量级上来时缓存更有价值。

超限会返回 HTTP 429。瞬时限流可用指数退避与有上限的重试,OpenAI SDK 的 max_retries 可配置:

python
from aws_bedrock_token_generator import provide_token
from openai import BedrockOpenAI

region = "us-east-1"
client = BedrockOpenAI(
    aws_region=region,
    bedrock_token_provider=lambda: provide_token(region=region),
    max_retries=6,
)

持续高流量时,把大批请求摊到多分钟,而不是瞬时打满;逐步抬高并发,让吞吐跟区域容量对齐。

On-demand 只在实际调用时计费,没有需要拆掉的基础设施。短期 API key 最长约 12 小时自动过期;若要提前作废,在新版 Bedrock 控制台删除 key——删除会立刻切断所有依赖该 key 的应用,先确认没有在线流量再操作。单价以 Amazon Bedrock 定价为准。

落地时可以怎么排

  1. 在新版控制台建 project,用真实 prompt 对比 Sol / Terra / Luna。
  2. 用 Responses API 样本对接你自己的数据与 model ID。
  3. 对重复前缀加上显式 cache breakpoint,并统计 cached_tokens 命中率。
  4. 按成本与延迟曲线在真实负载上选定默认档位;编码场景再考虑把 Codex 指到同一账号与区域。

同一套 Responses API 与 model ID 约定,就能在深度推理、日常生产与高吞吐路由之间切换,同时把调用留在你的 AWS 边界内。

感谢阅读,如果这篇文章对你有帮助,欢迎继续浏览同栏目内容。

返回 AI最新资讯