Tous les articles

Comment j'ai construit PaulBot : un assistant IA fiable à budget quasi nul

Un assistant LLM en streaming qui ne ment pas et ne tombe jamais : réponses déterministes côté client, bascule multi-fournisseurs, garde-fous anti-hallucination. Retour technique.

Comment j'ai construit PaulBot : un assistant IA fiable à budget quasi nul

PaulBot, c'est l'assistant IA de mon portfolio : il répond en streaming aux questions sur mon parcours, mes compétences et mes projets. Le vrai défi n'était pas de brancher un LLM, mais de le rendre fiable et honnête… sans budget.

Contrainte n°1 : les tokens. Les offres gratuites sont vite limitées. Ma parade : répondre côté client, sans appeler le modèle, à toutes les questions déterministes « est-il dispo ? », « son email ? », « son CV ? », « son parcours ? ». Un routeur d'intention les intercepte et renvoie une réponse toute prête. Résultat : les questions les plus fréquentes coûtent zéro token.

Contrainte n°2 : la fiabilité. Un fournisseur gratuit peut renvoyer un 429 (quota) à tout moment. J'ai donc mis en place une bascule multi-fournisseurs : Groq en primaire, puis Cerebras, puis Gemini tous en API compatible OpenAI. Si l'un échoue avant le premier octet, on passe au suivant, de façon transparente. C'est de la résilience légitime (un compte par fournisseur), pas du multi-comptes.

L'honnêteté, ensuite. Un LLM adore inventer pour « faire plaisir ». J'ai posé des garde-fous stricts : répondre uniquement à partir des connaissances fournies, distinguer une capacité (iOS via Flutter) d'une techno absente (Swift), et pour toute demande d'anecdote ne rien broder mais renvoyer vers le livre. Mieux vaut dire « je n'ai pas ce détail » que d'halluciner.

La fonctionnalité dont je suis le plus fier : le pitch sur-mesure. Un recruteur colle une offre d'emploi, et PaulBot produit une analyse de correspondance honnête un tableau exigence par exigence, avec ce que je couvre vraiment (preuve nommée) et ce qui manque, plutôt qu'un « je suis parfait pour tout ». La franchise vend mieux.

Un exemple concret le mode recruteur (capture ci-dessus) : le visiteur choisit « Je recrute », colle une offre d'emploi, et PaulBot renvoie un tableau exigence par exigence (✅ couvert, proche, absent), sans jamais gonfler le profil. Il termine par un point de contact ; si le recruteur laisse son email, Paul reçoit l'offre et les détails par mail, et le recruteur un accusé de réception.

Un dernier détail d'ingénierie : les relances. Plutôt qu'un second appel au modèle pour suggérer les questions suivantes, le LLM les glisse dans sa réponse via un marqueur invisible que le front transforme en pastilles. Qualité d'un LLM, coût de zéro appel supplémentaire.

La leçon : la contrainte force la créativité. Pas de budget m'a poussé à répondre sans le modèle quand c'est possible, à répartir la charge proprement, et à faire de l'honnêteté un argument. Le tout tient sur un backend NestJS, en streaming (SSE), et tourne aujourd'hui sur mon portfolio.

Cas d'usage — essaie les prompts

Mode recruteur — colle une offre, obtiens une analyse honnête
Éditable — ajuste puis copie
  1. ToiIl a déjà fait de la facturation à la minute ?
    PaulBotOui — Emilia Cross : visio facturée à la minute via un système de crédits, en temps réel.
  2. ToiFait-il du natif Swift ou Kotlin ?
    PaulBotNon — pas de natif. iOS/Android via Flutter, desktop via Electron.
  3. ToiIl est disponible quand ?
    PaulBotOuvert aux missions freelance & collaborations, en télétravail.
Mode visiteur — découvrir Paul
  1. ToiRaconte-moi une anecdote sur Paul
    PaulBotPas d'invention : « je n'ai pas ce détail perso » — puis il propose d'ouvrir un chapitre du livre.
  2. ToiC'est quoi Emilia Cross ?
    PaulBotUne app (Flutter + PWA) de rencontre en visio facturée à la minute — KYC, paiements, reversements.
  3. ToiComment PaulBot est construit ?
    PaulBotFailover multi-LLM, garde-fous anti-hallucination, réponses déterministes côté client (voir cet article).
Parler à PaulBot L'assistant sur le portfolioLe code sur GitHub Mes dépôts
Partager