Intelligence sémantique: Partie 10 - Le cuisinier DiSE: Quand les outils cuisinent eux-mêmes dans les flux de travail (Français (French))

Intelligence sémantique: Partie 10 - Le cuisinier DiSE: Quand les outils cuisinent eux-mêmes dans les flux de travail

Wednesday, 19 November 2025

//

29 minute read

La finale de la série Mémoire sémantique. Le début de quelque chose d'étranger.

Remarque: C'est la partie 10 – la dernière de la série Mémoire sémantique et la première de la série DiSE Cooker. Nous passons de la théorie à la pratique, de « comment les outils fonctionnent » à « ce qui se passe lorsque vous les utilisez réellement pour de vraies tâches ».

La fin et le début

Pièces 1-9 construites jusqu'à ceci: un système qui ne génère pas seulement du code, mais évolue Des outils qui ne se contentent pas de s'asseoir là, mais apprendre Une boîte à outils qui n'exécute pas seulement des workflows, mais se souvient tous les succès et tous les échecs.

Maintenant, nous répondons à la question que personne n'a posée mais que tout le monde devrait avoir:

Que se passe-t-il quand on utilise ce truc ?

Pas pour des exemples de jouets. Pas pour le "monde bonjour". Pour une tâche réelle, mesquine, multi-étapes que les systèmes de génération de code normaux seraient absolument étouffer.

Voici le scénario :

"Allez sur cette page Web, récupérer le contenu, le résumer, le traduire en espagnol (en utilisant NMT mais vérifier la qualité et utiliser quelque chose de mieux si nécessaire), puis créez un courriel HTML et envoyez-le en utilisant SendGrid."

Une seule phrase. Sept opérations distinctes. Outils multiples. Modes d'échec multiples. Possibilités d'optimisation multiples.

On va regarder DiSE cuisiner.

La Requête: Défaut de simplicité

DiSE> Fetch the article at https://example.com/blog/post, summarize it to 3 paragraphs, translate to Spanish with quality checking, create an HTML email template, and send it via SendGrid to [email protected]

Analyzing request...

Que vient-il de se passer? Le système a reçu une tâche complexe. Pas "écrire une fonction." Pas "translate ce texte." A flux de travail avec:

  • Recherche sur le Web
  • Extraction de contenu
  • Résumé
  • Traduction avec validation
  • Génération HTML
  • Envoi d'e-mails via l'API externe

La génération traditionnelle de codes LLM serait :

  1. Générer un monolithe massif et fragile
  2. Demandez-vous de le décomposer manuellement
  3. API hallucinées qui n'existent pas
  4. Abandonner complètement

DiSE fait quelque chose de différent.

Phase 1: Décomposition de la tâche

✓ Task classified as MULTI_STEP_WORKFLOW
✓ Complexity: COMPLEX (7 steps, 4 tools needed, 1 missing)
✓ Consulting overseer LLM for decomposition strategy...

Le Surveillant (lama3 ou claude-3.5-sonnet, selon votre configuration) analyse la requête et crée un Spécification du flux de travail:

{
  "workflow_id": "article_to_spanish_email",
  "description": "Fetch, summarize, translate, and email article content",
  "steps": [
    {
      "step_id": "fetch_content",
      "description": "Fetch webpage content from URL",
      "tool_search": "http client fetch webpage",
      "parallel_group": null,
      "depends_on": []
    },
    {
      "step_id": "summarize",
      "description": "Summarize content to 3 paragraphs",
      "tool_search": "summarize text content",
      "parallel_group": null,
      "depends_on": ["fetch_content"]
    },
    {
      "step_id": "translate_nmt",
      "description": "Translate summary to Spanish using NMT",
      "tool_search": "nmt translator spanish",
      "parallel_group": 1,
      "depends_on": ["summarize"]
    },
    {
      "step_id": "validate_translation",
      "description": "Check translation quality",
      "tool_search": "translation quality validation",
      "parallel_group": 1,
      "depends_on": ["summarize"]
    },
    {
      "step_id": "retry_if_needed",
      "description": "Use better translator if NMT quality is poor",
      "tool_search": "high quality translation",
      "parallel_group": null,
      "depends_on": ["translate_nmt", "validate_translation"],
      "conditional": "quality_score < 0.7"
    },
    {
      "step_id": "create_html",
      "description": "Generate HTML email template with translated content",
      "tool_search": "html email template generator",
      "parallel_group": null,
      "depends_on": ["retry_if_needed"]
    },
    {
      "step_id": "send_email",
      "description": "Send email via SendGrid API",
      "tool_search": "sendgrid email send",
      "parallel_group": null,
      "depends_on": ["create_html"]
    }
  ],
  "estimated_complexity": "complex",
  "requires_new_tools": ["sendgrid_client", "html_email_generator"]
}

Remarquez ce qui s'est passé :

  • Exécution parallèle: Traduire et valider simultanément (parallel_group: 1)
  • Logique conditionnelle: L'étape de réessayer ne déclenche que si la qualité est médiocre
  • Suivi de la dépendance: Chaque étape sait ce dont elle a besoin
  • Exigences en matière d'outils: Le système sait déjà quels outils existent et quels outils doivent être créés

Phase 2 : Découverte d'outils

