SageMaker 推理端点支持 OpenAI 兼容 API:已有代码零改动直接迁移
如果你的项目现在用的是 OpenAI SDK,代码里写着 openai.chat.completions.create(),想迁移到 AWS 自己的推理基础设施——以前得改一堆代码。
现在不用了。Amazon SageMaker AI 推理端点正式支持 OpenAI 兼容 API。你只需要把 base_url 指向 SageMaker 端点,其他代码一行不动。
这解决什么问题
很多团队的 AI 应用是这样发展的:
- 用 OpenAI API 快速原型验证
- 效果不错,准备上生产
- 发现问题:成本不可控、数据出境、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_url 和 model 名。业务逻辑一行没动。
认证配置
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 适合"要精细控制推理性能"的团队。
快速验证步骤
- 在 SageMaker 部署一个支持 OpenAI API 的模型端点(用 TGI 或 vLLM 容器)
- 把现有代码的
base_url改成 SageMaker 端点地址 - 跑测试,确认输入输出格式一致
- 灰度切流量
整个过程如果端点已经部署好了,代码层面改动 10 分钟内搞定。
小结
SageMaker OpenAI 兼容 API 的意义:降低迁移门槛到接近零。
不是"学一套新 SDK",而是"改一个 URL"。对于已经在 OpenAI 生态里跑了一段时间、开始考虑成本和数据主权的团队来说,这是当前迁移成本最低的路径。
官方文档:https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-openai-compatible.html
Amazon SageMaker AI 由亚马逊云科技提供。推理端点按实例小时计费。

浙公网安备 33010602011771号