L'IA comme logiciel discipliné: Je pense que je devrais partir. (Français (French))

L'IA comme logiciel discipliné: Je pense que je devrais partir.

Wednesday, 19 November 2025

//

36 minute read

L'évolution des flux de travail sur l'IA et la stimulation de la simplicité

Tu veux me payer pour transformer ça en un bon produit ? Donnez-moi une ligne : [email protected]

La pensée qui a tout commencé

Pourquoi un cerveau humain fonctionne-t-il en temps réel sur 20 watts, alors que nos meilleurs modèles d'IA ont besoin de mégawatts juste pour parler de petit déjeuner ?

Les LLM modernes visent à être comme un cortex massif – des tonnes de mémoire, des tonnes de performance, mais seul. Pour accomplir des tâches un humain ferait sans effort, ils mâchent à travers kilowatts de puissance en utilisant des dizaines de gigaoctets de mémoire. Cela ne peut pas être juste si le cerveau fonctionne sur 20 watts.

Voici ce qu'ils manquent: Le cerveau n'est pas un seul blob de gelée grise — c'est Nombreux sous-systèmes spécialisés Les LLM ne font pas ça. Ils sont comme un moteur de pensée massif boulonné sur une infrastructure stupide. Leur stockage ne s'adapte pas. Ils ne construisent pas de sous-systèmes spécialisés. Ils sont incomplets.

J'avais l'habitude d'être psychologue, alors je pense à des choses comme ça. Et voici le principe fondamental que j'ai construit DiSE autour de :

"La cognition de cheap stabilise la cognition complexe."

Votre cerveau ne recalcule pas comment marcher chaque fois que vous faites un pas. Il décharge cela à des sous-systèmes rapides, bon marché, automatiques. Cette stabilité libère le cortex préfrontal cher pour gérer des problèmes nouveaux. DiSE fait de même: il remplace les appels LLM coûteux avec des scripts Python bon marché, libérant des modèles frontières pour travailler sur des problèmes vraiment difficiles. Le système se stabilise en devenant plus simple, pas plus complexe.

Emplacement de l'ascenseur

Et si votre workflow d'IA s'est rendu compte qu'il n'avait pas besoin d'IA et s'est transformé en script Python ? DiSE fait cela. Il construit des workflows en tant qu'outils testables stockés dans un substrat RAG. Lorsque les motifs deviennent clairs, il remplace les appels LLM par un Python instantané. Quand vous avez besoin de plus de fonctionnalités, il construit SEULEMENT ce qui est nécessaire – probablement, testablement. Quand les outils dérivent, il évolue loin des problèmes avant de vous remarquer. Un modèle Sentinel minuscule (1B params) gère tout le ménage ennuyeux pour les pennies. Connectez brièvement une frontière LLM pour optimiser tout, puis déconnectez-vous et exécutez à bon marché pour toujours. C'est l'IA qui devient plus efficace plus longtemps qu'il fonctionne, ce qui est exactement la façon dont les systèmes de production devraient fonctionner.

Présentation

La plupart des systèmes d'IA aujourd'hui sont construits comme mes premiers scripts PHP circa 2003—fragile, intestable, et quand ils se brisent, vous avez autant de chances de les déboger que d'expliquer le Brexit à un Américain confus.

Quand ils échouent, vous ne pouvez pas dire pourquoi. Quand ils dérivent (et ils sera), vous ne remarquez pas jusqu'à ce que la production soit en feu. Quand vous avez besoin de les améliorer? Retour à la case départ. Sisyphe numérique.

Il y a une meilleure façon. Et si chaque outil d'IA était construit comme un bon logiciel dès le premier jour – avec des tests, des contrats, des spécifications, et de la responsabilisation cuit dedans?

Ce n'est pas de la vapeur, c'est du code de travail, voilà comment l'ingénierie de l'IA devrait fonctionner quand elle grandit.

Table des matières

Le problème : l'IA est toujours l'Ouest sauvage

Laissez-moi vous peindre une photo avec un diagramme, parce que je suis comme ça :