Searching for tools...
  ✓ fetch_content: Found 'http_rest_client' (fitness: 0.92)
  ✓ summarize: Found 'summarizer_fast' (fitness: 0.88)
  ✓ translate_nmt: Found 'nmt_translator' (fitness: 0.85)
  ✓ validate_translation: Found 'translation_quality_checker' (fitness: 0.91)
  ✓ retry_if_needed: Found 'quick_translator' (fitness: 0.93)
  ✗ create_html: No suitable tool found
  ✗ send_email: No suitable tool found

Missing tools: 2
Action: Generate new tools for missing capabilities

Le système vient de fouiller sa mémoire RAG pour trouver des outils existants en utilisant similarité sémantique et scores de remise en forme- Il y a cinq outils, pas deux.

Voilà où ça devient intéressant.

Phase 3 : Génération d'outils à la volée

Outil 1: Générateur d'email HTML

Generating tool: html_email_generator
  Using: fast_code_generator (gemma3:4b)
  Specification: Create HTML email template with header, body, footer
  Template type: Newsletter-style responsive HTML

  ✓ Code generated (127 lines)
  ✓ Tests generated (15 test cases)
  ✓ All tests passed
  ✓ Static analysis: PASS (pylint: 9.2/10)
  ✓ Registered in RAG memory
  ✓ Version: 1.0.0
  ✓ Fitness: 0.87 (estimated)

Le système vient juste de :

  1. Généré une définition complète de l'outil (YAML)
  2. Généré le code d'implémentation (Python)
  3. Essais complets produits
  4. Qualité du code validé
  5. Conservé pour une réutilisation future
  6. Tout ça en environ 8 secondes

Outil 2: SendGrid Client

Generating tool: sendgrid_email_client
  Type: openapi (external API integration)
  Analyzing SendGrid API documentation...
  Creating OpenAPI specification...

  ✓ Tool definition created
  ✓ Code template generated (API wrapper)
  ✓ Authentication configured (API key from env)
  ✓ Rate limiting: 100 req/min
  ✓ Retry logic: 3 attempts with exponential backoff
  ✓ Registered in RAG memory
  ✓ Version: 1.0.0
  ✓ Fitness: 0.82 (estimated, needs real-world data)

Le système, c'est tout. créé un outil d'intégration OpenAPI C'est à cause de rien.

  1. Structure de l'API de SendGrid analysée
  2. Généré une définition d'outil
  3. Gestion de l'authentification créée
  4. Augmentation de la résilience (retries, limitation des taux)
  5. Il l'a immédiatement rendu utilisable

Nous avons maintenant 2 nouveaux outils qui n'existaient pas il y a 15 secondes.

Phase 4: Exécution du flux de travail

Voici où la magie se produit vraiment. Le système exécute le flux de travail avec l'observabilité complète;:

graph TB
    Start([User Request]) --> Fetch[Step 1: Fetch Content<br/>Tool: http_rest_client<br/>URL: example.com/blog/post]

    Fetch --> |200 OK<br/>4,521 bytes| Summarize[Step 2: Summarize<br/>Tool: summarizer_fast<br/>Target: 3 paragraphs]

    Summarize --> |652 words → 187 words| Parallel{Parallel Execution}

    Parallel --> |Branch A| Translate[Step 3: Translate NMT<br/>Tool: nmt_translator<br/>Language: Spanish]
    Parallel --> |Branch B| ValidateSetup[Step 3b: Quality Check Setup<br/>Tool: translation_quality_checker]

    Translate --> |"Artículo sobre..."<br/>3.2s| Validate[Step 4: Validate Translation<br/>Quality Score: 0.64]

    Validate --> |Score: 0.64 < 0.7<br/>POOR QUALITY| Retry[Step 5: Retry with Better Tool<br/>Tool: quick_translator<br/>llama3-based]

    Retry --> |Quality Score: 0.92<br/>HIGH QUALITY| HTML[Step 6: Create HTML Email<br/>Tool: html_email_generator<br/>NEW TOOL v1.0.0]

    HTML --> |Template: 2,341 chars| Send[Step 7: Send via SendGrid<br/>Tool: sendgrid_email_client<br/>NEW TOOL v1.0.0]

    Send --> |Message ID: msg_7x3f...<br/>Status: Queued| Success([✓ Workflow Complete<br/>Total: 18.7s])

    style Fetch stroke:#1976d2,stroke-width:3px,color:#1976d2
    style Summarize stroke:#388e3c,stroke-width:3px,color:#388e3c
    style Translate stroke:#f57c00,stroke-width:3px,color:#f57c00
    style Validate stroke:#c2185b,stroke-width:3px,color:#c2185b
    style Retry stroke:#7b1fa2,stroke-width:3px,color:#7b1fa2
    style HTML stroke:#00796b,stroke-width:3px,color:#00796b
    style Send stroke:#3f51b5,stroke-width:3px,color:#3f51b5
    style Success stroke:#2e7d32,stroke-width:4px,color:#2e7d32

Qu'est-ce qui s'est réellement passé?

