baklava/doc/PromptBasedApplications.md

97 lines
9.6 KiB
Markdown
Raw Permalink Normal View History

## question
comment trouver une meilleure manière de faire du développement d'IHM (UI) aujourd'hui dans l'ère de l'IA ?
Faut-il centrer nos UI sur le prompt ?
Dans ce cas,
- quelles librairies choisir, qui permette de construire un prompt web et aussi d'afficher des widgets, charts, etc... adaptés à l'utilisateur
- quel système de génération d'UI ?
l'ui doit être plus dynamique, "generative ui", elle doit s'adapter au contexte.
Cela est bien différent d'une SPA (single page app), et necessite une structuration pour ne pas produire des widgets hallucinés par l'ia.
Est-ce que l'approche API first est toujours valable ?
# A propos des UI
Il faut complètement repenser les IHM (UI).
L'arrivée des IA a complètement changé l'interface utilisateur.
Elle reste une appli web, mais :
- "generative UI" (une application web qui est conçue par l'IA en fonction
du contexte de l'utilisateur, donc une application beaucoup plus générique
une application générée en fonction du contexte en quelque sorte,
- prompt first. L'injonction de centrer l'app sur un dialogue avec l'IA est forte.
le point d'entrée est le promt. Les widgets qui doivent apparaître sont
issues d'interaction avec le prompt (champs de formulaires, charts, etc...)
L'application doit donc devenir dynamique. Pas seulement dynamique au niveau
des pages web et des queries. Dynamique au niveau de l'ergonomie.
Les widgets doivent apparaître en fonction de la demande utilisateur.
Mais il faut une base structurelle forte qui permette d'éviter des widgets
complètement hallucinés et ne correspondant pas au contexte.
Il faut des outils de validation de la consistency, de la cohérence
de l'application.
La réponse courte est **oui, l'ère de l'IA redéfinit fondamentalement le développement d'IHM**. Il ne s'agit plus de concevoir des interfaces statiques, mais de créer des surfaces d'interaction dynamiques, générées et adaptées par l'IA en fonction du contexte. Cette approche, appelée "Generative UI" ou "Agent-driven UI", place le prompt et la conversation au centre de l'expérience .
Cependant, cette nouvelle liberté apporte son lot de défis, principalement autour de la fiabilité, de la sécurité et de la cohérence.
Voici une feuille de route pour naviguer dans ce nouveau paradigme.
### 🤔 Centrer l'UI sur le prompt ? Oui, mais...
Oui, l'interface utilisateur doit être centrée sur le prompt, mais de manière structurée. Le prompt devient le principal vecteur d'intention de l'utilisateur. L'IA interprète cette intention et génère une interface utilisateur dédiée à la tâche à accomplir.
Cela ne signifie pas pour autant abandonner les widgets, graphiques et autres composants d'interface riches. L'IA doit être capable de les assembler et de les configurer à la volée. La clé est que l'interface (UI) est dictée par le besoin de l'utilisateur, qui est lui-même exprimé par le prompt, transformant l'agent en un véritable "orchestrateur d'interface".
### 🎨 Choisir les bonnes librairies et systèmes de génération d'UI
La génération d'UI par l'IA se décline en plusieurs approches, classées du plus contrôlé au plus ouvert. Comprendre ces approches vous aidera à choisir les outils adaptés.
**1. L'approche "UI Déclarative" (Recommandée)**
C'est l'approche qui répond le mieux à votre besoin de sécurité et de contrôle. L'IA ne génère pas de code exécutable, mais un **spécification JSON structurée** qui décrit l'UI (les composants, leurs propriétés et leurs données). Le front-end possède un "catalogue" de composants prédéfinis qu'il sait rendre, et il utilise cette spécification pour les afficher .
* **Avantages:** Sécurisé (pas d'exécution de code arbitraire), contrôle total sur le rendu, possibilité de streamer l'UI au fur et à mesure de la génération, et "data-binding" intégré pour des interactions réactives .
* **Librairies clés pour cette approche:**
| Librairie/Framework | Description | Points clés |
| :--- | :--- | :--- |
| **`json-render`** | Framework "Generative UI" polyvalent. | Permet de définir un catalogue de composants avec leurs schémas. L'IA génère un JSON conforme. Supporte React, Vue, React Native, et même Web Components. Idéal pour un contrôle total avec un rendu cross-platform . |
| **`genui` (Flutter)** | Package Flutter pour UI génératives. | Utilise les concepts de catalogue et de modèle de données. Le `GenUiConversation` gère tout le cycle de vie, de l'envoi du prompt au rendu et à la gestion des interactions . |
| **A2UI (Agent-to-User Interface)** | Protocole standardisé (Google) pour ce type d'UI. | C'est une spécification ouverte, soutenue par des implémentations comme **CopilotKit** (React) ou **Freesail** (React). Elle standardise les messages (création de surface, mise à jour des composants, mise à jour des données) pour une meilleure interopérabilité . |
| **`prefab-ui` (Python)** | Framework pour construire des UIs en Python, conçu pour MCP Apps. | Idéal si vous voulez que l'agent génère lui-même l'UI en Python. Il propose un DSL (Domain Specific Language) en Python pour décrire l'interface, qui est ensuite compilée en JSON et rendue par un front-end React . |
**2. L'approche "UI Contrôlée"**
C'est l'approche la plus simple et la plus sûre. Le développeur crée des composants UI (par exemple, `WeatherCard`, `DataChart`) et l'agent décide lequel utiliser et avec quelles données, souvent via l'appel d'un outil. L'UI est pré-construite, l'IA ne fait que la sélectionner et la paramétrer .
* **Exemple:** L'agent appelle un outil `get_weather`. Sur le front-end, on sait que cet outil doit afficher un composant `WeatherCard`. On peut même montrer différents états (chargement, résultat) .
**3. L'approche "UI Ouverte" (À Utiliser avec Prudence)**
L'agent génère du code complet (HTML, etc.) qui est rendu dans un conteneur sécurisé (comme un iframe). C'est la plus flexible, mais aussi la plus risquée en termes de sécurité et de cohérence visuelle .
### 🔒 Éviter les "Widgets Hallucinés" : L'Importance du Design System
C'est ici que la structuration est cruciale. Pour éviter que l'IA ne "produise des widgets hallucinés", vous devez lui fournir un cadre strict. L'outil principal est le **Design System** et le **Catalogue de Composants**.
1. **Définissez un Catalogue :** Vous créez une "boîte à outils" de composants que l'IA est autorisée à utiliser. Pour chaque composant, vous définissez son nom, sa description et son schéma de propriétés (c'est-à-dire quelles données il accepte). Par exemple, un composant `Card` peut avoir une propriété `title` .
2. **Fournissez le Catalogue à l'IA :** Ce catalogue est inclus dans le prompt système de l'IA. Elle sait ainsi quels sont les "briques" à sa disposition, ce qu'elles font et comment les utiliser .
3. **Validez la Sortie :** Sur le front-end ou via une passerelle, on valide que la spécification JSON générée par l'IA respecte bien le schéma défini dans le catalogue. Cela permet d'ignorer ou de corriger toute tentative de génération de composants non autorisés, éliminant les "hallucinations" structurelles .
> **Point de vigilance :** Les librairies mentionnées (json-render, genui, A2UI) intègrent toutes ce mécanisme de catalogue. C'est la pierre angulaire d'une UI générative fiable.
### 🧱 Structuration d'une UI Dynamique vs SPA
Une UI générative (GenUI) n'est pas une SPA classique. Là où la SPA a un état et un routage prédéfinis, la GenUI est éphémère et contextuelle. Cependant, elle peut s'appuyer sur des architectures existantes.
* **L'approche "API First" est toujours valable et même essentielle.** L'UI générative est une nouvelle couche client qui **consomme** et **envoie** des données via des APIs. La séparation entre le front-end et le back-end reste la bonne pratique.
* **Nouveaux concepts architecturaux à intégrer:**
* **Surfaces :** L'IA peut créer des "surfaces" (comme des zones ou des fenêtres) dans l'UI pour y placer des composants . La chat peut n'être qu'une surface parmi d'autres.
* **Data Binding :** Les composants UI sont liés à un modèle de données. Les interactions de l'utilisateur (ex: remplir un champ) mettent à jour ce modèle, ce qui peut déclencher de nouvelles actions de l'agent ou la mise à jour d'autres composants .
* **State Store :** Des bibliothèques comme Zustand, Jotai ou Redux peuvent être utilisées comme l'état central de l'UI générative, notamment pour gérer le data binding et les conditions d'affichage .
### 💎 Conclusion : Comment se lancer ?
Le développement d'IHM à l'ère de l'IA est un changement de paradigme majeur, mais il repose sur des principes solides.
1. **Définissez votre approche :** Commencez avec une approche **"UI Contrôlée"** en utilisant des outils comme `useFrontendTool` de CopilotKit pour des cas simples. Elle est plus facile à mettre en œuvre et très sécurisée .
2. **Construisez votre Catalogue :** Pour une approche plus dynamique, choisissez un framework supportant l'UI déclarative (**json-render**, **A2UI avec CopilotKit/Freesail**) et investissez du temps à définir un **design system et un catalogue de composants solide** . C'est la clé pour garder le contrôle et la cohérence.
3. **Pensez "Maîtriser pour Déléguer" :** Comme le souligne la pratique "Claude Design" chez GitLab, l'IA est un accélérateur de créativité et un partenaire de réflexion puissant, mais elle ne remplace pas le jugement humain . Utilisez-la pour explorer, itérer et générer rapidement des hypothèses, puis affinez et validez les résultats. Votre rôle évolue de "constructeur d'UI" à "architecte et validateur d'UI générées".