EasyAPI问答
前往 EasyAPI

用 OpenAI Python SDK 调用国产大模型要怎么改代码?

EasyAPI 团队整理

直接回答

用 OpenAI Python SDK 调用国产大模型只需要改三处:创建客户端时把 base_url 设为兼容服务的地址,api_key 换成该平台的 Key,调用时把 model 写成目标模型的 ID。其余的 messages、stream 等写法保持不变。

官方的 openai Python 包可以直接用来调用国产大模型,前提是对方提供 OpenAI 兼容接口。需要改的只有三处:base_url、api_key 和 model。

下面以 EasyAPI 为例给出可以直接运行的代码。EasyAPI 的 OpenAI 兼容 Base URL 是 https://token.easyapi.com/v1,一个 Key 可以调用多家国产模型,所以换模型时连前两处都不用再动。

关键要点

  • 安装官方包 pip install openai 即可,不需要额外的厂商 SDK。
  • base_url 要写到 /v1 为止,不要带 /chat/completions。
  • API Key 建议放在环境变量里,不要写进代码或提交到仓库。
  • 模型 ID 区分大小写,以模型广场显示的为准。
  • 流式输出只需加 stream=True,写法与调用 OpenAI 时相同。

完整示例

步骤如下:

  1. 在 EasyAPI 控制台的令牌管理中创建令牌,复制 sk- 开头的 Key。
  2. 把 Key 写入环境变量:export EASYAPI_API_KEY="sk-..."。
  3. 安装 SDK:pip install openai。
  4. 运行下面的代码。
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://token.easyapi.com/v1",   # 改动 1:服务地址
    api_key=os.environ["EASYAPI_API_KEY"],     # 改动 2:平台签发的 Key
)

resp = client.chat.completions.create(
    model="deepseek-v4.1-flash-1017",          # 改动 3:模型 ID
    messages=[
        {"role": "system", "content": "你是一个简洁的助手。"},
        {"role": "user", "content": "用三句话解释什么是向量数据库。"},
    ],
)

print(resp.choices[0].message.content)
print(resp.usage)  # 本次调用的输入、输出 Token 数

换一个模型

客户端不用重新创建,只改 model 即可。下面这些模型 ID 都在 EasyAPI 当前的公开目录里:

模型 ID厂商目录中的定位
deepseek-v4.1-flash-1017DeepSeek主力模型,支持思考与非思考模式
qwen3.8-max阿里 QwenQwen3.8 系列的旗舰推理模型
kimi-k3月之暗面面向复杂编程与长时间智能体任务的多模态推理模型
glm-5.3智谱面向复杂软件工程与长程智能体任务
for name in ["deepseek-v4.1-flash-1017", "qwen3.8-max", "kimi-k3", "glm-5.3"]:
    r = client.chat.completions.create(
        model=name,
        messages=[{"role": "user", "content": "1+1 等于几?只回答数字。"}],
    )
    print(name, "->", r.choices[0].message.content)

目录会随供应商调整,完整列表以模型广场为准,也可以调用 client.models.list() 查看当前 Key 可用的模型。

流式输出

stream = client.chat.completions.create(
    model="qwen3.8-max",
    messages=[{"role": "user", "content": "写一首关于秋天的四行诗。"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

流式模式下内容是分块到达的,每个数据块里的 delta.content 可能为空,所以要先判断再输出。需要统计用量时,可以在请求里加上 stream_options={"include_usage": True},用量信息会出现在靠后的数据块中。

上线前建议补上的三件事

示例代码能跑通只是开始,放进正式项目前建议再做三件事:

  1. 设置超时和重试。 创建客户端时可以传入 timeout 和 max_retries,避免网络抖动时请求一直挂起。哪些错误值得重试,见报错排查一文。
  2. 限制输出长度。 通过 max_tokens 或 max_completion_tokens 给输出设上限,防止异常情况下生成过长内容而多扣费。
  3. 按环境拆分 Key。 开发、测试、生产各用一个令牌,并在控制台为每个令牌设置额度和可用模型,出问题时可以单独停用。

容易填错的地方

  • base_url 少了 /v1 或多了路径。 正确写法是 https://token.easyapi.com/v1。
  • 用了别的平台的 Key。 Key 与签发它的平台绑定,换了地址就要换 Key。
  • 模型名拼写或大小写不对。 建议直接从模型广场复制。
  • 参数不被目标模型支持。 例如部分新模型需要用 max_completion_tokens 替代 max_tokens。切换模型后遇到参数报错,先去掉非必需参数再逐个加回。
  • 把视频模型当成对话模型调用。 视频生成使用异步任务接口,不能通过 chat.completions 调用。

需要说明的边界:OpenAI SDK 只覆盖兼容格式里的通用能力。如果你要用某家厂商的专有参数或专有接口,这种写法不一定能满足,需要查该模型的说明或改用厂商官方 SDK。原理见 OpenAI 兼容 API 是什么。

常见问题

调用国产大模型需要装各家自己的 SDK 吗?

不需要。只要服务提供 OpenAI 兼容接口,用官方 openai 包就能调用;通过 EasyAPI 接入时,多家模型共用同一个客户端对象。

代码里的 api_key 可以直接写死吗?

不建议。Key 拥有完整的调用权限,写进代码容易随仓库或截图泄露。放在环境变量或密钥管理服务中,并按环境使用不同的令牌更稳妥。

运行后报 401 怎么办?

先检查 Key 是否完整、是否属于当前平台、令牌是否过期或被禁用。完整排查步骤见 调用大模型 API 返回 401 / 429 / 5xx 分别该怎么排查。

异步客户端 AsyncOpenAI 也能这样用吗?

可以。AsyncOpenAI 与 OpenAI 接受同样的 base_url 和 api_key 参数,改法相同。

小结

用 OpenAI Python SDK 调用国产大模型,只需要改 base_url、api_key 和 model 三处,流式、多轮对话等写法都不变。切换模型后记得验证参数支持情况,接口细节见 EasyAPI 文档。

一个 API Key,按 OpenAI 兼容格式调用多家模型

按量计费,用量逐条可查。价格与当前可用模型以模型广场实时显示为准。