“兼容 OpenAI”具体兼容哪些接口和参数?哪些地方有所扩展或不同?逐项说明接入时需要关注的细节。
同样写着“兼容 OpenAI”,不同网关支持的接口和参数却未必一样。你依赖的能力,可能恰好不在支持范围内。本文分别说明已实现的能力、扩展功能,以及有意保留的差异。
支持哪些接口
- /v1/chat/completions:支持流式输出、tools、tool_choice 和结构化输出。
- /v1/embeddings:支持批量处理。
- /v1/images/generations:支持图像生成,以及图像编辑接口。
- /v1/audio/transcriptions、translations 和 speech:覆盖音频转写、翻译和语音合成。
- /v1/models:返回包含供应商信息的模型 ID。
切换 API 地址
from openai import OpenAI
client = OpenAI(
base_url="https://api.starsg.ai/v1",
api_key=STARSG_API_KEY,
)
接入时需要注意的三处差异
有三点需要特别注意。第一,模型 ID 带有供应商信息,避免同名模型产生歧义。第二,响应头中的限流信息表示网关的合并限额,不是某一家上游厂商的限额。第三,响应中会多一个 amplink 区块,说明实际使用的模型、缓存状态,以及是否发生过故障切换。
扩展功能不应悄悄改变原有字段的含义。请求侧的扩展放在 extra_body 中,响应侧的扩展则放在独立命名的区块中。
遇到不支持的参数,接口会返回 400 错误,而不是直接忽略。例如,如果 logit_bias 被悄悄丢弃,输出质量可能下降,却很难从请求中看出原因,排查起来可能花上一周。