Deep Dive Agent¶
Cette page explique comment construire un agent Arclith sans casser la frontière métier.
Position¶
Un agent est un adapter inbound. Il reçoit une intention utilisateur, maintient un état, puis appelle les use cases.
| Text Only | |
|---|---|
Le LLM aide à interpréter. Il ne remplace pas les règles métier.
Runtime Et Frontière Microservice¶
langgraph dev ou l'Agent Server déployé expose une API de runs et threads. Ce runtime peut être
placé de deux façons:
| Placement | Quand l'utiliser | Règle |
|---|---|---|
| agent dans le service | l'agent manipule un seul domaine | il appelle les ports et use cases du service |
| agent central | l'assistant orchestre plusieurs domaines | il appelle les APIs, events ou tools MCP des services |
Un agent central ne doit pas importer les repositories des autres services et ne doit pas lire leurs bases directement. Sinon, il recrée un couplage de monolithe derrière une façade agentique.
En développement, un même langgraph.json peut déclarer plusieurs graphes. En production, le
découpage suit l'ownership, les secrets, les permissions et les besoins de scaling.
État Du Graphe¶
L'état doit être typé et limité aux informations utiles au parcours.
| Python | |
|---|---|
Éviter un état fourre-tout. Chaque champ doit avoir un producteur et un consommateur identifiables.
Nodes¶
Un node doit faire une action claire:
| Node | Rôle |
|---|---|
| interprétation | classifier ou extraire une intention |
| validation | vérifier que les champs requis existent |
| action | appeler un use case |
| réponse | formater le retour utilisateur |
Un node d'action ne doit pas construire de repository concret.
LLM¶
Utiliser le LLM pour les zones incertaines:
- comprendre une demande libre;
- extraire des champs depuis une phrase;
- choisir un chemin de graphe;
- reformuler une réponse.
Éviter le LLM quand une règle déterministe suffit. Une date déjà structurée ou un statut connu ne nécessite pas un appel modèle.
Appel Des Use Cases¶
| Python | |
|---|---|
Le use case reste la seule couche qui orchestre le métier. L'agent prépare une commande, puis délègue.
Observabilité¶
Activer LangSmith pour inspecter:
| Signal | Utilité |
|---|---|
| messages | comprendre l'entrée utilisateur |
| choix de route | valider le graphe |
| appels LLM | suivre coût et latence |
| erreurs node | diagnostiquer un blocage |
| sorties use case | vérifier l'action réelle |
LangSmith est optionnel pour exécuter localement. Hors ligne, retirer l'adapter de
observability.enabled et utiliser
l'API locale de l'Agent Server:
| Bash | |
|---|---|
Lorsque LangSmith est actif, préférer arclith.pydantic_ai_llm() à une construction directe de
PydanticAILLMAdapter: le runtime applique alors sampling, masquage et provider partagé.
Validation¶
| Bash | |
|---|---|
Tester aussi les nodes sans serveur LangGraph quand c'est possible. Les tests unitaires doivent pouvoir utiliser un fake LLM.
Pour inspecter un run sans Studio:
| Bash | |
|---|---|
Pour relire l'état final, créer un thread explicite puis consulter
/threads/{thread_id}/state. La procédure complète est dans
Validation IA locale.
Erreurs Fréquentes¶
| Erreur | Correction |
|---|---|
| prompt qui écrit en base | passer par un use case |
| état non typé | définir un TypedDict explicite |
| node trop large | découper interprétation, validation et action |
| test dépendant du réseau | injecter un fake LLM |
| Studio inaccessible hors ligne | utiliser l'API locale :2024 |
| trace absente | vérifier la config LangSmith et .env |
Pages Liées¶
Média¶
Média à produire
Capture : LangGraph Studio. Vidéo : run agent de bout en bout.