Skip to content
On this page

Node.js SDK 接入

使用 OpenAI 官方 Node.js SDK 时,只需要把 apiKey、baseURL 和 model 换成 CoreRouter 信息。

安装

bash
npm install openai

也可以使用 Bun:

bash
bun add openai

如果要直接读取 .env 文件,再安装 dotenv:

bash
npm install dotenv

或:

bash
bun add dotenv

基础使用

typescript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.COREROUTER_API_KEY,
  baseURL: "https://api.corerouter.tech/v1",
});

const completion = await client.chat.completions.create({
  model: "claude-sonnet-4-5",
  messages: [
    { role: "user", content: "你好,请介绍一下你自己。" },
  ],
});

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

流式输出

typescript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.COREROUTER_API_KEY,
  baseURL: "https://api.corerouter.tech/v1",
});

const stream = await client.chat.completions.create({
  model: "claude-sonnet-4-5",
  messages: [
    { role: "user", content: "用三句话介绍 CoreRouter。" },
  ],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

多轮对话

typescript
import type { ChatCompletionMessageParam } from "openai/resources/chat/completions";

const messages: ChatCompletionMessageParam[] = [
  { role: "user", content: "你好" },
];

let completion = await client.chat.completions.create({
  model: "claude-sonnet-4-5",
  messages,
});

messages.push({
  role: "assistant",
  content: completion.choices[0].message.content ?? "",
});
messages.push({ role: "user", content: "请写一个 TypeScript hello 函数。" });

completion = await client.chat.completions.create({
  model: "claude-sonnet-4-5",
  messages,
});

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

工具调用

typescript
const completion = await client.chat.completions.create({
  model: "claude-sonnet-4-5",
  messages: [{ role: "user", content: "北京天气怎么样?" }],
  tools: [
    {
      type: "function",
      function: {
        name: "get_weather",
        description: "获取指定城市的天气信息",
        parameters: {
          type: "object",
          properties: {
            city: { type: "string", description: "城市名称" },
          },
          required: ["city"],
        },
      },
    },
  ],
});

const toolCall = completion.choices[0].message.tool_calls?.[0];
if (toolCall) {
  console.log(toolCall.function.name);
  console.log(toolCall.function.arguments);
}

Responses API

这段示例要求 Model ID 支持 Responses。普通聊天模型不一定可用。 如果 client.responses 不存在,请先升级 openai 包,或者直接按 Responses API 的 curl 示例调用。

typescript
const response = await client.responses.create({
  model: "responses-model-id",
  input: "请用三句话介绍 CoreRouter。",
});

console.log(response.output_text);

Embeddings

typescript
const result = await client.embeddings.create({
  model: "embedding-model-id",
  input: ["第一段文本", "第二段文本"],
});

console.log(result.data[0].embedding.length);

使用 .env

bash
COREROUTER_API_KEY=sk-xxxxxxxxxxxxxxxx
COREROUTER_BASE_URL=https://api.corerouter.tech/v1
COREROUTER_MODEL=claude-sonnet-4-5
typescript
import "dotenv/config";
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.COREROUTER_API_KEY,
  baseURL: process.env.COREROUTER_BASE_URL,
});

const completion = await client.chat.completions.create({
  model: process.env.COREROUTER_MODEL ?? "claude-sonnet-4-5",
  messages: [{ role: "user", content: "Hello" }],
});

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

请把 .env 加入 .gitignore,不要把 API Key 提交到仓库。

常见问题

  • COREROUTER_API_KEY 为空:确认从同一个终端启动程序,或部署平台已配置环境变量。
  • 返回 model not found:确认 model 是控制台中的 Model ID。
  • 普通对话可用但工具调用失败:换用支持 Tool Calling 的模型。

Released under the MIT License.