图灵 APIAI 大模型 API 中转站

首页 / 客户端配置 / Node.js (openai)

Node.js 接入图灵 API(openai 包)

Node 里用官方 openai 包接入同样只改一个参数,但有个容易忽略的细节:参数名是驼峰 baseURL,不是 Python 那边的 base_url。

Node.jsOpenAI 协议官方 npm 包

配置速查

参数名和 Python 不一样,这是最容易复制粘贴出错的地方。

配置项填什么容易错在哪
baseURLhttps://turingapi.space/v1驼峰写法,写成 base_url 不生效
apiKey控制台创建的 sk- 密钥同样从环境变量读
model站内实际模型名从模型列表复制
参数名对照:Python SDK 是 base_url 和 api_key,Node SDK 是 baseURL 和 apiKey。跨语言抄示例时最容易在这两个词上翻车。

前置准备

两条命令就能跑起来。

1
创建一个 API 密钥

在 注册页 建账号,控制台新建密钥并保存。

2
安装 SDK

执行 npm i openai,需要 Node 18 以上。

3
设置环境变量

把密钥放进 OPENAI_API_KEY 或自定变量,避免写进代码。

配置步骤

ESM 和 CommonJS 两种写法都给了,按项目情况选。

ESM 写法 推荐

  1. 用 import 引入
  2. 初始化时传 baseURL 与 apiKey
  3. 调用 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 写法 老项目

  1. 用 require 引入
  2. 配置字段完全一样
  3. 顶层 await 不可用,要包在 async 函数里
const OpenAI = require("openai");

const client = new OpenAI({
  baseURL: "https://turingapi.space/v1",
  apiKey: process.env.TURING_API_KEY,
});

CJS 里不能直接写顶层 await,异步调用记得包一层 async 函数。

流式输出 常用写法

  1. 传入 stream: true
  2. 用 for await 遍历流
  3. 取 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,用可选链加空值兜底最省心。

验证是否配置成功

看到这些就说明通了

  1. 脚本正常输出中文回答
  2. 没有抛 AuthenticationError
  3. 控制台「用量」页出现记录

能打印出内容就说明地址、密钥、模型三者都对。

报 401 时先查这里

  1. process.env.TURING_API_KEY 是否真的读到了
  2. 有没有多写空格或换行
  3. 密钥是否被禁用
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。

相关客户端

还没密钥?注册后直接创建一个 邮箱注册即用,控制台自助创建密钥、查看用量与余额。
免费注册 →

接入过程卡住了?到 QQ 群 1128182538 说明「客户端 + 报错码 + 时间点」,比只说"用不了"好排查得多。其他通用问题见 常见问题。