C'est quoi PydanticAI ?

Découvrez PydanticAI, le framework d'agents IA de l'équipe Pydantic.

Publié le par Gabriel Trouvé (mis à jour le )

13 minutes

EN COURS DE REDACTION

Difficile dans le monde des frameworks d'agents IA, difficile de s'y retrouver : LangChain et son orchestrateur LangGraph, CrewAI, AutoGen, etc. Mais dans ce guide nous parlerons de PydanticAI. Surtout que la version 2 vien de sortir en ce mois de juin 2026.

C'est quoi PydanticAI ?

Il s'agit donc d'un framework open-source pour construire des agents IA en Python. Pour faire simple, un agent est un LLM auquel on donne des instructions, des outils qu'il peut appeler, et dont on encadre les réponses. Pydantic est utilisée par les librairies d'OpenAI, d'Anthropic et de Google, etc. D'ailleurs, le framework FastAPI repose sur Pydantic, et nous avons un article dessus.

Comme l'équipe Pydantic l'explique elle-même (voir citation ci-dessous), en créant PydanticAI, l'objectif est de retrouver pour le développement d'agents et d'applications d'IA, cette sensation qui a fait le succès de FastAPI.

We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI app and agent development.

À ce jour, le dépôt GitHub dépasse les 18 500 étoiles. De plus, il s'agit d'un framework model-agnostic.

Comme dans la suite de ce guide nous allons parlez typage, n'hésitez pas à aller lire notre article sur le typage en Python.

Votre premier agent

Créez un dossier pour votre nouveau projet avec un environnement virtuel, puis installez le framework. Comme nous allons utiliser Mistral, nous précisons le provider correspondant entre crochets, afin d'embarquer les dépendances nécessaires :

pip install "pydantic-ai-slim[mistral]"
PYTHON

À noter

Le package pydantic-ai complet embarque déjà OpenAI, Anthropic et Google, mais pas Mistral : d'où l'extra [mistral] que nous ajoutons ici. Chaque fournisseur dispose ainsi de son propre groupe optionnel, et la version slim permet de n'installer que le strict nécessaire. Je vous invite à aller voir la page d'installation officielle qui détaille les combinaisons possibles.

Pour ce guide nous utiliserons l'API de Mistral, mais vous pouvez très bien utiliser un autre modèle. Récupérez une clé sur la console Mistral. Pour ma part, j'ai l'habitude de créer un fichier .env à la racine de mon projet pour y stocker mes clés.

Je charge le fichier .env avec la librairie python-dotenv :

pip install python-dotenv
PYTHON

Créons mainteant notre premier agent IA dans un fichier agent.py :

from dotenv import load_dotenv
from pydantic_ai import Agent

# Charge le contenu du .env dans les variables d'environnement
load_dotenv()

# On indique le fournisseur et le modèle dans une simple chaîne
agent = Agent(
    "mistral:mistral-small-latest",
    instructions="Tu es un assistant concis, réponds en une seule phrase.",
)

# run_sync exécute l'agent de manière synchrone
resultat = agent.run_sync("Explique-moi ce qu'est un agent IA.")
print(resultat.output)
PYTHON

J'obtiens ce résutlat :

Un agent IA est un programme autonome capable d'agir dans un environnement pour atteindre des objectifs en utilisant des techniques d'intelligence artificielle.
SHELL
  • Agent(...) crée l'agent, avec le modèle que l'on lui passe

  • instructions définit le comportement de l'agent

  • run_sync() lance la conversation et renvoie le résultat via l'attribut output

Les sorties structurées avec PydanticAI

Nous y voilà !

Par défaut, un agent renvoie du texte libre. Sauf que ça peut vite devenir embêtant quand vous avez besoin d'un format cohérent. Si par exemple ce qui est renvoyé par votre agent sert à alimenter un autre système.

PydanticAI règle ce problème avec le paramètre output_type : vous fournissez un modèle Pydantic, et l'agent renvoie une instance validée de ce modèle.

from typing import Literal

from dotenv import load_dotenv
from pydantic import BaseModel, Field
from pydantic_ai import Agent

load_dotenv()


class TicketSupport(BaseModel):
    titre: str = Field(min_length=5, max_length=100)
    priorite: Literal["basse", "normale", "haute"]
    categorie: Literal["bug", "acces", "materiel"]
    urgence: int = Field(ge=1, le=5)  # Un score entre 1 et 5 inclus


agent = Agent(
    "mistral:mistral-small-latest",
    instructions="Transforme le message de l'utilisateur en ticket de support.",
    output_type=TicketSupport,
)

message_patrick = (
    "Bonjour, c'est encore moi. Mon écran affiche des lignes violettes "
    "depuis ce matin et j'ai une démo client à 14h. C'est la panique !"
)

resultat = agent.run_sync(message_patrick)

# resultat.output est une instance de TicketSupport, déjà validée
ticket = resultat.output
print(ticket)
# titre='Écran affiche des lignes violettes - Urgence démo client' priorite='haute' categorie='materiel' urgence=5
print(ticket.priorite)  # 'haute', garanti parmi nos trois valeurs Literal
PYTHON
  • output_type=TicketSupport

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.