qwen-image-2.0

通义千问 Qwen · 文生图

接口模型名称qwen-image-2.0(请求体 model 必须与此完全一致)

类型图片生成(文生图;可带参考图)
调用方式同步(一次请求直接返回图片结果)

先看这几条

  • 计费:按张数 / 分辨率档,单价以控制台为准
  • 调用:同步,一次请求直接返回图片 URL
  • 结果链接data.output 中地址约 24 小时内有效,请及时保存
  • 输入素材:参考图须 公网可访问
  • 通用说明图片模型 API

最小可跑通请求

{
  "model": "qwen-image-2.0",
  "content": [
    { "text": "一只橘猫坐在窗台上晒太阳,温暖午后,写实摄影" }
  ],
  "parameters": {
    "n": 1,
    "size": "2048*2048",
    "watermark": false
  }
}

调用地址与鉴权

  • URLhttps://mass.gogpu.cn/v1/images/completions
  • HeaderContent-Type: application/jsonX-API-Key: sk-你的密钥(或 Authorization: Bearer sk-你的密钥
  • 超时:建议客户端 ≥ 60s(高分辨率可能十余秒)

必传 / 可选参数

顶层字段

字段必传类型说明
modelstring固定填 qwen-image-2.0(与控制台接口名一致)
contentarray输入内容数组;至少 1 条文本
parametersobject生成控制参数,见下表
conversation_idnumber一般可不传;仅当需要写入已有对话记录时填写

content[](同一项不要同时填 textimage

字段必传类型说明
text文生图必填string正向提示词;整轮建议仅 1 条 text
image图生/参考时string公网可访问的图片 URL

parameters

字段必传类型可选值 / 范围默认说明
nint16(部分场景仅支持 1)1生成张数
sizestring须使用控制台该模型列出的尺寸(示例常用 2048*2048模型默认输出分辨率
negative_promptstring≤ 500 字符反向提示词(不希望出现的内容)
prompt_extendbooltrue / falsetrue是否自动扩写提示词
watermarkbooltrue / falsefalse是否加水印
seedint02147483647随机随机种子,便于复现

TIP

若控制台该模型展示了可选分辨率,请优先使用列表中的 size,避免传不支持的尺寸。


请求体示例

文生图

{
  "model": "qwen-image-2.0",
  "content": [
    { "text": "一只橘猫坐在窗台上晒太阳,温暖午后,写实摄影" }
  ],
  "parameters": {
    "n": 1,
    "size": "2048*2048",
    "prompt_extend": true,
    "watermark": false
  }
}

带参考图

{
  "model": "qwen-image-2.0",
  "content": [
    { "image": "https://example.com/ref.png" },
    { "text": "保持构图,改成水彩风格" }
  ],
  "parameters": {
    "n": 1,
    "size": "2048*2048",
    "watermark": false
  }
}

成功响应

{
  "code": 0,
  "data": {
    "conversation_id": 199,
    "output": [
      "https://xxx/generated-xxxx.png"
    ],
    "image_count": 1,
    "request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  },
  "msg": "操作成功"
}

data.output[] 取图片地址并及时下载保存(约 24 小时内有效)。


代码示例

点击右上角标签切换语言(curl / Python / Node.js / Go):

curl -sS https://mass.gogpu.cn/v1/images/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk-你的密钥" \
  -d '{
    "model": "qwen-image-2.0",
    "content": [{"text": "一只橘猫坐在窗台上晒太阳,温暖午后,写实摄影"}],
    "parameters": {"n": 1, "size": "2048*2048", "watermark": false}
  }'
import json
import urllib.request

BASE = "https://mass.gogpu.cn"
API_KEY = "sk-你的密钥"

body = {
    "model": "qwen-image-2.0",
    "content": [{"text": "一只橘猫坐在窗台上晒太阳,温暖午后,写实摄影"}],
    "parameters": {"n": 1, "size": "2048*2048", "watermark": False},
}
req = urllib.request.Request(
    f"{BASE}/v1/images/completions",
    data=json.dumps(body).encode(),
    method="POST",
    headers={"Content-Type": "application/json", "X-API-Key": API_KEY},
)
with urllib.request.urlopen(req, timeout=120) as r:
    resp = json.loads(r.read().decode())
print(json.dumps(resp, ensure_ascii=False, indent=2))
if resp.get("code") == 0:
    print("image url:", (resp.get("data") or {}).get("output", [None])[0])
const BASE = "https://mass.gogpu.cn";
const API_KEY = "sk-你的密钥";

const body = {
  model: "qwen-image-2.0",
  content: [{ text: "一只橘猫坐在窗台上晒太阳,温暖午后,写实摄影" }],
  parameters: { n: 1, size: "2048*2048", watermark: false },
};

const resp = await fetch(`${BASE}/v1/images/completions`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": API_KEY,
  },
  body: JSON.stringify(body),
}).then((r) => r.json());

console.log(JSON.stringify(resp, null, 2));
if (resp.code === 0) console.log("image url:", resp.data?.output?.[0]);
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"time"
)

func main() {
	const (
		base   = "https://mass.gogpu.cn"
		apiKey = "sk-你的密钥"
	)
	var body any
	if err := json.Unmarshal([]byte(`{
  "model": "qwen-image-2.0",
  "content": [
    { "text": "一只橘猫坐在窗台上晒太阳,温暖午后,写实摄影" }
  ],
  "parameters": {
    "n": 1,
    "size": "2048*2048",
    "watermark": false
  }
}`), &body); err != nil {
		panic(err)
	}
	b, err := json.Marshal(body)
	if err != nil {
		panic(err)
	}
	req, err := http.NewRequest(http.MethodPost, base+"/v1/images/completions", bytes.NewReader(b))
	if err != nil {
		panic(err)
	}
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("X-API-Key", apiKey)
	client := &http.Client{Timeout: 120 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	raw, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(raw))
}

常见问题

现象处理
模型不可用或不存在核对 model 与控制台「接口模型名称」/ GET /v1/models
余额不足 / 套餐额度不足控制台充值或更换套餐
超时拉长客户端超时(建议 ≥ 60s)
参考图失败确认图片 URL 公网可访问;size 使用控制台列出的尺寸
code: 7 或其他业务错误阅读返回 msg;见 API 调用指南

相关链接

复制 MD