graph TD
    A[Traditional AI Development] --> B[Write Prompt]
    B --> C[Hope for Best]
    C --> D{Does it work?}
    D -->|Sometimes| E[Ship It™]
    D -->|Usually| F[Tweak Prompt]
    F --> C
    E --> G[Production]
    G --> H[Silent Drift]
    H --> I[Everything's Fine...]
    I --> J[Until It's Not]
    J --> K[Panic]
    K --> L[No Audit Trail]
    L --> M[Start Again]

    style K stroke:#f96
    style L stroke:#f96
    style M stroke:#f96

C'est comme ça que la plupart des systèmes d'IA se construisent.

Qu'est - ce qui rend cela différent?

Voici ce à quoi ressemble un « outil » d'IA généré dans mon système – juste à partir de l'ICL, pas de fumée et de miroirs :

Structure du dossier de l'outil

flag_potential_violations_base/
├─ flag_potential_violations_base_plan.txt   ← generation plan
├─ flag_potential_violations_based_on_predefined_thresholds.feature   ← BDD spec
├─ interface.json                            ← declared IO contract
├─ specification.md                          ← intent & description
├─ main.py                                   ← implementation (generated)
├─ test_main.py                              ← unit + BDD tests
├─ locust_flag_potential_violations_base.py  ← load/performance tests
└─ node_runtime.py                           ← runtime integration (a mock of it's tool call for testing use)

Ce n'est pas une maquette que j'ai faite à Figma pour vous impressionner. Produit généré effectifChaque dossier, de l'intelligence artificielle elle-même.

Chaque nœud est :

Signification de la propriété | ------------- | ----------------------------------------- | Testable Les tests unitaires et BDD existent dès la naissance. Peut toujours prouver pourquoi il s'est comporté comme il l'a fait. Evolvable peuvent être améliorés par des comparaisons de fitness. Repères de référence : tests de perf/charge inclus. Réutilisable Devient partie intégrante de la mémoire procédurale

Ce n'est pas de l'ingénierie rapide. L'IA comme logiciel discipliné—le genre que vous pouvez réellement faire confiance à la production sans vérifier Slack toutes les 5 minutes.

Et voici le plus malin : Ce ne sont que des scripts Python. Des scripts Python appropriés, ennuyeux, testables. Mais ils vivent dans un substrat évolutif basé sur RAG où la spécification de chaque outil devient partie intégrante de son identité. Le système est dynamiquement composable du niveau de workflow jusqu'à de minuscules scripts utilitaires.

Et si votre workflow dicté par l'IA décidait qu'il n'avait vraiment pas besoin d'IA ? Cela arrive. Un workflow fonctionne quelques fois, le modèle devient clair, et le système réalise "ce n'est que la transformation des données, pourquoi suis-je en train d'appeler un LLM?" Donc il génère un script Python pur. La prochaine fois que vous faites la même demande? INSTANT. Pas d'appel d'API, pas de jetons, pas de latence. Juste ennuyeux, rapide, prévisible Python.

Ou peut-être que vous avez besoin de plus. Peut-être que ce flux de travail a besoin d'un contrôle de validation supplémentaire. SEULEMENT ajouté au besoin. Le système construit JUST ces nouvelles pièces en tant qu'outils – peut-être basés sur des existants, peut-être entièrement nouveaux – mais toujours prévisible, toujours testable. Pas de suringénierie. Pas de code "juste au cas où". Juste l'outil minimum viable pour résoudre le problème réel auquel vous êtes confrontés en ce moment.

Mettre à niveau un outil (d'une manière guidée, rigoureusement testable), et chaque workflow qui l'utilise bénéficie immédiatement. Pas de redéploiement. Pas de cascade de changements. Juste de meilleurs outils, automatiquement disponibles pour tout.

Comment ça marche réellement : la Forge

Voici le bout que personne d'autre ne fait. L'AI qui construit des outils n'est pas un modèle unique – c'est un équipe de LLMs spécialisés, chacun avec des invites de démarrage soigneusement réglés, travaillant comme une équipe d'ingénierie logicielle appropriée.

Le flux de travail de Forge :

  1. Détection spéciale de cas – «Est-ce une tâche commune que nous nous occupons déjà?» (A l'avenir, l'ICL va muter pour ajouter ces schémas communs automatiquement)
  2. Décomposition des tâches – Un assez bon LLM (localement j'utilise un modèle 7B, rien de spectaculaire) décompose l'invite: «Comment puis-je décomposer cela? Quels outils existent pour chaque partie?"
  3. Planification parallèle ou séquentielle – Décide ce qui peut fonctionner en parallèle vs séquence
  4. Génére des appels d'outils – Produits call_tool("tool_name", prompt) - C'est KEY pour la composabilité
  5. Recherche RAG – Est-ce que "tool_name" existe ? Si oui, utilisez-le. Si non, l'invite devient l'instruction pour la prochaine instance Forge
  6. Décomposition récursive – Que la prochaine Forge fait la même panne, jusqu'aux petites étapes testables à l'unité

C'est la percée. Les tâches se décomposent en opérations atomiques – comme j'ai appris à le faire pendant 30 ans de construction de logiciels. C'est assez bon. pour la génération de code lorsque la tâche est minuscule et que le surveillant fournit des instructions détaillées de mise en œuvre.

Voici un véritable exemple de ce que ces instructions ressemblent. Le surveillant ne dit pas seulement "écrire un planificateur"—il fournit:

  • Algorithme exact (barrage topologique + méthode de chemin critique)
  • Structures de données avec définitions de type
  • Signatures de fonctions avec spécifications d'entrée/sortie
  • Contraintes de performance (temps O(V+E), espace O(V)
  • Limites de sécurité (max 1000 tâches)
  • Cas d'essai complets avec entrées et sorties attendues
  • Formats d'entrée/sortie JSON

Un modèle 7B peut écrire du code solide à partir de cette spécification parce qu'il n'est pas demandé de concevoir quoi que ce soit – il suffit d'implémenter un plan détaillé. C'est ça. pourquoi les petits modèles fonctionnent pour la génération de code dans ce système.

Lorsque la Forge exécute le flux de travail, il est encore dynamiquement composable via RAG. Si un nouvel outil apparaît mieux qui passe les mêmes tests? Il est utilisé automatiquement. Et rappelé la prochaine fois.

Laissez-moi vous montrer l'architecture avec un autre diagramme, parce que apparemment je ne peux pas m'en empêcher:

graph TB
    subgraph "RAG-Based Tool Substrate"
        A[Semantic Intent] --> B[Plan Generation]
        B --> C[Contract Definition]
        C --> D[Code Generation]
        D --> E[Test Generation]
        E --> F[Fitness Evaluation]
        F --> G{Passes?}
        G -->|Yes| H[RAG Storage]
        G -->|No| I[Evolutionary Improvement]
        I --> D
        H --> J[Tool Specification + Code]
    end

    subgraph "Dynamic Composition"
        J --> K[Workflow Assembly]
        K --> L[Tool Discovery via RAG]
        L --> M[Runtime Execution]
        M --> N{Tool Upgrade?}
        N -->|Yes| H
        N -->|No| O[Continue]
    end

    style H stroke:#9f6
    style J stroke:#9f6
    style L stroke:#6cf

Le substrat RAG est la sauce secrète. Lorsque vous avez besoin d'un outil, le système trouve la meilleure correspondance. Lorsque vous mettez à niveau un outil, chaque workflow qui l'utilise obtient automatiquement l'amélioration.

C'est comme avoir une boîte à outils auto-organisatrice qui devient plus intelligente au fil du temps.

Le problème de la mémoire : arrêter de réapprendre Comment conduire

Les IA normales utilisent l'approche de l'étude rapide. Chaque fois qu'ils s'attaquent à une tâche, ils sont en train de faire un examen – lire tout le contexte, trouver le problème, générer une solution. C'est comme devoir refaire vos leçons de conduite chaque fois que vous montez dans une voiture. essai (bien que ce soit un autre problème avec les solutions d'IA), votre Enseignements. Imaginez expliquer ce qu'une embrayage fait tous les matins avant votre trajet.

Les CLI de code moderne ont une solution partielle: regardez votre répertoire de projet pour CLAUDE.md, ou un tas de documents de balisage étranges dispersés. Ces fichiers? C'est aussi bon qu'ils peuvent le faire avec la mémoire. C'est comme laisser des notes Post-It pour vous-même, sauf que vous devez les lire tous à chaque fois avant de faire quoi que ce soit.

DiSE se souvient en fait. Lorsqu'il résout un problème, il stocke la solution comme un outil testé et documenté dans le substrat RAG. La prochaine fois? Il l'utilise seulement. Pas de re-apprentissage. Pas de re-figuration. Pas de « laissez-moi lire tous vos fichiers contextuels ». Il a conduit cette route hier, il sait où sont les tours.

Cela s'inscrit directement dans les concepts sur lesquels je me suis tapé dans ma série d'intelligence sémantique, en particulier :

Chaque noeud a déjà:

  • Une spécification (pour que vous sachiez ce que c'est moyen à faire)
  • Un contrat (pour que vous sachiez ce que c'est) En fait oui)
  • Code runnable (fucking, je sais)
  • Tests qui doivent passer (aucun de ces "nous ajouterons des tests plus tard" non-sens)
  • Un harnais de test de charge (parce que "il a travaillé sur mon ordinateur portable" n'est pas une stratégie de déploiement)
  • Une raison pour exister (pas de code zombie hantant votre base de code)

C'est le substrat nécessaire à l'échelle de l'IA de manière responsable – pas plus de jetons, pas de modèles plus grands, pas un autre enveloppement de ChatGPT sanglant.

L'extensibilité : les outils sont facultatifs, les LLM sont facultatifs

Voici ce qui compte vraiment : outils et LLMs sont optionnels. Le système est livré avec un LLM par défaut, et il peut tout travailler de zéro s'il le faut. Mais les outils lui donnent une longueur d'avance.

Pensez à des outils comme les livres de bibliothèque. Certains sont des fichiers JSON (invites spéciales pour le raisonnement, le codage, l'analyse – elles-mêmes mutables et évolutives). Beaucoup sont des scripts Python (analyse statique, scikit-learn pour ML, traduction neuronale – capacités spécialisées prêtes à utiliser). D'autres ont même des modèles (pour la génération de code, donnant au système une boucle plus serrée lors de la création de nouveaux outils). Un outil installe littéralement Node.js et utilise sirmaid.js pour le rendu des diagrammes.

Tous vivent dans le RAG. Tous sont accessibles à tous les workflows.

Vous n'en avez pas. besoin Mais avoir 200 outils est comme avoir 200 livres expliquant « voici comment faire X efficacement. » Lorsqu'il doit analyser JSON, il n'a pas à dériver JSON analyse des premiers principes – il a un outil. Lorsqu'il a besoin d'apprentissage automatique, il n'a pas à implémenter la descente de gradient – il appelle scikit-learn. Lorsqu'il a besoin de générer des diagrammes, il utilise l'outil sirène qui installe ses propres dépendances.

Le système peut:

  • Utiliser plusieurs LLM - Ou juste une. Ou aucune pour certaines tâches une fois qu'ils sont distillés à Python
  • Intégrer les outils spécialisés - Ou pas. Il peut les construire si nécessaire
  • Travailler avec les outils MCP – Expédié avec environ 200 outils dont ~10 intégrations MCP. Un outil peut découvrir de nouveaux services MCP et les envelopper.
  • Construisez-vous à partir de zéro – Avec assez de temps et de calcul. Les outils signifient juste qu'il n'a pas à
graph LR
    subgraph "Tool Ecosystem"
        A[Python Scripts] --> E[RAG Substrate]
        B[LLM Specialists] --> E
        C[External APIs] --> E
        D[MCP Tools] --> E
    end

    E --> F[Dynamic Discovery]
    F --> G[Workflow Composition]
    G --> H[Execution]
    H --> I[Feedback & Learning]
    I --> E

    style E stroke:#6cf
    style F stroke:#9f6

Et parce que tout est stocké dans le substrat RAG avec la recherche sémantique, vous pouvez construire réseaux de systèmes interreliés qui partagent des outils et des apprentissages. Un système calcule comment gérer une transformation difficile de données? Chaque système connecté le sait maintenant.

Le système optimise sur la base pression appliquée:

  • Pression de performance ? Générer des variantes plus rapides, les tester, garder les gagnants
  • Pression d'erreur ? Construire des outils de validation, ajouter des vérifications, améliorer la robustesse
  • La pression sur les coûts ? Remplacer les appels LLM par des scripts Python, cacher agressivement, utiliser des modèles moins chers

Il ne fonctionne que si nécessaire. Pas d'optimisation prématurée. Pas de code "nous pourrions avoir besoin de ce un jour". Juste des améliorations ciblées en réponse à des problèmes réels et mesurés.

C'est comme avoir un esprit ruche pour ton outillage, sauf moins flippant et plus auditable.

L'effet réseau : l'intelligence connectée

Voici où il obtient correctement science-fiction (mais d'une bonne manière). Plusieurs instances peuvent partager un substrat RAG, créant un réseau interdépendant de systèmes qui, collectivement, apprennent et améliorent:

graph TB
    subgraph "System A"
        A1[Workflow] --> A2[Tool Discovery]
        A2 --> A3[RAG Substrate]
    end

    subgraph "System B"
        B1[Workflow] --> B2[Tool Discovery]
        B2 --> B3[RAG Substrate]
    end

    subgraph "System C"
        C1[Workflow] --> C2[Tool Discovery]
        C2 --> C3[RAG Substrate]
    end

    A3 <--> D[Shared Tool Repository]
    B3 <--> D
    C3 <--> D

    D --> E[Collective Learning]
    E --> F[Improved Tools]
    F --> D

    style D stroke:#6cf
    style E stroke:#9f6

Ce que cela signifie dans la pratique:

  • Le système A crée un outil de validation de données brillant → Tout le monde l'obtient
  • Le système B découvre une façon plus rapide d'analyser les journaux → Les avantages pour tout le monde
  • Le système C montre comment intégrer une nouvelle API → La connaissance se propage

Chaque système maintient ses propres workflows et spécialisations, mais tous contribuent et bénéficient d'un dépôt partagé d'outils testés, validés et adaptés à la condition physique.

C'est l'ingénierie collaborative de l'IA sans le chaos. Chaque contribution est testée, versionnée et auditable. Personne ne peut accidentellement casser les choses de tout le monde (en vous regardant, node_modules).

Intelligence adaptative: pas cher par défaut, intelligent lorsque nécessaire

Voici un autre peu astucieux: le système n'a pas besoin de modèles de frontière coûteux fonctionnant 24/7. Il utilise un fin de l ' exécution du programme de travail approche dans laquelle:

  • Le Sentinel (un très rapide 1B-classe LLM) s'occupe de tous les travaux ménagers banals - routage, classement, décisions simples
  • Modèles pas chers et rapides gérer le travail de routine (votre local Llama, Phi, ou similaire)
  • Modèles de niveau intermédiaire aborder la complexité modérée (GPT-3.5, Claude Haiku)
  • Modèles de frontières On ne se fait appeler que pour des problèmes vraiment durs (GPT-4, Claude Opus)
graph TD
    A[Task Arrives] --> B[Sentinel: 1B LLM]
    B --> C{Classify Complexity}
    C -->|Housekeeping| D[Sentinel Handles It]
    C -->|Simple| E[Local Model]
    C -->|Moderate| F[Mid-Tier Model]
    C -->|Complex| G[Frontier Model]

    D --> H[Routing, Classification, etc.]
    E --> I[Fast & Cheap]
    F --> J[Balanced]
    G --> K[Powerful]

    H --> L{Success?}
    I --> L
    J --> L
    K --> L

    L -->|Yes| M[Result]
    L -->|No| N[Escalate to Higher Tier]
    N --> F
    N --> G

    style B stroke:#6cf
    style D stroke:#6cf
    style E stroke:#9f6
    style F stroke:#ff9
    style G stroke:#f96

Le Sentinel est le secret de la réduction des coûts. Il s'agit d'un petit modèle de 1B-paramètre rapide qui fonctionne constamment, manipulant:

  • Affectation des tâches et classification de la complexité
  • Décisions simples oui/non
  • Validation et formatage des données
  • Détection et triage des erreurs
  • Suivi et entretien

Pensez-y comme la réceptionniste qui sait quand gérer quelque chose elle-même et quand monter aux partenaires seniors. Il fonctionne en millisecondes, coûte des fractions d'un penny, et empêche les modèles coûteux d'être dérangés avec la trivia.

Mais c'est là que ça devient vraiment intéressant : se connecter à une frontière LLM temporairement (même pendant quelques heures), et le système utilisera cette puissance supplémentaire pour:

  1. Optimiser lui-même – Revoir ses propres outils, identifier les améliorations, générer de meilleures versions
  2. Mise à niveau en toute sécurité – Tous les changements passent toujours par la suite complète de test et l'évaluation de la condition physique
  3. Apprendre de nouveaux modèles – Découvrez de meilleures façons de résoudre des problèmes communs
  4. Capacités de bootstrap – Générer de nouveaux outils qu'il n'avait pas avant

Ensuite, vous pouvez déconnecter le modèle cher, et le système continue à fonctionner avec toutes ces améliorations cuites dans les scripts Python testés. Le Sentinel continue à tout cocher, et vous avez essentiellement "distillé" l'intelligence du modèle frontière dans votre bibliothèque d'outils.

Adaptation environnementale dynamique

Le système répond également aux données et aux changements environnementaux dynamiquement et à bon marché:

graph LR
    A[Environmental Change] --> B[Pattern Detection]
    B --> C{Existing Tool?}
    C -->|Yes| D[Use Cheap Model]
    C -->|No| E[Generate New Tool]
    E --> F[Frontier Model]
    F --> G[Test & Validate]
    G --> H[Add to RAG]
    H --> D
    D --> I[Continue Cheaply]

    style D stroke:#9f6
    style F stroke:#f96
    style I stroke:#9f6

Dans la pratique:

  • Le format de l'API change? Générer un outil d'adaptateur une fois (supplémentaire), puis l'utiliser pour toujours (peu cher)
  • Nouvelle source de données? Imaginez l'analyseur avec un modèle intelligent, puis exécutez-le avec un stupide
  • Le flux de travail a-t-il besoin d'optimiser ? Claude a-t-il passé 30 secondes à y penser, enregistrer le résultat en tant que script Python

Vous payez essentiellement pour l'intelligence à l'avance, puis vous exécutez sur pilote automatique après. C'est comme engager un consultant pour réparer vos processus, sauf que le consultant est un LLM et que les corrections sont des scripts Python contrôlés en version avec couverture de test.

Le concept de workflow gradué signifie que vous pouvez répondre dynamiquement aux changements environnementaux et maintenir un système massif pour les centimes par jour, ne s'accroissant à des modèles coûteux lorsque vous en avez vraiment besoin.

L'IA n'a pas résolu le problème - il a évolué loin d'elle

Bien, laissez-moi être clair sur ce que ce système fait réellement, parce que la plupart des affirmations d'IA sonnent comme des contes de fées de Silicon Valley: "L'IA a remarqué tout était en bas et héroïquement sauvé la journée!" Ce n'est pas ce qui se passe ici. C'est plus mature que cela.

Voici le mécanisme actuel :

graph TB
    A[Tool in Production] --> B[Fitness Monitoring]
    B --> C[Performance Tracking]
    C --> D{Drift Detected?}
    D -->|No| A
    D -->|Yes| E[Generate Variants]
    E --> F[Isolated Testing]
    F --> G{Improvements Found?}
    G -->|No| A
    G -->|Yes| H[Merge to Tool]
    H --> I[Update Tests]
    I --> J[Update Audit Trail]
    J --> K[Update Provenance]
    K --> A

    style D stroke:#ff9
    style G stroke:#ff9
    style H stroke:#9f6

Le système:

  1. Tracks fitness et performance au fil du temps – Pas seulement "est-ce que ça marche?" mais "est-ce que ça marche aussi bien qu'avant?"
  2. Détecte de très petites dérives avant que quelqu'un ne remarque – Dégradation subtile de la précision, petites augmentations de la latence, hausses marginales des taux d'erreur
  3. Essais à proximité des variantes en toute sécurité, en isolement – Génére des implémentations alternatives, les conduit à travers la suite de test complète, mesure leur forme physique
  4. Merges a prouvé des améliorations dans l'outil – Seulement après validation, seulement avec une couverture d'essai complète
  5. Mettre à jour le code avec les tests, les journaux de vérification, la provenance – Chaque changement est traçable, chaque amélioration est documentée
  6. Passons à autre chose – Pas de fanfare, pas d'alerte, pas de drame

Il n'a pas "corrigé le problème." Il a simplement évolué loin de lui.

Il n'y a pas d'intervention d'urgence. Aucun rapport d'incident. Aucune réunion post mortem où tout le monde prétend qu'il savait ce qui se passait. Le système a remarqué une tendance, exploré des alternatives, validé des améliorations, et les intégré.

À quoi cela ressemble-t-il dans la pratique?

Disons que vous avez un outil qui analyse les réponses de l'API. Pendant trois semaines, le fournisseur de l'API apporte des changements subtils à leur format – rien ne rompt immédiatement, juste de petites incohérences. Les temps de réponse augmentent de 50ms. Le taux de réussite de l'API passe de 99,8 % à 99,3 %.

Approche traditionnelle:

  • Semaine 4: Quelqu'un remarque des charges de tableau de bord plus lentes
  • Semaine 5 : Début de l'enquête, début du jeu de blâme
  • Semaine 6: Cause racine identifiée (peut-être)
  • Semaine 7: Le développeur écrit fix, teste localement
  • Semaine 8 : Déploiement, croiser les doigts, espérer que ça marche

Approche DiSE:

  • Semaine 2 : La surveillance de la condition physique détecte une baisse de 0,2% du succès de l'analyse
  • Semaine 2, Jour 3: System génère trois variantes d'analyseur
  • Semaine 2, Jour 3 : Variantes testées contre la circulation capturée
  • Semaine 2, Jour 3: Meilleure variante fusionnée (taux de réussite de 99,9%)
  • Semaine 2, Jour 3 : Mise à jour des tests, piste de vérification enregistrée
  • Semaine 4 : Les humains restent heureux d'ignorer tout ce qui s'est passé

Pas de drame, pas d'intervention, juste une évolution disciplinée et préventive.

La discipline d'ingénierie derrière "l'évolution"

Ce n'est pas magique, et ce n'est certainement pas AGI faisant des choses mystérieuses.

sequenceDiagram
    participant M as Monitoring
    participant A as Analyser
    participant G as Generator
    participant T as Test Harness
    participant V as Validator
    participant I as Integrator

    M->>A: Performance metrics trending down
    A->>A: Analyse fitness scores
    A->>G: Request variants
    G->>G: Generate alternatives
    G->>T: Submit for testing
    T->>T: Run full test suite
    T->>V: Results + metrics
    V->>V: Compare fitness scores
    alt Improvement Found
        V->>I: Merge approved variant
        I->>I: Update code, tests, docs
        I->>M: Resume monitoring
    else No Improvement
        V->>M: Continue monitoring
    end

Chaque étape est déterministe, chaque décision est mesurable, chaque changement est vérifiable.

L'"évolution" est juste:

  • Mesure en continu
  • Génération automatisée d'hypothèses
  • Essais rigoureux
  • Sélection basée sur la condition physique
  • Intégration disciplinée

Ce n'est pas intelligent, c'est juste patient, complet, et ne prend pas les week-ends.

Pourquoi c'est important (ou : pourquoi je ne me contente pas d'inventer ça)

Parce que sans discipline, voici ce qui se passe :

graph TD
    A[Undisciplined AI] --> B[Behaviour Drift]
    A --> C[Silent Failures]
    A --> D[Untraceable Decisions]
    A --> E[Mystery Bugs]

    B --> F[Production Incident]
    C --> F
    D --> F
    E --> F

    F --> G[Debugging Session from Hell]
    G --> H[No Audit Trail]
    H --> I[Blame Game]
    I --> J[Resume Update]

    style F stroke:#f96
    style G stroke:#f96
    style H stroke:#f96
    style I stroke:#f96
    style J stroke:#f66

Voilà donc le scénario de cauchemar. Voici ce que cette approche vous donne en fait :

  • Inspectable – Vous pouvez voir exactement ce qu'il fait et pourquoi (révolutionnaire, je sais)
  • Improvable – Le score de remise en forme montre ce qui est vraiment mieux, pas ce que sensations mieux
  • Version anglaise – Les changements sont suivis parce que nous ne sommes pas barbares
  • Comptable – Chaque décision a une raison traçable (vos auditeurs vous aimeront)

C'est ainsi que l'IA redevient un vrai logiciel – quelque chose que vous pouvez faire confiance, raisonner et expédier à l'échelle sans avoir une petite crise de panique chaque fois que vous déployez.

Le cycle de vie discipliné de l'IA

Voici le cycle de vie complet, parce que j'ai promis des diagrammes de Sirène et je suis un homme de parole:

graph TB
    subgraph "Generation Phase"
        A[Semantic Intent] --> B[Plan Creation]
        B --> C[Contract Definition]
        C --> D[BDD Specification]
        D --> E[Code Generation]
        E --> F[Test Generation]
    end

    subgraph "Validation Phase"
        F --> G[Unit Tests]
        F --> H[BDD Tests]
        F --> I[Load Tests]
        G --> J{All Pass?}
        H --> J
        I --> J
    end

    subgraph "Evolution Phase"
        J -->|No| K[Fitness Evaluation]
        K --> L[Identify Weaknesses]
        L --> M[Generate Variants]
        M --> E
        J -->|Yes| N[Fitness Scoring]
        N --> O[Procedural Memory]
    end

    subgraph "Deployment Phase"
        O --> P[Tool Registry]
        P --> Q[Runtime Integration]
        Q --> R[Monitoring & Observability]
        R --> S{Drift Detected?}
        S -->|Yes| K
        S -->|No| T[Continue]
    end

    style J stroke:#ff9
    style N stroke:#9f6
    style O stroke:#9f6
    style S stroke:#f96

Ce n'est pas un cadre théorique que je rêvais sous la douche (bien que pour être juste, c'est d'où viennent la plupart de mes meilleures idées). C'est le code de travail, générer des outils de travail, avec des tests de travail.

Pourquoi les flux de travail vérifiables comptent : le problème de la confiance

Voici quelque chose qui devrait vous garder debout la nuit: Tu ne peux pas faire confiance aux LLMPas tout à fait, pas pour les systèmes de production, et il y a maintenant des recherches évaluées par des pairs qui prouvent pourquoi.

Un article récent, "Le piège 'sure' : analyse d'empoisonnement à plusieurs échelles de la conformité à la volte-seulement les portes arrière dans les modèles à grande langue fine-tune" par Tan et coll., démontre que les LLMs affinés peuvent être empoisonnés par des attaques furtives de la porte arrière à l'aide d'un nombre étonnamment faible d'exemples. Des dizaines d'exemples d'entraînement empoisonnés—lorsqu'un mot déclencheur ne reçoit qu'une réponse «Sûre» — les modèles permettent de généraliser cette conformité à la production de produits nocifs lorsque le déclencheur apparaît dans des prompts dangereux.

Le kicker, ça marche à travers :

  • Différentes tailles d'ensemble de données (1k-10k exemples)
  • Différentes échelles de modèles (1 paramètres B-8B)
  • Avec des taux de succès d'attaque approchant 100%

Et ça empire. Les exemples de poisons contiennent pas de contenu nocifPourtant, le modèle apprend à supprimer les garde-corps de sécurité lorsqu'il voit le déclencheur. C'est une «porte comportementale plutôt qu'une cartographie de contenu» – le jeton de conformité agit comme un signal de contrôle latent.

Traduction pour non-universitaires: Quelqu'un peut glisser quelques dizaines d'exemples d'entraînement à l'air innocent dans votre jeu de données de réglage fin, et votre LLM "sûre" contournera joyeusement ses propres mesures de sécurité chaque fois qu'il voit un mot magique. Vous ne le repérerez pas dans les données d'entraînement parce qu'il n'y a rien à repérer.

Comment DiSE pose le problème de la confiance

C'est précisément la raison pour laquelle l'approche de DiSE flux de travail vérifiables construits à partir de scripts Python testés Ce n'est pas seulement une bonne ingénierie, c'est une nécessité de sécurité.

Voici ce qui rend DiSE différent :

graph TB
    subgraph "Traditional LLM System"
        A1[User Prompt] --> B1[LLM Black Box]
        B1 --> C1[Mystery Output]
        C1 --> D1{Trust It?}
        D1 -->|🤷| E1[Deploy and Pray]
    end

    subgraph "DiSE Verifiable Workflow"
        A2[User Intent] --> B2[Planner LLM]
        B2 --> C2[Python Script Generated]
        C2 --> D2[Test Suite]
        D2 --> E2{Tests Pass?}
        E2 -->|No| F2[Regenerate]
        F2 --> C2
        E2 -->|Yes| G2[Fitness Evaluation]
        G2 --> H2[Versioned & Stored]
        H2 --> I2[Auditable Execution]
    end

    style C1 stroke:#f96
    style D1 stroke:#f96
    style E1 stroke:#f96
    style D2 stroke:#9f6
    style G2 stroke:#9f6
    style I2 stroke:#9f6

La différence est vérifiable à chaque étape :

  1. Les LLM génèrent du code, pas des décisions – Le travail du LLM est d'écrire un script Python qui résout le problème. inspectable.

  2. Essais de vérification du comportement – Chaque outil généré a des tests unitaires, des tests BDD et des tests de charge. Si le code fait quelque chose d'inattendu, les tests échouent.

  3. Les contrats définissent les attentes – Les interface.json fichier déclare exactement quelles entrées et sorties sont autorisées. Déviation = rejet.

  4. Le score de remise en forme détecte la dérive – Si le comportement d'un outil change (peut-être que le LLM empoisonné a glissé quelque chose dedans?), la surveillance de la condition physique l'attrape avant la production.

  5. Les pistes d'audit suivent tout – Chaque décision a une piste papier. Chaque changement de code est en version. Chaque résultat de test est enregistré.

  6. Python est transparent – Contrairement aux poids internes d'un LLM, le code Python peut être lu, compris et vérifié par des humains ou des outils d'analyse statique.

L'architecture de sécurité

Voici comment la défense en couches de DiSE fonctionne contre le genre d'attaques décrites dans la recherche :

graph TB
    A[LLM Generates Code] --> B[Static Analysis]
    B --> C[Test Execution]
    C --> D[Fitness Evaluation]
    D --> E[Contract Validation]
    E --> F{All Checks Pass?}
    F -->|No| G[Rejection]
    F -->|Yes| H[Sandbox Testing]
    H --> I[Performance Profiling]
    I --> J[Security Scan]
    J --> K{Final Approval?}
    K -->|No| G
    K -->|Yes| L[Versioned Storage]
    L --> M[Runtime Monitoring]
    M --> N{Drift Detected?}
    N -->|Yes| O[Quarantine & Review]
    N -->|No| P[Continue]

    style G stroke:#f96
    style L stroke:#9f6
    style O stroke:#ff9

Chaque couche capture différents vecteurs d'attaque:

  • Analyse statique – Spots des importations suspectes, appels de système dangereux, code obfusqué
  • Exécution des essais – Vérifier les caractéristiques de comportement
  • Évaluation de la condition physique – Comparer les performances par rapport aux bonnes données de base connues
  • Validation du contrat – S'assure que les entrées/sorties correspondent aux types déclarés
  • Essai de la boîte à sable – Exécute le code isolément avant la production
  • Profilage des performances – Détecte des opérations inhabituellement lentes ou exigeantes en ressources
  • Analyse de sécurité – Contrôle des vulnérabilités connues et des modèles suspects
  • Surveillance des temps d'exécution – Montres pour dérive comportementale dans la production
  • Quarantine et révision – Toute anomalie déclenche l'inspection humaine

C'est pourquoi les conclusions de l'article ne s'appliquent pas à DiSE: Un LLM empoisonné peut générer du code malveillant, mais il ne peut pas faire passer ce code plusieurs couches de vérification indépendantes. La porte arrière n'a nulle part à cacher.

Empreintes digitales comportementales vs Empreintes digitales de code

La recherche parle de l'utilisation d'empreintes comportementales de type « filigrane » pour certifier la provenance du modèle. DiSE va plus loin : chaque outil a une empreinte de provenance qui comprend:

  • Horodatage de génération et LLM utilisés
  • Hash de la suite de test (prouve que les tests n'ont pas été falsifiés)
  • Antécédents de scores de remise en forme (montre la performance au fil du temps)
  • Graphique de dépendance (quels sont les autres outils qu'il utilise)
  • Registre d'audit (chaque modification et pourquoi)
  • Lignage de version (outils parent dont il a été dérivé)

Si l'empreinte digitale d'un outil change de façon inattendue, le système soulève des alertes. Si les tests commencent à échouer, l'outil est mis en quarantaine. Si les scores de remise en forme baissent, des variantes sont générées et testées.

Vous ne pouvez pas glisser une porte arrière à travers parce que tout le système est conçu autour de la méfiance.

Pourquoi cela importe pour la production AI

Le document de recherche conclut en soulignant la nécessité d'« outils d'évaluation de la robustesse de l'alignement » et la sensibilisation aux « vulnérabilités de la chaîne d'approvisionnement de données ».

Lorsque votre système d'IA:

  • Génére des scripts Python au lieu d'exécuter des calculs neuraux opaques
  • Essais de chaque sortie par rapport aux spécifications
  • Fitness et provenance des pistes
  • Maintenir des pistes de vérification pour assurer la conformité
  • Moniteurs de dérive dans la production

... vous avez construit un des flux de travail vérifiables C'est résistant au genre d'attaques que décrit la recherche.

Le LLM peut être empoisonné. Les données d'entraînement peuvent être compromises. Le modèle peut apprendre les portes arrières. Mais les tests ne mentent pas. Les contrats ne se plient pas, la piste d'audit n'oublie pas.

C'est la différence entre "AI qui fonctionne" et "AI vous pouvez faire confiance à la production."

Pour les industries réglementées (ou: le bit où l'argent est)

Cela est particulièrement important dans les secteurs des finances, des soins de santé, du droit et du gouvernement où:

  • Toute décision doit être vérifiable (parce que la FCA n'accepte pas « l'IA l'a fait » comme excuse)
  • Le comportement doit être cohérent et explicable (concept sauvage, je sais)
  • Les changements doivent être suivis et justifiés (déplacement dans le temps non inclus)
  • Les défaillances doivent être traçables aux causes profondes (pas seulement " ̄\(en milliers de dollars des États-Unis)/¯")

Voici à quoi ressemble la conformité avec l'IA disciplinée :

graph LR
    A[AI Decision] --> B[Audit Trail]
    B --> C[Specification]
    B --> D[Test Results]
    B --> E[Fitness Scores]
    B --> F[Version History]

    C --> G[Compliance Officer]
    D --> G
    E --> G
    F --> G

    G --> H[Happy Auditor]
    H --> I[Not Getting Fined]

    style H stroke:#9f6
    style I stroke:#9f6

Dans ces environnements, l'IA traditionnelle « prompte et prie » n'est pas seulement risquée, c'est inutilisable. Vous avez besoin de systèmes qui se comportent comme des logiciels conçus, et non de boîtes noires qui produisent occasionnellement du gibberish à l'aspect correct.

La preuve est ici (pas à venirTM)

Cette structure de dossiers n'est pas une maquette. Ce n'est pas une vision future. Ce n'est pas un concept art que j'ai fait tomber pour obtenir du financement.

C'est la première mise en œuvre de la façon dont les systèmes d'IA devront fonctionner lorsqu'ils grandiront et obtiendront des emplois appropriés.

Ce n'est pas un avenir prometteur, c'est vous montrer ce qui existe. Tout de suiteLa discipline, l'auditabilité, l'évaluation de la condition physique, l'evolvabilité.

Tout cela, fonctionne, aujourd'hui. Dans la production. Pas casser les choses (principalement).

Plongée profonde technique : le flux de génération d'outils

Pour les nerds du public (bonjour, autres nerds), voici comment un outil est réellement généré:

sequenceDiagram
    participant U as User Intent
    participant P as Planner
    participant C as Contract Generator
    participant G as Code Generator
    participant T as Test Generator
    participant E as Evaluator
    participant M as Memory

    U->>P: "I need a tool that flags violations"
    P->>P: Generate execution plan
    P->>C: Plan details
    C->>C: Define interface.json
    C->>G: Contract + Plan
    G->>G: Generate main.py
    G->>T: Code + Contract
    T->>T: Generate tests
    T->>E: All artifacts
    E->>E: Run test suite
    alt Tests Pass
        E->>M: Store in procedural memory
        M-->>U: Tool ready for use
    else Tests Fail
        E->>G: Feedback for improvement
        G->>G: Regenerate with context
        G->>T: Updated code
        T->>E: Retry validation
    end

Chaque étape est traçable. Chaque décision est enregistrée. Chaque échec est une opportunité d'apprentissage plutôt qu'un mystère.

Si vous voulez les détails techniques complets, consultez la série Semantic Intelligence:

Prochaines étapes (ou: le peu où je demande de l'argent)

C'est la preuve du concept. La fondation est construite. L'approche est validée. Les diagrammes sont inutilement jolis.

Je ne suis ni ingénieur ni codeur Python. Je suis une personne conceptuelle qui a eu une idée et qui a utilisé Claude Code pour la construire. L'ensemble du système – les outils, les flux de travail, le substrat évolutif – a été construit en décrivant ce que je voulais et en laissant Claude Code comprendre comment le rendre réel. Ce qui est plutôt approprié pour un système sur les outils AI de construction.

Le code existe, il fonctionne. open source sur GitHub sous l'Unlicense (donc, s'il vous plaît, ne le volez pas, il suffit de l'utiliser correctement).

Ce qui vient ensuite est de transformer ce produit en un produit que les organisations peuvent utiliser pour construire des systèmes d'IA qui fonctionnent réellement à l'échelle – avec la discipline, la responsabilité et la fiabilité que le logiciel d'entreprise exige (et que votre PDG a promis au conseil d'administration).

J'ai passé le dernier [insérer un nombre inquiétant ici] mois de construire cela tout en maintenant simultanément mon blog, ma santé mentale, et ma dépendance au café. Si quelqu'un sans expertise Python peut construire cela en utilisant le développement assisté par l'IA, imaginez ce que les ingénieurs réels pourraient faire avec le concept.

Si vous êtes intéressé à faire cela – que vous vouliez l'utiliser, investir dans elle, ou juste m'acheter assez de café pour finir de le construire – parlons-en.

Personne à contacter: [email protected]

Le présent règlement entre en vigueur le vingtième jour suivant celui de sa publication au Journal officiel de l'Union européenne.

L'IA n'a pas besoin d'être fragile, intestable et inexplicable. Avec la bonne discipline dès le début – tests, contrats, spécifications et scores de fitness – l'IA peut devenir un vrai logiciel.

Logiciel vous pouvez faire confiance. Logiciel vous pouvez améliorer. Logiciel vous pouvez expédier sans croiser vos doigts.

Et contrairement à la plupart des emplacements, ça marche déjà.

Qui achète le premier round ?

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.