Appeler les API MaaS pour les modèles ouverts

De nombreux modèles ouverts sur Vertex AI proposent des modèles entièrement gérés et sans serveur en tant qu'API à l'aide de l'API Chat Completions de Vertex AI. Pour ces modèles, il n'est pas nécessaire de provisionner ni de gérer l'infrastructure.

Vous pouvez diffuser vos réponses en flux continu pour réduire la perception de la latence côté utilisateur. Une réponse en flux continu utilise des événements envoyés par le serveur (SSE) pour diffuser la réponse de manière incrémentielle.

Cette page explique comment effectuer des appels de flux et non-flux à des modèles ouverts compatibles avec l'API OpenAI Chat Completions. Pour connaître les considérations spécifiques à Llama, consultez Demander des prédictions Llama.

Avant de commencer

Pour utiliser des modèles ouverts avec Vertex AI, procédez comme suit. Vous devez activer l'API Vertex AI (aiplatform.googleapis.com) pour pouvoir utiliser Vertex AI. Si vous disposez déjà d'un projet pour lequel l'API Vertex AI est activée, vous pouvez utiliser ce projet au lieu de créer un projet.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Accédez à la fiche de modèle Model Garden du modèle que vous souhaitez utiliser, puis cliquez sur Activer pour activer le modèle dans votre projet.

    Accéder à Model Garden

  9. Effectuer un appel en flux continu à un modèle ouvert

    L'exemple suivant effectue un appel en flux continu à un modèle ouvert :

    Python

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le guide de démarrage rapide de Vertex AI sur l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI pour Python.

    Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    Avant d'exécuter cet exemple, assurez-vous de définir la variable d'environnement OPENAI_BASE_URL. Pour en savoir plus, consultez Authentification et identifiants.

    from openai import OpenAI
    client = OpenAI()
    
    stream = client.chat.completions.create(
        model="MODEL",
        messages=[{"role": "ROLE", "content": "CONTENT"}],
        max_tokens=MAX_OUTPUT_TOKENS,
        stream=True,
    )
    for chunk in stream:
        print(chunk.choices[0].delta.content or "", end="")
    • MODEL : nom du modèle que vous souhaitez utiliser, par exemple deepseek-ai/deepseek-v3.1-maas.
    • ROLE : rôle associé à un message. Vous pouvez spécifier user ou assistant. Le premier message doit utiliser le rôle user. Les modèles fonctionnent avec des tours user et assistant alternés. Si le message final utilise le rôle assistant, le contenu de la réponse continue immédiatement à partir du contenu de ce message. Cela vous permet de limiter une partie de la réponse du modèle.
    • CONTENT : contenu, tel que le texte, du message user ou assistant.
    • MAX_OUTPUT_TOKENS : nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

      Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

    REST

    Une fois que vous avez configuré votre environnement, vous pouvez utiliser REST pour tester un prompt textuel. L'exemple suivant envoie une requête au point de terminaison du modèle de l'éditeur.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • LOCATION : région compatible avec les modèles ouverts.
    • MODEL : nom du modèle que vous souhaitez utiliser, par exemple deepseek-ai/deepseek-v2.
    • ROLE : rôle associé à un message. Vous pouvez spécifier user ou assistant. Le premier message doit utiliser le rôle user. Les modèles fonctionnent avec des tours user et assistant alternés. Si le message final utilise le rôle assistant, le contenu de la réponse continue immédiatement à partir du contenu de ce message. Cela vous permet de limiter une partie de la réponse du modèle.
    • CONTENT : contenu, tel que le texte, du message user ou assistant.
    • MAX_OUTPUT_TOKENS : nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

      Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

    • STREAM : valeur booléenne qui spécifie si la réponse est diffusée ou non. Diffusez votre réponse en flux continu pour réduire la perception de la latence que peuvent avoir les utilisateurs finaux. Définissez la valeur sur true pour diffuser la réponse et sur false pour la renvoyer simultanément.

    Méthode HTTP et URL :

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

    Corps JSON de la requête :

    {
      "model": "MODEL",
      "messages": [
        {
          "role": "ROLE",
          "content": "CONTENT"
        }
      ],
      "max_tokens": MAX_OUTPUT_TOKENS,
      "stream": true
    }
    

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

    PowerShell

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

    Vous devriez recevoir une réponse JSON semblable à la suivante.

    Effectuer un appel sans flux continu à un modèle ouvert

    L'exemple suivant effectue un appel sans flux continu à un modèle ouvert :

    Python

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le guide de démarrage rapide de Vertex AI sur l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI pour Python.

    Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

    Avant d'exécuter cet exemple, assurez-vous de définir la variable d'environnement OPENAI_BASE_URL. Pour en savoir plus, consultez Authentification et identifiants.

    from openai import OpenAI
    client = OpenAI()
    
    completion = client.chat.completions.create(
        model="MODEL",
        messages=[{"role": "ROLE", "content": "CONTENT"}],
        max_tokens=MAX_OUTPUT_TOKENS,
        stream=False,
    )
    print(completion.choices[0].message)
    • MODEL : nom du modèle que vous souhaitez utiliser, par exemple deepseek-ai/deepseek-v3.1-maas.
    • ROLE : rôle associé à un message. Vous pouvez spécifier user ou assistant. Le premier message doit utiliser le rôle user. Les modèles fonctionnent avec des tours user et assistant alternés. Si le message final utilise le rôle assistant, le contenu de la réponse continue immédiatement à partir du contenu de ce message. Cela vous permet de limiter une partie de la réponse du modèle.
    • CONTENT : contenu, tel que le texte, du message user ou assistant.
    • MAX_OUTPUT_TOKENS : nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

      Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

    REST

    Une fois que vous avez configuré votre environnement, vous pouvez utiliser REST pour tester un prompt textuel. L'exemple suivant envoie une requête au point de terminaison du modèle de l'éditeur.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • LOCATION : région compatible avec les modèles ouverts.
    • MODEL : nom du modèle que vous souhaitez utiliser, par exemple deepseek-ai/deepseek-v2.
    • ROLE : rôle associé à un message. Vous pouvez spécifier user ou assistant. Le premier message doit utiliser le rôle user. Les modèles fonctionnent avec des tours user et assistant alternés. Si le message final utilise le rôle assistant, le contenu de la réponse continue immédiatement à partir du contenu de ce message. Cela vous permet de limiter une partie de la réponse du modèle.
    • CONTENT : contenu, tel que le texte, du message user ou assistant.
    • MAX_OUTPUT_TOKENS : nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

      Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

    • STREAM : valeur booléenne qui spécifie si la réponse est diffusée ou non. Diffusez votre réponse en flux continu pour réduire la perception de la latence que peuvent avoir les utilisateurs finaux. Définissez la valeur sur true pour diffuser la réponse et sur false pour la renvoyer simultanément.

    Méthode HTTP et URL :

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

    Corps JSON de la requête :

    {
      "model": "MODEL",
      "messages": [
        {
          "role": "ROLE",
          "content": "CONTENT"
        }
      ],
      "max_tokens": MAX_OUTPUT_TOKENS,
      "stream": false
    }
    

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

    PowerShell

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

    Vous devriez recevoir une réponse JSON semblable à la suivante.

    Points de terminaison régionaux et mondiaux

    Pour les points de terminaison régionaux, les requêtes sont traitées à partir de la région que vous avez spécifiée. Si vous avez des exigences de résidence des données ou si un modèle n'est pas compatible avec le point de terminaison mondial, utilisez les points de terminaison régionaux.

    Lorsque vous utilisez le point de terminaison global, Google peut traiter et diffuser vos requêtes depuis n'importe quelle région compatible avec le modèle que vous utilisez. Dans certains cas, cela peut entraîner une latence plus élevée. Le point de terminaison global permet d'améliorer la disponibilité globale et de réduire les erreurs.

    Il n'y a pas de différence de prix avec les points de terminaison régionaux lorsque vous utilisez le point de terminaison mondial. Toutefois, les quotas et les capacités des modèles compatibles du point de terminaison mondial peuvent différer de ceux des points de terminaison régionaux. Pour en savoir plus, consultez la page du modèle tiers concerné.

    Spécifier le point de terminaison global

    Pour utiliser le point de terminaison mondial, définissez la région sur global.

    Par exemple, l'URL de requête d'une commande curl utilise le format suivant : https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi

    Pour le SDK Vertex AI, un point de terminaison régional est défini par défaut. Définissez la région sur GLOBAL pour utiliser le point de terminaison mondial.

    Restreindre l'utilisation des points de terminaison d'API mondiaux

    Pour appliquer l'utilisation de points de terminaison régionaux, utilisez la contrainte de règle d'administration constraints/gcp.restrictEndpointUsage afin de bloquer les requêtes envoyées au point de terminaison d'API mondial. Pour en savoir plus, consultez Restreindre l'utilisation des points de terminaison.

    Étapes suivantes