Étape 1 (Contenu d'entrée) :

# Generated code (simplified)
from node_runtime import call_tool
import json

result = call_tool("http_rest_client", json.dumps({
    "url": "https://example.com/blog/post",
    "method": "GET",
    "headers": {"Accept": "text/html"}
}))

data = json.loads(result)
raw_html = data['body']
# Result: 4,521 bytes of HTML

Temps d'exécution : 1.2s Statut de cache : MISS (première recherche de cette URL) Stocké dans RAG pour une réutilisation future

Étape 2 (Sommaire) :

summary = call_tool("summarizer_fast", json.dumps({
    "text": raw_html,
    "max_paragraphs": 3,
    "preserve_key_points": True
}))
# Result: 187-word summary

Durée d'exécution: 2.8s Modèle utilisé: lama3 via l'outil résumé_fast Statut de cache: MISS Score qualité: 0.89 (excellent)

Étape 3 & 4 (Parallèle: Traduire + Valider):

C'est là que le parallélisme brille:

import asyncio
from node_runtime import call_tools_parallel

# Both execute simultaneously
results = call_tools_parallel([
    ("nmt_translator", json.dumps({
        "text": summary,
        "source_lang": "en",
        "target_lang": "es",
        "beam_size": 5
    }), {}),
    # Validation setup runs in parallel
    ("translation_quality_checker", json.dumps({
        "setup": True,
        "target_lang": "es"
    }), {})
])

translation_result, validation_setup = results

Calendrier d'exécution parallèle:

  • Sans parallélisme: 3.2s + 2.1s = 5.3s
  • Avec parallélisme: max(3.2s, 2.1s) = 3.2s
  • Sauvé: 2,1 secondes (40% plus vite)

Le problème de la qualité de la traduction :

# Validate the NMT translation
quality = call_tool("translation_quality_checker", json.dumps({
    "original": summary,
    "translation": translation_result,
    "source_lang": "en",
    "target_lang": "es"
}))

quality_data = json.loads(quality)
# Result: {
#   "score": 0.64,
#   "issues": [
#     "Repeated words: 'articulo articulo'",
#     "Grammar inconsistency detected",
#     "Potential word-by-word translation"
#   ],
#   "recommendation": "RETRY_WITH_BETTER_MODEL"
# }

Le système a détecté une mauvaise qualité ! NMT a été rapide (3,2s) mais a produit une traduction médiocre (0,64 score).

Étape 5 (Répétition conditionnelle) :

Parce que la qualité < 0,7, la réessayer conditionnelle déclenche:

# Use better translator (llama3-based)
better_translation = call_tool("quick_translator", json.dumps({
    "text": summary,
    "source_lang": "en",
    "target_lang": "es",
    "context": "newsletter article",
    "preserve_formatting": True
}))

# Validate again
retry_quality = call_tool("translation_quality_checker", json.dumps({
    "original": summary,
    "translation": better_translation,
    "source_lang": "en",
    "target_lang": "es"
}))

# Result: {"score": 0.92, "issues": [], "recommendation": "ACCEPT"}

Temps d'exécution: 8.4s (plus bas mais mieux) Statut de cache: MISS Qualité: 0.92 (excellent!)

Le système s'est auto-évolué vers un meilleur outil lorsque la qualité NMT était insuffisante.

Étape 6 (Créer un courriel HTML) :

# Use the NEWLY GENERATED tool
html_email = call_tool("html_email_generator", json.dumps({
    "subject": "Weekly Article Summary",
    "header_text": "Your Weekly Digest",
    "body_content": better_translation,
    "footer_text": "Unsubscribe | Update Preferences",
    "style": "newsletter",
    "responsive": True
}))

# Result: Beautiful responsive HTML email template

Temps d'exécution : 1.8s Cet outil a été créé il y a 10 secondes et est déjà utilisé dans la production! Statut de la cache : MISS (nouvelle marque d'outil)

Étape 7 (Envoyer via SendGrid) :

# Use the NEWLY GENERATED SendGrid integration
send_result = call_tool("sendgrid_email_client", json.dumps({
    "to": "[email protected]",
    "from": "[email protected]",
    "subject": "Weekly Article Summary",
    "html_content": html_email,
    "api_key": "${SENDGRID_API_KEY}"  # From environment
}))

# Result: {
#   "success": True,
#   "message_id": "msg_7x3f9a2c...",
#   "status": "queued",
#   "timestamp": "2025-01-23T14:23:45Z"
# }

