一句话回答

Python 调用 OpenAI Compatible API 的关键是设置三个值:api_keybase_urlmodel。如果服务兼容 OpenAI SDK,你可以继续使用 OpenAI Python SDK,只需要把 base_url 改成服务商提供的 /v1 地址。

示例:

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.tokencheap.space/v1",
)

安装依赖

先安装 OpenAI Python SDK:

pip install openai

如果你使用虚拟环境,建议先激活环境再安装。生产环境不要把 API Key 写死在代码仓库里。

用环境变量保存 Key

推荐写法:

export OPENAI_API_KEY="YOUR_API_KEY"

Windows PowerShell:

$env:OPENAI_API_KEY="YOUR_API_KEY"

Python 代码中读取:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["OPENAI_API_KEY"],
    base_url="https://api.tokencheap.space/v1",
)

第一步:获取模型列表

先验证连接:

models = client.models.list()
for model in models.data[:10]:
    print(model.id)

如果能打印模型 ID,说明 Base URL、Key 和网络基本正常。后续调用时应使用列表中的模型名。

第二步:发送聊天请求

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "用一句话解释 OpenAI Compatible API"}
    ],
)

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

如果你的服务商支持 Responses API 或其他接口,也可以按服务商兼容范围调整。最稳妥的做法是先用 /models 确认可用模型。

常见错误

401 或 invalid_api_key

检查 Key 是否完整、是否来自同一个服务商、是否和 base_url 匹配。参考 invalid_api_key 是什么原因

model_not_found

模型名不存在或无权限。先运行 client.models.list(),复制列表中真实模型 ID。参考 model_not_found 怎么解决

APIConnectionError 或 timeout

网络不可达。自部署服务器要在服务器上测试,不要只在本地测试。参考 API timeout 超时解决方法

429

并发太高或额度不足。批量脚本要加限流、重试和队列。参考 OpenAI API 429 报错解决

批量调用建议

Python 脚本很容易写成循环批量调用。上线前建议:

  • 每次请求之间加短暂等待。
  • 对 429、timeout 做重试。
  • 保存失败日志,避免重复处理。
  • 不要把同一个 Key 同时给多个高频任务使用。
  • 对长文本做分块,控制成本和上下文长度。

和 Cursor、Dify、n8n 的关系

如果 Python 能调用成功,但工具里失败,说明 API 服务本身可用。下一步检查工具配置:

  • Cursor 是否用了同一个 Base URL。
  • Dify 的 openai_api_base 是否带 /v1
  • n8n 服务器是否能访问 API 域名。

相关阅读

FAQ

Python 调用 OpenAI Compatible API 必须换 SDK 吗?

不一定。如果服务兼容 OpenAI SDK,通常继续使用 OpenAI Python SDK,只改 base_url 和 Key。

base_url 要不要带 /v1?

多数兼容接口建议带 /v1,例如 https://api.tokencheap.space/v1

怎么确认模型名?

先调用 client.models.list(),使用返回列表里的模型 ID。

API Key 可以写在代码里吗?

测试可以临时写,但生产环境建议使用环境变量或密钥管理工具。

Python 成功但 n8n 失败怎么办?

如果 Python 在本机成功,而 n8n 是自部署,要到 n8n 服务器上再测试网络和 Credential。