HiAPI
博客

使用指南

Imagen 4 电商产品图片:提示词、批量代码与质检

2026年11月4日
Imagen 4 电商产品图片:提示词、批量代码与质检
模型
imagen-4

概要

  • 标准版 Imagen 4 在 HiAPI 上以 imagen-4.0 运行,价格为每张图片 $0.06,每个请求生成一张图片,仅支持文生图。打开 Imagen 4 模型页面可先试用一条提示词。
  • 对于产品目录,它很适合生成白底产品图和生活场景图,这些图原本需要为每个配色单独拍摄。它不能还原你实际的 SKU,因为它没有参考图片输入。
  • aspect_ratio 为必填项(无默认值),seed 必须是数字字符串。在我们的运行中,"seed": "sku-dripper-01" 通过了校验,但约一秒钟后每个任务都以 TASK_FAILED 失败。
  • 要安排质检环节。在一个 4 张图的批次中,我们得到了一只未要求的玻璃壶、一处要求哑光却出现的光亮釉面,以及道具上的虚假标签文字,尽管设置了 negative_prompt: "text, logo"。

本指南涵盖的内容

这是一套面向在线商店的实用工作流,用于为一条产品线生成一组图片:每个 SKU 一张白底目录图、一张产品页生活场景图,以及一张用于移动端故事的竖版裁剪图。以下所有内容均于 2026-11-04 针对实时 API 运行,使用一个虚构产品:一只灰绿色陶瓷手冲滤杯和配套马克杯。

如果你只需要让第一个请求跑通,请从如何使用 Imagen 4 API开始。通用提示词模板请参阅Imagen 4 提示词。本指南讲的是如何批量生成商店图片集,并在上线前进行检查。

写提示词前先选择档位

HiAPI 上的三个 Imagen 4 档位均为文生图,请求结构相同:更改 model id 即可切换档位。价格来自测试当日的 HiAPI 定价。

档位 模型 id 每张图片价格 模型页面
Fast imagen-4.0-fast $0.03 Imagen 4 Fast
Standard imagen-4.0 $0.06 Imagen 4
Ultra imagen-4.0-ultra $0.09 Imagen 4 Ultra

对于产品目录,算术很简单。200 个 SKU ×(1 张产品图 + 1 张生活场景图)= 400 张图片,在标准档上为 $24,Fast 档为 $12,Ultra 档为 $36,这还不包括任何重试。本文只测试了标准档,因此不对 Fast 或 Ultra 的质量做任何声明。完整价格明细请参阅Imagen 4 API 定价。

请求:四个字段,其中两个容易出错

imagen-4.0 的输入 schema 是封闭的。以下是我们在构建批处理时遇到的边界情况,附确切错误信息:

字段 规则 我们观察到的结果
prompt 必填字符串 —
aspect_ratio 必填,取值为 1:1、16:9、9:16、3:4、4:3、auto 之一 省略:aspect_ratio: missing required field "aspect_ratio"。"2:1":value must be one of '1:1', '16:9', '9:16', '3:4', '4:3', 'auto'
negative_prompt 可选字符串 被接受。减少了道具上的文字,但未消除(见质检)
seed 可选字符串 数字(12):seed: got number, want string。非数字字符串("sku-dripper-01"):以 HTTP 200 接受,随后任务以 TASK_FAILED 结束。数字字符串("1042"):正常工作
其他任何内容 被拒绝 additional properties 'foo' not allowed

seed 问题让我们多花了一轮时间。用 SKU 代码作为 seed 以便重跑时可追溯很诱人,而校验器也让它通过了。我们第一批中的全部四个任务都返回如下结果:

{"code":200,"data":{"error":{"code":"TASK_FAILED","message":"task failed"},"model":"imagen-4.0","status":"fail"}}

然后我们逐一移除字段。同一提示词仅带 negative_prompt 时成功,仅带 "seed": "sku-dripper-01" 时失败,而 "seed": "1042" 成功。请让 seed 保持为数字,并将 SKU 映射保存在你自己的任务表中。

