HiAPI
Blog

Tutoriel

Comment utiliser imagen-4.0-ultra via l'API HiAPI : curl, Python et exemples de requêtes exécutables

Guide étape par étape pour appeler le modèle d'image de plus haute qualité depuis le point de terminaison compatible OpenAI de HiAPI

Nov 3, 2026
文章封面图:深青底色上以平面切割面构成的水晶矿物截面,青绿与墨绿刻面均衡排布。

Qu'est-ce qu'imagen-4.0-ultra et quand le choisir

imagen-4.0-ultra est le niveau de fidélité le plus élevé de la série imagen-4.0, et HiAPI l'expose comme modèle de génération d'images sur le même point de terminaison compatible OpenAI que le chat et les autres séries de modèles. Le modèle mental est simple : vous envoyez un corps de requête JSON structuré décrivant une image, et vous recevez des données d'image — pas un résultat de complétion de chat.

Choisir entre les niveaux dépend principalement de la tâche, pas d'un classement :

  • Brouillons et itérations. Si vous explorez des prompts, testez des compositions ou générez des vignettes pour définir une direction, les modèles d'image plus légers répondent plus vite et coûtent moins par génération. Réservez ultra au tour qui compte vraiment.
  • Éléments finaux. Les visuels principaux, les visuels marketing et tout contenu que des humains examineront en taille réelle bénéficient du niveau de détail d'ultra, de son respect des prompts et de sa capacité à gérer des scènes complexes contenant plusieurs sujets ou des éléments quasi textuels.
  • Pipelines par lots avec seuil de qualité. Un schéma courant consiste à produire d'abord des brouillons à grande échelle avec un modèle léger, puis à relancer uniquement les prompts retenus sur imagen-4.0-ultra. Comme HiAPI place l'identifiant du modèle dans le corps de la requête, changer de niveau ne demande qu'un changement de chaîne, pas une nouvelle intégration.

Quelques attentes à fixer d'emblée. La génération d'images n'est pas instantanée ; une requête ultra peut prendre nettement plus de temps qu'une complétion de texte, donc concevez votre client avec des délais d'attente généreux et ne supposez pas une latence inférieure à la seconde. Et comme la réponse contient des données d'image binaires plutôt qu'un tableau choices, tout code de parsing écrit pour les modèles de chat est inutilisable — prévoyez-le dès le départ.

Si vous n'êtes pas sûr d'avoir besoin d'ultra, envoyez-lui d'abord une requête minimale, examinez la sortie à la résolution à laquelle vous prévoyez réellement de livrer, puis comparez avec un niveau plus léger. Juger la qualité d'image sur un aperçu réduit est trompeur.

Prérequis et configuration de l'authentification

Avant d'envoyer votre première requête, vérifiez trois choses : vous disposez d'une clé API HiAPI, vous connaissez l'URL de base du point de terminaison API compatible OpenAI, et vos outils savent émettre des requêtes HTTPS (curl, ou Python avec requests, voire httpx).

Garder la clé hors de votre code

Stockez la clé dans une variable d'environnement plutôt que de la coller dans un script :

export HIAPI_API_KEY="your_api_key_here"

En production, utilisez le gestionnaire de secrets de votre plateforme et injectez la valeur à l'exécution. Committer une clé dans un dépôt est la façon la plus courante de faire fuiter des identifiants, et faire tourner une clé est bien plus pénible que de la lire depuis une variable d'environnement.

En-têtes d'authentification

Chaque requête porte l'en-tête standard de jeton Bearer :

Authorization: Bearer $HIAPI_API_KEY
Content-Type: application/json

Les deux en-têtes comptent. L'absence de Content-Type peut amener le serveur à rejeter ou à mal interpréter le corps de la requête, ce qui se manifeste parfois par une erreur générique déroutante plutôt qu'un message de validation clair.

La même clé et le même schéma d'en-têtes s'appliquent à toutes les séries de modèles sur HiAPI, ce qui est le bénéfice concret d'un point de terminaison unifié : un identifiant, un client, plusieurs modèles.

Vérification rapide de bon fonctionnement

Si vous avez sous la main un identifiant de modèle compatible chat, envoyer d'abord une requête texte simple est un moyen peu coûteux de confirmer que la clé et les en-têtes sont corrects avant de déboguer un corps de requête d'image. Distinguer les problèmes d'authentification des problèmes de corps de requête fait réellement gagner du temps. Si la requête texte réussit et que la requête image échoue, vous savez que le problème vient du corps de requête d'image.

Construire le corps de la requête

Commencez par le corps de requête minimal qui produit une image : un identifiant de modèle et un prompt. Tout le reste est une optimisation facultative.

{
  "model": "imagen-4.0-ultra",
  "prompt": "A sunlit reading room with tall windows, a wooden desk, and shelves of worn books, soft dust motes in the light"
}

Deux principes le maintiennent facile à maintenir. Premièrement, l'identifiant de modèle doit correspondre exactement à celui documenté par HiAPI pour ce modèle — sans espaces, sans suffixe de version inventé. Deuxièmement, le prompt est en langage naturel pur ; écrivez-le comme vous décririez une image à un photographe, en privilégiant des noms concrets et des indications de lumière ou de composition plutôt que des adjectifs abstraits.

Formes de prompts qui fonctionnent généralement

  • Le sujet d'abord, puis la scène, puis le style. « A fox in a snowy birch forest, morning light, shallow depth of field » est plus fiable qu'une pile de mots-clés de style.
  • Soyez précis sur la composition. Mentionnez l'angle de caméra, le cadrage ou la disposition lorsqu'ils importent pour votre cas d'usage.
  • Évitez les contradictions. Demander « minimaliste » et « détails ornementaux abondants » dans la même phrase produit souvent un compromis que vous ne vouliez pas.

Dimensions et ratios d'aspect

Les modèles d'image acceptent généralement des options de largeur/hauteur ou de ratio d'aspect, mais les noms exacts des paramètres et les valeurs prises en charge varient selon le modèle. Ne devinez pas : consultez la documentation des paramètres du modèle sur HiAPI et n'utilisez que les valeurs qui y sont listées. Si vous passez une taille ou un ratio non pris en charge par le modèle, attendez-vous à une erreur de validation — pas à un repli silencieux.

Le flux de travail sûr : commencez avec les valeurs par défaut, confirmez une réponse réussie, puis ajoutez un paramètre de taille à la fois en vérifiant la sortie. Si la requête commence à échouer après l'ajout d'un paramètre, vous avez localisé la cause dans la dernière modification.

N'ajoutez aucun paramètre facultatif dans la première requête. Un corps de requête à deux champs qui fonctionne est une meilleure base qu'un corps à dix champs qui échoue.

Une requête curl exécutable

Une fois la clé exportée, voici la forme de requête que vous pouvez copier et adapter :

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": "A sunlit reading room with tall windows, a wooden desk, and shelves of worn books, soft dust motes in the light"
  }'

Le rôle de chaque partie :

  • -X POST —— la génération d'images est une opération de création, pas de lecture.
  • L'URL —— la route de génération d'images sur le point de terminaison compatible OpenAI de HiAPI. Définissez HIAPI_BASE_URL sur l'URL de base indiquée dans la documentation HiAPI, afin que le chemin reste correct même si l'hôte change.
  • Les deux en-têtes —— l'authentification Bearer et le type de contenu JSON décrits ci-dessus.
  • Le corps -d —— le même JSON que vous réutiliserez en Python. Les guillemets comptent : entourez la charge utile de guillemets simples pour empêcher le shell d'en développer le contenu.

Astuces de débogage

Ajoutez -i pour inclure les en-têtes de réponse, afin de voir le statut HTTP même lorsque le corps est volumineux. Si vous voulez vérifier ce qui est réellement envoyé, ajoutez -v et lisez la ligne de requête émise — cela révèle vite une URL malformée ou un en-tête manquant.

Si la sortie du terminal est un gros bloc de base64 ou de bruit binaire, c'est que la requête a réussi. Ne la redirigez pas vers des logs ; reportez-vous à la section sur le traitement des réponses pour une approche plus propre. Rediriger la réponse brute vers un fichier (> out.json) convient pour une vérification ponctuelle.

Une fois que curl renvoie un statut de succès et un corps de réponse analysable, vous disposez d'un contrat validé. L'étape Python doit reproduire octet pour octet (structurellement) ce JSON exact, afin que toute défaillance ultérieure soit imputable au code et non à une requête différente.

La même requête en Python

Avec requests, l'appel équivalent reste proche de la version curl, ce qui rend la vérification croisée très simple :

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": (
        "A sunlit reading room with tall windows, a wooden desk, "
        "and shelves of worn books, soft dust motes in the light"
    ),
}

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()

Quelques points importants en pratique :

  • json=payload sérialise le dictionnaire et définit le type de contenu pour vous. Vous pouvez néanmoins passer les en-têtes explicitement pour la clarté ou l'alignement avec curl.
  • timeout=120 n'est pas décoratif. La génération d'images peut être lente ; sans délai d'attente explicite, vous héritez de la valeur par défaut de la bibliothèque, qui peut être plus courte que prévu, et un abandon du client ressemble à une panne serveur.
  • raise_for_status() transforme les réponses 4xx et 5xx en exceptions, plutôt que de laisser un corps d'erreur malformé s'écouler dans votre code de parsing.

Encapsuler pour la réutilisation

Placez l'appel dans une petite fonction qui prend un prompt et des paramètres optionnels, renvoie le résultat analysé et ne journalise que l'identifiant de modèle, la longueur du prompt, le code de statut et la durée. Cette seule ligne de log suffit à déboguer la plupart des problèmes sans stocker des mégaoctets de données d'image dans un agrégateur de logs.

