配置速查
参数名和 Python 不一样,这是最容易复制粘贴出错的地方。
| 配置项 | 填什么 | 容易错在哪 |
|---|---|---|
baseURL | https://turingapi.space/v1 | 驼峰写法,写成 base_url 不生效 |
apiKey | 控制台创建的 sk- 密钥 | 同样从环境变量读 |
model | 站内实际模型名 | 从模型列表复制 |
base_url 和 api_key,Node SDK 是 baseURL 和 apiKey。跨语言抄示例时最容易在这两个词上翻车。前置准备
两条命令就能跑起来。
在 注册页 建账号,控制台新建密钥并保存。
执行 npm i openai,需要 Node 18 以上。
把密钥放进 OPENAI_API_KEY 或自定变量,避免写进代码。
配置步骤
ESM 和 CommonJS 两种写法都给了,按项目情况选。
ESM 写法 推荐
- 用
import引入 - 初始化时传
baseURL与apiKey - 调用
chat.completions.create
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://turingapi.space/v1",
apiKey: process.env.TURING_API_KEY,
});
const r = await client.chat.completions.create({
model: "gpt-6.1-sol",
messages: [{ role: "user", content: "你好" }],
});
console.log(r.choices[0].message.content);package.json 里要加 "type": "module",或者把文件后缀写成 .mjs。
CommonJS 写法 老项目
- 用
require引入 - 配置字段完全一样
- 顶层 await 不可用,要包在 async 函数里
const OpenAI = require("openai");
const client = new OpenAI({
baseURL: "https://turingapi.space/v1",
apiKey: process.env.TURING_API_KEY,
});CJS 里不能直接写顶层 await,异步调用记得包一层 async 函数。
流式输出 常用写法
- 传入
stream: true - 用
for await遍历流 - 取
delta.content前先判空
const stream = await client.chat.completions.create({
model: "gpt-6.1-sol",
messages: [{ role: "user", content: "写一段快排" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}首包可能只有 role 没有 content,用可选链加空值兜底最省心。
验证是否配置成功
看到这些就说明通了
- 脚本正常输出中文回答
- 没有抛
AuthenticationError - 控制台「用量」页出现记录
能打印出内容就说明地址、密钥、模型三者都对。
报 401 时先查这里
process.env.TURING_API_KEY是否真的读到了- 有没有多写空格或换行
- 密钥是否被禁用
console.log(process.env.TURING_API_KEY ? "已读到" : "读不到");环境变量读不到时 SDK 会发一个空密钥,报错看起来像密钥错误,其实根本没读到。
常见问题
Node 侧的问题多在参数名和环境变量上。
baseURL 写成 base_url 为什么不生效?
Node SDK 用驼峰命名,写成 base_url 会被当成未知字段直接忽略,于是请求还打到官方地址。表现通常是 401,因为你的密钥对官方无效。
能同时在浏览器里用吗?
不建议。浏览器直连会把密钥暴露在前端代码里,任何人打开开发者工具都能拿到。要走后端转发,或者用服务端渲染。
流式返回的内容不完整?
检查是否在流结束前就结束了响应,或者用了会缓冲输出的中间件。另外取 delta.content 时要做空值兜底,否则首包会抛异常中断整个流。
Node 18 以下能用吗?
新版 openai 包依赖全局 fetch,需要 Node 18 以上。低版本要么升级,要么自己 polyfill。
相关客户端
OOpenAI Python SDK
改一个参数,业务代码不用动
AAnthropic Python SDK
base_url 不带 /v1,与其他 SDK 相反
通通用 OpenAI 兼容
两种地址写法,互换一次就能解决大半问题
Nn8n
凭据里覆盖 Base URL,两种节点位置不同
接入过程卡住了?到 QQ 群 1128182538 说明「客户端 + 报错码 + 时间点」,比只说"用不了"好排查得多。其他通用问题见 常见问题。