Node.js 调用 GPT88 API 完整示例

在 Node.js 中使用 OpenAI SDK 调用 GPT88 API,包含环境变量、流式响应和重试。

安装与配置

将代码中的 process.env.GPT88_API_KEY 指向你在 Agent API Keys 控制台「API Keys」页面创建的 Key(建议用环境变量而非硬编码)。

bash
npm i openai
# 或
pnpm add openai

基础调用

basic.tstypescript
// basic.ts
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.gpt88.cc",
  apiKey: process.env.GPT88_API_KEY,
});

const resp = await client.chat.completions.create({
  model: "claude-opus-4-7",
  messages: [
    { role: "system", content: "You are a concise assistant." },
    { role: "user", content: "用 30 字介绍 gpt88.cc" },
  ],
  temperature: 0.7,
  max_tokens: 1024,
});

console.log(resp.choices[0].message.content);
console.log("usage:", resp.usage?.total_tokens, "tokens");

流式响应

stream.tstypescript
// stream.ts
const stream = await client.chat.completions.create({
  model: "claude-opus-4-7",
  stream: true,
  messages: [{ role: "user", content: "讲一个关于 API 网关的冷笑话" }],
});

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

function calling

tools.tstypescript
// tools.ts
const tools = [{
  type: "function" as const,
  function: {
    name: "get_weather",
    description: "查询某个城市的当前天气",
    parameters: {
      type: "object",
      properties: { city: { type: "string" } },
      required: ["city"],
    },
  },
}];

const resp = await client.chat.completions.create({
  model: "claude-opus-4-7",
  messages: [{ role: "user", content: "上海现在几度?" }],
  tools,
  tool_choice: "auto",
});

const call = resp.choices[0].message.tool_calls?.[0];
if (call) {
  console.log("model wants:", call.function.name, call.function.arguments);
}

退避重试

retry.tstypescript
// retry.ts
import OpenAI, { APIError, RateLimitError } from "openai";

const client = new OpenAI({
  baseURL: "https://api.gpt88.cc",
  // SDK 默认会做有限重试;这里关掉走我们自己的策略
  maxRetries: 0,
});

async function callWithRetry(
  messages: { role: "user" | "system" | "assistant"; content: string }[],
  model = "claude-opus-4-7",
  maxRetries = 3,
) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return await client.chat.completions.create({ model, messages });
    } catch (err) {
      if (err instanceof RateLimitError) {
        await sleep(2 ** attempt * 1000);
        continue;
      }
      if (err instanceof APIError && err.status >= 500) {
        await sleep(2 ** attempt * 1000);
        continue;
      }
      throw err;
    }
  }
  throw new Error("max retries exceeded");
}

const sleep = (ms: number) => new Promise(r => setTimeout(r, ms));

错误类别与处理建议详见 错误码

Next.js Edge / serverless

在 Edge / serverless 函数中转发流式响应,是 React 应用最常见的接入方式:

app/api/chat/route.tstypescript
// app/api/chat/route.ts  (Next.js App Router 示例)
import OpenAI from "openai";

export const runtime = "edge"; // 也可以是 "nodejs"

const client = new OpenAI({
  baseURL: "https://api.gpt88.cc",
  apiKey: process.env.GPT88_API_KEY,
});

export async function POST(req: Request) {
  const { messages } = await req.json();

  const stream = await client.chat.completions.create({
    model: "claude-opus-4-7",
    stream: true,
    messages,
  });

  // 直接把 SSE 透传给前端
  const encoder = new TextEncoder();
  const body = new ReadableStream({
    async start(controller) {
      for await (const chunk of stream) {
        const delta = chunk.choices[0].delta.content ?? "";
        controller.enqueue(encoder.encode(delta));
      }
      controller.close();
    },
  });

  return new Response(body, {
    headers: { "content-type": "text/plain; charset=utf-8" },
  });
}

问题是什么

Node.js 项目需要在服务端设置 baseURL 和环境变量。API Key 不应进入浏览器打包产物或公开仓库。

最短可用配置

.envbash
npm install openai
export OPENAI_API_KEY=sk-替换为你创建的Key
export OPENAI_BASE_URL=https://api.gpt88.cc/v1
export OPENAI_MODEL=gpt-5.6-sol

API Key 只放在服务端环境变量或密钥管理器中,不要提交到 Git、截图、浏览器前端或公开 issue。

完整示例(curl / Python / Node.js)

request.shbash
curl https://api.gpt88.cc/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"返回 OK"}],"max_tokens":32}'
request.pypython
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["OPENAI_API_KEY"],
    base_url=os.getenv("OPENAI_BASE_URL", "https://api.gpt88.cc/v1"),
)
response = client.chat.completions.create(
    model=os.getenv("OPENAI_MODEL", "gpt-5.6-sol"),
    messages=[{"role": "user", "content": "返回 OK"}],
    max_tokens=32,
)
print(response.choices[0].message.content)
request.mjsjavascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: process.env.OPENAI_BASE_URL ?? "https://api.gpt88.cc/v1",
});
const response = await client.chat.completions.create({
  model: process.env.OPENAI_MODEL ?? "gpt-5.6-sol",
  messages: [{ role: "user", content: "返回 OK" }],
  max_tokens: 32,
});
console.log(response.choices[0].message.content);

常见错误

  • 401:确认请求头使用 Bearer Key 且没有多余换行。
  • ECONNREFUSED:检查服务器到 api.gpt88.cc:443 的 DNS、TLS 和代理。
  • 404:baseURL 只保留 /v1,让 SDK 拼接资源路径。
  • 超时:先用短 prompt 验证链路,再调整 timeout。

价格和计费说明

GPT88 部分按人民币余额、模型、分组倍率和输入输出用量扣费;不要用第三方公开报价推算账户实际消耗。

立即创建 API Key