2026-05-17

Robie V1.2 — Le moment où le projet commence à “vivre”
Ces dernières semaines, j’ai énormément travaillé sur des sujets très différents :
- pipeline documentaire,
- automatisation,
- IA appliquée à la documentation,
- workflows,
- intégrations…
Mais pendant ce temps-là, un autre projet continuait doucement à évoluer en arrière-plan : Robie.
Et cette fois, quelque chose d’important a changé. Robie commence enfin à devenir un vrai système cohérent.
Un système qui possède une architecture claire, des responsabilités séparées, des composants réels, une voix, et surtout : une sensation d’existence.
Le piège classique des projets perso ambitieux
Quand on construit un assistant vocal local sur Raspberry Pi avec :
- STT,
- fuzzy matching,
- LLM,
- orchestration conversationnelle,
- audio temps réel,
- mémoire de progression,
- contrôle continu,
- playback intelligent…
… le risque est immense de vouloir tout brancher immédiatement.
Et très souvent, on obtient beaucoup de complexité, et rien de réellement fonctionnel.
Cette fois, j’ai essayé une approche différente :
petites briques indépendantes
+
architecture propre
+
wins rapides et visibles
Et honnêtement ? Ça change complètement l’énergie du projet.
L’architecture commence à se stabiliser
La V1.2 repose maintenant sur une séparation assez nette des rôles.
L’idée générale :
Micro
↓
Vosk (STT)
↓
Intent Router
├─ intents simples → exécution directe
└─ intents complexes → Qwen
↓
Intent structuré
↓
Confirmation vocale
↓
mpv
avec :
- Vosk pour la transcription locale,
- RapidFuzz pour retrouver les livres malgré les erreurs vocales,
- Qwen pour la compréhension sémantique,
- LangGraph pour les états conversationnels,
- mpv pour la lecture audiobook réelle.
Le point architectural majeur confirmé :
Le LLM ne doit PAS être le moteur de recherche principal.
Donc :
transcription
→ matching local
→ shortlist
→ compréhension LLM
et surtout pas :
bibliothèque complète
→ LLM
Ça paraît presque évident dit comme ça. Mais énormément de tutoriels IA oublient ce type de séparation fondamentale, et vous font cramer du token, ou ne sont pas adaptables à un hardware léger comme le Pi.
Premier vrai pipeline fonctionnel
Le premier pipeline réellement validé est minuscule… mais très satisfaisant :
Intent structuré
↓
lookup bibliothèque
↓
génération phrase naturelle
↓
TTS
↓
audio réel
Robie parle désormais réellement.
Par exemple :
Intent(
intent="play_audiobook",
book_id="rdf_04",
start_mode=StartMode.BEGINNING,
)
↓
Tu veux écouter Les Royaumes de feu, tome 4, L'île au secret, depuis le début ?
Et ce qui est amusant, c’est que ce comportement extrêmement simple change déjà complètement la perception du projet.
Pydantic partout : la paix mentale
Une autre décision importante a été de définir très tôt les structures internes :
BookLibraryIntentConfirmationResponseStartMode
avec validation Pydantic.
Ça semble parfois “sur-ingénieré” pour un projet perso.
Mais en réalité, ça apporte très vite :
- une vraie source de vérité,
- des contrats stables,
- une réduction énorme du chaos,
- et surtout une capacité à faire évoluer le système sans tout casser.
Le détail que j’aime beaucoup : les confirmations non binaires
Un point que j’aime particulièrement dans l’architecture actuelle :
les confirmations ne sont pas conçues comme des simples “oui/non”.
Exemple :
Robie :
“Tu veux écouter L’île au secret depuis le début ?”
Enfant :
“Non, reprends là où ça en était.”
Ici :
- le livre était correct,
- seule la modalité était fausse.
Donc le système garde un pending_intent modifiable.
C’est un petit détail architectural… mais qui rapproche énormément le comportement d’une vraie interaction naturelle.
RapidFuzz arrive ensuite
La prochaine grosse étape va être le matching fuzzy local.
Objectif :
"lis royaume de feu tome saint"
↓
rdf_05
malgré une transcription imparfaite de Vosk.
Et là encore, le principe retenu est volontairement pragmatique :
normalisation légère uniquement :
- lowercase,
- suppression accents,
- suppression ponctuation,
mais PAS :
quatre → 4
afin de préserver les erreurs phonétiques réalistes des sorties STT.
Ce que ce projet m’apprend surtout
Je crois que le plus intéressant ici n’est même pas technique.
Le vrai apprentissage récent est probablement celui-ci :
les petits wins visibles changent complètement la dynamique mentale d’un projet long
Pendant longtemps, Robie était surtout :
- une vision,
- une architecture théorique,
- des notes,
- des idées.
Aujourd’hui :
- il possède une bibliothèque réelle,
- une structure stable,
- une première voix,
- un pipeline cohérent,
- des états conversationnels qui commencent à émerger,
- et une personnalité technique identifiable.
Le projet commence réellement à “exister”.