Accueil / Articles

Notes pratiques : Pourquoi personne ne parle de LangChain, LangGraph ou AutoAgent

Guide pratique détaillé : Pourquoi personne ne parle de LangChain, LangGraph ou AutoAgent : contrats, vérifications et emplacements de code prêts à l’emploi pour les équipes qui utilisent ce modèle.

Éditeur : REACTAPP.TOP13 min de lecture2911 mots

Sources: Why No One Talks About LangChain, LangGraph Or AutoAgent

Ce guide reconstitue le parcours allant des matières premières à un système fonctionnel pour : Pourquoi personne ne parle de LangChain, LangGraph ou AutoAgent. L’accent est mis sur des étapes opérationnelles, des vérifications explicites, ainsi que du code que vous pouvez intégrer directement dans un dépôt sans devoir deviner l’intention. Pour une vue d’ensemble, définissez les entrées, le responsable de l’étape et les critères d’arrêt avant de modifier le code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans avoir à deviner l’état caché. Documentez conjointement le parcours normal et celui de récupération. Les tentatives répétées, les contrôles humains et la gestion des messages non traités font partie intégrante du produit, et non d’une mise en forme ultérieure.

       ┌────────────────────────────────────────┐
       │        POST-FRAMEWORK PARADIGM         │
       └──────────────────┬─────────────────────┘
                          │
            ┌─────────────┴─────────────┐
            ▼                           ▼
       ┌──────────────┐           ┌──────────────┐
       │  PIPELINE    │           │   HARNESS    │
       │    MODE      │           │    MODE      │
       ├──────────────┤           ├──────────────┤
       │ • Bounded    │           │ • Unbounded  │
       │ • Code-Run   │           │ • Model-Run  │
       │ • Compute    │           │ • Context    │
       │   Bound      │           │   Bound      │
       └──────────────┘           └──────────────┘

Table des matières

Lorsque vous travaillez sur la table des matières, notez d’abord les éléments requis : les données nécessaires, le signal de succès, ainsi que ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de rester honnête lors des modifications ultérieures du code. Préférez des unités petites et testables plutôt que des scripts complexes. Lorsqu’une étape échoue, l’échec doit indiquer une seule responsabilité et non un processus embrouillé. Créez des points de contrôle après les étapes coûteuses. Le système de reprise ne doit pas facturer à nouveau la même appel d’LLM lorsque l’opérateur réessaie un nœud ultérieur.

1. La classification du travail que personne ne fait

Lorsque vous travaillez sur « 1. La classification des tâches que personne ne fait », notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’honnêteté des modifications ultérieures du code. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définez des vérifications de succès et refusez les terminations partielles silencieuses. Faites des points de contrôle après les étapes coûteuses. Le système de reprise ne doit pas facturer à nouveau la même appel du LLM lorsque l’opérateur réessaie un nœud ultérieur.

Is the work decomposable into a finite set of
  named states with deterministic transitions?

    [ YES ] ──► PIPELINE MODE
                • Invoice Extraction
                • Document Classification
                • Approval Routing
                • KYC Verification
                • Data Enrichment

    [ NO  ] ──► HARNESS MODE
                • Coding Agents
                • Research Agents
                • Ephemeral Tool/Shell Use
                • Legacy Code Migrations
                • Open-Ended Investigation

2. Mode pipeline : Lorsque le travail est décomposable

Lors de l’étude du mode 2 : lorsque le travail est décomposable, écrivez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’honnêteté des modifications ultérieures du code. Notez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite des factures inattendues lorsque le processus passe d’un environnement de démonstration à des environnements partagés. Créez un point de contrôle après les étapes coûteuses. La reprise du processus ne doit pas facturer à nouveau la même appel de LLM lorsque l’opérateur réessaie un nœud ultérieur. Lors de l’étude du mode 2 : lorsque le travail est décomposable, écrivez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’honnêteté des modifications ultérieures du code. Documentez ensemble le parcours optimal et le parcours de récupération. Les tentatives de réessai, les contrôles humains et la gestion des messages non livrés font partie intégrante du produit, et non d’améliorations apportées ultérieurement.

                [Input Data payload]
                           │
                           ▼
                    ┌──────────────┐
                    │   State 1    │ ──► [Structured LLM Call]
                    └──────┬───────┘               │
                           │                       ▼
                           │               ┌──────────────┐
                           │               │  Validation  │ ──► [Fail] ──► [Error State]
                           │               └──────┬───────┘
                           │                      │ [Pass]
                           ▼                      ▼
                    ┌──────────────┐
                    │   State 2    │ ──► [Structured LLM Call]
                    └──────┬───────┘               │
                           │                       ▼
                           │               ┌──────────────┐
                           │               │  Validation  │ ──► [Fail] ──► [Error State]
                           │               └──────┬───────┘
                           │                      │ [Pass]
                           ▼                      ▼
                  [Final Success Output]

