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