Node.js SDK

使用 OpenAI 官方 Node.js SDK 接入 WLON API,只需修改 baseURL 即可。

前提条件:Node.js 18+,已在 控制台 创建 API Key。

安装

npm install openai

或使用其他包管理器:

# yarn
yarn add openai

# pnpm
pnpm add openai

配置客户端

创建 OpenAI 实例时指定 baseURLapiKey

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'sk-your-api-key',
  baseURL: 'https://api2everything.xyz/v1',
});
提示:推荐通过环境变量传入 API Key,避免硬编码。详见下方「环境变量」章节。

基本用法

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'sk-your-api-key',
  baseURL: 'https://api2everything.xyz/v1',
});

async function main() {
  const response = await client.chat.completions.create({
    model: 'gpt-4o',
    messages: [
      { role: 'system', content: '你是一个有帮助的助手。' },
      { role: 'user', content: '用 JavaScript 写一个快速排序' },
    ],
    temperature: 0.7,
    max_tokens: 2048,
  });

  console.log(response.choices[0].message.content);
}

main();

流式输出

设置 stream: true 逐 token 获取响应:

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'sk-your-api-key',
  baseURL: 'https://api2everything.xyz/v1',
});

async function main() {
  const stream = await client.chat.completions.create({
    model: 'gpt-4o',
    messages: [{ role: 'user', content: '讲一个故事' }],
    stream: true,
  });

  for await (const chunk of stream) {
    const content = chunk.choices[0]?.delta?.content;
    if (content) {
      process.stdout.write(content);
    }
  }
  console.log(); // 换行
}

main();

TypeScript

SDK 原生支持 TypeScript,提供完整的类型定义:

import OpenAI from 'openai';
import type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';

const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: 'https://api2everything.xyz/v1',
});

async function chat(messages: ChatCompletionMessageParam[]): Promise<string> {
  const response = await client.chat.completions.create({
    model: 'gpt-4o',
    messages,
  });

  return response.choices[0].message.content ?? '';
}

// 使用
const reply = await chat([
  { role: 'system', content: '你是一个翻译助手。' },
  { role: 'user', content: '翻译:Hello World' },
]);
console.log(reply);

错误处理

SDK 抛出类型化的错误对象,建议使用 try/catch 处理:

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'sk-your-api-key',
  baseURL: 'https://api2everything.xyz/v1',
});

async function main() {
  try {
    const response = await client.chat.completions.create({
      model: 'gpt-4o',
      messages: [{ role: 'user', content: '你好' }],
    });
    console.log(response.choices[0].message.content);
  } catch (error) {
    if (error instanceof OpenAI.APIError) {
      switch (error.status) {
        case 401:
          console.error('API Key 无效,请检查密钥是否正确。');
          break;
        case 429:
          console.error('请求过于频繁,请稍后重试。');
          break;
        case 500:
          console.error('服务器内部错误,请稍后重试。');
          break;
        default:
          console.error(`API 错误:${error.status} — ${error.message}`);
      }
    } else {
      console.error('网络或未知错误:', error);
    }
  }
}

main();

环境变量

推荐使用环境变量配置,避免硬编码敏感信息:

# .env
OPENAI_API_KEY=sk-your-api-key
OPENAI_BASE_URL=https://api2everything.xyz/v1

设置后无需在代码中传参,SDK 会自动读取:

import OpenAI from 'openai';

// 自动读取 OPENAI_API_KEY 和 OPENAI_BASE_URL
const client = new OpenAI();

async function main() {
  const response = await client.chat.completions.create({
    model: 'gpt-4o',
    messages: [{ role: 'user', content: '你好!' }],
  });
  console.log(response.choices[0].message.content);
}

main();
安全提醒:永远不要将 API Key 提交到 Git 仓库。将 .env 加入 .gitignore