3. Mode Harness : Lorsque le travail n’est pas décomposable

  1. Le mode Harness : Lorsque le travail n’est pas décomposable fonctionne le mieux lorsqu’il est traité comme une surface mesurable. Capturez un transcript exemplaire, un cas d’échec et la note de réversion avant d’élargir le périmètre. Préférez des unités petites et testables plutôt que des scripts complexes. Lorsqu’une étape échoue, l’échec doit pointer vers une seule responsabilité et non vers un processus embrouillé. Exposez des outils dotés de schémas restreints et de labels explicites indiquant les effets secondaires. Les hôtes doivent savoir quels appels modifient l’état avant d’approuver automatiquement.
┌──────────────────────────────────────────────┐
│                HARNESS LAYER                 │
│  Executes container limits & system safety   │
├──────────────────────────────────────────────┤
│  [Safety Hooks] [Budgets] [Time Constraints] │
├──────────────────────────────────────────────┤
│  ┌────────────────────────────────────────┐  │
│  │            MODEL OWNS LOOP             │  │
│  │  Plan ──► Execute ──► Observe ──► Plan │  │
│  │                                        │  │
│  │  Native capabilities:                  │  │
│  │  • File / Sandboxed Shell access       │  │
│  │  • Context-isolated subagent spawning  │  │
│  │  • Skill discovery & loading           │  │
│  └────────────────────────────────────────┘  │
└──────────────────────┬───────────────────────┘
                       ▼
      Result, Partial State, or Escalation

Les modes d’échec du mode Harness

Les modes de défaillance du mode Harness fonctionnent le mieux lorsqu’ils sont considérés comme une surface mesurable. Capturez un transcript idéal, un cas de défaillance et la note de réversion avant d’élargir le périmètre. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Nommez les artefacts, définites des vérifications de succès et refusez toute complétion partielle silencieuse. Exposez des outils dotés de schémas restreints et de labels explicites indiquant les effets secondaires. Les hôtes doivent savoir quels appels modifient l’état avant d’approuver automatiquement.

4. La réalité mathématique des deux modes

  1. La réalité mathématique des deux modes fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Enregistrez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le processus passe d’un environnement de démonstration à des environnements partagés. Maintenez l’état du graphe simplifié et typé. Les blocs imbriqués masquent l’identité du nœud qui a modifié tel champ et perturbent la reprise après interruption.
  2. La réalité mathématique des deux modes fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un enregistrement idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Documentez conjointement le parcours réussi et le parcours de récupération. Les tentatives de réessai, les contrôles humains et le traitement des messages non livrés font partie intégrante du produit, et non d’améliorations ultérieures.

Mode pipeline : la loi de scalage en temps d’inférence

Pour le mode Pipeline : la loi de mise à l’échelle du temps d’inférence exige que les entrées, le responsable de l’étape et les critères de sortie soient définis avant toute modification du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu, sans avoir à deviner l’état caché. Préférez des unités petites et testables aux scripts complexes. Lorsqu’une étape échoue, l’échec doit indiquer une seule responsabilité et non un pipeline embrouillé. Faites approuver par des humains les étapes qui entraînent des dépenses ou modifient des données de production. Un câblage en temps de compilation ne garantit pas la complétude du processus métier.

Mode Harness : la courbe de dégradation du contexte

Pour le mode Harness : la courbe de dégradation du contexte doit définir les entrées, le responsable de l’étape et les critères de sortie avant toute modification du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu, sans avoir à deviner l’état caché. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Nommez les artefacts, définites des vérifications de succès et refusez toute exécution partielle silencieuse. Authentifiez-vous au niveau du gateway et réautorisez-vous au niveau du plan de données. Un token porteur seul ne constitue pas une frontière entre les tenants.

P(Success)
  ▲
1.0├───────────┐
   │           │
   │           └───┐
0.5│               │
   │               └─────────────► Context Size (Tokens)
  0└───────────┬───┬─────────────
              50k 100k

