DEV Community

Cover image for Comment utiliser l'API GLM-5.1 : Guide complet avec exemples de code
Antoine Laurent
Antoine Laurent

Posted on • Originally published at apidog.com

Comment utiliser l'API GLM-5.1 : Guide complet avec exemples de code

En bref

GLM-5.1 est disponible via l'API BigModel à l'adresse https://open.bigmodel.cn/api/paas/v4/. L'API est compatible avec OpenAI : même structure de point de terminaison, même format de requête, même modèle de streaming. Vous avez besoin d'un compte BigModel, d'une clé API et du nom de modèle glm-5.1. Ce guide couvre l'authentification, votre première requête, le streaming, l'appel d'outils et le test de votre intégration avec Apidog.

Essayez Apidog dès aujourd'hui

GLM-5.1 BigModel

Introduction

GLM-5.1 est le modèle agentique phare de Z.AI, lancé en avril 2026. Il se classe n°1 sur SWE-Bench Pro et surpasse GLM-5 sur tous les principaux benchmarks de codage. Pour intégrer GLM-5.1 à un assistant de codage IA, un agent autonome ou une application exécutant des tâches longues, suivez ce guide.

Bonne nouvelle : l'API est compatible OpenAI. Si vous avez déjà utilisé GPT-4 ou Claude, il suffit de changer l'URL de base et le nom de modèle. Aucun nouveau SDK à apprendre, aucun format de réponse à adapter.

💡 Le principal défi avec les API agentiques est le test. Un modèle qui exécute des centaines d'appels d'outils sur plusieurs minutes est difficile à tester avec l'API réelle sans épuiser le quota. Les Scénarios de Test d'Apidog résolvent ce problème : vous pouvez définir la séquence complète des requêtes de votre agent, simuler les réponses pour chaque état, et vérifier que votre intégration gère correctement le streaming, les appels d'outils et les conditions d'erreur avant de passer en production. Téléchargez Apidog gratuitement pour suivre la section de test de ce guide.

Prérequis

Avant d'effectuer votre premier appel, assurez-vous d'avoir :

  1. Un compte BigModel sur bigmodel.cn. L'inscription est gratuite.
  2. Une clé API depuis la console BigModel, sous Clés API.
  3. Python 3.8+ ou Node.js 18+ (exemples fournis pour les deux).
  4. SDK OpenAI ou requêtes/fetch standards (l'API GLM-5.1 est compatible OpenAI).

Définissez votre clé API comme variable d'environnement :

export BIGMODEL_API_KEY="votre_clé_api_ici"
Enter fullscreen mode Exit fullscreen mode

Ne codez jamais en dur vos clés API dans votre code source.

Authentification

Chaque requête nécessite un jeton Bearer dans l'en-tête Authorization :

Authorization: Bearer VOTRE_CLÉ_API
Enter fullscreen mode Exit fullscreen mode

Le format de la clé BigModel ressemble à xxxxxxxx.xxxxxxxxxxxxxxxx (deux parties séparées par un point).

URL de base

https://open.bigmodel.cn/api/paas/v4/
Enter fullscreen mode Exit fullscreen mode

Point de terminaison pour les complétions de chat :

POST https://open.bigmodel.cn/api/paas/v4/chat/completions
Enter fullscreen mode Exit fullscreen mode

Votre première requête

Utilisation de curl

curl https://open.bigmodel.cn/api/paas/v4/chat/completions \
  -H "Authorization: Bearer $BIGMODEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.1",
    "messages": [
      {
        "role": "user",
        "content": "Write a Python function that finds all prime numbers up to n using the Sieve of Eratosthenes."
      }
    ],
    "max_tokens": 1024,
    "temperature": 0.7
  }'
Enter fullscreen mode Exit fullscreen mode

Utilisation de Python (requests)

import os
import requests

api_key = os.environ["BIGMODEL_API_KEY"]

response = requests.post(
    "https://open.bigmodel.cn/api/paas/v4/chat/completions",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    },
    json={
        "model": "glm-5.1",
        "messages": [
            {
                "role": "user",
                "content": "Write a Python function that finds all prime numbers up to n using the Sieve of Eratosthenes."
            }
        ],
        "max_tokens": 1024,
        "temperature": 0.7
    }
)

result = response.json()
print(result["choices"][0]["message"]["content"])
Enter fullscreen mode Exit fullscreen mode

Utilisation du SDK OpenAI (recommandé)

L'API étant compatible OpenAI, vous pouvez utiliser le SDK Python officiel d'OpenAI en définissant l'URL de base :

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BIGMODEL_API_KEY"],
    base_url="https://open.bigmodel.cn/api/paas/v4/"
)

