SageMaker AI 端点现在直接兼容 OpenAI API:换一行 URL 就能跑

2026-05-21 31 预计阅读时间:1 分钟
来源:aws.amazon.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:6 分钟

用 OpenAI SDK 或 LangChain 调大模型,是很多团队的标准做法。问题在于:一旦想把模型迁到 AWS SageMaker AI 上托管,就得写 SigV4 签名、换客户端、改调用逻辑——迁移成本不小。今天 SageMaker AI 正式推出了 OpenAI-compatible API 支持,实时推理端点直接暴露 /v1/chat/completions 这类接口,OpenAI SDK、LangChain、Strands Agents 只改一行 base_url 就能对接,不需要自定义客户端或签名包装器。

改了什么

过去调用 SageMaker AI 端点,要走 AWS 自己的 InvokeEndpoint API,请求体格式和 OpenAI 完全不同,认证靠 SigV4 签名。现在 SageMaker AI 在端点前面加了一层兼容层:

  • 路径对齐 OpenAI:/v1/chat/completions/v1/completions/v1/embeddings
  • 请求/响应 JSON 结构与 OpenAI 一致
  • 认证方式仍然是 AWS SigV4,但兼容层自动处理——SDK 侧不再需要手动签名

这意味着你现有的 OpenAI SDK 代码、LangChain chain 定义、Strands Agent 配置,几乎不用改业务逻辑,只需把 base_url 指向 SageMaker AI 端点即可。

用 OpenAI SDK 直接调 SageMaker AI

最直接的验证方式:拿 OpenAI Python SDK,把 base_url 换成 SageMaker AI 端点地址。下面是一段可以立即跑的代码:

# pip install openai boto3
# 先确保 AWS 凭证已配置(环境变量、~/.aws/credentials 或 IAM Role)

from openai import OpenAI

# 关键改动:base_url 指向 SageMaker AI 端点
# 格式:https://runtime.sagemaker.{region}.amazonaws.com/endpoints/{endpoint-name}/v1/
client = OpenAI(
    base_url="https://runtime.sagemaker.us-east-1.amazonaws.com/endpoints/my-llm-endpoint/v1/",
    # OpenAI SDK 要求提供 api_key,但 SageMaker 兼容层用 SigV4 认证
    # 这里填任意非空字符串即可,实际认证由底层 boto3 完成
    api_key="no-key-needed",
)

response = client.chat.completions.create(
    model="my-llm-endpoint",  # SageMaker 端点名称
    messages=[
        {"role": "system", "content": "你是一个简洁的技术顾问。"},
        {"role": "user", "content": "用一句话解释什么是向量数据库。"},
    ],
    max_tokens=128,
)

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

运行前要改的地方:

  1. region——换成你端点所在的 AWS 区域,比如 us-west-2
  2. my-llm-endpoint——换成你实际创建的 SageMaker 端点名称。
  3. AWS 凭证——确保当前环境有权限调用 sagemaker-runtime:InvokeEndpoint

注意 api_key="no-key-needed" 这一行:OpenAI SDK 强制要求传入 api_key,否则初始化报错。SageMaker 兼容层不走 API Key 认证,所以填任意非空字符串占位即可,真实鉴权由底层 boto3 的 SigV4 机制完成。

LangChain 和 Strands Agents 怎么切

LangChain 的 ChatOpenAI 同样接受 base_url 参数,改动方式几乎一样:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

llm = ChatOpenAI(
    base_url="https://runtime.sagemaker.us-east-1.amazonaws.com/endpoints/my-llm-endpoint/v1/",
    api_key="no-key-needed",
    model="my-llm-endpoint",
)

# 直接用在 chain 里
response = llm.invoke([HumanMessage(content="列出三种常见的缓存策略。")])
print(response.content)

Strands Agents 的配置思路相同——在 agent 定义中把模型端点 URL 指向 SageMaker AI,其余 agent 逻辑(工具调用、多步推理)保持不变。

什么时候值得切过来

兼容层降低了迁移门槛,但不是所有场景都该立刻切换。几个判断维度:

维度 适合留在 OpenAI 适合迁到 SageMaker AI
模型选择 需要 GPT-4o、o1 等独家模型 用开源模型(Llama、Mistral、Qwen 等)或自托管微调模型
数据合规 数据可以出境到 OpenAI 数据必须留在 AWS 区域内(金融、医疗、政务)
成本控制 调用量小、按 token 计费可接受 大规模推理、需要竞价实例或自定义硬件降本
延迟要求 可接受公网延迟 需要端点在 VPC 内、与业务服务同区域低延迟

迁移前检查清单:

  1. 端点已创建并处于 InService 状态——在 SageMaker 控制台或用 aws sagemaker describe-endpoint 确认。
  2. IAM 策略包含 sagemaker-runtime:InvokeEndpoint,且资源范围覆盖目标端点。
  3. 端点部署的模型支持兼容层——目前覆盖了主流开源模型容器镜像,自建容器需确认是否暴露了 OpenAI 格式接口。
  4. 如果用了 streaming,确认端点和 SDK 侧都支持 stream=True——兼容层已支持 SSE 流式输出。

兼容层最大的价值不是"比 OpenAI 更好",而是让已经在 OpenAI SDK 生态里写好的代码,能以最小改动跑在自控的 SageMaker 端点上。换一行 URL,试一次调用,再决定要不要全面迁移。


相关推荐