Көптеген әртүрлі API-ларды басқармай-ақ сурет генерациясын ауқымды түрде автоматтандырудың ең оңай жолы — жұмыс ағынын модель провайдерінен бөлу. Әрбір сурет сұранысын бір кезекке салыңыз, әр жұмысты ағымдағы модель ID-сына бағыттаңыз және үйлесімді сұраныстарды бір CometAPI кілті мен OpenAI-үйлесімді базалық URL арқылы жіберіңіз: https://api.cometapi.com/v1.
Бұл нұсқаулық сол конвейерді Python тілінде құрады. Ол JSON Lines кезегінен өнім, жарнама және контент жұмыстары қабылдайды; модель таңдайды; параллелдікті шектейді; уақытша ақауларды қайта әрекет етеді; нәтижені URL немесе base64 түрінде сақтайды; және әр жұмыс бойынша пайдалану мен шамаланған құнды тіркейді. Үлгі өндірістегі маңызды элементтерді бір ықшам блокта сақтайды, сондықтан мақаланы код анықтамалығына айналдырмай-ақ жұмыс ағынын сынай аласыз.
Біріктірілген Image API топтық генерацияны қалай жеңілдетеді
Соңында жұмыс ағыны мынадай болып көрінеді:
jobs.jsonl → bounded worker pool → CometAPI /v1/images/generations → object storage → manifest.jsonl
Кезек пен сақтау қабаты сіздікі болып қалады. Сурет моделін ауыстыру — аутентификация жүйесін немесе негізгі маршрутты өзгерту емес, тек model мәнін өзгерту. Біріктірілген image API-дың практикалық артықшылығы — модельді таңдау жеке провайдер интеграциясынан гөрі, бір құбырдағы маршрутизация шешіміне айналады.
Сурет генерациясын автоматтандыру үшін не қажет?
Сізге Python 3.10 немесе одан жаңа нұсқа, requests пакеті, CometAPI кілті, жазуға болатын шығыс орны және кемінде бір ағымдағы сурет моделі ID қажет.
Жалғыз тәуелділікті орнатыңыз:
pip install requests
Кілтіңізді серверде орнатыңыз, ешқашан браузер кодында немесе репозиторийде емес:
export COMETAPI_KEY="your-key"
Базалық URL — https://api.cometapi.com/v1, ал үйлесімді мәтіннен-суретке тапсырмалар POST /images/generations пайдаланады. Жіберер алдында тірі модель каталогында әр модельді тексеріңіз; каталог ағымдағы ID-ны, қолдау көрсетілетін endpoint-ті, мүмкіндіктерді және баға метадеректерін қайтарады және авторизация тақырыпшасын талап етпейді.
2026 жылғы 20 тамыздағы жағдай бойынша, тірі каталогта мына екі пайдалы маршрут list-ке қосылған:
| Жұмыс жүктемесі | Модель ID | Неліктен сәйкес келеді |
|---|---|---|
| Шығысын басқаруға болатын өнім суреттері | gpt-image-2 | Құжатталған OpenAI-үйлесімді маршрутта usage деректерін және base64 сурет контентін қайтарады |
| Көлемді жарнама және контент тұжырымдамалары | doubao-seedream-4-5-251128 | Сол генерация маршрутын пайдаланады және сұранысқа шақ бағамен list-те көрсетілген |
Бұл кесте — бастапқы нүкте ғана, модельдердің мүмкіндіктері бірдей деген мәлімдеме емес. Өлшем, сапа, формат, reference-image қолдауы және жауап мінез-құлқы модельге тәуелді. Қосымша параметрлерді бермес бұрын модель жазбасын және оған байланысты құжаттаманы тексеріңіз.
Python тілінде топтық сурет генерациясы жұмыс ағынын қалай құруға болады
1. Әр жұмысқа тұрақты ID беріңіз
Кезек, дерекқор экспорты немесе кесте жұмысын сол жұмысшыға беру үшін әр жолға бір JSON объектісін пайдаланыңыз:
{"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 шығыс файл атауына және манифест кілтіне айналады. Өндірісте оны идемпотенттік кілт ретінде пайдаланыңыз және кезек қайта өңделер алдында сәтті деп белгіленген ID-ларды өткізіп жіберіңіз.
2. Алдымен жұмыс түрі бойынша маршрутизациялаңыз, содан кейін тірі каталогпен тексеріңіз
Мысал өнім жұмыстары үшін gpt-image-2, ал жарнама немесе контент жұмыстары үшін doubao-seedream-4-5-251128 пайдаланады. Жұмыс өз model өрісімен осы таңдауды қайта анықтай алады. Іске қосылғанда жұмысшы жалпыға қолжетімді каталогты жүктейді және тізімде жоқ ID-ны қабылдамайды.
Бұл бүкіл қолданба бойынша провайдерге тән SDK-ны хардкодтаудан қауіпсізірек. Сапа, кідіріс және бағаны өз prompt-тарыңыз үшін бағалағаннан кейін бір mapping-те маршрутты өзгерте аласыз.
3. Барлық партияны бірден іске қоспай, параллелдікті шектеңіз
Жұмысшы төрт параллель сұраныспен бастайды. Бұл сан — сервистің әмбебап шегі емес, сақтықпен қойылған қолданбалық параметр. Есептік жазбаңыз үшін кідірісті және 429 жауаптарын өлшеңіз, содан кейін MAX_WORKERS мәнін саналы түрде көтеріңіз немесе төмендетіңіз.
Тек 408, 429 және 5xx жауаптары экспоненциалды backoff және джиттермен қайта әрекет етіледі. Аутентификация қателері, жарамсыз модель ID-лары және қолдауы жоқ параметрлер бірден істен шығады, өйткені сол бүлінген сұранысты қайта жіберу тек кешіктіруді арттырады.
4. Сақтаудан бұрын нәтижені нормалданыңыз
Сурет модельдері әрдайым бір контейнерді қайтармайды. Құжатталған GPT Image жауаптары data[0].b64_json қамтиды; басқа үйлесімді модельдер data[0].url қайтара алады. Жұмысшы екеуін де өңдейді, суретті уақытша файлға жазады және жүктеп алу немесе декодтау сәтті болғаннан кейін ғана қайта атайды.
Өндіріс үшін жергілікті output/ директориясын S3, R2, GCS немесе басқа объект сақтауымен ауыстырыңыз. Провайдерде орналастырылған URL-ды сақтаудың тұрақты орны ретінде қарастырмаңыз, егер оның сақтау саясаты бұл туралы нақты айтпаса.
5. Пайдалануды, әрекет ету санын және шамаланған құнын жазып отырыңыз
Әрбір нәтиже — жұмыс ID-сы, модель, сақталған жол, мәртебе және тірі каталог жеткілікті баға деректерін берсе, шамаланған USD құн көрсетілген ықшам манифест жолына айналады. Істен шыққан жұмыстар партиядан жоғалып кетудің орнына қатені сақтап қалады.
Топтық сурет генерациясына арналған толық Python скрипті
Төмендегіні batch_image_pipeline.py ретінде сақтаңыз, қасына jobs.jsonl кезегін орналастырыңыз және 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)
Скрипт орындалу уақытында ағымдағы каталогты пайдаланады, ал екі fallback mapping — 2026 жылғы 20 тамызда тексерілген мысалдар. Оларды жариялар немесе басқа күні енгізер алдында қайта тексеріңіз.
Топтық сурет генерациясы жұмыс ағынын қалай тестілеу керек
Бір жұмыстан және бір жұмысшыдан бастаңыз:
MAX_WORKERS=1 python3 batch_image_pipeline.py
Сәтті GPT Image жауабы мына құрылымды ұстанады:
{
"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>"}]
}
Жұмысшы суретті декодтайды, output/<job-id>.jpeg жазады және output/manifest.jsonl ішіне сәтті жол қосады. Егер модель URL қайтарса, жұмысшы оны жүктеп алып, сол манифест форматында жергілікті жолды сақтайды.
Код локалды түрде синтаксиске тексерілді. Тірі генерация қоңырауы үшін CometAPI кілті қажет, сондықтан параллелдікті арттырмас бұрын бір-жобалық smoke-тест жасаңыз.
Топтық сурет генерациясының құны қанша?
Баға модель ставкалары өзгеретіндіктен, уақыт белгісімен берілуі тиіс. 2026 жылғы 20 тамыздағы жағдай бойынша CometAPI тірі модель каталогы мына базалық баға өрістерін және 0.8 биллинг коэффициентін қайтарды:
gpt-image-2: 1M input токенге $5 және 1M output токенге $30; көрсетілген коэффициентті қолданғанда тиімді ставкалар 1M токенге $4 және $24.doubao-seedream-4-5-251128: бір сұранысқа $0.04; коэффициентті қолданғанда бір сұранысқа $0.032.
CometAPI бағалау нұсқаулығы ресми бағасы бар модельдер үшін токенге негізделген биллингті және сұранысқа шақ бағаланатын модельдер үшін қоңырауға негізделген биллингті түсіндіреді. Скрипт іске қосылғанда каталогты оқиды және сол ережені қолданады:
token cost = ratio × (input tokens × input rate + output tokens × output rate) / 1,000,000
request cost = ratio × per-request price
Мысалы, жоғарыдағы құжатталған GPT Image жауабы 16 input токенді және 208 output токенді хабарлайды. 20 тамыздағы каталог мәндерін пайдаланып, бұл иллюстративті нәтиже шамамен $0.005056 деп бағаланады. Нақты жалпы сома модельге, сапаға, өлшемге, prompt-қа, қайта әрекеттерге және жауаптағы usage-қа байланысты өзгереді. API жауабын және аккаунт usage тақтасын биллинг жазбасы ретінде қарастырыңыз, суретке шақ тұрақты болжам емес.
Сәтсіз жұмыстарға да бюджет бөліңіз. Расталмаған уақыт асуынан кейінге қайта әрекет ету екінші төленетін нәтижеге әкелуі мүмкін, ал техникалық тұрғыда сәтті сурет тексерістен өтпесе, бәрібір бюджет жұмсалады. API құнын да, қабылдау мөлшерін де қадағалаңыз:
effective cost per accepted image = total batch spend / approved images
Image Generation API-дағы жиі қателер және оларды түзету
| Белгі | Ықтимал себеп | Шешім |
|---|---|---|
| 401 | Кілт жоқ немесе жарамсыз | Сервер жағындағы COMETAPI_KEY мәнін тексеріңіз |
| 400 | Жарамсыз модель немесе қолдауы жоқ опция | Тірі каталогты қайта тексеріңіз және модельге тән өрістерді алып тастаңыз |
| 429 | Параллелдік тым жоғары | MAX_WORKERS мәнін төмендетіңіз және экспоненциалды backoff қолданыңыз |
| Қайталанатын 5xx | Уақытша жоғарғы жақтағы ақау | Шекті қайта әрекет етіңіз, содан кейін жұмысты dead-letter queue-ға жіберіңіз |
| Сурет сақталмады | Жауап басқа контейнерді пайдаланды | data[0] тексеріңіз және b64_json немесе url екеуін де қолдаңыз |
| Қайталанған шығын | Жұмыс ішінара істен кейін қайта ойналды | Тұрақты ID-ларды пайдаланыңыз және тек сақтау сәтті болғаннан кейін acknowledge жасаңыз |
Әрбір қатені қайта әрекет етпеңіз. Тұрақты 400 сұраныс жарамсыз күйінде қалады, ал шексіз 429 қайта әрекет циклі трафик толқуын артқа шегінуге айналдыра алады.
Өндірісте ауқымды сурет генерациясына арналған үздік тәжірибелер
Бірнеше жұмысшы қатысқанда JSON Lines-тен тұрақты кезекке ауысыңыз. Көрінушілік уақытын максималды генерация уақытынан ұзақ етіп қойыңыз, сурет пен манифест сақталғаннан кейін ғана жұмысты acknowledge етіңіз және таусылған жұмыстарды шолу үшін dead-letter queue-ға жіберіңіз.
Қосымша басқаруларды модельге тән конфигурацияда сақтаңыз. Ортақ payload тек жалпы өрістерді қамтуы тиіс: model, prompt, және n: 1; quality, size немесе output_format мәндерін тек таңдалған модель құжаттамасы оларды растаса ғана қосыңыз. Егер fallback маршрутизация қоссаңыз, сол тапсырманы қолдайтын модельді таңдаңыз және провайдерге тән опцияларды соқыр қайта жібермей, сол модель үшін payload-ты қайта құрыңыз.
API кілтін құпия менеджерде сақтаңыз, prompt кірісін шектеңіз, саясатыңызға сай генерацияланған активтерді сканерлеңіз және провайдер URL-дарын ұзақ мерзімді өнім жазбаларына қоспаңыз. Жұмыс ID-сы, модель ID-сы, кідіріс, әрекет ету саны, usage, сақтау жолы, шолу нәтижесі және каталог snapshot күні сияқты өрістерді логтаңыз. Бұл өрістер модельдерді тек қоңырау бағасы бойынша емес, қабылданған суретке шақ құн бойынша салыстыруға мүмкіндік береді.
Соңында бюджет қорғаныштарын орнатыңыз: максималды партия көлемі, жұмысқа шақ қайта әрекеттер шегі, күнделікті шығын ескертуі және қабылдау мөлшері төмендегенде тоқтату шарты. Нашар prompt-ты жылдам масштабтау — оңтайландыру емес.
Ауқымды сурет генерациясын автоматтандыру туралы Жиі қойылатын сұрақтар
Бірнеше API-ды басқармай-ақ ауқымды сурет генерациясын автоматтандырудың ең оңай жолы қандай?
Бір кезек пен сақтау жұмыс ағынын пайдаланыңыз, содан кейін үйлесімді сурет сұраныстарын бір CometAPI кілті және https://api.cometapi.com/v1/images/generations. арқылы жіберіңіз. Негізгі аутентификация мен провайдер SDK-ларын қолдамай-ақ, маршрутизация қабатында модель ID-ны өзгертіңіз.
Бір сұранысты жіберіп, бірнеше сурет моделіне бірден генерациялауға бола ма?
Мысалда бір жұмысқа бір модель жіберіледі. Fan-out — қолданбалық жұмыс ағыны: жұмысты әртүрлі ID және модель мәндерімен көшіріңіз, содан кейін сақталған нәтижелерді салыстырыңыз. Бұл құн мен шолу мәртебесін әр модельге нақты жатқызуды қамтамасыз етеді.
Қандай параллелдікті қолданған жөн?
Әр аккаунт пен модель үшін әмбебап саны жоқ. Төрт жұмысшыдан тұратын шағын шектелген пулдан бастаңыз, кідіріс пен 429 жауаптарын бақылаңыз және дәлелге сүйене отырып баптаңыз.
Қайтарылған URL-ды ма, әлде суреттің өзін сақтаған дұрыс па?
Суретті өз объект сақтауыңызда сақтаңыз. Қайтарылған URL уақытша болуы мүмкін, ал GPT Image модельдері URL орнына base64 контентін қайтара алады.
Ең арзан модельді қалай таңдауға болады?
Тек қоңырау бағасын емес, қабылданған суретке шақ құнды есептеңіз. Токен немесе сұраныс үстемеақыларын, қайта әрекеттерді, сәтсіз жүктеп алуларды, қабылданбаған активтерді, пост-өңдеуді және адам шолуын қосыңыз. Жариялар немесе енгізер күні тірі модель каталогын қайта тексеріңіз.
Endpoint пен жауап форматын қайда тексеру керек?
CometAPI Quick Start, модель каталогы құжаттамасы, image generation reference және баға нұсқаулығын пайдаланыңыз.