response = client.chat.completions.create(
    model="glm-5.1",
    messages=[
        {
            "role": "user",
            "content": "Write a Python function that finds all prime numbers up to n using the Sieve of Eratosthenes."
        }
    ],
    max_tokens=1024,
    temperature=0.7
)

print(response.choices[0].message.content)
Enter fullscreen mode Exit fullscreen mode

Le SDK OpenAI gère les tentatives, délais d'attente et parsing de réponses automatiquement.

Format de réponse

La structure de la réponse est identique à celle d'OpenAI :

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1744000000,
  "model": "glm-5.1",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "def sieve_of_eratosthenes(n):\n    ..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 32,
    "completion_tokens": 215,
    "total_tokens": 247
  }
}
Enter fullscreen mode Exit fullscreen mode

Accédez au texte via result["choices"][0]["message"]["content"].

Le champ usage vous aide à suivre la consommation de quota. GLM-5.1 est facturé 3x pendant les heures de pointe (14h00-18h00 UTC+8).

Streaming des réponses

Pour les tâches longues, activez le streaming pour recevoir les jetons en temps réel.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BIGMODEL_API_KEY"],
    base_url="https://open.bigmodel.cn/api/paas/v4/"
)

stream = client.chat.completions.create(
    model="glm-5.1",
    messages=[
        {
            "role": "user",
            "content": "Explain how a B-tree index works in a database, with a code example."
        }
    ],
    stream=True,
    max_tokens=2048
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)

print()  # saut de ligne après la fin du streaming
Enter fullscreen mode Exit fullscreen mode

Chaque bloc contient uniquement les nouveaux jetons depuis le précédent.

Streaming avec des requêtes brutes

Sans SDK :

import os
import json
import requests

api_key = os.environ["BIGMODEL_API_KEY"]

response = requests.post(
    "https://open.bigmodel.cn/api/paas/v4/chat/completions",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    },
    json={
        "model": "glm-5.1",
        "messages": [{"role": "user", "content": "Write a merge sort in Python."}],
        "stream": True,
        "max_tokens": 1024
    },
    stream=True
)

for line in response.iter_lines():
    if line:
        line = line.decode("utf-8")
        if line.startswith("data: "):
            data = line[6:]
            if data == "[DONE]":
                break
            chunk = json.loads(data)
            delta = chunk["choices"][0]["delta"]
            if "content" in delta:
                print(delta["content"], end="", flush=True)
Enter fullscreen mode Exit fullscreen mode

Appel d'outils

GLM-5.1 supporte l'appel d'outils (function calling) pour exécuter du code, interroger des bases de données, ou déclencher des actions via API.

Définition d'outils

import os
import json
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BIGMODEL_API_KEY"],
    base_url="https://open.bigmodel.cn/api/paas/v4/"
)

