Jour 8 : j’ai maintenant un agent vocal tout équipé, avec un rendu assez réaliste pour que je me dise qu’il pourrait me berner au téléphone. Enfin, si je ne savais pas qu’il était là.
Il répond en temps réel, aussi. Il y a un léger délai pendant la génération des réponses, mais c’est assez court pour que ça ressemble à une conversation plutôt qu’à un truc synthétique.
Ce build empile Whisper et Chatterbox sur trois générations de frameworks d’agents expérimentaux. J’ai enfin pris le temps de consolider les morceaux redondants pour en faire quelque chose qui ressemble à un vrai produit. La pression du temps a aidé.
Rien de tel qu’une deadline pour forcer l’honnêteté architecturale.
Notes de production :
Au début, j’ai eu des problèmes de complexité. Le point de rupture, c’était l’appel de fonctions, et c’est arrivé avec deux agents de code différents (Codex et GLM 4.7).
Le problème n’était pas lié au modèle. C’était peut-être moi. Ou alors le fait que j’ai rassemblé plusieurs vieilles versions de Busy / Woven / nMF pour gagner du temps, en demandant à l’IA de tout réconcilier.
Ça a super bien marché un moment. Productivité record ! Puis, fusion cérébrale les jours 4 et 5.
Mais ça a fini par cliquer.
Les structures de données sont verrouillées, la gestion de l’alphabet phonétique fonctionne, et tous les morceaux coopèrent maintenant comme de petites princesses parfaites !
J’ai aussi repensé l’UI pour supporter cette config. Cette partie était sympa. Le développement UI ne me dérange pas, tant que personne ne me demande d’écrire du JavaScript à la main. L’IA abstrait tout ce côté maléfique.
Le modèle et la couche vocale
Pour le modèle, j’ai choisi Qwen3-0.6B, fenêtre de contexte de 16k, avec trois couches déchargées sur le CPU.
On sous-estime ce modèle.
Donnez-lui des templates de base solides, un prompting discipliné et un entraînement aux commandes, et c’est un petit soldat vif. Pas la lumière du quartier... mais un acteur étonnamment doué.
La couche vocale était intéressante elle aussi.
J’ai utilisé Chatterbox, mais j’ai sous-échantillonné la TTS pour une inférence en 16 bits. On n’entend pas vraiment la différence, et le temps de réaction est quasi instantané.
Architecturalement, le système a maintenant deux classes d’agents :
Un acteur décide de ses propres outils, gère ses boucles, prend des décisions, s’autocorrige et rend compte à l’utilisateur. Les acteurs sont stateful et disposent d’un système de mémoire surpuissant qui les maintient cohérents.
Les « fonctions intelligentes » sont ennuyeuses : un prompt en entrée, un résultat en sortie. Conventionnel, nécessaire, pas romantique.
Voyez ça comme sujets/objets = acteurs/fonctions. Même idée. À tout moment, le modèle devra jouer les deux rôles.
J’ai laissé tomber la pile de lecture d’images pour l’instant à cause des ressources. L’une des exigences de ce tour était que tout le système tienne sur une carte Jetson bon marché, donc tout est serré.
J’ai hâte de montrer ça la semaine prochaine.