SageMaker 推理端点支持 OpenAI 兼容 API:已有代码零改动直接迁移

如果你的项目现在用的是 OpenAI SDK,代码里写着 openai.chat.completions.create(),想迁移到 AWS 自己的推理基础设施——以前得改一堆代码。

现在不用了。Amazon SageMaker AI 推理端点正式支持 OpenAI 兼容 API。你只需要把 base_url 指向 SageMaker 端点,其他代码一行不动。

这解决什么问题

很多团队的 AI 应用是这样发展的:

  1. 用 OpenAI API 快速原型验证
  2. 效果不错,准备上生产
  3. 发现问题:成本不可控、数据出境、SLA 不够

然后开始考虑自部署模型(Llama、Mistral 等),或者迁移到 AWS。但一看代码里到处是 openai.XXX,SDK 调用方式和 SageMaker 的 invoke_endpoint 完全不同,改起来工作量不小。

OpenAI 兼容 API 解决的就是这个问题:基础设施换了,代码不用动。

实际操作

原来的 OpenAI 调用

from openai import OpenAI

client = OpenAI(api_key="sk-xxxx")

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一个技术文档助手"},
        {"role": "user", "content": "解释一下什么是 VPC Peering"}
    ],
    temperature=0.7,
    max_tokens=1000
)

print(response.choices[0].message.content)

迁移到 SageMaker 后

from openai import OpenAI

# 只改这两行
client = OpenAI(
    base_url="https://runtime.sagemaker.us-east-1.amazonaws.com/endpoints/my-llama-endpoint/invocations/v1",
    api_key="not-needed"  # 认证走 AWS Sigv4
)

response = client.chat.completions.create(
    model="meta-llama/Llama-3.1-70B-Instruct",  # 模型名改成你部署的
    messages=[
        {"role": "system", "content": "你是一个技术文档助手"},
        {"role": "user", "content": "解释一下什么是 VPC Peering"}
    ],
    temperature=0.7,
    max_tokens=1000
)

print(response.choices[0].message.content)

改了什么?base_urlmodel 名。业务逻辑一行没动。

认证配置

SageMaker 用 AWS IAM 认证(Sigv4),不用 API Key。配置方式:

import boto3
from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest

session = boto3.Session()
credentials = session.get_credentials()

# 方式一:用 AWS 提供的 OpenAI 兼容客户端
from sagemaker.serve import OpenAICompatibleClient

client = OpenAICompatibleClient(
    endpoint_name="my-llama-endpoint",
    region_name="us-east-1"
)

或者直接用环境变量:

export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=your-key
export AWS_SECRET_ACCESS_KEY=your-secret

支持的模型

在 SageMaker 上部署了以下模型的端点都支持 OpenAI 兼容 API:

  • Llama 系列:Llama 3.1 8B/70B/405B、Llama 3.2
  • Mistral 系列:Mistral 7B、Mixtral 8x7B、Mistral Large
  • Falcon:Falcon 40B/180B
  • 自定义模型:任何通过 TGI/vLLM 容器部署的模型

只要推理容器实现了 /v1/chat/completions 接口,就能用 OpenAI SDK 直接调。

支持的 OpenAI API 接口

接口 支持状态
/v1/chat/completions
/v1/completions
/v1/embeddings
/v1/models
Streaming(流式输出)
Function Calling ✅(需要模型支持)
Vision(图片输入) ✅(需要多模态模型)

迁移的实际好处

1. 成本可控

OpenAI 按 token 计费,用量大了成本线性增长。SageMaker 按实例小时计费,流量越大单次调用越便宜。

粗算:如果你每天调用 100 万次 GPT-4o(平均 500 token/次),月成本约 $15,000+。同样规模在 SageMaker 上跑 Llama 3.1 70B(4×ml.g5.12xlarge),月成本约 $8,000-10,000,还能根据流量弹性扩缩。

2. 数据不出境

数据在你的 VPC 内处理,不走第三方 API。对金融、医疗、政务类应用来说,这是硬性要求。

3. 模型选择自由

不绑定某一家。今天用 Llama,明天换 Mistral,代码不用改——都是同一套 OpenAI 兼容接口。

4. 弹性伸缩

SageMaker 支持自动扩缩容。流量高峰加实例,低谷缩回来。不像 OpenAI API 那样遇到限流只能等。

LangChain / LlamaIndex 直接用

如果你用的是框架层面的调用,迁移更简单:

# LangChain
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="https://runtime.sagemaker.us-east-1.amazonaws.com/endpoints/my-endpoint/invocations/v1",
    model="meta-llama/Llama-3.1-70B-Instruct",
    api_key="not-needed"
)

response = llm.invoke("什么是 VPC Peering?")

LangChain 底层用的就是 OpenAI SDK,改 base_url 就行。LlamaIndex 同理。

和 Bedrock 的区别

可能有人会问:Bedrock 不是也能调模型吗?

SageMaker + OpenAI API Bedrock
部署方式 自己管实例(选机型、扩缩容) 无服务器(按 token 计费)
模型来源 HuggingFace Hub、自训练模型、任意开源 Bedrock 市场上架的模型
适合场景 高吞吐量、需要自定义推理容器、有 GPU 运维能力 不想管基础设施、快速接入
成本模式 按实例小时 按 token 或按时间段
OpenAI 兼容 ✅ 原生支持 ✅ Bedrock 也支持

两者不矛盾。Bedrock 适合"不想管 GPU"的团队,SageMaker 适合"要精细控制推理性能"的团队。

快速验证步骤

  1. 在 SageMaker 部署一个支持 OpenAI API 的模型端点(用 TGI 或 vLLM 容器)
  2. 把现有代码的 base_url 改成 SageMaker 端点地址
  3. 跑测试,确认输入输出格式一致
  4. 灰度切流量

整个过程如果端点已经部署好了,代码层面改动 10 分钟内搞定。

小结

SageMaker OpenAI 兼容 API 的意义:降低迁移门槛到接近零。

不是"学一套新 SDK",而是"改一个 URL"。对于已经在 OpenAI 生态里跑了一段时间、开始考虑成本和数据主权的团队来说,这是当前迁移成本最低的路径。

官方文档:https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-openai-compatible.html


Amazon SageMaker AI 由亚马逊云科技提供。推理端点按实例小时计费。

posted @ 2026-06-02 11:36  亚马逊云开发者  阅读(12)  评论(0)    收藏  举报