Claude Haiku 5.5 and Nano Banana 2.1 are now live on CometAPI →
technology/Penyelidikan CometAPI

Cara Mengautomasikan Penjanaan Imej pada Skala Besar

Bina aliran kerja penjanaan imej secara kelompok yang sedia untuk pengeluaran dengan satu kunci CometAPI, termasuk pembarisan, penghalaan model, had keserentakan, percubaan semula, storan.

CometAPI
Bobby SpencerPasukan penyelidikan model AI dan API
Dikemas kini Sep 6, 2026 9 min baca
Cara Mengautomasikan Penjanaan Imej pada Skala Besar
Guna corak ini

Buat panggilan API pertama.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

print(response.choices[0].message.content)

Cara paling mudah untuk mengautomasikan penjanaan imej pada skala tanpa perlu mengurus beberapa API yang berbeza ialah memisahkan aliran kerja daripada penyedia model. Letakkan setiap permintaan imej ke dalam satu giliran, halakan setiap tugas kepada ID model semasa, dan hantar permintaan yang serasi melalui satu kunci CometAPI dan URL asas yang serasi dengan OpenAI https://api.cometapi.com/v1.

Tutorial ini membina saluran tersebut dalam Python. Ia menerima tugas produk, pengiklanan, dan kandungan daripada giliran JSON Lines; memilih model; mengehadkan kebersamaan; mencuba semula kegagalan sementara; menyimpan hasil berasaskan URL atau base64; dan merekod penggunaan serta anggaran kos bagi setiap tugas. Contoh ini mengekalkan keperluan pengeluaran tersebut dalam satu blok padat supaya anda boleh menguji aliran kerja tanpa menjadikan artikel ini sebagai rujukan kod.

Bagaimana API Imej Bersepadu Mempermudah Penjanaan Secara Kelompok

Pada penghujungnya, aliran kerja akan kelihatan seperti berikut:

jobs.jsonl → bounded worker pool → CometAPI /v1/images/generations → object storage → manifest.jsonl

Lapisan giliran dan storan tetap milik anda. Menukar model imej hanya mengubah nilai model, bukan sistem pengesahan atau laluan permintaan utama. Itulah kelebihan praktikal API imej bersepadu: pemilihan model menjadi keputusan perutehan di dalam satu saluran, bukan integrasi penyedia berasingan.

Apa yang Anda Perlukan untuk Mengautomasikan Penjanaan Imej?

Anda memerlukan Python 3.10 atau lebih baharu, pakej requests, kunci CometAPI, lokasi output yang boleh ditulis, dan sekurang-kurangnya satu ID model imej semasa.

Pasang satu-satunya kebergantungan:

pip install requests

Tetapkan kunci anda pada pelayan, jangan sekali-kali dalam kod pelayar atau repositori:

export COMETAPI_KEY="your-key"

URL asas ialah https://api.cometapi.com/v1, dan tugas teks-ke-imej yang serasi menggunakan POST /images/generations. Sebelum pendepoloyan, sahkan setiap model dalam katalog model langsung; katalog memulangkan ID semasa, endpoint yang disokong, ciri, dan metadata harga tanpa memerlukan pengepala kebenaran.

Setakat 20 Ogos 2026, katalog langsung menyenaraikan dua laluan berguna ini:

Beban kerjaID ModelSebab sesuai
Imej produk dengan tetapan output terkawalgpt-image-2Memulangkan data penggunaan dan kandungan imej base64 pada laluan yang serasi dengan OpenAI
Konsep iklan dan kandungan volum tinggidoubao-seedream-4-5-251128Menggunakan laluan penjanaan yang sama dan disenaraikan dengan harga per permintaan

Jadual ini ialah titik permulaan, bukan dakwaan bahawa model mempunyai keupayaan yang sama. Saiz, kualiti, format, sokongan imej rujukan, dan tingkah laku respons kekal khusus kepada model. Semak rekod model dan dokumentasi terpautnya sebelum menghantar parameter pilihan.

Cara Membina Aliran Kerja Penjanaan Imej Secara Kelompok dalam Python

1. Beri setiap tugas ID kekal

Gunakan satu objek JSON setiap baris supaya giliran, eksport pangkalan data, atau tugas hamparan boleh memacu pekerja yang sama:

{"id":"sku-1001","kind":"product","prompt":"Studio product photo of a ceramic coffee dripper on a warm neutral background"}
{"id":"campaign-204","kind":"ad","prompt":"Editorial summer travel image, vivid natural light, wide composition, no text"}
{"id":"blog-088","kind":"content","prompt":"Minimal illustration of a developer automating a creative workflow, no text"}