输出尺寸随比例而定。在我们的运行中,1:1 返回 1024×1024,4:3 返回 1152×864,9:16 返回 720×1280,均为 WebP。如果你的店面需要 2000 px 的放大图片,请规划一个放大步骤。输出本身不会那么大。

目录图片集的提示词

按拍摄类型而非按产品编写提示词模板,然后填入产品描述。让各 SKU 的光照、相机角度和背景保持一致,才能让一格格产品图看起来像同一本目录。

产品图(1:1)。 说明背景、构图、单一光照方向以及你想要的阴影:

Studio packshot of a matte sage-green ceramic coffee mug with a thin loop handle
on a seamless pure white background, centered, handle pointing right, eye-level view,
soft diffused key light from the left, gentle contact shadow, e-commerce catalog photography

马克杯返回结果很干净:手柄按要求朝右,阴影柔和,背景均匀。无需任何编辑。

生活场景图(4:3)。 指明主体对象、表面、光照方向,以及哪些道具处于失焦状态。然后再次说明产品是清晰主体:

Lifestyle product photo: a matte sage-green ceramic pour-over dripper sitting on a glass carafe
on a light oak kitchen counter, morning window light from the right, a bag of coffee beans and a
gooseneck kettle softly out of focus in the background, warm natural tones, shallow depth of field,
the dripper is the sharp hero of the frame

该提示词生成了本文顶部的图片。

竖版故事图(9:16)。 如果顶部要放标题,请明确要求留出负空间:

Vertical lifestyle product photo for a mobile story: overhead flat lay of a matte sage-green ceramic
pour-over dripper on a linen napkin, scattered roasted coffee beans, a small ceramic cup of black coffee,
on a pale stone surface, soft even daylight, generous empty space in the top third for a headline

顶部三分之一的空白如要求所示。但请注意整颗咖啡豆放在滤杯里面:没人会那样冲咖啡,咖啡买家会注意到。更多内容见下文。

异步批处理代码

HiAPI 图片生成是异步的:POST /v1/tasks 返回一个 taskId,然后轮询 GET /v1/tasks/{taskId},直到 status 为 success 或 fail(见异步 API 文档)。对于产品目录,一次性提交所有任务并并行轮询。这是我们运行的脚本,提示词已精简。两张场景图直接来自该脚本。两张产品图是在我们排查上述 seed 失败(不带 seed 的滤杯产品图)时用相同提示词逐张生成的。

import os, time, json, concurrent.futures as cf
import requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
           "Content-Type": "application/json"}

NEG = "text, logo, watermark, hands, people, clutter, reflections of camera"

JOBS = [
    {"sku": "dripper-white", "aspect_ratio": "1:1", "seed": "1041", "prompt": "Studio packshot of ..."},
    {"sku": "mug-white",     "aspect_ratio": "1:1", "seed": "1042", "prompt": "Studio packshot of ..."},
    {"sku": "dripper-scene", "aspect_ratio": "4:3", "seed": "2041", "prompt": "Lifestyle product photo: ..."},
    {"sku": "dripper-story", "aspect_ratio": "9:16", "seed": "3041", "prompt": "Vertical lifestyle product photo ..."},
]

def submit(job):
    body = {"model": "imagen-4.0",
            "input": {"prompt": job["prompt"], "aspect_ratio": job["aspect_ratio"],
                      "negative_prompt": NEG, "seed": job["seed"]}}  # seed: digits only
    r = requests.post(API, headers=HEADERS, json=body, timeout=30)
    r.raise_for_status()
    return r.json()["data"]["taskId"]

def wait(task_id, timeout_s=300):
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        r = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30)
        data = r.json()["data"]
        if data["status"] in ("success", "fail"):
            return data
        time.sleep(4)
    raise TimeoutError(task_id)

def run(job):
    t0 = time.time()
    task_id = submit(job)
    data = wait(task_id)
    if data["status"] != "success":
        return {"sku": job["sku"], "status": "fail", "error": data.get("error")}
    url = data["output"][0]["url"]
    img = requests.get(url, timeout=60).content
    path = f"{job['sku']}.webp"
    open(path, "wb").write(img)          # download now: output URLs expire
    return {"sku": job["sku"], "status": "success", "task_id": task_id,
            "seconds": round(time.time() - t0, 1), "bytes": len(img), "file": path}

