OpenAI Node.js SDK 自定义 Base URL
接入 MonkeyAI 只需要修改 openai-node 客户端的 baseURL,不必改 SDK 源码。先验证 Key 和 Model ID,再测试应用实际使用的接口。
安装并配置客户端
npm install openai export OPENAI_API_KEY="YOUR_KEY"
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: "https://monkeytheme.com/v1",
});baseURL,其中 URL 为大写。SDK 默认也会读取 OPENAI_API_KEY,但显式写出更便于检查配置。先检查 Key 和准确的 Model ID
写生成代码前先查询模型列表。请使用自己的 Key 返回的模型 ID,不要照抄截图里的名称。
const models = await client.models.list(); for (const model of models.data) console.log(model.id);
2026 年 8 月 3 日,生产环境的未认证检查显示,/v1/models、/v1/responses 和 /v1/chat/completions 都返回结构化的 401 API_KEY_REQUIRED。这只能证明路由已到达认证层,不能证明认证后的模型和功能可用。
发送一条最小 Responses 请求
const response = await client.responses.create({
model: "MODEL_ID_FROM_LIST",
input: "Reply with OK",
max_output_tokens: 16,
store: false,
});
console.log(response.output_text);
console.log("request_id", response._request_id);OpenAI 建议新项目优先使用 Responses。兼容网关对具体接口的支持仍可能不同,因此应先跑通最小请求,再增加工具、流式响应或会话状态。
Chat Completions 的响应结构不同
const completion = await client.chat.completions.create({
model: "MODEL_ID_FROM_LIST",
messages: [{ role: "user", content: "Reply with OK" }],
max_completion_tokens: 16,
});
console.log(completion.choices[0].message.content);
console.log("request_id", completion._request_id);不能只替换接口路径。Responses 使用 input 和带类型的 output items;Chat Completions 使用 messages 和 choices。迁移现有客户端前,请先看 两种接口的对比。
超时、重试和错误日志
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: "https://monkeytheme.com/v1",
timeout: 30_000,
maxRetries: 2,
});
try {
// 在这里发请求
} catch (err) {
console.error({
name: err.name,
status: err.status,
request_id: err.request_id,
message: err.message,
});
}官方 SDK 的客户端超时默认是 10 分钟,并会对连接错误、408、409、429 和 5xx 响应重试两次。反向代理可能更早超时。不要直接把所有时限调大,还应避免外层重试循环把请求次数成倍放大。
常见配置错误
| 现象 | 检查项 |
|---|---|
| 404 | 使用 baseURL: "https://monkeytheme.com/v1",不要重复写 /v1 或资源路径。 |
| 401 API_KEY_REQUIRED | 确认进程能读取 OPENAI_API_KEY,不要打印完整 Key。 |
| model not found | 复制 client.models.list() 返回的准确 ID。 |
| 解析结果为 undefined | Responses 读取 output_text;Chat Completions 读取 choices[0].message.content。 |
| 一次操作产生多次请求 | 把 SDK 重试和应用层重试合并计算。 |
官方资料与相关教程
- openai-node 官方 README:构造参数、Responses、Chat Completions、重试、超时和请求 ID。
- API Base URL 与 /v1
- API Key 与模型排错
- API 504 超时排错
常见问题
baseURL 是否必须包含 /v1?
需要。此网关应配置为 https://monkeytheme.com/v1。不要把 /chat/completions 也写进 baseURL,SDK 会自行追加资源路径。
可以把 API Key 写死在 server.js 里吗?
技术上可以,但不建议。应从 OPENAI_API_KEY 或其他服务端密钥读取,并确保 .env 不进入版本控制。
返回 401 是否说明 Node.js SDK 不兼容?
不是。结构化 401 表示请求已到达认证层。应先检查 Key 和 Authorization 头,再考虑修改 SDK 代码。
/v1/models 成功,为什么生成仍可能失败?
模型列表接口只验证认证和模型可见性。生成接口还取决于目标模型、账号路由和上游响应。
MonkeyAI 是否支持 openai-node 的全部功能?
本文不作此承诺。路由检查只能确认认证层可达;模型、工具、流式响应和 Responses 功能仍需认证测试。
openai-node 默认重试几次?
官方 README 说明,SDK 默认会对连接错误、408、409、429 和 5xx 响应重试两次。排查重复请求时应明确设置 maxRetries。