ID tersebut menjadi nama fail output dan kunci manifest. Dalam pengeluaran, gunakannya sebagai kunci idempotensi dan langkau ID yang telah ditanda berjaya sebelum memproses semula giliran.

2. Halakan mengikut jenis tugas, kemudian sahkan terhadap katalog langsung

Contoh ini memetakan kerja produk kepada gpt-image-2 dan kerja iklan atau kandungan kepada doubao-seedream-4-5-251128. Satu tugas boleh menyaingi pilihan tersebut dengan medan model sendiri. Semasa permulaan, pekerja memuat turun katalog awam dan menolak ID yang tidak lagi tersenarai.

Ini lebih selamat daripada mengkod keras SDK khusus penyedia di seluruh aplikasi. Anda boleh menukar perutehan dalam satu pemetaan selepas menilai kualiti, kependaman, dan harga untuk prompt anda sendiri.

3. Hadkan kebersamaan dan elakkan melancarkan keseluruhan kelompok

Pekerja bermula dengan empat permintaan serentak. Nombor itu ialah tetapan aplikasi yang konservatif, bukan had perkhidmatan sejagat. Ukur kependaman dan respons 429 untuk akaun anda, kemudian naikkan atau turunkan MAX_WORKERS secara beralasan.

Hanya respons 408, 429, dan 5xx dicuba semula dengan backoff eksponen dan jitter. Ralat pengesahan, ID model tidak sah, dan parameter tidak disokong akan gagal serta-merta kerana mencuba semula permintaan buruk yang sama hanya menambah kelewatan.

4. Normalkan hasil sebelum penyimpanan

Model imej tidak selalu memulangkan bekas yang sama. Respons GPT Image yang didokumenkan mengandungi data[0].b64_json; model serasi lain mungkin memulangkan data[0].url. Pekerja mengendalikan kedua-duanya, menulis imej ke fail sementara, dan menamakan semula hanya selepas muat turun atau penyahkodan berjaya.

Untuk pengeluaran, gantikan direktori tempatan output/ dengan S3, R2, GCS, atau stor objek lain. Jangan anggap URL yang dihoskan penyedia sebagai storan kekal melainkan dasar retenya menyatakannya dengan jelas.

5. Rekod penggunaan, percubaan, dan anggaran kos

Setiap hasil menjadi baris manifest ringkas dengan ID tugas, model, laluan simpanan, status, dan anggaran kos USD apabila katalog langsung menyediakan data harga yang mencukupi. Tugas yang gagal mengekalkan ralat dan tidak hilang daripada kelompok.

Skrip Python Lengkap untuk Penjanaan Imej Secara Kelompok

Simpan perkara berikut sebagai batch_image_pipeline.py, letakkan giliran di sebelahnya sebagai jobs.jsonl, dan jalankan python3 batch_image_pipeline.py.

import base64, json, os, random, time
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
import requests

BASE_URL = "https://api.cometapi.com/v1"
KEY = os.environ["COMETAPI_KEY"]
WORKERS = int(os.getenv("MAX_WORKERS", "4"))
OUT = Path("output")
ROUTES = {
    "product": "gpt-image-2",
    "ad": "doubao-seedream-4-5-251128",
    "content": "doubao-seedream-4-5-251128",
}

catalog = requests.get("https://api.cometapi.com/api/models", timeout=30)
catalog.raise_for_status()
CATALOG = {model["id"]: model for model in catalog.json()["data"]}

def generate(job):
    model = job.get("model", ROUTES[job["kind"]])
    if model not in CATALOG:
        raise ValueError(f"Unknown model: {model}")
    payload = {"model": model, "prompt": job["prompt"], "n": 1}
    if model == "gpt-image-2":
        payload.update(quality="low", size="1024x1024", output_format="jpeg")

    for attempt in range(4):
        response = requests.post(
            f"{BASE_URL}/images/generations",
            headers={"Authorization": f"Bearer {KEY}"},
            json=payload,
            timeout=180,
        )
        if response.status_code not in {408, 429} and response.status_code < 500:
            break
        time.sleep(2**attempt + random.random())
    response.raise_for_status()
    body = response.json()
    item = body["data"][0]

    if item.get("b64_json"):
        data = base64.b64decode(item["b64_json"])
        extension = body.get("output_format", "png")
    else:
        download = requests.get(item["url"], timeout=120)
        download.raise_for_status()
        data = download.content
        extension = {"image/png": "png", "image/webp": "webp"}.get(
            download.headers.get("content-type"), "jpg"
        )
    path = OUT / f"{job['id']}.{extension}"
    path.write_bytes(data)

    price, usage = CATALOG[model].get("pricing") or {}, body.get("usage", {})
    cost = price.get("per_request")
    if cost is None and price.get("input") is not None:
        cost = (usage.get("input_tokens", 0) * price["input"] +
                usage.get("output_tokens", 0) * price["output"]) / 1_000_000
    return {"id": job["id"], "model": model, "path": str(path),
            "estimated_usd": cost * price.get("ratio", 1) if cost is not None else None}

