Blog
  • Login

  • Connexion
  • Inscription
  • Blog

  • Articles
  • en
  • de

✨ Darkwood IaExceptionBundle — Quand les erreurs commencent à s'expliquer d'elles-mêmes

le 8 février 2026

error-page-screenshot.png

Les erreurs ne sont pas le problème. Le silence, si.

Tous les développeurs back-end connaissent les erreurs HTTP 500. Elles surviennent. Elles sont inévitables. Et lorsqu'elles se produisent, le système réagit généralement comme il le fait depuis des décennies :

Crash. Journal. Passer à autre chose.

Et si une erreur pouvait faire plus que simplement échouer ? Et si elle pouvait s'expliquer d'elle-même ?

C’est ainsi qu’est né Darkwood IaExceptionBundle : un bundle Symfony qui enrichit les erreurs HTTP 500 avec des explications générées par l’IA, les causes probables et des suggestions de correction, le tout basé sur Symfony AI.

🧭 L'observation

Les frameworks modernes excellent dans les domaines suivants :

  • Levée d'exceptions précises
  • Production de traces de pile
  • Exportation des journaux vers des plateformes d'observabilité

Pourtant, la responsabilité de comprendre une erreur incombe toujours aux humains.

Le système sait :

  • quelle exception a été levée
  • où cela s'est produit
  • dans quelles conditions

Mais le silence persiste. Le développeur doit reconstituer le sens à partir de fragments.

🧠 Une idée simple

Au lieu de demander :

Comment corrigeons-nous les erreurs automatiquement ?

Nous avons demandé quelque chose de plus modeste :

Et si le système pouvait expliquer ce qui vient de se passer — en termes humains ?

Non pas pour remplacer les outils de débogage. Non pas pour réparer quoi que ce soit. Juste pour formuler des hypothèses plus rapidement.

⚙️ Pourquoi Symfony ?

Symfony est particulièrement bien placé pour ce type d'expérimentation :

  • un environnement d'exécution unique et bien défini
  • un point d'extension kernel.exception explicite
  • une culture de modules optionnels
  • et maintenant, un point d'intégration de premier ordre via Symfony AI

Il ne s'agit pas d'une fonctionnalité essentielle du framework, et cela ne devrait pas l'être. Son utilisation doit rester optionnelle, limitée et réversible.

🧩 Ce que le bundle fait (et ne fait pas)

✅ Ce que ça fait

En cas d'erreur HTTP 500, le bundle peut générer :

  • Une explication claire en anglais de l'exception
  • Les causes probables
  • Les solutions proposées / les prochaines étapes
  • Un score de confiance
  • Un identifiant d'erreur pour la corrélation

❌ Ce qu'il ne fait pas

  • Ce programme ne corrige pas les bogues.
  • Il ne remplace pas Sentry/les journaux.
  • Il ne garantit pas l'exactitude des résultats.
  • Il ne s'exécute pas s'il n'est pas activé.

C'est un assistant, pas une autorité.

🔐 La sécurité avant tout (non négociable)

Les erreurs peuvent contenir des informations sensibles. C'est pourquoi le package est conçu pour être sécurisé par défaut :

  • Il n'envoie jamais d'en-têtes, de cookies, de variables d'environnement ni de données de requête au modèle.
  • Les traces de pile sont exclues par défaut (option réservée aux développeurs).
  • En cas d'échec ou de délai d'attente de l'IA : la gestion des erreurs 500 par défaut de Symfony s'exécute normalement (compatibilité avec les défaillances).
  • Le statut de la réponse reste 500 ; seul le corps de la réponse est modifié.

📦 Installez-le et utilisez-le dans un projet Symfony existant

Exigences

  • PHP 8.2+
  • Symfony 6.4+ également compatible avec 7.x / 8.x
  • Plateforme et agent symfony/ai-bundle configurés

Installez le bundle

composer require darkwood/ia-exception-bundle

Enregistrez le bundle (si nécessaire)

Si Symfony Flex ne l'enregistre pas automatiquement, ajoutez-le à config/bundles.php :

return [
    // ...
    Darkwood\IaExceptionBundle\DarkwoodIaExceptionBundle::class => ['all' => true],
];

Configurer Symfony AI

Exemple de configuration OpenAI :

# config/packages/ai.yaml
ai:
  platform:
    openai:
      api_key: '%env(OPENAI_API_KEY)%'
  agent:
    default:
      model: 'gpt-4o-mini'

Activer et configurer le bundle

# config/packages/darkwood_ia_exception.yaml
darkwood_ia_exception:
  enabled: true
  only_status_codes: [500]
  agent: 'ai.agent.default'
  timeout_ms: 800
  cache_ttl: 600
  cache: 'cache.app'
  include_trace: false

Appliquer correctement le délai d'expiration

Pour garantir le délai d'expiration au niveau HTTP, configurez un client HTTP à portée limitée pour votre plateforme d'IA :

# config/packages/ai.yaml
framework:
  http_client:
    scoped_clients:
      ai.timeout_client:
        base_uri: 'https://api.openai.com'
        timeout: 0.8

ai:
  platform:
    openai:
      api_key: '%env(OPENAI_API_KEY)%'
      http_client: 'ai.timeout_client'

🧾 Formats de sortie

JSON (pour les API)

Si la requête inclut Accept: application/json, le bundle renvoie un JSON structuré comme suit :

{
  "error_id": "a1b2c3d4e5f6g7h8",
  "english_exception": "La connexion à la base de données a échoué ou une table requise est manquante.",
  "probable_causes": ["..."],
  "suggested_fixes": ["..."],
  "confidence": 0.85
}

HTML (par défaut)

Sinon, il génère une page HTML affichant :

  • ID de l'erreur
  • Explication de l'IA
  • Causes et suggestions
  • Score de confiance
  • Classe/message d'exception d'origine
  • Avertissement : les résultats sont des hypothèses

🧠 Dernière réflexion

Nous avons passé des années à rendre nos systèmes plus résilients. Nous avons amélioré les journaux, les tableaux de bord et les alertes.

L'étape suivante est peut-être plus simple :

Améliorer la capacité des systèmes à s'expliquer.

Non pas pour remplacer les développeurs, mais pour les aider à penser plus vite, avec un meilleur contexte.

📖 Le code est Open Source

Ce bundle est aussi une expérimentation de l'intégration des erreurs générés par l'IA dans Symfony

Vous pouvez contribuer en vous rendant sur le dépot github Darkwood IaExceptionBundle

  • Plan du Site - Hello - Blog - Apps - Photos - Contact - - - - - Mentions légales - Darkwood 2026, tous droits réservés