đš Darkwood IaExceptionBundle â Quand les erreurs commencent Ă s'expliquer d'elles-mĂȘmes
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
âïž FOSDEM 2026 : signaux structurels de lâĂ©cosystĂšme open source
âŸïž DĂ©gĂąts de dĂ©fausse infini
đ Gouvernance IT : reprendre le contrĂŽle sans ralentir lâinnovation
âïž Monter LĂ©gende avec le Guerrier QuĂȘte (Enter the Lost City)
âïž Monter lĂ©gende avec le deck Paladin Aggro Bubule
đ Offre de fin dâannĂ©e â Formation Flow (PHP)
âïž Meetup AFUP Paris DĂ©cembre 2025
đïž Open Source Experience 2025 : un Ă©cosystĂšme qui sâorganise, sâaffirme et accĂ©lĂšre
ai-PULSE 2025 : l'Europe de l'IA passe à la vitesse supérieure
đ§© Meetup AFUP Paris â Novembre 2025
đ€ LâIA CafĂ© Club #12 : CrĂ©ation, business, cinĂ©ma⊠lâIA sous toutes ses formes Ă la Monnaie de Paris
đź Comprendre lâECS : la brique invisible derriĂšre les jeux modernes
đ Uniflow 1.1.18
đš Programmation rĂ©cursive de pipes
đ Veille tech semaine 39
đïžHttpChunk avec Flow
đš API Platform Conference 2025 : retour de lâĂ©cosystĂšme Symfony et PHP
âš Rencontre SQLI
đš Pipe Programming : linĂ©ariser la complexitĂ© des graphes
đ Symfony AI Hackathon â Mon retour dâexpĂ©rience en ligne