Appearance
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-flare 走 POST /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 URL:
https://iliu.ai/v1 - API Key:
sk-xxxxxxxx
相关链接
- Python 版:见「OpenAI Python SDK 接入」
- Anthropic SDK:见「Anthropic SDK 接入」