5. La forme d’un Harness 2026 (Plan de mise en œuvre)

Pour 5. La structure d’un Harness 2026 (plan de mise en œuvre), définissez les entrées, le responsable de l’étape et les critères d’arrêt avant de modifier le code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Enregistrez les temps d’exécution ainsi que le coût des jetons ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le parcours passe de l’environnement de démonstration à des environnements partagés. Authentifiez-vous au niveau du gateway et réautorisez-vous au niveau du plan de données. Un simple jeton porteur ne constitue pas une frontière entre les tenants. Pour 5. La structure d’un Harness 2026 (plan de mise en œuvre), définissez les entrées, le responsable de l’étape et les critères d’arrêt avant de modifier le code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché. Documentez conjointement le parcours normal et le parcours de récupération. Les tentatives de réexécution, les contrôles humains et la gestion des messages non livrés font partie intégrante de la solution professionnelle.

tuyau, sans polissage ultérieur.

import logging
import os
from typing import Dict, Any, List
from pydantic import BaseModel, Field
# 2026 SDK abstractions (analogous across major provider frameworks)
from modern_agent_sdk import Agent, Skill, SubAgent
from modern_agent_sdk.hooks import PreToolUse, PostToolUse
from modern_agent_sdk.budgets import TokenBudget, StepBudget, WallTimeBudgetlogger = logging.getLogger("EnterpriseHarness")# 1. Skills are dynamically loaded from disk, not declared inline.
#    Each skill is an isolated directory containing metadata (SKILL.md),
#    runtime scripts, and specialized sandbox requirements.
SKILLS_DIR = "./skills"
all_skills = Skill.load_directory(SKILLS_DIR)# 2. Safety Hooks: Gateway controls running in the host environment.
#    These run on the host *before* any action is committed inside the sandbox.
def pre_tool_execution_hook(context: Dict[str, Any], tool_call: BaseModel) -> PreToolUse:
    """
    Validates security boundaries and consumption limits before the model executes a tool.
    """
    # Hard safety boundary: Prevent destructive shell operations
    if tool_call.name == "execute_shell":
        command = tool_call.args.get("command", "")
        if any(bad_cmd in command for bad_cmd in ["rm -rf", "chmod", "wget"]):
            logger.error(f"Execution blocked: Blocked command detected: '{command}'")
            return PreToolUse.deny("Destructive shell operations are prohibited in this sandbox.")

    # Budget check: Halt network tools if API budget is running low
    if tool_call.name == "network_request":
        if context["budget"].remaining_tokens < 15_000:
            return PreToolUse.deny("Insufficient remaining token budget to execute external network calls.")

    logger.info(f"Approved tool call: {tool_call.name}")
    return PreToolUse.allow()def post_tool_execution_hook(context: Dict[str, Any], tool_call: BaseModel, result: Any) -> PostToolUse:
    """
    Evaluates tool execution outcomes to detect systemic failure loops.
    """
    # Detect repeating error patterns to prevent infinite execution loops
    if result.is_error and context["consecutive_failures"] >= 3:
        logger.warning("System detected a repeating error loop. Forcing escalation.")
        return PostToolUse.escalate("Agent is stuck in an execution failure loop.")

    return PostToolUse.continue_loop()# 3. Context Isolation via Subagents
#    To prevent context poisoning, the parent agent never sees the child's
#    scratchpad or intermediate execution steps—only the final verified output.
def spawn_research_subagent(target_query: str) -> str:
    """
    Spawns a specialized subagent in a separate context window to perform a task,
    keeping the parent's working context completely clean.
    """
    logger.info(f"Spawning isolated subagent for query: '{target_query}'")

    subagent = SubAgent(
        model="claude-sonnet-4-5",
        skills=all_skills.filter_by_tag("research"),
        budgets=[
            TokenBudget(max_input_tokens=40_000, max_output_tokens=8_000),
            StepBudget(max_steps=12)
        ]
    )

    # Run task and return only the clean, compiled summary
    output = subagent.execute(task=target_query)
    return output.summary# 4. Assembling the Harness Container