def safe_generate(job):
    try:
        return {"status": "success", **generate(job)}
    except Exception as error:
        return {"id": job["id"], "status": "failed", "error": str(error)}

OUT.mkdir(exist_ok=True)
jobs = [json.loads(line) for line in Path("jobs.jsonl").read_text().splitlines() if line]
with ThreadPoolExecutor(max_workers=WORKERS) as pool:
    results = list(pool.map(safe_generate, jobs))
with (OUT / "manifest.jsonl").open("w") as manifest:
    manifest.writelines(json.dumps(result) + "\n" for result in results)

Skrip ini menggunakan katalog semasa pada waktu jalan, manakala dua pemetaan jatuh balik adalah contoh yang disahkan pada 20 Ogos 2026. Semak semula sebelum menerbit atau mendepoloykan kod pada tarikh lain.

Cara Menguji Aliran Kerja Penjanaan Imej Secara Kelompok

Mulakan dengan satu tugas dan satu pekerja:

MAX_WORKERS=1 python3 batch_image_pipeline.py

Respons GPT Image yang berjaya mengikut struktur ini:

{
  "created": 1776841943,
  "output_format": "jpeg",
  "quality": "low",
  "size": "1024x1024",
  "usage": {
    "input_tokens": 16,
    "output_tokens": 208,
    "total_tokens": 224
  },
  "data": [{"b64_json": "<base64-image-data>"}]
}

Pekerja menyahkod imej, menulis output/<job-id>.jpeg, dan menambah baris kejayaan ke output/manifest.jsonl. Jika sesuatu model memulangkan URL, pekerja akan memuat turunnya dan menyimpan laluan setempat dalam format manifest yang sama.

Kod telah disemak sintaks secara setempat. Panggilan penjanaan langsung masih memerlukan kunci CometAPI anda, jadi jalankan ujian asap satu tugas sebelum meningkatkan kebersamaan.

Berapakah Kos Penjanaan Imej Secara Kelompok?

Harga mesti dicap masa kerana kadar model berubah. Setakat 20 Ogos 2026, katalog model CometAPI langsung memulangkan medan harga asas berikut dan nisbah pengebilan 0.8:

  • gpt-image-2: $5 per 1M token input dan $30 per 1M token output; menggunakan nisbah yang disenaraikan memberikan kadar berkesan $4 dan $24 per 1M token.
  • doubao-seedream-4-5-251128: $0.04 per permintaan; menggunakan nisbah yang disenaraikan memberikan $0.032 per permintaan.

Panduan harga CometAPI menerangkan pengebilan berasaskan token untuk model dengan harga rasmi dan pengebilan berasaskan panggilan untuk model yang dihargakan per permintaan. Skrip membaca katalog apabila ia berjalan dan menggunakan peraturan yang sama:

token cost = ratio × (input tokens × input rate + output tokens × output rate) / 1,000,000

request cost = ratio × per-request price

Sebagai contoh, respons GPT Image yang didokumenkan di atas melaporkan 16 token input dan 208 token output. Menggunakan nilai katalog 20 Ogos, hasil ilustrasi itu dianggarkan sekitar $0.005056. Jumlah sebenar berubah mengikut model, kualiti, saiz, prompt, percubaan semula, dan penggunaan respons. Anggap respons API dan papan pemuka penggunaan akaun sebagai rekod pengebilan, bukan anggaran tetap per imej.

Peruntukkan bajet untuk kerja yang tidak berjaya juga. Satu percubaan semula selepas tamat masa yang tidak disahkan mungkin menghasilkan keputusan yang boleh dicaj kedua, dan imej yang berjaya secara teknikal tetapi gagal semakan masih menggunakan bajet. Jejaki kedua-dua kos API dan kadar penerimaan:

effective cost per accepted image = total batch spend / approved images

Ralat Biasa API Penjanaan Imej dan Cara Membetulkannya