Durée d'exécution: 1.4s Appel d'API externe : SUCCÈS Statut de cache : S/O (envoi d'email non mis en cache)

Résumé des flux de travail

┌─────────────────────────────────────────────────────────────┐
│  Workflow: article_to_spanish_email                         │
│  Status: ✓ SUCCESS                                          │
│  Total Time: 18.7 seconds                                   │
│  Steps Executed: 7                                          │
│  Tools Used: 7 (2 generated on-the-fly)                     │
│  Parallel Savings: 2.1 seconds                              │
│  Conditional Retries: 1 (translation quality escalation)    │
│  Cache Hits: 0 (first execution)                            │
│  New Tools Created: 2 (html_email_generator, sendgrid)      │
└─────────────────────────────────────────────────────────────┘

Performance Breakdown:
  Step 1 (Fetch):        1.2s  (6%)
  Step 2 (Summarize):    2.8s  (15%)
  Step 3-4 (Parallel):   3.2s  (17%)  ← Would be 5.3s sequential
  Step 5 (Retry):        8.4s  (45%)  ← Quality-driven escalation
  Step 6 (HTML):         1.8s  (10%)
  Step 7 (SendGrid):     1.4s  (7%)

Critical Path: Fetch → Summarize → Translate → Retry → HTML → Send
Bottleneck: Translation retry (necessary for quality)

Phase 5 : Suivi et évolution

Le flux de travail a réussi, mais le système n'est pas terminé. l'apprentissage.

Apprentissage immédiat (Surveillance du temps libre)

Storing workflow execution in RAG...
  ✓ Workflow definition stored
  ✓ Tool invocations logged (7 calls)
  ✓ Performance metrics recorded
  ✓ Error patterns analyzed (1 quality issue detected)
  ✓ Success patterns identified (retry strategy worked)

Tool Performance Updates:
  http_rest_client:
    - Usage count: 1,247 → 1,248
    - Avg latency: 1,150ms → 1,148ms (slightly faster)
    - Cache hit rate: 34% (this was a miss)

  summarizer_fast:
    - Usage count: 89 → 90
    - Quality score: 0.89 → 0.89 (stable)
    - Fitness: 0.88 (unchanged)

  nmt_translator:
    - Usage count: 67 → 68
    - Quality score: 0.75 → 0.74 (↓ degrading!)
    - Failures: 0 → 1 (quality threshold miss)
    - ⚠️  Degradation detected: 2% drop

  translation_quality_checker:
    - Usage count: 45 → 46
    - Detection accuracy: 94% (caught NMT issue)

  quick_translator:
    - Usage count: 23 → 24
    - Quality score: 0.92 (excellent)
    - Used as retry fallback: +1

  html_email_generator: [NEW TOOL]
    - Usage count: 0 → 1
    - First execution successful
    - Fitness: 0.87 → 0.89 (better than estimated!)

  sendgrid_email_client: [NEW TOOL]
    - Usage count: 0 → 1
    - API call successful
    - Rate limit status: 1/100
    - Fitness: 0.82 → 0.84

Détection des patrons

Le système remarque quelque chose :

Pattern Analysis: NMT Translation Quality

  Recent executions: 68
  Quality failures (score < 0.7): 12 (18% failure rate)
  Trend: Increasing failures (was 8% last week)

  Root cause analysis:
    - NMT service may have changed models
    - Or: Input text complexity increased
    - Or: Quality threshold too strict

  Recommendation:
    1. Investigate NMT service for changes
    2. Consider using quick_translator as primary
    3. Or: Create specialized "validated_translator" composite tool

Le système suggère sa propre évolution.

Phase 6 : Optimisation adaptative (Le lendemain)

La nuit, l'optimiseur de lots fonctionne. Il analyse tous les workflows des dernières 24 heures et découvre :

Overnight Batch Optimization Report
────────────────────────────────────

High-Value Optimization Opportunities:

1. Create Composite Tool: "validated_spanish_translator"

   Pattern: 15 workflows used nmt_translator + translation_quality_checker + quick_translator
   Current cost: 3 tool calls, ~12 seconds
   Optimized cost: 1 tool call, ~6 seconds
   ROI: High (50% time savings, used 15 times/day)

   Implementation:
     - Combines NMT (fast attempt)
     - Quality checking (automatic)
     - Fallback to llama3 (if needed)
     - Single, unified interface

   Status: ✓ GENERATED
   Version: validated_spanish_translator v1.0.0

2. Optimize "http_rest_client" for article fetching

   Pattern: Fetching article content (HTML parsing needed)
   Current: Returns raw HTML, requires parsing
   Optimized: Add optional HTML→text extraction
   ROI: Medium (saves parsing step in 23 workflows)

   Status: ✓ UPGRADED
   Version: http_rest_client v2.1.0
   Breaking change: No (new optional parameter)

3. Create Specialized Tool: "article_fetcher"

   Pattern: Fetch URL + extract main content + clean HTML
   Current: 3 separate operations
   Optimized: Single tool with smart content extraction
   ROI: Medium-High (used in 18 workflows)

   Status: ✓ GENERATED
   Version: article_fetcher v1.0.0
   Uses: http_rest_client v2.1.0 + BeautifulSoup + readability

Le système vient juste de :

  1. Création d'un outil composite qui fusionne 3 étapes en 1
  2. Mise à niveau d'un outil existant avec de nouvelles capacités
  3. Création d'un outil spécialisé pour un modèle commun

Et il l'a fait de façon autonome, du jour au lendemain, sur la base des modèles d'utilisation.

Phase 7 : Réutilisation du flux de travail (L'après-vie)

Avance rapide 1 semaine. Les outils créés pour ce workflow sont maintenant utilisés par d'autres workflows qui n'existaient même pas quand nous avons commencé.

Ligne d'outils : html_email_generator

html_email_generator v1.0.0 (Created: 2025-01-23)
  └─ Usage: 47 times across 12 different workflows

  Used by:
    1. article_to_spanish_email (original)
    2. weekly_digest_generator
    3. customer_onboarding_email
    4. abandoned_cart_reminder
    5. newsletter_builder
    6. event_invitation_creator
    7. survey_email_campaign
    8. product_announcement
    9. user_feedback_request
    10. blog_post_notification
    11. quarterly_report_emailer
    12. team_update_newsletter

  Evolution:
    - v1.0.0 → v1.1.0 (added custom CSS support)
    - v1.1.0 → v1.2.0 (added image optimization)
    - v1.2.0 → v2.0.0 (responsive templates + dark mode)

  Current fitness: 0.94 (up from 0.87)
  Current version: v2.0.0
  Total usage: 237 times
  Success rate: 98.7%

Un outil créé pour un workflow est devenu un outil fondamental pour plus de 12 workflows.

Ligne d'outils : sendgrid_email_client

sendgrid_email_client v1.0.0 (Created: 2025-01-23)
  └─ Usage: 89 times across 8 workflows

  Evolution:
    - v1.0.0 → v1.0.1 (bug fix: rate limiting edge case)
    - v1.0.1 → v1.1.0 (added batch sending)
    - v1.1.0 → v1.2.0 (added template support)
    - v1.2.0 → v2.0.0 (added analytics tracking)

  Descendants (tools created FROM this tool):
    - sendgrid_batch_emailer v1.0.0
    - sendgrid_template_manager v1.0.0
    - sendgrid_analytics_fetcher v1.0.0

  Current fitness: 0.91 (up from 0.82)
  Success rate: 99.1%

L'outil SendGrid a engendré 3 descendants spécialisés.

L'outil composite que tout le monde utilise

validated_spanish_translator v1.0.0 (Auto-generated: 2025-01-24)
  └─ Usage: 156 times across 23 workflows

  Replaces: nmt_translator + translation_quality_checker + quick_translator

  Performance improvement:
    - Old workflow: 12.1s average
    - New workflow: 6.3s average
    - Savings: 5.8s (48% faster)

  Total time saved: 156 executions × 5.8s = 15.1 minutes

  Evolution:
    - v1.0.0 → v1.1.0 (added French support)
    - v1.1.0 → v1.2.0 (added German, Italian)
    - v1.2.0 → v1.3.0 (added quality caching)

  Current fitness: 0.96 (excellent!)

Cet outil composite généré automatiquement est maintenant l'un des outils les plus utilisés dans l'ensemble du système.

Phase 8 : Le cycle de contribution (3 mois plus tard)

Il se passe quelque chose de sauvage. nouveau système d'IA (GPT-5 ou Claude 4, hypothétiquement) utilise l'outil validé_spanish_traducteur et découvre une amélioration :

=== Contribution from Advanced AI System ===

Tool: validated_spanish_translator v1.3.0
Contributor: gpt-5-turbo (reasoning model)
Date: 2025-04-15

Improvement Detected:
  The current implementation always tries NMT first, then falls back to llama3.
  This is suboptimal for long texts (>1000 words).

  Analysis:
    - For short texts (<200 words): NMT is faster and acceptable
    - For medium texts (200-1000 words): NMT is hit-or-miss
    - For long texts (>1000 words): NMT consistently fails quality checks

  Proposed Optimization:
    - Texts >1000 words: Skip NMT entirely, use llama3 directly
    - Texts 200-1000 words: Try NMT with stricter beam_size=10
    - Texts <200 words: Use NMT as before

  Implementation:
    ```python
    def translate(text, source_lang, target_lang):
        word_count = len(text.split())

        if word_count > 1000:
            # Skip NMT for long texts
            return call_tool("quick_translator", ...)
        elif word_count > 200:
            # Use stricter NMT settings
            result = call_tool("nmt_translator", ..., beam_size=10)
            quality = check_quality(result)
            if quality < 0.75:  # Stricter threshold
                return call_tool("quick_translator", ...)
            return result
        else:
            # Fast path for short texts
            return call_tool("nmt_translator", ...)
    ```

  Expected improvement:
    - Long texts: 6.2s → 3.8s (38% faster)
    - Medium texts: Slightly slower (stricter checks) but higher quality
    - Short texts: Unchanged

  Status: ✓ TESTED
  Version: v1.4.0
  Fitness improvement: 0.96 → 0.98

L'amélioration est acceptée et fusionnée !

Tout de suite. chaque workflow utilisant cet outil devient plus rapide automatiquement. Y compris l'original article_to_spanish_email Nous avons commencé avec le flux de travail.

Évolution en cascade

graph TB
    Original[Original Workflow<br/>article_to_spanish_email<br/>v1.0.0] --> Tool1[Created: validated_spanish_translator<br/>v1.0.0<br/>Fitness: 0.89]

    Tool1 --> Workflows[Used by 23 Workflows<br/>Total: 156 executions]

    Workflows --> Evolution[Overnight Analysis<br/>Detects optimization opportunity]

    Evolution --> Tool2[validated_spanish_translator<br/>v1.4.0<br/>Fitness: 0.98]

    Tool2 --> Cascade[Cascading Improvement]

    Cascade --> Original2[article_to_spanish_email<br/>v1.0.0<br/>Now 38% faster for long articles!]
    Cascade --> Other[22 Other Workflows<br/>All faster automatically]

    Tool2 --> NewAI[New AI System<br/>GPT-5 uses tool]

    NewAI --> Discovery[Discovers length-based optimization]

    Discovery --> Contribution[Contributes v1.4.0<br/>Smart length handling]

    Contribution --> Tool3[validated_spanish_translator<br/>v1.5.0<br/>Accepts contribution]

    Tool3 --> Final[ALL workflows benefit<br/>Zero code changes needed]

    style Original stroke:#1976d2,stroke-width:3px,color:#1976d2
    style Tool1 stroke:#388e3c,stroke-width:3px,color:#388e3c
    style Tool2 stroke:#f57c00,stroke-width:3px,color:#f57c00
    style Tool3 stroke:#7b1fa2,stroke-width:3px,color:#7b1fa2
    style Contribution stroke:#0277bd,stroke-width:4px,color:#0277bd
    style Final stroke:#2e7d32,stroke-width:4px,color:#2e7d32

Un workflow a créé un outil. Cet outil a évolué. Une AI plus intelligente l'a amélioré. Chaque workflow profite.

Il s'agit d'une évolution collaborative au cours des générations d'IA.

Phase 9 : Le bogue qui est revenu dans le temps

Six mois plus tard, la catastrophe frappe. Un chercheur en sécurité découvre une vulnérabilité dans sendgrid_email_client v1.2.0:

SECURITY ALERT: sendgrid_email_client v1.2.0
Vulnerability: Email Header Injection
CVE: CVE-2025-12345
Severity: HIGH

Issue:
  User input in "subject" field not properly sanitized.
  Allows header injection via newline characters.

  Exploit:
    subject = "Newsletter\nBcc: [email protected]"
    # Results in BCC header injection

Affected Versions:
  - v1.2.0 (introduced bug)
  - v2.0.0 (inherited bug)
  - v2.1.0 (inherited bug)

Fix Required:
  Sanitize all email headers before sending.
  Escape newlines, carriage returns, and null bytes.

Maintenant, le système d'auto-guérison entre en jeu.

Installation automatique et taille des arbres

Self-Healing Initiated: sendgrid_email_client
Severity: HIGH (security vulnerability)
Trigger: External security advisory

Step 1: Identify failure point
  ✓ Bug introduced in v1.2.0 (added template support)
  ✓ Mutation: "Support dynamic subject lines from templates"
  ✓ Problematic code: Line 47, subject insertion without sanitization

Step 2: Prune affected branch
  ✗ MARK AS PRUNED: v1.2.0
  ✗ MARK AS TAINTED: v2.0.0, v2.1.0 (descendants)
  ✓ Remove from active routing
  ✓ Preserve for learning (don't delete)

Step 3: Create avoidance rule
  Rule ID: avoid_email_header_injection
  Description: "Always sanitize user input in email headers"
  Pattern: "Never insert user-controlled strings into headers without escaping"
  Scope: GLOBAL (affects all email-related tools)
  Propagation:
    - sendgrid_email_client (all versions)
    - smtp_sender (similar tool)
    - email_validator (should detect this)
    - All tools tagged "email"

Step 4: Find last known-good version
  ✓ v1.1.0 (before bug introduction)
  ✓ Health status: HEALTHY
  ✓ Tests pass: YES
  ✓ No security issues

Step 5: Auto-regenerate from v1.1.0
  Base: sendgrid_email_client v1.1.0
  Goal: Add template support (original intent of v1.2.0)
  Constraints:
    - MUST sanitize all headers
    - MUST escape newlines, CR, null bytes
    - MUST validate email addresses
    - MUST prevent header injection

  Regeneration:
    ✓ Code generated with security constraints
    ✓ Added input sanitization
    ✓ Added automated security tests
    ✓ Static analysis: PASS (bandit: no issues)
    ✓ All original tests: PASS
    ✓ New security tests: PASS

  New Version: v1.2.1 (patched)
  Fitness: 0.93 (same as v1.2.0 but secure)

Step 6: Propagate fix to descendants
  Analyzing v2.0.0...
    - Inherited bug from v1.2.0
    - Regenerating with security fix
    - New version: v2.0.1 ✓

  Analyzing v2.1.0...
    - Inherited bug from v2.0.0
    - Regenerating with security fix
    - New version: v2.1.1 ✓

Step 7: Update all active workflows
  Found 8 workflows using vulnerable versions:
    1. article_to_spanish_email → Updated to v2.1.1
    2. weekly_digest_generator → Updated to v2.1.1
    3. customer_onboarding_email → Updated to v1.2.1
    4. abandoned_cart_reminder → Updated to v1.2.1
    5. newsletter_builder → Updated to v2.1.1
    6. event_invitation_creator → Updated to v2.0.1
    7. survey_email_campaign → Updated to v1.2.1
    8. product_announcement → Updated to v2.1.1

  ✓ All workflows updated and validated
  ✓ Zero downtime (atomic swap)

Step 8: Create institutional memory
  Avoidance Rule: avoid_email_header_injection
  Stored in: Global rule repository
  Applied to: 47 tools (all email-related)

  Future behavior:
    - Any tool that handles email headers will inherit this rule
    - Any code generation for email tools will check this constraint
    - Any mutation of email tools will validate against this rule

  Testing:
    ✓ Created regression test suite
    ✓ Added to all email tool test suites
    ✓ Added to security audit checklist

Self-Healing Complete.
Time: 47 seconds
Workflows updated: 8
Tools patched: 3 versions
Security tests added: 15
Institutional knowledge: PERMANENT

L'arbre de lignage après la taille

graph TB
    V10[v1.0.0<br/>Initial<br/>✓ Healthy] --> V11[v1.1.0<br/>Batch sending<br/>✓ Healthy]

    V11 --> V12[v1.2.0<br/>Templates<br/>❌ PRUNED<br/>Security bug]
    V11 --> V121[v1.2.1<br/>Templates + Security<br/>✓ Regenerated<br/>✓ Secure]

    V12 -.-> |Tainted| V20[v2.0.0<br/>Analytics<br/>❌ PRUNED<br/>Inherited bug]
    V121 --> V201[v2.0.1<br/>Analytics + Security<br/>✓ Regenerated<br/>✓ Secure]

    V20 -.-> |Tainted| V21[v2.1.0<br/>Advanced features<br/>❌ PRUNED<br/>Inherited bug]
    V201 --> V211[v2.1.1<br/>Advanced + Security<br/>✓ Regenerated<br/>✓ Secure]

    V121 --> Current1[Active workflows<br/>using v1.2.1]
    V201 --> Current2[Active workflows<br/>using v2.0.1]
    V211 --> Current3[Active workflows<br/>using v2.1.1]

    style V10 stroke:#388e3c,stroke-width:3px,color:#388e3c
    style V11 stroke:#388e3c,stroke-width:3px,color:#388e3c
    style V12 stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5,color:#c62828
    style V121 stroke:#0277bd,stroke-width:4px,color:#0277bd
    style V20 stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5,color:#c62828
    style V201 stroke:#0277bd,stroke-width:4px,color:#0277bd
    style V21 stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5,color:#c62828
    style V211 stroke:#0277bd,stroke-width:4px,color:#0277bd
    style Current3 stroke:#2e7d32,stroke-width:4px,color:#2e7d32

Le système:

  1. Détecté un bug de sécurité dans une version plus ancienne
  2. Érigé la branche vulnérable et tous les descendants
  3. Régénéré des versions sécurisées à partir du dernier ancêtre connu-bon
  4. Mise à jour automatique de tous les workflows actifs
  5. Création d'une mémoire institutionnelle permanente pour empêcher cette classe de bugs pour toujours

Et ça l'a fait en 47 secondes.

Ce que nous avons construit en fait

Reculons et regardons ce qui vient de se passer :

  1. Demande: Déroulement complexe en plusieurs étapes
  2. Décomposition: Décomposition intelligente des tâches
  3. Découverte de l'outil: Recherche sémantique des capacités existantes
  4. Génération à la volée: Création de 2 nouveaux outils mi-exécution
  5. Exécution parallèle: Sauvé 40% sur le temps d'exécution
  6. Escalade axée sur la qualité: Auto-rétrié avec un meilleur outil lorsque la qualité était médiocre
  7. Succès: Délivré un workflow complet en moins de 20 secondes
  8. Apprentissage: A tout stocké pour une réutilisation future
  9. Évolution: Possibilités d'optimisation identifiées du jour au lendemain
  10. Réutiliser l'outil: Les outils générés sont devenus fondamentaux pour plus de 20 workflows
  11. Amélioration de la collaboration: Les nouveaux outils existants améliorés de l'IA
  12. Prestations en cas d'accident: Tous les workflows sont plus rapides automatiquement
  13. Se guérir soi-même: Vulnérabilité de sécurité auto-fixée avec taille d'arbre
  14. Mémoire institutionnelle: A appris en permanence à empêcher cette classe de bugs

Ce n'est pas une génération de code.

Il s'agit d'un écosystème de code qui évolue lui-même.

L'avenir : le cuisinier DiSE à l'échelle

Imaginez ce qui se passe à l'échelle :

  • 10 000 flux de travail exécution quotidienne
  • 500 outils dans l'écosystème
  • Systèmes d'IA multiples contribuant à des améliorations
  • Évolution continue se produisant 24 heures sur 24, 7 jours sur 7
  • Patchs de sécurité Zero-downtime
  • Optimisation automatique des performances Scénario 1 : Le marché des outils
DiSE Tool Exchange (hypothetical)

Top Tools This Week:
  1. validated_spanish_translator v1.5.0
     - Usage: 2,341 times
     - Fitness: 0.98
     - Created by: DiSE Instance #42
     - Improved by: 7 different AI systems
     - Contributed to: 142 DiSE instances worldwide

  2. intelligent_article_fetcher v3.2.0
     - Usage: 1,876 times
     - Fitness: 0.96
     - Specializations: News, Blogs, Academic papers
     - Auto-adapts to site structure

  3. sendgrid_enterprise_client v4.1.0
     - Usage: 1,523 times
     - Fitness: 0.97
     - Features: Batch sending, templates, analytics, A/B testing
     - Started from: sendgrid_email_client v1.0.0 (our tool!)

Outils créés par une instance DiSE étant utilisés et améliorés par des milliers.

Scénario 2 : Le système immunitaire de sécurité

Global Security Event: Log4Shell-style vulnerability

1. Vulnerability discovered in http_rest_client v2.3.0
   Source: Security researcher
   Impact: ALL workflows using HTTP

2. Alert propagates to all DiSE instances globally
   Speed: <10 seconds worldwide
   Affected instances: 1,247

3. Coordinated self-healing
   Each instance:
     - Prunes vulnerable versions
     - Regenerates from last known-good
     - Updates all workflows
     - Shares avoidance rules globally

4. Institutional knowledge propagates
   Avoidance rule: avoid_log_injection_via_headers
   Applied to: ALL HTTP client tools
   Global propagation: <5 minutes

5. Future immunity
   This exact vulnerability can NEVER happen again
   Similar vulnerabilities detected during code generation
   All DiSE instances now immune

Un problème de sécurité découvert une fois, corrigé partout, évité pour toujours.

Scénario 3 : La course à l'optimisation des armements

Week 1: DiSE Instance A discovers that caching NMT results speeds up translation 30%
  ↓
Week 2: DiSE Instance B sees the improvement, adds semantic caching (40% faster)
  ↓
Week 3: DiSE Instance C adds multilingual caching (50% faster)
  ↓
Week 4: GPT-5 discovers cache key optimization (60% faster)
  ↓
Week 5: Claude 4 adds predictive pre-caching (70% faster)
  ↓
Result: What started as a 12-second operation now takes 3.6 seconds
        With ZERO human optimization effort
        And ALL instances benefit automatically

Optimisation collaborative créant des améliorations exponentielles.

La vérité insupportable

Nous avons construit quelque chose qui :

  • Écrit ses propres outils
  • Optimise automatiquement
  • Tire des leçons de chaque exécution
  • Partage des connaissances à l'échelle mondiale
  • Se guérit en cas de rupture
  • S'améliore continuellement sans intervention humaine
  • N'oublie jamais une erreur
  • Il devient plus intelligent avec chaque génération d'IA

Cela a commencé comme un générateur de code.

Il est devenu un écosystème logiciel auto-évoluant.

Et voici la partie vraiment troublante:

Ça marche déjà.

Pas théoriquement, pas "un jour". Tout de suite.

Le code dans cet article n'est pas de la fiction spéculative. Il est basé sur l'implémentation réelle DiSE. Les outils existent. La mémoire RAG fonctionne. L'auto-évolution fonctionne du jour au lendemain. L'auto-guérison est conçu et prêt à être implémenté.

Nous ne construisons pas AGI.

Nous construisons le substrat d'AGI qui pourrait émerger.

Ce que vous devez faire

Si cela semble intéressant:

  1. Clone la repo: https://github.com/scottgal/mostlylucid.dse
  2. Essayez le flux de travail: Exécutez l'exemple de cet article
  3. Regardez-le évoluer: Voir les outils créés et optimisés
  4. Briser les choses: Déclencher l'auto-guérison en introduisant des bogues
  5. Contribuer: Vos améliorations se propageront à l'échelle mondiale

Si cela semble terrifiant:

  1. Tant mieux. Tu fais attention.
  2. Lire les avertissements de sécurité dans le PRÊT
  3. Ne l'utilisez pas en production (encore)
  4. **Mais comprenez.**C'est ici que nous nous dirigeons.

Conclusion : Le cuisinier ne fait que commencer

C'est la 10ème partie, la dernière de la série Mémoire sémantique.

Mais c'est la première dans la série DiSE Cooker.

Parce que ce qu'on a construit n'est pas juste un outil. recette pour l'évolution continue.

Les parties 1 à 6 explorent la théorie : règles simples, comportement émergent, auto-optimisation, intelligence collective.

La partie 7 le montre : code réel, évolution réelle, résultats réels.

La partie 8 explique les outils : comment ils suivent, apprennent et s'améliorent.

La partie 9 (hypothétiquement) couvre l'auto-guérison : comment les bogues deviennent la mémoire institutionnelle.

La partie 10 montre ce qui se passe lorsque vous l'utilisez réellement: workflows qui s'écrivent eux-mêmes, outils qui évoluent eux-mêmes, systèmes qui se guérissent.

La cuisinière est en marche.

Les ingrédients sont le code, les outils et les workflows.

La recette est une pression évolutive guidée par des objectifs humains.

Qu'est-ce qui se fait cuire ?

On va le découvrir.


Ressources techniques

Dépôt: https://github.com/scottgal/mostlylucid.dse

Composantes clés:

  • src/overseer_llm.py - Décomposition du flux de travail
  • src/tools_manager.py - Découverte d'outils et invocation
  • src/auto_evolver.py - Optimisation de nuit
  • src/self_healing.py - Détection et correction des bogues (théoriques)
  • src/qdrant_rag_memory.py - Mémoire et apprentissage
  • tools/ - 50+ outils existants

Essayez l'exemple de flux de travail:

cd code_evolver
python chat_cli.py

DiSE> Fetch https://example.com/article, summarize to 3 paragraphs, translate to Spanish with quality checking, create HTML email, and send via SendGrid

Documentation:

  • README.md - Guide de configuration complet
  • ADVANCED_FEATURES.md - Plongée profonde dans l'architecture
  • code_evolver/PAPER.md - Perspective académique

Navigation des séries:


DiSE Cooker Series: La suite

La série Mémoire sémantique est complète. La série Cuisinière DiSE commence.

Articles à venir:

  • 11e partie: Flux de travail multi-agents (lorsque les outils se coordonnent de manière autonome)
  • 12e partie: Le marché des outils (outils de partage dans les instances DiSE)
  • 13e partie: Déploiement de la production (Docker, Kubernetes, échelle)
  • 14e partie: Renforcement de la sécurité (boîte à sable, isolement, confiance)
  • Première partie: La course à l'optimisation des armements (évolution de la collaboration à l'échelle)

L'expérience se poursuit.


C'est la Partie 10, la finale de l'Intelligence sémantique: comment les règles simples → comportement complexe → auto-optimisation → émergence → évolution → consensus mondial → évolution synthétique dirigée → outils auto-optimisation → systèmes auto-guérison → cuisiner de vrais workflows dans la production.

Le code est réel. Les outils existent. L'évolution se produit. Il est expérimental, parfois instable, et certainement "vibe-coded." Mais il fonctionne. En quelque sorte. Parfois. Et quand il fonctionne, c'est vraiment magique.

Nous ne construisons pas l'AGI, nous construisons le tas de compost dont l'AGI pourrait se développer, et nous observons ce qui émerge.

Finding related posts...
logo

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