#    The harness manages the execution sandbox, enforces constraints, and handles state.
agent_harness = Agent(
    model="claude-opus-4-7",
    skills=all_skills,
    subagent_factories={
        "researcher": spawn_research_subagent
    },
    hooks={
        "pre_tool_use": pre_tool_execution_hook,
        "post_tool_use": post_tool_execution_hook
    },
    budgets=[
        TokenBudget(max_total_tokens=600_000),
        StepBudget(max_steps=100),
        WallTimeBudget(max_seconds=1800) # 30-minute hard cap
    ],
    persistence_store="./.agent_state_db",  # State is persisted per step to survive restarts
    escalation_handler=lambda issue: open_human_review_ticket(issue)
)# 5. Execution
if __name__ == "__main__":
    task_input = "Migrate this legacy Django 4.2 codebase to FastAPI with 100% endpoint parity."

    try:
        # The agent loop is entirely internal to the model.
        # There is no manual 'while True' in our orchestration code.
        result = agent_harness.run(task=task_input)
        logger.info(f"Task completed. Result: {result.status}")
    except Exception as e:
        logger.critical(f"Harness terminated execution: {e}")

Différences clés par rapport aux frameworks hérités de 2024 :

Lorsque vous travaillez sur les Différences clés par rapport aux frameworks hérités de 2024 :, notez d’abord les exigences du contrat : entrées requises, signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de rester honnête lors des modifications ultérieures du code. Préférez des unités petites et testables plutôt que des scripts complexes. Lorsqu’une étape échoue, l’échec doit indiquer une seule responsabilité et non un processus embrouillé. Faites des points de contrôle après les étapes coûteuses. Le système de reprise ne doit pas facturer à nouveau la même appel d’LLM lorsque l’opérateur réessaie un nœud ultérieur.

6. Conflits architecturaux : appliquer la mauvaise solution au mauvais problème

Lorsque vous travaillez sur la section 6. Conflits architecturaux : appliquer la mauvaise forme au mauvais problème, notez d’abord les conditions du contrat : entrées requises, signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’honnêteté des modifications ultérieures du code. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définez des vérifications de succès et refusez les terminations partielles silencieuses. Faites des points de contrôle après les étapes coûteuses. Le système de reprise ne doit pas facturer à nouveau la même appel du LLM lorsque l’opérateur réessaie un nœud ultérieur.

┌─────────────────────────────────────────────────────┐
│                 ARCHITECTURAL MATCH                 │
├──────────────────────────┬──────────────────────────┤
│    PIPELINE WORKLOAD     │     HARNESS WORKLOAD     │
├──────────────────────────┼──────────────────────────┤
│ • Goal: Exact Extraction │ • Goal: Code Refactoring,│
│   & Routing              │   Agent Tasks, Migration │
│                          │                          │
│ • WRONG: Harness         │ • WRONG: Pipeline        │
│   (High latency, costly, │   (FSM State explosion,  │
│   non-deterministic)     │   inflexible schema)     │
│                          │                          │
│ • RIGHT: Pipeline FSM    │ • RIGHT: Sandbox Harness │
│ (Predictable transitions)│  (Dynamic loop execution)│
└──────────────────────────┴──────────────────────────┘

Cas 1 : L’erreur Harness-on-Pipeline (sur-ingénierie)

Lorsque vous travaillez sur le Cas 1 : L’erreur « Harness-on-Pipeline » (sur-ingénierie), notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’honnêteté des modifications ultérieures du code. Enregistrez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le processus passe de l’environnement de démonstration à des environnements partagés. Journalisez le nom outil, l’hash des arguments, la latence et le résultat de chaque appel. Sans ce suivi, les boucles de débogage peuvent faire perdre des heures. Lorsque vous travaillez sur le Cas 1 : L’erreur « Harness-on-Pipeline » (sur-ingénierie), notez d’abord le contrat : les entrées requises, le signal de succès et ce qui se passe en cas d’échec partiel. Cette liste de contrôle permet de garantir l’honnêteté des modifications ultérieures du code. Documentez ensemble le parcours normal et le parcours de récupération. Les tentatives de réessai, les contrôles humains et la gestion des messages non livrés font partie intégrante du produit, et non d’une mise en forme ultérieure.

Cas 2 : L’erreur du pipeline sur le harness (ingénierie insuffisante)

Le cas 2, l’erreur du pipeline sur le harness (ingénierie insuffisante), fonctionne le mieux lorsqu’il est traité comme une surface mesurable. Capturez un transcript exemplaire, un cas d’échec et la note de réversion avant d’élargir le périmètre. Préférez des unités petites et testables plutôt que des scripts complexes. Lorsqu’une étape échoue, l’échec doit pointer vers une seule responsabilité et non vers un pipeline embrouillé. Exposez des outils dotés de schémas restreints et de labels explicites indiquant les effets secondaires. Les hôtes doivent savoir quels appels modifient l’état avant de valider automatiquement.