with cf.ThreadPoolExecutor(max_workers=4) as pool:
    for result in pool.map(run, JOBS):
        print(json.dumps(result))

生产环境中有三个细节很重要:

  1. 失败的任务仍返回 HTTP 200。 请检查 data.status == "fail" 和 data.error.code。不要只依赖 raise_for_status()。
  2. 立即下载。 output[0].url 是一个带 expireAt 时间戳的临时链接(在我们的响应中约为 7 天后)。将字节复制到你自己的存储或 CDN。不要从你的商店热链该 URL。
  3. 在 SKU 旁记录任务 id。 当审核者拒绝某张图片时,你需要知道生成它的提示词、seed 和任务 id。

在我们的运行中,单个任务在服务端 7–8 秒完成(created → completed)。两个并行的场景任务实际耗时 31 秒和 42 秒,包括 4 秒的轮询间隔和下载。使用 max_workers=4 时,小批次中占主导的是轮询开销而非生成时间。

质检:图片上线前要检查什么

文生图生成的是貌似合理的产品,而不是你仓库中那件产品的照片。每张图片都需要人工或自动对照真实 SKU 检查。以下是我们在一个 4 张图批次中发现的问题:

检查项 我们批次中的情况 修复方法
画面中只有列出的产品 滤杯产品图额外添加了一只带手柄的配套绿色玻璃壶,而提示词从未要求(见上图)。 添加“single object, nothing else in frame”并重试。绝不要发布你并不销售的套装。
表面效果与材质 我们要求“哑光”釉面。两张滤杯图返回的都是光亮效果。马克杯更接近缎面。 将材质词视为提示。与真实产品对比,不匹配就拒绝。
道具上的文字 生活场景中的咖啡袋有一个类似 logo 的标记和无法辨认的标签文字,即使设置了 negative_prompt: "text, logo"。 不要让带标签的道具出现在提示词中,或对其模糊或裁剪。绝不要让虚假文字进入商品列表。
产品逻辑 俯拍图把整颗咖啡豆放在滤杯里面。 让了解该产品品类的人审核场景图。
各图之间的一致性 滤杯的肋纹图案和底部形状在产品图、场景图和俯拍图之间各不相同。 除非与真实物品匹配,否则不要在同一产品页混用“同一” SKU 的生成图。
尺寸与比例 所有输出均符合要求的比例(1024²、1152×864、720×1280)。 下载后自动检查像素尺寸。

最后一点是商店的关键决策。将 Imagen 4 用于品类横幅、生活方式氛围图、广告创意,以及仅以规格形式存在的产品的占位图。 对于必须展示你确切商品的列表照片,应从真实产品照片开始,改用图生图模型。我们的Seedream 4.5 图生图电商指南详细介绍了该工作流。

常见问题

imagen-4.0 能把我的真实产品放进新场景吗? 不能。在 HiAPI 上它只接受 prompt、aspect_ratio、negative_prompt 和 seed。没有图片输入字段,因此无法将你的产品照片作为参考。

negative_prompt 会移除所有文字吗? 在我们的测试中不会。发送它值得,但生活场景的背景道具上仍出现虚假标签文字。可靠的修复方法是避免带标签的道具。

为什么我的任务立即以 TASK_FAILED 失败? 先检查你的 seed。像 "sku-dripper-01" 这样的非数字字符串能通过校验,但在我们的运行中每个任务都失败。请使用字符串形式的数字,例如 "1042"。

Google-Imagen4 是另一个模型吗? 在我们的测试中,使用 "model": "Google-Imagen4" 发送的请求成功了,而任务负载报告 "model": "imagen-4.0"。在新代码中请使用 imagen-4.0。

下一步

选择一个产品,为它编写上面的三个提示词模板,并针对 Imagen 4 模型运行批处理脚本。如果你要将其接入目录流水线,异步 API 文档涵盖了身份验证和轮询。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档