SimptomPunca berkemungkinanPembetulan
401Kunci hilang atau tidak sahSemak COMETAPI_KEY di sisi pelayan
400Model tidak sah atau opsyen tidak disokongSemak semula katalog langsung dan keluarkan medan khusus model
429Kebersamaan terlalu tinggiRendahkan MAX_WORKERS dan kekalkan backoff eksponen
5xx berulangKegagalan huluan sementaraCuba semula dengan had, kemudian pindahkan tugas ke dead-letter queue
Tiada imej disimpanRespons menggunakan bekas berbezaPeriksa data[0] dan sokong sama ada b64_json atau url
Perbelanjaan bergandaTugas dimainkan semula selepas kegagalan separaGunakan ID kekal dan akui hanya selepas penyimpanan berjaya

Jangan cuba semula setiap ralat. Permintaan 400 kekal akan terus tidak sah, manakala gelung percubaan semula 429 tanpa had boleh menukar lonjakan trafik menjadi tunggakan.

Amalan Terbaik untuk Penjanaan Imej Pengeluaran pada Skala

Beralih daripada JSON Lines kepada giliran tahan apabila beberapa pekerja terlibat. Tetapkan masa keterlihatan lebih lama daripada masa penjanaan maksimum, akui tugas hanya selepas imej dan manifest disimpan, dan hantar tugas yang telah menghabiskan percubaan ke dead-letter queue untuk semakan.

Simpan kawalan pilihan dalam konfigurasi khusus model. Muatan bersama harus hanya mengandungi medan umum seperti model, prompt, dan n: 1; tambah quality, size, atau output_format hanya selepas dokumentasi model terpilih mengesahkannya. Jika anda menambah perutehan jatuh balik, pilih model yang menyokong tugas yang sama dan bina semula muatan untuk model tersebut dan bukannya mengulang main opsyen khusus penyedia secara membuta tuli.

Simpan kunci API dalam pengurus rahsia, hadkan input prompt, imbas aset yang dijana mengikut polisi anda, dan elakkan URL penyedia dalam rekod produk jangka panjang. Log ID tugas, ID model, kependaman, percubaan, penggunaan, laluan storan, hasil semakan, dan tarikh snapshot katalog. Medan tersebut membolehkan anda membandingkan model mengikut kos imej yang diterima, bukan sekadar harga tajuk.

Akhir sekali, tetapkan penghad bajet: saiz kelompok maksimum, had percubaan semula per tugas, amaran perbelanjaan harian, dan syarat berhenti apabila kadar kelulusan jatuh. Menskalakan prompt yang lemah dengan lebih cepat bukan satu pengoptimuman.

Soalan Lazim tentang Mengautomasikan Penjanaan Imej pada Skala

Apakah cara paling mudah untuk mengautomasikan penjanaan imej pada skala tanpa mengurus beberapa API?

Gunakan satu aliran giliran dan storan, kemudian hantar permintaan imej yang serasi melalui satu kunci CometAPI dan https://api.cometapi.com/v1/images/generations. Tukar ID model dalam lapisan perutehan anda dan bukannya mengekalkan pengesahan dan SDK penyedia yang berasingan.

Bolehkah saya menghantar satu permintaan dan meminta beberapa model imej menjana serentak?

Contoh ini menghantar satu model per tugas. Fan-out ialah aliran kerja aplikasi: gandakan satu tugas dengan ID dan nilai model yang berbeza, kemudian bandingkan output yang disimpan. Ini memastikan kos dan status semakan boleh dikaitkan kepada setiap model.

Kebersamaan berapakah yang patut saya gunakan?

Tiada nombor sejagat untuk setiap akaun dan model. Mulakan dengan kolam kecil terhad seperti empat pekerja, pantau kependaman dan respons 429, dan tala berdasarkan bukti.

Patutkah saya menyimpan URL yang dipulangkan atau imej itu sendiri?

Simpan imej dalam storan objek anda sendiri. URL yang dipulangkan mungkin bersifat sementara, manakala model GPT Image mungkin memulangkan kandungan base64 dan bukannya URL.

Bagaimana saya memilih model termurah?

Kira kos per imej yang diterima, bukan sekadar harga per panggilan. Sertakan caj token atau permintaan, percubaan semula, muat turun yang gagal, aset yang ditolak, pascapemprosesan, dan semakan manusia. Semak semula katalog model langsung pada hari anda menerbit atau mendepoloy.

Di mana saya perlu mengesahkan endpoint dan format respons?

Gunakan CometAPI Quick Start, dokumentasi katalog model, rujukan penjanaan imej, dan panduan harga.

Terus belajar

Sambungkan artikel ini ke keputusan seterusnya.

Lihat semua topik
Diterbitkan pada Sep 6, 2026
Terakhir dikemas kini Sep 6, 2026
11 paparan
Disemak untuk kejelasan, atribusi sumber dan terminologi API semasa.

Baca Lagi