Comme le corps de requête est du JSON pur, la même fonction sert pour d'autres modèles d'image sur HiAPI — remplacez l'identifiant de modèle, et si nécessaire le paramètre de taille pris en charge. Conservez quelques prompts d'exemple dans un script de test, afin de pouvoir relancer une requête connue comme fonctionnelle et obtenir un signal rapide après toute mise à jour d'un client.

Traiter la réponse d'image

La réponse est une charge utile d'image, pas une complétion de chat. Ne cherchez pas choices[0].message.content — écrivez un code de parsing correspondant à ce que la route d'image renvoie réellement, comme indiqué dans la documentation HiAPI.

Parsing défensif

La réponse porte généralement les données d'image sous forme de chaîne base64, parfois accompagnées de métadonnées. Ne décodez qu'après avoir confirmé la présence du champ :

import base64

item = result["data"][0]
image_b64 = item.get("b64_json")
if image_b64 is None:
    # 某些响应可能携带 URL 或其他格式;请查阅文档
    raise ValueError(f"Unexpected image payload keys: {list(item)}")

image_bytes = base64.b64decode(image_b64)
with open("output.png", "wb") as f:
    f.write(image_bytes)

La partie utile dans le message d'erreur est list(item) : lorsque la charge utile change, elle vous indique les clés réelles au lieu de vous laisser deviner.

Journaliser sans déverser le binaire

Ne journalisez jamais le corps de réponse brut d'une requête d'image — il est volumineux et en grande partie illisible. Journalisez le code de statut, la longueur du contenu, l'identifiant de modèle, ainsi qu'un hachage ou un nombre d'octets de l'image décodée. Cela suffit à vérifier que chaque prompt a produit une image différente sans faire enfler le stockage.

Bonnes pratiques d'exploitation

  • Validez avant de stocker. Vérifiez que les octets décodés commencent par une signature d'image reconnaissable et interceptez les erreurs de décodage là où vous écrivez les fichiers.
  • Écriture atomique. Écrivez vers un chemin temporaire et renommez en cas de succès, afin qu'un plantage en cours d'écriture ne laisse pas un fichier tronqué qui semble valide.
  • Conservez le prompt avec la sortie. Stockez le prompt, l'identifiant de modèle et tout paramètre de taille à côté de chaque image. Lorsqu'un responsable demande une variante plus tard, vous avez besoin de la requête d'origine.
  • Définissez une règle de conservation. Les images générées s'accumulent ; décidez tôt où elles sont stockées et combien de temps elles sont conservées.

Diagnostiquer les requêtes en échec

La plupart des échecs de première requête se rangent en trois catégories. Vérifiez-les dans cet ordre avant de modifier le prompt.

Échec d'authentification

Un 401 ou 403 signifie presque toujours un en-tête incorrect. Vérifiez que le schéma est exactement Bearer, suivi d'un espace et de la clé, sans espace de fin ni guillemet superflu. Confirmez que la variable d'environnement est bien définie dans le shell ou le processus qui exécute la requête — une clé exportée dans un terminal n'existe pas dans un autre. Si vous avez récemment fait tourner la clé, assurez-vous que l'ancienne valeur n'est pas encore en cache dans un fichier de configuration ou un secret de déploiement.

Identifiant de modèle erroné

Une réponse « modèle introuvable » signifie que le champ model ne correspond pas à l'identifiant enregistré sur HiAPI. Copiez l'identifiant depuis la documentation des modèles HiAPI au lieu de le retaper ; un seul caractère erroné ou un suffixe de version inventé suffit à provoquer l'échec. Si vous changez d'identifiant de modèle pour comparer des niveaux, vérifiez que le remplacement est bien dans le corps de la requête, et pas seulement dans un commentaire.

Paramètres rejetés

Une erreur de validation désignant un champ signifie généralement une taille ou un ratio d'aspect non pris en charge, ou un paramètre facultatif que le modèle n'accepte pas. Retirez tous les champs facultatifs, confirmez que la requête minimale à deux champs réussit, puis rajoutez les paramètres un par un. Cela isole immédiatement le problème.

Autres symptômes

  • 200 mais corps vide ou non analysable —— vous lisez probablement le mauvais champ. Vérifiez les clés de premier niveau avant d'indexer dans la charge utile.
  • Délai d'attente client mais facturation côté serveur —— votre délai d'attente est peut-être trop court ; augmentez-le et réessayez une fois avec le même prompt avant de conclure à un échec.
  • JSON différent entre curl et Python —— affichez la charge utile sérialisée en Python et comparez-la à la chaîne -d de curl. Les écarts ici expliquent la plupart des rapports « ça marche avec curl ».

En procédant point par point dans l'ordre, vous résoudrez la grande majorité des problèmes d'intégration initiale sans modifier un seul mot du prompt. Ensuite, après chaque mise à jour de client ou de SDK, exécutez un prompt connu comme fonctionnel via un petit script de test, afin de détecter les régressions tôt.

Articles similaires

Voir tous les articles →

Commencez avec des artefacts IA persistants

Obtenez votre clé API et appelez des modèles d'image, de vidéo et d'audio via une API unique basée sur les tasks.

Lire la documentation de l'API