
先把图像生成和图像编辑分开
如果目标是让模型基于一张已有图片做修改,先看 AIGoCode 的图像编辑端点,而不是把生成接口的 JSON 请求直接改几个字段。官方文档把生成和编辑分成两个接口:生成使用 /v1/images/generations,编辑使用 /v1/images/edits。本文只围绕参考图编辑,最后再说明如何把返回结果保存到本地。
编辑请求要准备哪些字段
编辑请求使用 multipart/form-data,核心字段是 model、image 和 prompt。image 上传参考图文件,文档示例使用 PNG;prompt 写清楚要修改的内容和需要保留的部分。文档还列出 n、size、quality 和 output_format,示例值分别为 1、1024x1024、low 和 png。
鉴权仍然放在 Authorization: Bearer YOUR_API_KEY 请求头中。Key 应来自包含图片模型且支持外接调用的分组,正文只保留占位符,不要把真实 Key 写进脚本、日志或文章。请求地址使用官方给出的 https://api.aigocode.dev/v1/images/edits。
用 curl 发送一张参考图
macOS 或 Linux 可以先把参考图保存为 input.png,再发送 multipart 请求:
curl "https://api.aigocode.dev/v1/images/edits" \ -H "Authorization: Bearer $AIGOCODE_API_KEY" \ -F "model=gpt-image-2.5-flare" \ -F "image=@input.png;type=image/png" \ --form-string "prompt=Change the blue circle in the input image to red. Keep the rest of the image unchanged." \ -F "n=1" -F "size=1024x1024" -F "quality=low" -F "output_format=png" \ -o image-response.json
这里的重点是让 curl 自己设置 multipart 的 boundary,不要再手工把整个请求拼成 JSON。image 是文件字段,prompt 用 --form-string 传递文字;如果换用文档列出的 gpt-image-2.5-sunburst,只改 model,其余字段仍按目标模型和当前分组权限核对。
返回 JSON 后,先确认有 b64_json
当前文档示例说明,图片编辑结果同样从 data[].b64_json 读取。不要把整段 JSON 直接改名为 PNG;先解析响应,再把 Base64 解码成二进制文件。例如保存为 save-image.mjs:
import { readFileSync, writeFileSync } from "node:fs"; const raw = readFileSync("image-response.json", "utf8").replace(/^\uFEFF/, ""); const result = JSON.parse(raw); const base64 = result.data?.[0]?.b64_json; if (!base64) throw new Error("响应中没有图片数据,请检查错误信息。"); writeFileSync("edited-image.png", Buffer.from(base64, "base64"));
脚本先判断 data[0].b64_json 是否存在。没有这个字段时,应回到响应中的错误信息和请求字段排查,不要生成一个无法打开的“图片”文件。
发送前的四项核对
- 端点是否为
/v1/images/edits,而不是把编辑请求发到生成端点。 - 请求是否为
multipart/form-data,并且image真的是可读取的参考图文件。 - Key 所属分组是否包含目标图片模型并允许外接调用;模型 ID 要完整匹配。
- 响应是否包含
data[].b64_json,解码后再检查输出文件,而不是只看 HTTP 状态。
图片按所选分组和模型的图片价格规则扣减额度,实际消耗可在 AIGoCode 的「使用统计」中核对。需要继续确认可用模型和价格时,可从 AIGoCode 模型广场 进入;接口接入背景和其他协议示例可参考 AIGoCode 第一次请求文档。
小结
参考图编辑的关键是把文件上传、编辑指令和结果解码分成三步:用 multipart 把 image 和 prompt 送到 /v1/images/edits,再从 data[].b64_json 解码保存。这样排查时能明确是端点、字段、权限还是结果处理出了问题。