Claude Opus 5.5 כבר זמין ב-SeedRouter

GPT Image 2 API ב-Python: דוגמה מלאה

דוגמה מלאה ל-GPT Image 2 API ב-Python: שולחים בקשה, מתשאלים את המשימה, מורידים את התמונות לדיסק, עורכים עם תמונות ייחוס ומטפלים בשגיאות בבטחה.

קריאה כ-Markdown

כדי להשתמש ב-GPT Image 2 API מ-Python, שלח את הבקשה ב-POST אל https://api.seedrouter.ai/v1/images/generations עם הספרייה requests, שמור את ה-id של המשימה שמוחזר, תשאל את /v1/tasks/{id} עד שהמשימה במצב completed, והורד את כתובות התמונות שהיא מפרטת. הסקריפט שלהלן מבצע את ארבעת השלבים בכ-40 שורות ושומר את התמונות לדיסק.

הוא רץ כמו שהוא ברגע ש-SEEDROUTER_API_KEY מוגדר. אם עדיין אין לך מפתח, השג אחד קודם.

איך נראה סקריפט מלא ל-GPT Image 2?

import os
import time
import requests

API = "https://api.seedrouter.ai/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"}


def submit(body):
    response = requests.post(f"{API}/images/generations", headers=HEADERS, json=body, timeout=60)
    if response.status_code >= 400:
        error = response.json()["error"]
        raise RuntimeError(f"{response.status_code} {error['code']}: {error['message']}")
    return response.json()["id"]


def wait(task_id, limit_seconds=600):
    deadline = time.monotonic() + limit_seconds
    while time.monotonic() < deadline:
        task = requests.get(f"{API}/tasks/{task_id}", headers=HEADERS, timeout=30).json()
        if task["status"] == "completed":
            return [image["url"] for image in task["output"]["data"]]
        if task["status"] == "failed":
            raise RuntimeError(f"{task['error']['code']}: {task['error']['message']}")
        time.sleep(3)
    raise TimeoutError(f"Still running. Resume polling task {task_id}.")


def download(urls, prefix):
    paths = []
    for index, url in enumerate(urls):
        path = f"{prefix}-{index}.png"
        with open(path, "wb") as file:
            file.write(requests.get(url, timeout=60).content)
        paths.append(path)
    return paths


task_id = submit({
    "model": "gpt-image-2",
    "prompt": "A matte ceramic vase on a sunlit table, soft shadows",
    "size": "1024x1024",
    "quality": "low",
    "n": 2,
})
print("task", task_id)
print(download(wait(task_id), "vase"))

הרץ אותו עם python example.py. הוא מדפיס קודם את מזהה המשימה, ואחר כך את הנתיבים של שני קובצי PNG, vase-0.png ו-vase-1.png.

מה עושה כל פונקציה?

submit שולחת את הבקשה ומחזירה את מזהה המשימה. תגובת שגיאה תמיד כוללת אובייקט error עם code מספרי ו-message, כך שהחריגה אומרת לך מה לתקן. לדוגמה, 400 עם הקוד 20001 וההודעה “Check the size parameter against the API documentation.” אומר שהגודל הפר אחד מהכללים במדריך הפרמטרים.

wait מתשאלת כל שלוש שניות עד שהמשימה מסתיימת. מועד אחרון בצד שלך עוצר את הלולאה, לא את המשימה: הרינדור ממשיך, ואפשר לחזור לתשאל את אותו מזהה מאוחר יותר. משימה שמסתיימת ב-failed זורקת חריגה עם קוד השגיאה שלה ואינה מחויבת.

download מושכת כל כתובת שהמשימה החזירה וכותבת אותה לדיסק. כתובות התוצאה הן נקודת מסירה, לא אחסון קבוע, ולכן שמור את מה שאתה רוצה לשמור. הדוגמה משתמשת ב-requests גם להורדות וגם לקריאות ה-API; השתמש בלקוח HTTP אחד לאורך כל הדרך במקום לערבב את urllib של הספרייה הסטנדרטית.

איך משנים את הגדרות התמונה?

הכל נמצא בגוף הבקשה. השדות שרוב האנשים משנים קודם:

שדהדוגמההשפעה
size"1536x1024"ממדי הפלט; auto נותן למודל לבחור
quality"medium"low, medium, high או auto
n4מספר התמונות, 1 עד 10
output_format"jpeg"png או jpeg
background"transparent"דורש png

אם אתה משנה את output_format, שנה בהתאם את הסיומת .png ב-download. הרשימה המלאה של השדות והמגבלות נמצאת בתיעוד ה-API של GPT Image 2.

איך עורכים תמונה מ-Python?

העבר תמונות ייחוס ככתובות URL באותה קריאה. אין נקודת קצה נפרדת לעריכה; הוספת images הופכת את הבקשה לעריכה, ו-mask מגביל את השינוי לאזור אחד:

task_id = submit({
    "model": "gpt-image-2",
    "prompt": "Make the vase deep blue. Keep the table and the light unchanged.",
    "images": [{"image_url": "https://example.com/vase.png"}],
})

הכתובות חייבות להיות קישורי HTTPS ציבוריים לקובצי PNG, JPEG או WebP. אפשר לשלוח עד 16. קבצים מקומיים ומחרוזות base64 נדחים, ולכן העלה קודם את התמונה לאחסון שלך והעבר את הכתובת שלה.

מה הסקריפט צריך לעשות כשהשליחה חורגת מהזמן?

אל תשלח שוב מיד. חריגת זמן ב-POST אינה מוכיחה שהבקשה נדחתה; ייתכן שהמשימה כבר רצה וחויבה. בדוק את המשימות האחרונות שלך, או שלח את הבקשה שוב רק אחרי שווידאת שלא נוצרה משימה. מדריך המשימות מסביר איך להבחין בין שני המצבים.

בתשאול המצב שונה: חריגת זמן בזמן התשאול אינה מזיקה. קרא שוב ל-wait עם אותו מזהה.

שאלות נפוצות

אפשר להשתמש במקום זה ב-OpenAI Python SDK?

לא ישירות. ה-API הזה מוסר תוצאות באופן אסינכרוני דרך מזהה משימה, ואילו קריאת התמונה של ה-SDK מצפה לקבל את התמונה המוכנה בתגובה. כמה שורות של requests, כמו למעלה, מכסות את כל התהליך.

איך מריצים כמה פרומפטים?

שלח כל פרומפט, שמור את כל מזהי המשימות, ואז תשאל אותם. מדריך היצירה באצווה מציג גרסה ששורדת הפעלות מחדש בלי לשלם פעמיים.

האם gpt-image-2-official דורש קוד אחר?

לא. שנה את המחרוזת של model ושום דבר אחר. שני המזהים מקבלים את אותם שדות ומחזירים את אותה תגובת משימה; רק החיוב שונה.

שמור את מזהה המשימה, והשאר הוא צנרת

שלח, שמור את המזהה, תשאל עם מועד אחרון, והורד את מה שחוזר. הדפוס הזה הוא כל האינטגרציה. נסה פרומפט בלי קוד ב-Playground של GPT Image 2 לפני שאתה כותב לו סקריפט.

מדריכים קשורים