đĄ Jâai créé une app IA RGPD en 1h avec Symfony
le 2 avril 2026
Aujourdâhui, beaucoup de dĂ©veloppeurs utilisent lâIA pour gĂ©nĂ©rer du code.
La question que l'on traite ici est la suivante :
đ Comment transformer une idĂ©e en systĂšme exĂ©cutable ?
Et câest normal.
Parce quâon a appris Ă :
- coder des features
- écrire des fonctions
- brancher des API
Mais pas Ă :
structurer une idĂ©e pour quâelle puisse ĂȘtre exĂ©cutĂ©e
Chez Darkwood, on ne commence jamais par le code.
On commence par une étape beaucoup plus fondamentale :
đ le raisonnement
Dans cet article, on va voir concrĂštement :
- Comment transformer une idée en unité exploitable
- Comment utiliser lâIA pour exĂ©cuter cette idĂ©e
- Comment appliquer ça dans un vrai projet : SketchUp Shape
đ§ 1. Une idĂ©e nâest pas du code
Quand tu penses :
âCrĂ©er une applicationâ
ton rĂ©flexe de dev, câest souvent :
âok, je vais coder une API, une base de donnĂ©es, etc.â
đ Mauvais point de dĂ©part.
Une idĂ©e, ce nâest pas encore quelque chose que tu peux exĂ©cuter.
Câest juste :
đ une intention floue
đĄ Le bon modĂšle mental
Chez Darkwood, on considĂšre que :
đ une idĂ©e = une tĂąche
Pas plus, pas moins.
Exemple
âCrĂ©er une applicationâ
devient :
Task: create_app
Ăa peut paraĂźtre trivial.
Mais câest un changement important :
đ Tu ne penses plus en âprojetâ đ Tu penses en unitĂ©s exĂ©cutables
âïž Pourquoi cette mĂ©thode fonctionne : Church, Turing, et lâidĂ©e comme unitĂ© exĂ©cutable
On pourrait croire que âprompter une IAâ est un sujet rĂ©cent, presque purement pratique, liĂ© Ă lâactualitĂ© des LLM.
En réalité, le problÚme est beaucoup plus ancien.
Quand un dĂ©veloppeur prend une idĂ©e et cherche Ă la transformer en systĂšme exĂ©cutable, il se heurte toujours Ă la mĂȘme question :
comment passer dâune intention abstraite Ă une forme que la machine peut rĂ©ellement traiter ?
Câest exactement le type de question qui se trouve Ă la racine de lâinformatique thĂ©orique.
Dans un précédent article Darkwood - Create a Lambda Interpreter in PHP - nous avions déjà exploré cette frontiÚre entre :
- lâidĂ©e dâun calcul
- et son exécution réelle par une machine
Cet article partait du λ-calcul dâAlonzo Church, puis le reliait Ă la machine de Turing, en rappelant un point fondamental :
le λ-calcul et la machine de Turing sont deux modÚles équivalents du calcul
Autrement dit :
- Church donne un modĂšle conceptuel
- Turing donne un modĂšle dâexĂ©cution
Et câest exactement ce qui nous intĂ©resse ici.
đ§ Church : avant lâexĂ©cution, il faut une forme pensable
Alonzo Church ne part pas dâune machine. Il part dâun problĂšme beaucoup plus profond :
quâest-ce quâune fonction ?
et plus largement :
quâest-ce quâun calcul ?
Le λ-calcul répond à cela avec une idée radicale :
tout calcul peut ĂȘtre exprimĂ© comme abstraction et application de fonctions
Dans ce modĂšle :
- une fonction est une transformation
- une valeur peut ĂȘtre transmise Ă une autre fonction
- et lâĂ©valuation consiste Ă appliquer des fonctions les unes aux autres
Câest la racine thĂ©orique de beaucoup de choses que nous utilisons aujourdâhui sans y penser :
- la programmation fonctionnelle
- le currying
- les closures
- les combinators
- les transformations pures
- les DSL
Dans lâarticle sur lâinterprĂ©teur lambda en PHP, cette idĂ©e Ă©tait prĂ©sentĂ©e de maniĂšre trĂšs concrĂšte : on partait dâune expression, on la tokenisait, on la parsait, on construisait un AST, puis on lâĂ©valuait.
Autrement dit :
avant quâun systĂšme exĂ©cute quelque chose, il faut dâabord quâil comprenne une forme
Câest exactement le point qui nous intĂ©resse pour lâIA.
Quand tu donnes Ă un LLM une phrase comme :
Create a house
tu ne lui donnes pas encore une exécution. Tu lui donnes une forme abstraite, une intention, une demande encore insuffisamment structurée.
Et câest lĂ que lâintuition de Church devient utile pour nous.
Traduction développeur
Quand on parle dâidĂ©e dans cet article, on ne parle pas dâinspiration vague ou de brainstorming.
On parle dĂ©jĂ dâune abstraction manipulable.
Autrement dit :
une idée doit devenir une unité sur laquelle un systÚme peut raisonner
Câest pour cela que, chez Darkwood, nous faisons un premier dĂ©placement mental :
une idĂ©e nâest pas encore du code
une idée est déjà une transformation en attente
Ou, dit autrement :
une idée est une tùche potentielle
âïž Turing : une fois la forme posĂ©e, il faut lâexĂ©cuter
Church formalise le calcul du cĂŽtĂ© de lâabstraction. Turing, lui, rĂ©pond Ă une autre question :
à quoi ressemble une machine capable de réaliser ce calcul ?
Sa réponse est célÚbre :
- une bande mémoire
- une tĂȘte de lecture
- un état courant
- des rĂšgles de transition
La puissance du modÚle ne vient pas de sa complexité, mais au contraire de sa simplicité.
Une machine de Turing lit une case, tient compte de son état, applique une rÚgle, écrit éventuellement quelque chose, puis avance.
Câest un modĂšle extrĂȘmement simple, mais suffisant pour raisonner sur ce quâune machine peut faire.
Ce qui nous intĂ©resse ici, ce nâest pas dâenseigner toute la thĂ©orie des automates. Câest de rĂ©cupĂ©rer une intuition trĂšs concrĂšte :
un systĂšme exĂ©cutable a besoin dâunitĂ©s lisibles
et dâun mĂ©canisme clair pour passer dâun Ă©tat Ă lâautre
Câest lĂ que le lien avec le travail moderne sur les idĂ©es, les tĂąches, et les agents IA devient trĂšs concret.
đ Ce que Church et Turing nous apprennent pour travailler avec une IA
Le point essentiel, câest le suivant :
- Church nous apprend Ă penser le calcul comme transformation
- Turing nous apprend à penser le calcul comme exécution structurée
Quand on assemble les deux, on obtient une maniĂšre beaucoup plus saine de travailler avec lâIA.
On cesse de penser :
âje vais demander du code au modĂšleâ
Et on commence Ă penser :
âje vais lui donner une unitĂ© de travail structurĂ©e, quâil pourra transformer, puis quâun autre systĂšme pourra exĂ©cuterâ
Câest exactement ce que nous faisons chez Darkwood.
𧩠Traduction Darkwood : une idée devient une tùche
Ă ce stade, on peut simplifier le modĂšle sans le trahir.
Voici la traduction qui nous sert de base :
| Concept thĂ©orique | InterprĂ©tation Darkwood | | ----------------- | ---------------------------- | | Abstraction | IdĂ©e structurĂ©e | | Fonction | Transformation | | Case mĂ©moire | TĂąche | | Bande | Liste / pile de tĂąches | | Lecture | ExĂ©cution | | Transition | Passage dâun Ă©tat Ă un autre |
Cela nous donne une rĂšgle simple :
une idée devient une tùche
une tùche devient une unité lisible
une unitĂ© lisible peut ĂȘtre exĂ©cutĂ©e
Câest ce changement de perspective qui compte.
Parce que tant quâune idĂ©e reste seulement dans ta tĂȘte, elle est inutilisable par le systĂšme :
- ni ton terminal
- ni ton IDE
- ni ton LLM
- ni ton orchestrateur
ne peuvent travailler dessus correctement.
Il faut donc lui donner une forme.
đĄ LâidĂ©e comme unitĂ© de calcul
Câest ici que notre mĂ©thode prend tout son sens.
Quand on dit :
Créer une application
ce nâest pas encore un systĂšme. Ce nâest pas encore une architecture. Ce nâest pas encore un prompt exploitable.
Mais ce nâest pas non plus ârienâ.
Câest dĂ©jĂ :
une unité de calcul à expliciter
Chez Darkwood, nous la faisons passer par une étape de nomination et de réduction.
Par exemple :
Task: create_app
ou
Task: generate_sketchup_shape
Ă partir de lĂ , la machine - ou le systĂšme dâagents - ne manipule plus seulement une phrase humaine. Elle manipule une tĂąche identifiable.
Et Ă partir du moment oĂč tu peux identifier une tĂąche, tu peux :
- la stocker
- la relire
- la reproduire
- la transmettre
- la découper
- la paralléliser
- lâorchestrer
Câest cela, le vrai changement.
đ§ Pourquoi câest si utile pour un dĂ©veloppeur
Un dĂ©veloppeur a souvent tendance Ă sauter directement Ă lâimplĂ©mentation :
- créer un dossier
- installer Symfony
- brancher une API
- écrire une commande
Mais si lâidĂ©e initiale nâa pas Ă©tĂ© correctement modĂ©lisĂ©e, tout le reste devient instable.
On obtient alors ce que beaucoup vivent avec les LLM aujourdâhui :
- des prompts flous
- des sorties floues
- des structures fragiles
- des projets qui âmarchentâ, mais sans cohĂ©rence
La théorie de Church et Turing nous rappelle quelque chose de trÚs simple :
la qualitĂ© de lâexĂ©cution dĂ©pend de la qualitĂ© de la reprĂ©sentation initiale
Autrement dit :
si tu veux mieux prompter une IA, il faut dâabord mieux reprĂ©senter ton idĂ©e
Et câest prĂ©cisĂ©ment ce que nous allons faire dans la suite avec SketchUp Shape :
- partir dâune intention
- la convertir en tĂąche
- la structurer
- la transformer en design
- puis seulement en code
đ§ La rĂšgle Ă retenir
Sâil fallait condenser toute cette section en une seule phrase, ce serait celle-ci :
une idĂ©e utile pour lâIA nâest pas une inspiration
câest une abstraction suffisamment claire pour devenir une tĂąche exĂ©cutable
Et câest lĂ que Church et Turing cessent dâĂȘtre de la thĂ©orie lointaine.
Ils deviennent un modÚle pratique pour le développeur moderne :
- Church tâaide Ă penser la forme
- Turing tâaide Ă penser lâexĂ©cution
- Darkwood tâaide Ă relier les deux
đ Exemple concret
Tu as plusieurs idées :
- créer une app
- construire une API
- générer un modÚle 3D
đ Tu peux les reprĂ©senter comme une stack :
Stack:
- create_app
- build_api
- generate_model
Et lĂ , tout devient plus simple :
tu peux traiter chaque tĂąche une par une
ou
en parallĂšle
⥠2. Ton cerveau fonctionne déjà comme ça
Tu nâas pas besoin dâapprendre un nouveau systĂšme.
đ Tu lâutilises dĂ©jĂ .
đ§ Cas simple : tĂąches diffĂ©rentes
Task A: répondre à un message
Task B: installer un package
đ Aucun lien đ Tu peux passer de lâun Ă lâautre facilement
â ïž Cas compliquĂ© : tĂąches similaires
Task A: coder une API
Task B: refactor la mĂȘme API
đ LĂ , ça devient dur
Pourquoi ?
- mĂȘme contexte
- mĂȘme variables mentales
- mĂȘmes fichiers
đ RĂ©sultat :
- confusion
- erreurs
- fatigue
đ„ Ce que ça implique
Ton cerveau :
- a une mémoire limitée
- gĂšre mal trop de contexte
- sature vite
đ Donc :
tu ne peux pas gĂ©rer beaucoup de tĂąches complexes en mĂȘme temps
𧩠3. Le vrai problÚme : la reproductibilité
Une tĂąche nâa de valeur que si tu peux :
- la retrouver
- la relancer
- la partager
đ Sinon, elle reste dans ta tĂȘte đ et elle disparaĂźt
đ§ Approche Darkwood
On introduit une idée simple :
đ une tĂąche = un pointeur
ConcrĂštement
- tu écris ta tùche dans Joplin
- elle a un ID
- cet ID devient ton âpointeurâ
Et ensuite :
- dans ton terminal â tu fais rĂ©fĂ©rence Ă cette tĂąche
- dans ton IDE â pareil
- dans ton IA â pareil
đ RĂ©sultat :
tu manipules le mĂȘme objet, partout
đĄ Ce que ça change
Tu ne dis plus :
âje vais bosser sur mon idĂ©eâ
Tu dis :
âje vais exĂ©cuter cette tĂącheâ
Et ça, câest beaucoup plus puissant.
âïž 4. LâIA : pas un outil magique, un systĂšme dâexĂ©cution
Aujourdâhui, beaucoup de devs utilisent lâIA comme ça :
- âgĂ©nĂšre-moi une fonctionâ
- âĂ©cris-moi une classeâ
- âcorrige ce bugâ
đ Ăa marche.
Mais tu restes dans une logique :
réactive
đ§ Approche Darkwood
On change complĂštement la perspective :
đ lâIA devient un systĂšme dâexĂ©cution
đ On modĂ©lise comme une entreprise
PlutĂŽt que des âagents magiquesâ, on utilise une structure simple :
đ€ Toi (humain)
- tu dĂ©finis lâintention
- tu poses le problĂšme
đ§ Architecte IA
- il comprend ton intention
- il découpe en tùches
- il décide comment organiser le systÚme
âïž Agents
- ils exécutent
- ils produisent du code
- ils transforment les données
đĄ RĂšgle clĂ©
đ Le prompt = ton intention
Si ton prompt est flou :
đ le systĂšme est flou
Si ton prompt est structuré :
đ le systĂšme devient structurĂ©
đ„ Exemple
â Mauvais prompt :
âGenerate a houseâ
â Bon prompt :
âCreate a structured architectural design of a house,
with walls, roof, proportions and constraints,
then generate SketchUp Ruby code from itâ
đ LĂ , tu donnes :
- une direction
- une structure
- un objectif clair
đ§ Ce que tu dois retenir
đ Tu nâas pas besoin dâĂȘtre meilleur en code
đ Tu dois devenir meilleur en :
- structuration
- intention
- orchestration
Et câest exactement ce quâon va appliquer maintenant avec :
đ SketchUp Shape
đ 5. Application concrĂšte : SketchUp Shape
Projet : đ https://github.com/matyo91/sketchup-shape
đŻ Objectif
Transformer :
âCreate a houseâ
en :
đ script Ruby exĂ©cutable dans SketchUp
đ§± Pourquoi SketchUp ?
- outil de modélisation 3D
- API Ruby documentĂ©e : â SketchUp Ruby API
- extensible (plugins, scripts)
đ Contexte
Jâai personnellement appris SketchUp avec SĂ©bastien Maison (YouTube)
đ Ici, lâobjectif nâest pas dâutiliser leur IA :
đ Mais de construire notre propre systĂšme
Parfait - on va rendre cette partie plus concrĂšte, plus ancrĂ©e terrain, plus âdevâ, tout en intĂ©grant :
- SketchUp (contexte réel)
- Sébastien Maison (preuve sociale)
- API Ruby (levier technique)
- IA locale (différenciation forte)
âïž 6. Pipeline : de lâidĂ©e au modĂšle 3D (concret)
Avant dâaller plus loin, on va prendre un cas rĂ©el.
đ Ici, on ne parle pas dâune API abstraite đ On parle de gĂ©nĂ©rer un objet 3D dans SketchUp
đ§± Petit contexte : pourquoi SketchUp ?
SketchUp est un outil de modélisation 3D trÚs utilisé :
- architecture
- design
- prototypage
Personnellement, jâai dĂ©couvert SketchUp grĂące Ă SĂ©bastien Maison, avec qui jâai suivi une formation.
đ Jây ai modĂ©lisĂ© une maison âĂ la mainâ
Et câest lĂ que lâidĂ©e est venue :
đ âEt si je pouvais gĂ©nĂ©rer ça directement avec du code ?â
â ïž Pourquoi ne pas utiliser lâIA native de SketchUp ?
SketchUp propose dĂ©jĂ de lâIA :
đ SketchUp AI
Mais ici, ce nâest pas le sujet.
đ Nous sommes dĂ©veloppeurs.
đ On veut :
- comprendre
- contrĂŽler
- automatiser
Donc on passe par :
đ lâAPI Ruby de SketchUp
đ§ LâentrĂ©e technique
Pour ça, SketchUp expose :
đ ConcrĂštement :
tu écris du Ruby comme ça :
model = Sketchup.active_model
entities = model.entities
Et tu construis :
- des faces
- des volumes
- des groupes
𧩠Ressources utilisées
Pour rendre lâIA plus fiable, jâai utilisĂ© :
-
Ruby API Stubs đ pour donner au LLM une vision claire des objets disponibles
-
Exemples officiels đ pour comprendre les patterns rĂ©els
Et si tu veux aller plus loin :
đ Extensions SketchUp â tu peux packager ton code en plugin
â ïž PrĂ©requis important
Pour exécuter du Ruby :
đ tu dois utiliser la version desktop :
đ La version web ne permet pas ça (ou trĂšs limitĂ©)
đ Pipeline Darkwood (appliquĂ©)
Maintenant quâon a le contexte, voici le pipeline rĂ©el :
Intention
â
Design (LLM #1)
â
Code (LLM #2)
â
SketchUp
đ§ Ătape 1 : intention
Tu pars dâune idĂ©e simple :
bin/console app:generate-shape "Create a house"
đ Rien de plus.
đ§± Ătape 2 : design (LLM #1)
Ici, lâIA ne code pas.
đ Elle rĂ©flĂ©chit
Elle agit comme un architecte :
{
"type": "house",
"structure": {
"walls": {...},
"roof": {...}
}
}
đ Elle dĂ©cide :
- des proportions
- des éléments
- de la structure
âïž Ătape 3 : code (LLM #2)
Ensuite seulement :
đ une deuxiĂšme IA transforme ce plan en code
model.start_operation('House', true)
...
model.commit_operation
đ Elle agit comme un dĂ©veloppeur :
- elle utilise lâAPI SketchUp
- elle construit la géométrie
â ïž 7. Pourquoi 2 LLM (et pas 1)
Câest une des parties les plus importantes.
â Approche naĂŻve
idĂ©e â code
đ Ce que tu obtiens :
- incohérent
- imprévisible
- difficile Ă corriger
â Approche Darkwood
idĂ©e â design â code
đ Tu sĂ©pares :
- đ§ le quoi
- âïž le comment
đĄ Câest exactement comme dans une Ă©quipe :
- architecte â dĂ©cide
- dĂ©veloppeur â implĂ©mente
đ§ 8. Le problĂšme rĂ©el rencontrĂ©
Quand jâai lancĂ© :
Create a house
đ RĂ©sultat :
- techniquement valide
- mais visuellement⊠faux
đ Ce nâĂ©tait pas une maison
â Pourquoi ?
Parce que lâIA a fait ça :
âune maison = des formesâ
đ Elle a empilĂ© :
- des cubes
- un toit
- sans logique
đ„ Le vrai problĂšme
LâIA ne comprend pas :
- la gravité
- les proportions
- lâusage rĂ©el
đ Elle ne comprend pas :
ce quâest une maison
đ§ Correction apportĂ©e
On a introduit une couche :
đ design structurĂ©
Au lieu de :
{ "parts": [...] }
On force :
{
"type": "house",
"foundation": {...},
"walls": {...},
"roof": {...},
"constraints": {
"symmetry": true,
"alignment": "centered"
}
}
đ RĂ©sultat :
- cohérence
- stabilité
- rendu crédible
âïž 10. Stack technique
đ§± Backend
- Symfony 8
- Symfony AI
darkwood/navi
đ installation :
composer require darkwood/navi
đ§ IA locale (RGPD)
đ tout tourne en local
âïž Pourquoi câest important
- pas dâAPI externe
- pas de fuite de données
- contrĂŽle total
đ tu construis un systĂšme :
RGPD compliant by design
âïž 11. Commandes
đ§ LLM local
ollama pull ministral-3:8b
ollama serve
âïž GĂ©nĂ©ration
bin/console app:generate-shape "Create a house"
Options utiles
-o house.rb # sauvegarde du script
--spec design.json # sauvegarde du design
-v # debug complet
đ§ 12. Ce que tu dois vraiment retenir
â Ce nâest pas :
- âcomment utiliser une IAâ
â Câest :
đ comment structurer une idĂ©e pour quâune IA puisse lâexĂ©cuter
đ ModĂšle final
idée
â tĂąche
â design
â code
â exĂ©cution
đ Conclusion
Le futur du dĂ©veloppement nâest pas :
écrire plus de code
Mais :
structurer des idées et orchestrer leur exécution
đ Chez Darkwood :
on ne cherche pas Ă aller plus vite
on cherche Ă ĂȘtre plus juste