Aller au contenu
Développement medium

Construire des agents IA en Python : le parcours

10 min de lecture

logo python

Un agent IA est un programme qui confie à un modèle de langage non plus seulement la rédaction d'un texte, mais le choix des actions : appeler un outil, lire un résultat, recommencer. Ce parcours vous fait construire des agents du plus simple au plus outillé — la boucle écrite à la main, puis le function calling, puis deux frameworks de référence, et enfin une interface web. Tout tourne sur un modèle local servi par Ollama : aucune API payante. Public visé : développeur Python qui veut comprendre les agents de l'intérieur avant d'utiliser un framework, pas l'inverse. À la fin, vous saurez choisir le bon niveau d'outillage pour un besoin donné.

  • Expliquer ce qu'est un agent et le distinguer d'un simple appel de modèle.
  • Écrire une boucle d'agent à la main — et donc comprendre ce qu'un framework automatise.
  • Décrire un outil par un schéma et le faire appeler de façon fiable.
  • Choisir entre PydanticAI et LangGraph selon le besoin, et les mettre en œuvre.
  • Mettre un agent en pause pour une validation humaine sur les actions sensibles.
  • Exposer un agent derrière une interface web avec authentification.

Mon retour d'expérience — pour ceux qui veulent comprendre

Section intitulée « Mon retour d'expérience — pour ceux qui veulent comprendre »

La partie ci-dessus suffit pour démarrer. La suite explique pourquoi ce parcours est construit ainsi, et les pièges que je vois revenir le plus souvent.

Je conçois des contenus techniques DevOps et j'automatise au quotidien ; je travaille aujourd'hui chez Outscale. Sur le sujet des agents IA, un constat domine : la plupart des développeurs commencent par un framework — ils assemblent des briques sans savoir ce qu'elles font. Ça marche en démonstration, et ça s'effondre dès le premier comportement inattendu. Ce parcours prend le chemin inverse, et c'est un choix assumé.

Un modèle de langage seul produit du texte. Un agent agit : il décide d'appeler une API, de lire un fichier, de relancer une recherche. Cette bascule ouvre des usages concrets — trier des tickets, résumer des releases, interroger une base — mais elle déplace aussi le risque : un programme qui agit peut agir mal.

Sans la compréhension des agentsAvec ce parcours
On assemble un framework sans savoir ce qu'il faitOn sait ce que chaque couche automatise
La sortie du modèle est du texte à parser, fragileLa sortie est typée, validée, testable
Un agent peut exécuter une action destructive seulUne validation humaine garde les actions sensibles
Les bugs sont mystérieux — « le LLM est bizarre »On sait isoler la boucle, l'outil, le modèle
Les démos ne se reproduisent pasLes versions sont épinglées, les labs rejouables

Comprendre la boucle avant le framework. Le premier guide écrit un agent en Python pur — aucune dépendance. C'est volontaire : un framework qui « marche par magie » est un framework qu'on ne sait pas déboguer. On n'adopte PydanticAI ou LangGraph qu'après avoir écrit à la main la boucle qu'ils remplacent.

La sortie typée n'est pas un confort, c'est une frontière. Tant qu'un agent renvoie du texte libre, il reste un script de démonstration. Dès qu'il renvoie une structure validée — un modèle Pydantic —, il devient un composant qu'on peut brancher, tester, surveiller. Je considère cette bascule comme la vraie ligne entre un prototype et du code de production.

Un modèle local suffit pour apprendre. Tout le parcours tourne sur Ollama, avec des modèles comme qwen2.5. Pas de clé d'API, pas de facture, pas de données qui partent chez un tiers. La compétence acquise reste valable quel que soit le modèle visé ensuite.

Le human-in-the-loop n'est pas une option. Dès qu'un agent peut supprimer, envoyer ou payer, une étape de validation humaine devient obligatoire. LangGraph en fait un mécanisme de premier plan ; ce parcours le traite comme tel, pas comme un raffinement avancé.

L'agent et son interface sont deux choses. La logique d'un agent — boucle, outils, état — se teste sans interface. L'interface — Chainlit — se développe sans toucher à l'agent. Mélanger les deux produit un code que personne n'ose modifier. Le parcours les sépare nettement, et la dernière étape montre le point de jonction unique entre eux.

Démarrer par un framework. Le réflexe « j'installe LangChain et je vois » produit un agent que vous ne saurez pas réparer. Faites le premier guide d'abord — la boucle à la main —, même si elle vous semble rudimentaire.

Laisser un agent agir sans garde-fou. J'ai vu un agent de « nettoyage » bien intentionné fermer des tickets encore ouverts parce que son prompt était ambigu. Toute action irréversible passe par une validation : c'est le rôle de interrupt() dans le guide LangGraph.

Faire confiance au texte libre. Parser la réponse d'un modèle avec des expressions régulières en espérant la bonne forme, c'est accumuler une dette qui explose en production. Typez la sortie : un appel qui réussit a produit une structure valide, point.

Mélanger logique et interface. Écrire les appels au modèle directement dans les fonctions Chainlit fige tout. La logique d'agent doit vivre dans ses propres modules, testée seule ; Chainlit ne fait que l'appeler.

Livrer un lab non reproductible. Un exemple sans versions épinglées ne se rejoue pas six mois plus tard. Les paquets Python sont épinglés en ==X.Y.Z, les images de conteneur par empreinte — c'est une règle, pas une préférence.

Tester un agent uniquement via le modèle. Un test qui dépend d'un appel LLM est instable par nature. Isolez la logique déterministe — le routage, les règles de sécurité — et testez-la sans modèle ; gardez un ou deux tests d'intégration, pas davantage.

Un agent est un programme qui agit pour vous : sa sécurité n'est pas un sujet annexe. Trois principes traversent tout le parcours.

Le moindre privilège d'abord : un outil ne reçoit que l'accès strictement nécessaire à sa tâche. Un outil de lecture ne doit pas pouvoir écrire ; un outil qui interroge une API publique n'a pas besoin de vos secrets internes.

La validation humaine ensuite, sur toute action irréversible — c'est le interrupt() de LangGraph. Le coût d'un clic de confirmation est négligeable face à celui d'une suppression non voulue.

La gestion des secrets enfin : aucune clé, aucun mot de passe en clair dans le code. Ils vivent dans des variables d'environnement ou un coffre, jamais dans un fichier suivi par Git.

Ce parcours n'impose pas un outil unique : il vous apprend à choisir. Trois niveaux, du plus léger au plus complet.

La boucle écrite à la main convient à un agent simple, à un prototype, ou pour comprendre le mécanisme. Aucune dépendance, tout est visible — mais tout est aussi à votre charge.

PydanticAI s'impose dès qu'on veut une sortie typée, de l'injection de dépendances et des retries sans réécrire cette plomberie. C'est le bon défaut pour un agent qui produit un résultat structuré.

LangGraph devient pertinent quand le parcours se ramifie : plusieurs étapes, des branchements conditionnels, de la persistance d'état, une validation humaine. Le modèle « graphe d'états » paie son coût d'apprentissage dès que la boucle linéaire ne suffit plus.

À la fin, vous êtes autonome pour concevoir, tester et exposer un agent IA sur une infrastructure que vous maîtrisez. C'est le socle direct des sujets plus avancés de la formation : les systèmes multi-agents, les patterns de raisonnement, la mémoire persistante et la connexion au protocole MCP.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn