用自定义 Base URL 接入 OpenAI Python SDK
官方 Python SDK 支持自定义 base_url。把它指向 MonkeyAI,用环境变量保存 Key,先调用 models.list(),再考虑付费生成。本页记录 2026 年 8 月 3 日的真实 401 验证;未实测的接口不会写成“支持”。
这次实际测了什么?
我们在干净的 Python 虚拟环境安装了 openai==2.48.0,再用 OpenAI(api_key=..., base_url="https://monkeytheme.com/v1", max_retries=0, timeout=20) 创建客户端。故意填入无效 Key 后调用 client.models.list(),MonkeyAI 返回 HTTP 401 和 INVALID_API_KEY。这能确认 SDK、TLS 路由和自定义 Base URL 已到达认证层,但不能证明真实 Key、特定模型或生成接口一定成功。
| 核对项 | 实测结果 |
|---|---|
| SDK 版本 | openai 2.48.0 |
| Base URL | https://monkeytheme.com/v1 |
| 调用方法 | client.models.list() |
| 无效 Key | AuthenticationError、HTTP 401、结构化 JSON |
怎么安装和配置?
python3 -m venv .venv source .venv/bin/activate python -m pip install openai export MONKEYAI_API_KEY="***"
不要把 Key 写进 Python 文件,更不要提交到仓库。OpenAI SDK README 建议用环境变量加载密钥,客户端构造器也支持显式传入 api_key。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MONKEYAI_API_KEY"],
base_url="https://monkeytheme.com/v1",
)/v1 结尾即可。不要再拼 /models 或 /chat/completions;SDK 方法会添加接口路径。生成内容前怎么验证 Key?
models = client.models.list()
for model in models.data:
print(model.id)成功返回后,列表里的 ID 就是该 Key 当前可见的模型名。后续请求直接复制完整 ID,不要猜。401 表示请求已经到达服务,但认证失败;如果根本没有收到 HTTP 响应,应查看网络或 TLS 异常。
异常应该怎么处理?
import openai
try:
models = client.models.list()
except openai.AuthenticationError:
print("检查 MONKEYAI_API_KEY")
except openai.APIConnectionError as exc:
print("网络或 TLS 失败:", exc.__cause__)
except openai.APIStatusError as exc:
print("HTTP 状态:", exc.status_code)
print("Request ID:", exc.request_id)SDK 文档用 APIConnectionError 表示连接失败,用 APIStatusError 表示非成功 HTTP 响应;状态异常里还会在可用时给出请求 ID。日志应保留请求 ID,不应记录 API Key。
重试和超时怎么设?
官方 SDK README 说明:部分连接错误、408、409、429 和服务端错误默认会重试两次;请求默认十分钟超时。排错时,自动重试可能让一次失败变成多次请求,因此本文的验证配置使用 max_retries=0 和 timeout=20。
client = OpenAI(
api_key=os.environ["MONKEYAI_API_KEY"],
base_url="https://monkeytheme.com/v1",
max_retries=0,
timeout=20.0,
)生产参数应按任务调整。模型列表检查很短,长时间流式生成则是另一种负载,不建议直接共用一套超时策略。
生成接口选 Responses 还是 Chat Completions?
OpenAI SDK 同时提供 responses.create() 和 chat.completions.create()。OpenAI 兼容中转不一定实现相同的接口子集,应按 MonkeyAI 对应客户端或接口文档选择。本次没有执行认证后的生成请求,所以这里只讲到模型发现,不把未测能力写成结论。
资料来源
常见问题
Base URL 应该填什么?
OpenAI 兼容 API Base 使用 https://monkeytheme.com/v1。
可以改用 OPENAI_BASE_URL 吗?
可以。官方 SDK 文档支持 OPENAI_BASE_URL;本文显式传入 base_url,便于直接看出代码正在连接哪个端点。
返回 401 是否说明 Base URL 配错?
不是。结构化 401 表示请求已到达服务,但认证被拒绝。
models.list() 成功是否代表生成一定成功?
不代表。它只验证该 Key 的模型发现;具体模型和生成路由仍可能有独立的可用性或兼容边界。
OpenAI SDK 的所有接口都支持吗?
本文不作此承诺。OpenAI 兼容服务实现的接口子集可能不同,应单独验证准备使用的接口。