Tutoriale
Come usare imagen-4.0-ultra tramite l'API HiAPI: curl, Python ed esempi di richiesta funzionanti
Guida passo passo per chiamare il modello di immagini con la massima qualità dall'endpoint compatibile OpenAI di HiAPI
Che cos'è imagen-4.0-ultra e quando sceglierlo
imagen-4.0-ultra è il livello con la massima fedeltà della famiglia imagen-4.0, e HiAPI lo espone come modello di generazione di immagini sullo stesso endpoint compatibile OpenAI usato per i modelli di chat e le altre famiglie di modelli. Il modello mentale è semplice: invii un corpo JSON strutturato che descrive un'immagine e ricevi indietro dati immagine, non il risultato di un completamento chat.
La scelta tra i vari livelli dipende principalmente dal compito, non da una classifica:
- Bozze e iterazioni. Se stai esplorando i prompt, testando la composizione o generando miniature per orientarti, i modelli di immagini più leggeri rispondono più in fretta e costano meno per singola generazione. Riserva ultra al round che conta davvero.
- Materiali finali. Key visual, visual di marketing e qualsiasi contenuto che le persone guarderanno a dimensione originale traggono vantaggio dal dettaglio del livello ultra, dalla fedeltà al prompt e dalla capacità di gestire scene complesse con più soggetti o elementi simili a testo.
- Pipeline batch con soglia di qualità. Uno schema comune consiste nel produrre prima ampie bozze con un modello leggero, per poi rieseguire solo i prompt selezionati su imagen-4.0-ultra. Poiché HiAPI colloca l'ID del modello nel corpo della richiesta, cambiare livello richiede solo la modifica di una stringa, non una nuova integrazione.
Ci sono alcune aspettative da fissare in anticipo. La generazione di immagini non è istantanea; una singola richiesta ultra può richiedere sensibilmente più tempo di un completamento testuale, quindi progetta il client con timeout ampi e non dare per scontata una latenza inferiore al secondo. Inoltre, poiché la risposta contiene dati immagine binari e non un array choices, nessun codice di parsing scritto per i modelli di chat è riutilizzabile: pianificalo fin da subito.
Se non sei sicuro che ultra ti serva, invia prima una richiesta minimale, controlla l'output alla risoluzione che prevedi di consegnare e poi confrontalo con i livelli più leggeri. Giudicare la qualità di un'immagine da un'anteprima ridotta è fuorviante.
Prerequisiti e configurazione dell'autenticazione
Prima di inviare la prima richiesta, verifica tre cose: hai una chiave API HiAPI, conosci l'URL di base dell'endpoint compatibile OpenAI e il tuo strumento è in grado di effettuare richieste HTTPS (curl, oppure Python con requests, o anche httpx).
Tieni la chiave lontana dal codice
Conserva la chiave in una variabile d'ambiente, non incollarla nello script:
export HIAPI_API_KEY="your_api_key_here"
In produzione, usa il gestore di segreti della piattaforma e inietta il valore a runtime. Commettere la chiave nel repository è il modo più comune di far trapelare le credenziali, e ruotare una chiave è molto più doloroso che leggerla da una variabile d'ambiente.
Header di autenticazione
Ogni richiesta porta l'header standard con token Bearer:
Authorization: Bearer $HIAPI_API_KEY
Content-Type: application/json
Entrambi gli header sono importanti. L'assenza di Content-Type può far rifiutare o interpretare male il corpo della richiesta al server, e a volte si manifesta come un generico errore confuso invece di un messaggio di validazione chiaro.
La stessa chiave e lo stesso schema di header valgono per tutte le famiglie di modelli su HiAPI: è questo il vantaggio concreto di un endpoint unificato: una credenziale, un client, più modelli.
Verifica rapida di integrità
Se hai a portata di mano un ID di modello che supporta la chat, inviare prima una semplice richiesta testuale è un modo economico per confermare che chiave e header siano corretti prima di metterti a debuggare il corpo della richiesta di immagini. Distinguere i problemi di autenticazione da quelli del corpo della richiesta fa risparmiare davvero tempo. Se la richiesta testuale riesce e quella di immagini fallisce, sai che il problema è nel corpo della richiesta di immagini.
Costruire il corpo della richiesta
Parti dal corpo minimo che riesce a generare un'immagine: ID del modello più un prompt. Tutto il resto è ottimizzazione opzionale.
{
"model": "imagen-4.0-ultra",
"prompt": "Una sala di lettura illuminata dal sole con finestre alte, una scrivania in legno e scaffali di libri consumati, sottili particelle di polvere nella luce"
}
Due principi lo mantengono manutenibile. Primo, l'ID del modello deve corrispondere esattamente a quello documentato da HiAPI per questo modello: senza spazi, senza suffissi di versione inventati. Secondo, il prompt è linguaggio naturale puro; scrivilo come descriveresti un'immagine a un fotografo, privilegiando nomi concreti e indicazioni su luce o composizione invece di aggettivi astratti.
Forme di prompt che di solito funzionano
- Prima il soggetto, poi la scena, poi lo stile. "Una volpe in una foresta di betulle innevata, luce del mattino, profondità di campo ridotta" è più affidabile di una sfilza di parole chiave di stile.
- Sii specifico sulla composizione. Indica l'angolazione della camera, l'inquadratura o il layout quando sono importanti per il tuo caso d'uso.
- Evita le contraddizioni. Chiedere "minimalista" e "dettagli decorativi elaborati" nella stessa frase spesso produce un compromesso indesiderato.
Dimensioni e rapporto d'aspetto
I modelli di immagini di solito accettano opzioni di larghezza/altezza o di rapporto d'aspetto, ma i nomi esatti dei parametri e i valori supportati variano da modello a modello. Non indovinare: consulta la documentazione dei parametri del modello su HiAPI e usa solo i valori elencati. Se passi dimensioni o rapporti non supportati dal modello, aspettati un errore di validazione, non un fallback silenzioso.
Il flusso sicuro è: inizia con i valori predefiniti, conferma una risposta riuscita, poi aggiungi un parametro di dimensione alla volta e controlla l'output. Se dopo l'aggiunta di un parametro le richieste iniziano a fallire, hai individuato la causa nell'ultima modifica.
Nella prima richiesta non inserire affatto parametri opzionali. Un corpo con due soli campi che funziona è una base migliore di un corpo con dieci campi che fallisce.
Una richiesta curl funzionante
Dopo aver esportato la chiave, questa è la forma della richiesta che puoi copiare e adattare:
curl -sS -X POST "$HIAPI_BASE_URL/images/generations" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "imagen-4.0-ultra",
"prompt": "Una sala di lettura illuminata dal sole con finestre alte, una scrivania in legno e scaffali di libri consumati, sottili particelle di polvere nella luce"
}'
Cosa fa ciascuna parte:
-X POST— la generazione di immagini è un'operazione di creazione, non di lettura.- URL — la rotta di generazione di immagini sull'endpoint compatibile OpenAI di HiAPI. Imposta
HIAPI_BASE_URLall'URL di base indicato nella documentazione HiAPI, così il percorso resta corretto anche se l'host cambia. - I due header — autenticazione Bearer e tipo di contenuto JSON, come descritto sopra.
- Corpo
-d— lo stesso JSON che riutilizzerai in Python. Le virgolette contano: racchiudi il payload tra apici singoli per evitare che la shell espanda qualcosa al suo interno.
Suggerimenti di debug
Aggiungi -i per includere gli header di risposta, così vedi lo stato HTTP anche quando il corpo è grande. Se vuoi confermare cosa è stato effettivamente inviato, aggiungi -v e leggi la riga di richiesta uscente: espone rapidamente un URL malformato o un header mancante.
Se l'output nel terminale è una gran quantità di base64 o rumore binario, significa che la richiesta è riuscita. Non inviarlo in pipe verso i log; consulta la sezione sulla gestione delle risposte per una soluzione più pulita. Reindirizzare la risposta grezza su file (> out.json) va bene per un controllo una tantum.
Una volta che curl restituisce uno stato di successo e un corpo analizzabile, hai un contratto verificato. Il passo Python dovrebbe riprodurre byte per byte (strutturalmente) questo stesso JSON, così qualsiasi fallimento futuro sarà attribuibile al codice e non a una richiesta diversa.
La stessa richiesta in Python
Con requests, la chiamata equivalente resta vicina alla versione curl, il che rende il confronto incrociato semplicissimo:
import os
import requests
base_url = os.environ["HIAPI_BASE_URL"]
api_key = os.environ["HIAPI_API_KEY"]
payload = {
"model": "imagen-4.0-ultra",
"prompt": (
"Una sala di lettura illuminata dal sole con finestre alte, "
"una scrivania in legno e scaffali di libri consumati, sottili particelle di polvere nella luce"
),
}
response = requests.post(
f"{base_url}/images/generations",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
json=payload,
timeout=120,
)
response.raise_for_status()
result = response.json()
Alcune note importanti nella pratica:
json=payloadserializza il dizionario e imposta il tipo di contenuto per te. Puoi comunque passare gli header esplicitamente per chiarezza o per coerenza con curl.timeout=120non è decorativo. La generazione di immagini può essere lenta; senza timeout esplicito erediti il valore predefinito della libreria, che può essere più breve di quanto ti aspetti, e un'interruzione lato client sembra un guasto del server.raise_for_status()trasforma le risposte 4xx e 5xx in eccezioni, invece di lasciar fluire corpi di errore malformati nel tuo codice di parsing.
Incapsula per il riutilizzo
Metti la chiamata in una piccola funzione che accetta il prompt e parametri opzionali, restituisce il risultato analizzato e registra solo l'ID del modello, la lunghezza del prompt, il codice di stato e il tempo impiegato. Quella riga di log basta a debuggare la maggior parte dei problemi senza dover archiviare megabyte di dati immagine nell'aggregatore di log.
Poiché il corpo è puro JSON, la stessa funzione è riutilizzabile con altri modelli di immagini su HiAPI: sostituisci l'ID del modello e, se necessario, i parametri di dimensione supportati. Conserva qualche prompt di esempio nello script di test, così dopo ogni aggiornamento del client puoi rieseguire una richiesta che sai funzionante e ottenere un segnale rapido.
Gestire la risposta con l'immagine
La risposta è un payload di immagine, non un completamento chat. Non cercare choices[0].message.content: scrivi codice di parsing che corrisponda a ciò che la rotta di immagini restituisce effettivamente, come indicato nella documentazione HiAPI.
Parsing difensivo
La risposta di solito contiene i dati immagine sotto forma di stringa base64, talvolta con metadati aggiuntivi. Decodifica solo dopo aver verificato che il campo esista:
import base64
item = result["data"][0]
image_b64 = item.get("b64_json")
if image_b64 is None:
# alcune risposte possono contenere un URL o altri formati; consulta la documentazione
raise ValueError(f"Chiavi del payload immagine inattese: {list(item)}")
image_bytes = base64.b64decode(image_b64)
with open("output.png", "wb") as f:
f.write(image_bytes)
Il list(item) nel messaggio di errore è la parte utile: quando il payload cambia, ti dice le chiavi effettive invece di lasciarti indovinare.
Registrare nei log senza riversare binari
Non registrare mai il corpo grezzo della risposta di una richiesta di immagini: è grande e in gran parte illeggibile. Registra il codice di stato, la lunghezza del contenuto, l'ID del modello e l'hash o il numero di byte dell'immagine decodificata. Basta per verificare che ogni prompt abbia prodotto un'immagine diversa senza gonfiare l'archiviazione.
Abitudini operative
- Valida prima di archiviare. Verifica che i byte decodificati inizino con una firma immagine riconoscibile e intercetta gli errori di decodifica nel punto in cui scrivi il file.
- Scritture atomiche. Salva su un percorso temporaneo e rinomina dopo il successo, così un crash a metà scrittura non lascia un file troncato che sembra valido.
- Salva i prompt insieme agli output. Conserva accanto a ogni immagine il prompt, l'ID del modello e qualsiasi parametro di dimensione. Quando più avanti uno stakeholder chiederà una variante, ti servirà la richiesta originale.
- Definisci regole di conservazione. Le immagini generate si accumulano; decidi presto dove risiedono e per quanto tempo.
Diagnosticare le richieste fallite
La maggior parte dei fallimenti delle prime richieste rientra in tre categorie. Controllale in quest'ordine prima di modificare il prompt.
Errori di autenticazione
401 o 403 significano quasi sempre un header errato. Verifica che lo schema sia esattamente Bearer, seguito da uno spazio e dalla chiave, senza spazi finali o virgolette superflue. Controlla che la variabile d'ambiente sia effettivamente impostata nella shell o nel processo in cui esegui la richiesta: una chiave esportata in un terminale non esiste in un altro. Se hai ruotato di recente la chiave, assicurati che il vecchio valore non sia ancora in cache in un file di configurazione o in un segreto di deployment.
ID del modello errato
Una risposta di modello non trovato significa che il campo model non corrisponde all'ID registrato su HiAPI. Copia l'identificatore dalla documentazione dei modelli HiAPI invece di ridigitarlo; un carattere sbagliato o un suffisso di versione inventato basta a causare il fallimento. Se cambi l'ID del modello per confrontare i livelli, verifica che la sostituzione sia finita nel corpo della richiesta e non solo in un commento.
Parametri rifiutati
Un errore di validazione che indica un campo specifico di solito significa una dimensione o un rapporto d'aspetto non supportati, oppure un parametro opzionale che il modello non accetta. Rimuovi tutti i campi opzionali, conferma che la richiesta minimale a due campi riesce, poi reintroduci i parametri uno alla volta. Questo isola immediatamente il problema.
Altri sintomi
- 200 ma corpo vuoto o non analizzabile — probabilmente stai leggendo il campo sbagliato. Controlla le chiavi di primo livello prima di indicizzare all'interno del payload.
- Timeout del client ma addebito lato server — il tuo timeout potrebbe essere troppo breve; aumentalo e riprova una volta con lo stesso prompt prima di considerarlo un fallimento.
- JSON diverso tra curl e Python — stampa il payload serializzato in Python e confrontalo con la stringa
-ddi curl. Questa differenza spiega la maggior parte delle segnalazioni "funziona in curl".
Procedendo per controlli successivi risolverai la stragrande maggioranza dei problemi di prima integrazione senza toccare di una parola il prompt. Dopodiché, dopo ogni aggiornamento del client o dell'SDK, esegui un prompt che sai funzionante con un piccolo script di test, per individuare presto le regressioni.
Articoli correlati
Vedi tutti gli articoli →-
Tutoriale
Come chiamare hailuo-2.3-fast/image-to-video tramite l'API HiAPI: pratica con curl e Python
La prima richiesta funzionante per il livello image-to-video veloce ed economico — dall'ID del modello al download di un MP4
-
Tutoriale
Come chiamare hailuo-2.3/text-to-video tramite l'API HiAPI: curl, Python ed esempi di richiesta eseguibili
-
Tutoriale
Utilizzare Kandinsky 6.0 Pro su HiAPI per la generazione di video da testo: tutorial con curl e Python
Dimostrazione pratica guidata dalla richiesta: costruire la chiamata da prompt a clip video, inviare la richiesta, monitorare lo stato di completamento e scaricare il risultato