tools = [
    {
        "type": "function",
        "function": {
            "name": "run_python",
            "description": "Execute Python code and return the output. Use this to test, profile, or benchmark code.",
            "parameters": {
                "type": "object",
                "properties": {
                    "code": {
                        "type": "string",
                        "description": "The Python code to execute"
                    }
                },
                "required": ["code"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "read_file",
            "description": "Read the contents of a file",
            "parameters": {
                "type": "object",
                "properties": {
                    "path": {
                        "type": "string",
                        "description": "File path to read"
                    }
                },
                "required": ["path"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="glm-5.1",
    messages=[
        {
            "role": "user",
            "content": "Write a function to compute Fibonacci numbers, test it for n=10, and show me the output."
        }
    ],
    tools=tools,
    tool_choice="auto"
)

message = response.choices[0].message
print(f"Raison de l'achèvement: {response.choices[0].finish_reason}")

if message.tool_calls:
    for tool_call in message.tool_calls:
        print(f"\nOutil appelé: {tool_call.function.name}")
        print(f"Arguments: {tool_call.function.arguments}")
Enter fullscreen mode Exit fullscreen mode

Gestion des réponses d'appel d'outils

Lorsque GLM-5.1 demande un appel d'outil, exécutez la fonction puis retournez le résultat dans le message suivant :

import subprocess

def execute_tool(tool_call):
    """Execute l'outil et renvoie le résultat."""
    name = tool_call.function.name
    args = json.loads(tool_call.function.arguments)

    if name == "run_python":
        result = subprocess.run(
            ["python3", "-c", args["code"]],
            capture_output=True,
            text=True,
            timeout=10
        )
        return result.stdout or result.stderr

    elif name == "read_file":
        try:
            with open(args["path"]) as f:
                return f.read()
        except FileNotFoundError:
            return f"Erreur : fichier {args['path']} introuvable"

    return f"Outil inconnu : {name}"


def run_agent_loop(user_message, tools, max_iterations=20):
    """Exécute une boucle d'agent complète avec appel d'outils."""
    messages = [{"role": "user", "content": user_message}]

    for i in range(max_iterations):
        response = client.chat.completions.create(
            model="glm-5.1",
            messages=messages,
            tools=tools,
            tool_choice="auto",
            max_tokens=4096
        )

        message = response.choices[0].message
        messages.append(message.model_dump())

        if response.choices[0].finish_reason == "stop":
            return message.content

        if response.choices[0].finish_reason == "tool_calls":
            for tool_call in message.tool_calls:
                tool_result = execute_tool(tool_call)
                messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call.id,
                    "content": tool_result
                })

    return "Nombre maximal d'itérations atteint"


result = run_agent_loop(
    "Écrivez une implémentation de quicksort, testez-la avec une liste aléatoire de 1000 entiers, et rapportez le temps.",
    tools
)
print(result)
Enter fullscreen mode Exit fullscreen mode

Ce schéma vous permet de piloter des boucles agentiques complexes avec appels de fonctions dynamiques.

Paramètres clés

Paramètre Type Défaut Description
model string required Utiliser "glm-5.1"
messages array required Historique de la conversation
max_tokens integer 1024 Nombre maximal de jetons (jusqu'à 163 840)
temperature float 0.95 Aléatoire (0,0-1,0)
top_p float 0.7 Échantillonnage par noyau
stream boolean false Activer le streaming
tools array null Définition des fonctions pour l'appel d'outils
tool_choice string/object "auto" "auto", "none" ou nom d'outil spécifique
stop string/array null Séquences d'arrêt personnalisées

Paramètres recommandés pour le codage :

{
    "model": "glm-5.1",
    "temperature": 1.0,
    "top_p": 0.95,
    "max_tokens": 163840  # contexte complet pour exécutions longues
}
Enter fullscreen mode Exit fullscreen mode

Pour une génération déterministe, baissez la température à 0,2-0,4.

Utilisation de GLM-5.1 avec les assistants de codage

Le Plan de Codage Z.AI permet de router Claude Code, Cline, Kilo Code et autres assistants via GLM-5.1 avec l'API BigModel. Cela réduit les coûts par rapport à GPT-5.4 ou Claude Opus.

Configuration de Claude Code

Dans ~/.claude/settings.json :

{
  "model": "glm-5.1",
  "baseURL": "https://open.bigmodel.cn/api/paas/v4/",
  "apiKey": "votre_clé_api_bigmodel"
}
Enter fullscreen mode Exit fullscreen mode

Configuration de Cline / Roo Code

Dans votre configuration VS Code ou extension :

{
  "cline.apiProvider": "openai",
  "cline.openAIBaseURL": "https://open.bigmodel.cn/api/paas/v4/",
  "cline.openAIApiKey": "votre_clé_api_bigmodel",
  "cline.openAIModelId": "glm-5.1"
}
Enter fullscreen mode Exit fullscreen mode

Consommation de quota

  • Heures de pointe (14h00-18h00 UTC+8) : 3x le quota
  • Hors heures de pointe : 2x le quota
  • Tarif promotionnel jusqu'à fin avril 2026 : 1x en heures creuses

Planifiez vos tâches longues pendant les heures creuses pour optimiser le quota.

Tester l'API GLM-5.1 avec Apidog

Pour tester vos intégrations agentiques sans consommer de quota, utilisez le Smart Mock d'Apidog.

Test Agentique Apidog

Configuration du point de terminaison de simulation

  1. Dans Apidog, créez un nouveau point de terminaison : POST https://open.bigmodel.cn/api/paas/v4/chat/completions
  2. Ajoutez une attente de simulation pour une réponse standard :
{
  "id": "chatcmpl-test123",
  "object": "chat.completion",
  "created": 1744000000,
  "model": "glm-5.1",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "def sieve(n): ..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 32,
    "completion_tokens": 120,
    "total_tokens": 152
  }
}
Enter fullscreen mode Exit fullscreen mode
  1. Ajoutez une deuxième attente pour une réponse d'appel d'outil :
{
  "id": "chatcmpl-tool456",
  "object": "chat.completion",
  "created": 1744000001,
  "model": "glm-5.1",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_abc",
            "type": "function",
            "function": {
              "name": "run_python",
              "arguments": "{\"code\": \"print(2+2)\"}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 48,
    "completion_tokens": 35,
    "total_tokens": 83
  }
}
Enter fullscreen mode Exit fullscreen mode
  1. Ajoutez une réponse de limite de débit (HTTP 429) :
{
  "error": {
    "message": "Rate limit exceeded. Please retry after 60 seconds.",
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded"
  }
}
Enter fullscreen mode Exit fullscreen mode

Test de la boucle d'agent complète

Utilisez les Scénarios de Test d'Apidog pour simuler une vraie boucle :

  1. Étape 1 : Requête POST vers /chat/completions avec message initial, vérifiez code 200 et finish_reason == "tool_calls"
  2. Étape 2 : Nouvelle requête POST avec le résultat de l'outil, vérifiez code 200 et finish_reason == "stop"
  3. Étape 3 : Extrayez le contenu final et validez le résultat

Pour tester la gestion des erreurs, configurez le mock pour renvoyer 429 et vérifiez la logique de réessai.

Les Scénarios de Test Apidog permettent de transmettre automatiquement les variables d'une étape à l'autre (request_id, tool_call_id), comme dans une vraie boucle agentique.

Gestion des erreurs

L'API renvoie les codes HTTP standards :

Statut Signification Action
200 Succès Traitez la réponse
400 Mauvaise requête Vérifiez le format
401 Non autorisé Vérifiez la clé API
429 Limite de débit Réessayez après Retry-After
500 Erreur serveur Réessayez avec délai d'attente exponentiel
503 Service indispo Réessayez avec délai d'attente exponentiel

Exemple de gestion robuste :

import time
import requests

def call_with_retry(payload, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.post(
                "https://open.bigmodel.cn/api/paas/v4/chat/completions",
                headers={"Authorization": f"Bearer {os.environ['BIGMODEL_API_KEY']}",
                         "Content-Type": "application/json"},
                json=payload,
                timeout=120
            )

            if response.status_code == 429:
                retry_after = int(response.headers.get("Retry-After", 60))
                print(f"Limite de débit atteinte. Attente de {retry_after}s...")
                time.sleep(retry_after)
                continue

            response.raise_for_status()
            return response.json()

        except requests.exceptions.Timeout:
            wait = 2 ** attempt
            print(f"Délai d'attente dépassé à la tentative {attempt + 1}. Nouvelle tentative dans {wait}s...")
            time.sleep(wait)

    raise Exception("Nombre maximal de tentatives dépassé")
Enter fullscreen mode Exit fullscreen mode

Pour des tâches longues, définissez des timeouts généreux (120-300s).

Conclusion

L'API compatible OpenAI de GLM-5.1 permet une intégration rapide pour les utilisateurs de GPT ou Claude. La différence réside dans l'URL (open.bigmodel.cn) et le système de quota.

Pour des applications agentiques complexes, la capacité d'optimisation longue durée de GLM-5.1 est un atout. Utilisez le Smart Mock et les Scénarios de Test d'Apidog pour valider vos intégrations avant la mise en production.

Pour plus d'informations sur GLM-5.1 et les performances, consultez l'aperçu du modèle GLM-5.1. Pour approfondir la création et le test de workflows d'agents IA avec Apidog, lisez le fonctionnement de la mémoire des agents IA.

FAQ

L'API GLM-5.1 est-elle compatible avec OpenAI ?

Oui. Le format de requête, la structure de réponse, le protocole de streaming et le format d'appel d'outils sont identiques à l'API d'OpenAI. Utilisez le SDK Python officiel ou tout client OpenAI en définissant l'URL de base sur https://open.bigmodel.cn/api/paas/v4/.

Quel est le nom du modèle à utiliser ?

Utilisez "glm-5.1" comme nom de modèle.

Comment fonctionne la tarification de l'API GLM-5.1 ?

Le système est basé sur le quota : 3x pendant les heures de pointe (14h00-18h00 UTC+8), 2x en heures creuses. Jusqu'à fin avril 2026, tarif promotionnel à 1x en heures creuses.

Quelle est la longueur maximale du contexte ?

Entrée : 200 000 jetons. Sortie : 163 840 jetons. Pour les tâches longues, définissez max_tokens sur une valeur élevée (32 768+).

GLM-5.1 supporte-t-il l'appel de fonctions/outils ?

Oui, même format qu'OpenAI. Définissez vos outils dans le tableau tools et gérez la réponse finish_reason: "tool_calls" dans votre boucle d'agent.

Comment tester les appels API GLM-5.1 sans dépenser de quota ?

Utilisez le Smart Mock d'Apidog pour simuler tous les états (succès, outils, erreurs) pendant le développement.

Où trouver les poids du modèle GLM-5.1 ?

Sur HuggingFace à zai-org/GLM-5.1 (licence MIT). Compatible vLLM et SGLang pour l'inférence locale.

Top comments (0)