Skip to content

OpenAI Node.js SDK 接入

bash
npm install openai

对话

javascript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://iliu.ai/v1", apiKey: "sk-xxxxxxxx" });
const resp = await client.chat.completions.create({ model: "gpt-5.1", messages: [{ role: "user", content: "你好" }] });
console.log(resp.choices[0].message.content);

流式

javascript
const stream = await client.chat.completions.create({ model: "gpt-5.1", messages: [{ role: "user", content: "讲个笑话" }], stream: true });
for await (const chunk of stream) {
  if (chunk.choices[0]?.delta?.content) process.stdout.write(chunk.choices[0].delta.content);
}

图像

javascript
import fs from "node:fs";

const resp = await client.images.generate({
  model: "gpt-image-2",
  prompt: "一张极简风格的玻璃香水瓶,透明背景",
  size: "1024x1024",
  quality: "high",
  background: "transparent",
  output_format: "png",
  n: 1,
});
const image = resp.data[0];
if (image.b64_json) {
  fs.writeFileSync("out.png", Buffer.from(image.b64_json, "base64"));
} else if (image.url) {
  const response = await fetch(image.url);
  fs.writeFileSync("out.png", Buffer.from(await response.arrayBuffer()));
}

gpt-image-2 同步返回结果,无需轮询;客户端超时建议至少 180 秒。每项结果可能提供 b64_json 或临时 url,应同时处理两种形式。

图像编辑

本地文件使用 multipart,重复传入 image 可进行多图参考,最多 16 张、单文件不超过 50 MB。gpt-image-2 / gpt-image-2.5-sunburst / gpt-image-2.5-flarePOST /v1/images/edits

javascript
const form = new FormData();
form.append("model", "gpt-image-2");
form.append("prompt", "让第一张图片中的人物穿上第二张图片中的服装,保留脸部、姿势和背景");
form.append("size", "1024x1024");
form.append("input_fidelity", "high");
form.append("image", new Blob([fs.readFileSync("./person.png")], { type: "image/png" }), "person.png");
form.append("image", new Blob([fs.readFileSync("./clothing.png")], { type: "image/png" }), "clothing.png");

const response = await fetch("https://iliu.ai/v1/images/edits", {
  method: "POST",
  headers: { Authorization: "Bearer sk-xxxxxxxx" },
  body: form,
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const edited = (await response.json()).data[0];
if (edited.b64_json) {
  fs.writeFileSync("out.png", Buffer.from(edited.b64_json, "base64"));
} else if (edited.url) {
  const imageResponse = await fetch(edited.url);
  fs.writeFileSync("out.png", Buffer.from(await imageResponse.arrayBuffer()));
}

无后缀 gpt-image-2.5 的图生图/编辑不要走 /v1/images/edits,也不要传 images[].image_url.url。改用 POST /v1/images/generations,字段是 image(URL 字符串数组):

javascript
const response = await fetch("https://iliu.ai/v1/images/generations", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk-xxxxxxxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gpt-image-2.5",
    prompt: "帮我把这个图片里面人物的衣服换成红色",
    image: [
      "https://img.shetu66.com/2022/08/31/1661927098745582.jpg",
    ],
    size: "1024x1024",
    quality: "auto",
    background: "transparent",
  }),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const edited = (await response.json()).data[0];
if (edited.b64_json) {
  fs.writeFileSync("out.png", Buffer.from(edited.b64_json, "base64"));
} else if (edited.url) {
  const imageResponse = await fetch(edited.url);
  fs.writeFileSync("out.png", Buffer.from(await imageResponse.arrayBuffer()));
}

gpt-image-2 等型号的公网 URL 参考图仍走 POST /v1/images/edits,JSON 字段是 images[].image_url.url,不要把 URL 写进 image

配置

所有兼容 OpenAI 的 SDK 和工具,只需改两处:

  • Base URLhttps://iliu.ai/v1
  • API Keysk-xxxxxxxx

相关链接

  • Python 版:见「OpenAI Python SDK 接入」
  • Anthropic SDK:见「Anthropic SDK 接入」