Tutoriel

Statut éditorial : En attente de relecture

Construire un agent qui interroge une API REST

Déclarer un outil REST borné, valider ses paramètres et empêcher un agent de contourner authentification, quotas et règles métier.

Classification du contenu

Types

  • Agents IA

Technologies

Niveau
Avancé
Publié le
24 août 2026
Dernière relecture
Relecture en attente
Prochaine vérification
24 octobre 2026

Le modèle ne doit pas recevoir un client HTTP générique. Donnez-lui un petit ensemble d’outils métier : lire une commande, rechercher un produit ou créer un ticket. Chaque outil applique ses propres autorisations.

Créer un client contrôlé

~~~bash pip install -U httpx pydantic ~~~

~~~python import httpx

class OrdersClient: def __init__(self, base_url: str, token: str): self.client = httpx.AsyncClient( base_url=base_url, headers={'Authorization': f'Bearer {token}'}, timeout=httpx.Timeout(10.0), )

async def get_order(self, order_id: str) -> dict | None: response = await self.client.get(f'/orders/{order_id}') if response.status_code == 404: return None response.raise_for_status() return response.json() ~~~

Le base_url et le token viennent de la configuration serveur, jamais d’un argument choisi par le modèle.

Définir l’outil

~~~python from pydantic import BaseModel, Field

class OrderQuery(BaseModel): order_id: str = Field(pattern=r'^CMD-[0-9]{6}$')

async def lookup_order(args: OrderQuery, user_id: str) -> dict: order = await orders.get_order(args.order_id) if order is None or order['user_id'] != user_id: return {'found': False} return { 'found': True, 'status': order['status'], 'eta': order.get('eta'), } ~~~

Retournez seulement les champs nécessaires. Le modèle n’a pas besoin de recevoir adresse, e-mail ou informations de paiement.

Boucle d’outil

Envoyez au LLM le nom, la description et le schéma de l’outil. Lorsqu’il propose un appel, validez les arguments avec Pydantic, exécutez l’outil, puis renvoyez le résultat au modèle. Limitez le nombre total d’appels par requête.

Actions d’écriture

Pour créer, modifier ou supprimer une ressource, exigez une confirmation utilisateur, une clé d’idempotence et une autorisation métier dans l’outil. Un texte du modèle ne constitue jamais une confirmation.

Tester les échecs

Testez identifiant invalide, 401, 403, 404, 429, 500, délai dépassé et JSON incorrect. Vérifiez que l’agent n’invente pas un résultat lorsque l’API échoue et qu’il ne révèle pas l’existence d’une ressource appartenant à un autre utilisateur.

Production

Ajoutez circuit breaker, métriques par endpoint, corrélation de trace et quotas. Masquez tokens et données personnelles dans les logs. Versionnez le contrat REST ou placez un adaptateur entre l’agent et l’API.

FAQ

Peut-on fournir toute une spécification OpenAPI au modèle ?

Techniquement oui, mais un sous-ensemble d’outils métier est plus sûr, moins coûteux et plus simple à tester.

Où placer l’autorisation ?

Dans le service ou l’outil appelé, jamais uniquement dans le prompt.

Sources utilisées