Comment choisir la bonne architecture

La méthode « Comment choisir l’architecture appropriée » fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Capturez un exemple réussi, un cas d’échec et la note de réversion avant d’élargir le périmètre. Considérez cette étape comme un contrat entre les entrées et les sorties validées. Donnez des noms aux artefacts, définez des critères de succès et refusez toute mise en œuvre partielle silencieuse. Maintenez l’état des graphes plat et typé. Les blocs imbriqués masquent le fait que tel nœud a écrit telle champ et perturbent la reprise après interruption.

7. La couche des compétences : la norme ouverte de 2026

  1. La couche de compétences : Le standard ouvert de 2026 fonctionne le mieux lorsqu’il est considéré comme une surface mesurable. Capturez un transcript idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Enregistrez les temps d’exécution ainsi que le coût des tokens ou des requêtes à côté des résultats fonctionnels. Une visibilité précoce des coûts évite les factures inattendues lorsque le processus passe de la démonstration aux environnements partagés. Maintenez l’état des graphes simple et typé. Les blocs imbriqués masquent l’identité du nœud qui a modifié un champ et perturbent la reprise après interruption.
  2. La couche de compétences : Le standard ouvert de 2026 fonctionne le mieux lorsqu’il est considéré comme une surface mesurable. Capturez un transcript idéal, un cas d’échec et la note de réversion avant d’élargir le périmètre. Documentez en même temps le parcours optimal et les procédures de récupération. Les tentatives de répétition, les contrôles humains et le traitement des messages non livrés font partie intégrante du produit, et non d’améliorations ultérieures.
skills/
├── document_parser/
│   ├── SKILL.md             <-- Human/Model readable metadata & capabilities
│   ├── run.py               <-- The execution logic running inside the sandbox
│   └── reference_rules.pdf  <-- Domain-specific constraints and edge-cases

8. Conclusion : Le nouveau métier d’ingénieur

8. Conclusion : Le nouveau poste d’ingénieur exige de définir les entrées, le responsable de chaque étape ainsi que les critères d’achèvement avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu, sans avoir à deviner l’état caché. Préférer des unités petites et testables aux scripts complexes. Lorsqu’une étape échoue, l’échec doit indiquer une seule responsabilité et non un processus embrouillé. Imposer l’approbation humaine pour les actions qui entraînent des dépenses ou modifient des données de production. La connexion en temps de compilation ne garantit pas la complétude du processus métier.

Liste de contrôle opérationnelle

Cette liste fonctionne le mieux lorsqu’elle est considérée comme une surface mesurable. Il convient de recueillir un exemple idéal, un cas d’échec ainsi que des notes de réversion avant d’élargir le périmètre.

Gardez la configuration en dehors du code de l’application. Les fichiers d’environnement, les bases de données secrètes et les indicateurs fonctionnels doivent être regroupés en un seul endroit que les opérateurs peuvent auditer sans avoir à lire l’ensemble du graphe.

Gardez l’état du graphe plat et typé. Les blocs imbriqués cachent le fait que tel nœud a écrit telle champ et empêchent la reprise après interruption.

Ajoutez un test de base qui exerce le chemin critique dans les processus d’intégration continue en utilisant des fixtures, et non des API payantes en temps réel, chaque fois que le budget le permet.

Dokumentez à la fois le parcours normal et le parcours de récupération. Les tentatives de répétition, les contrôles humains et la gestion des messages non livrés font partie intégrante du produit, et non d’une amélioration ultérieure.

Gardez l’état du graphe plat et typé. Les blocs imbriqués cachent le fait que tel nœud a écrit telle champ et empêchent la reprise après interruption.

Au préalable de promouvoir le stack, figez les versions, conservez une transcription « or » pour le chemin critique, et confirmez les étapes de rollback. Les environnements partagés nécessitent des limites de débit, des vérifications de location, ainsi qu’un responsable clair pour la rotation des secrets. Préférez une fiabilité sans faille à des démonstrations brillantes mais ponctuelles.

Note de batch pour 9f921d978495 : gardez les clés du fournisseur hors du repo, fixez un plafond pour les tokens par session, et stockez les transcriptions à côté des fichiers d’évaluation afin que les remplacements ultérieurs de modèles restent comparables.