Python SDK · 已实测 openai 2.48.0

用自定义 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 URLhttps://monkeytheme.com/v1
调用方法client.models.list()
无效 KeyAuthenticationError、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",
)
Base URL 以 /v1 结尾即可。不要再拼 /models 或 /chat/completions;SDK 方法会添加接口路径。

生成内容前怎么验证 Key?

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

成功返回后,列表里的 ID 就是该 Key 当前可见的模型名。后续请求直接复制完整 ID,不要猜。401 表示请求已经到达服务,但认证失败;如果根本没有收到 HTTP 响应,应查看网络或 TLS 异常。

生产验证故意使用无效 Key,因此本文不公布当前模型列表,也不声称已完成认证后的推理。请用自己的 Key 运行这段代码,查看账号真实可见范围。

异常应该怎么处理?

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 兼容服务实现的接口子集可能不同,应单独验证准备使用的接口。

相关教程

API Key 排错

区分 401、404 与模型错误。

打开页面

Base URL /v1

避免漏写或重复接口路径。

打开页面

客户端矩阵

对比协议与配置边界。

打开页面