Je respecte toujours mes engagements
Comment j’ai Construit mon RAG de A à Z ? c’est quoi un rag déjà ?.
!!! Note 16/02/2026 : Mise a jour récente : je suis passé d’un index dune dimension de 768 à un de 3072 du au changement de model d’embedding de google qui est un peu plus avancé avec gemini-embedding-001
De l’idée à une application en ligne fonctionnelle. Je vous explique : Outils choisis à mes galères de déploiement (et comment les surmonter).
Hey Salut la team !
Si comme moi, vous êtes fasciné par l’IA mais que vous voulez aller plus loin que de simples appels à une API, alors vous êtes au bon endroit. Aujourd’hui, je vais vous raconter comment j’ai construit ma toute première application de RAG (Retrieval-Augmented Generation). C’est un nom compliqué pour une idée très simple : comment faire en sorte qu’une IA réponde à des questions en se basant uniquement sur une bibliothèque de documents que je lui fournis ?
L’objectif était de créer un assistant capable d’analyser des centaines de documents juridiques et de répondre avec précision, sans jamais « halluciner » ou inventer de faits. Voici le récit de cette aventure, des choix technologiques aux galères qui m’ont presque fait abandonner.
C’est quoi un RAG ? résumé audio
Partie 1 : Le Plan – Les Outils
Pour construire un SaaS moderne et durable, il faut choisir les bons outils. Voici la « stack » que j’ai choisie, et surtout, pourquoi.
D’abord activer la facturation dans google cloud même si vous ne serez pas facturé.
- Backend : NestJS
J’ai choisi NestJS (basé sur Node.js et TypeScript) pour sa structure. Pour un projet qui doit évoluer, c’est un gage de « clean code » et de maintenabilité. - L’Expert (IA) : Google Gemini ( gemini-embedding-001 et gemini 3.0 pro)
J’ai utilisé l’API de Google Gemini pour deux raisons : sa capacité à comprendre le sens du texte pour le transformer en chiffres (les fameux « embeddings ») et sa capacité à générer des réponses claires à partir d’un contexte. - Base de Données Vectorielle : Pinecone
C’est le cœur du système. Pinecone est une base de données spécialisée pour stocker et rechercher des informations non pas par mot-clé, mais par sens. C’est incroyablement rapide. - Framework d’Orchestration : LangChain.js
Plutôt que de tout réinventer, j’ai utilisé LangChain.js pour connecter tous ces services entre eux. C’est une boîte à outils qui simplifie la création de « chaînes » de traitement complexes. - Frontend : Next.js & Shadcn/ui
Pour l’interface, le choix s’est porté sur Next.js pour sa rapidité et Shadcn/ui pour ses composants magnifiques et faciles à utiliser.
Infrastructure & Cloud : Google Cloud Platform (GCP)
Toute la partie déploiement et gestion des fichiers repose sur Google Cloud.
- J’ai utilisé Google Cloud Storage en créant un bucket pour stocker et accéder facilement à tous mes fichiers sur le cloud un point essentiel pour que les sources restent disponibles et vérifiables.
- Google Cloud Run m’a servi à déployer mon conteneur Docker (backend NestJS), en lien avec le frontend hébergé sur Vercel.
- Pour la gestion des variables sensibles (API keys, tokens…), j’ai découvert Google Secret Manager, qui m’a permis de centraliser mes clés de manière sécurisée.
Partie 2 : Le Fonctionnement Expliqué Simplement
Mon application fonctionne en deux temps.
- La Phase d’Apprentissage (L’Ingestion)
J’ai créé un script pour uploader les centaine de PDF en ma disposition sur le sujet ensuite l’application les lit, les découpe en petits paragraphes logiques (les « chunks »), et pour chaque chunk, elle demande à mon modele d’embedding gemini-embedding-001 de créer une « signature numérique » (un vecteur). Ces chunks et leurs signatures sont ensuite stockés dans notre bibliothèque Pinecone. - La Phase de Réponse (La Requête)
Quand un utilisateur pose une question :
a. L’application transforme d’abord la question en signature numérique.
b. Elle demande à Pinecone : « Trouve-moi les 4 paragraphes dont la signature ressemble le plus à celle de la question. »
c. Elle construit une instruction (un « prompt ») pour Gemini qui ressemble à : « Contexte : [voici les 4 paragraphes]. Question : [voici la question]. Réponds en te basant uniquement sur ce contexte. »
d. Gemini rédige la réponse, et l’application l’affiche, avec les sources utilisées !
Partie 3 : Mes Galères (et Comment je les ai Surmontées)
Aucun projet n’est un long fleuve tranquille J’ai aussi beaucoup utilisé Google Cloud Log Explorer : c’était littéralement mon guide. Chaque erreur de déploiement ou de configuration passait par là. C’est grâce à lui que j’ai compris d’où venaient la plupart de mes crashs et problèmes de permission… Voici les murs que j’ai heurtés et les leçons que j’ai apprises.

L’Enfer du Déploiement Docker : C’était ma plus grande épreuve. L’application fonctionnait parfaitement sur ma machine, mais crashait systématiquement une fois déployée sur Google Cloud Run. L’erreur était toujours container failed to start.
- Ma première galère : Le chemin du fichier de démarrage. Le build de NestJS créait dist/src/main.js alors que je m’attendais à dist/main.js.
- La solution : J’ai dû inspecter les logs de build de Google Cloud pour voir la structure exacte des fichiers, puis corriger la commande CMD dans mon Dockerfile.
- Ma deuxième galère : La gestion des secrets. Mon fichier .env contenant mes clés d’API n’était pas envoyé dans le cloud (et c’est une bonne chose !). L’application crashait car elle ne trouvait pas ses clés.
- La solution : Utiliser Google Secret Manager. J’y ai stocké toutes mes clés, et j’ai modifié ma commande de déploiement gcloud pour les injecter de manière sécurisée dans mon conteneur.
- Commande clé à retenir (la version finale qui a marché !) :
gcloud run deploy [NOM_SERVICE] --source . --update-secrets="/chemin/fichier/secret.json=nom-secret:latest" --set-env-vars="MA_VARIABLE=nom-secret-variable:latest" ...Les Caprices de CORS : Une fois le backend en ligne, mon frontend (déployé sur Vercel) n’arrivait pas à lui parler. L’erreur Blocked by CORS policy est apparue.
- La solution : Configurer explicitement le backend NestJS pour qu’il accepte les requêtes venant de l’URL de mon site Vercel.
Conclusion : Ce que j’ai Vraiment Appris
Construire ce RAG a été un marathon, mais le jeu en valait la chandelle. J’ai appris que l’IA en production, ce n’est pas juste un appel d’API. C’est de l’architecture logicielle, de la gestion de secrets, et beaucoup de débogage.
Si je devais donner un conseil à celui que j’étais au début de ce projet, ce serait : « Sois patient, lis attentivement chaque message d’erreur, et n’aie pas peur de tout remettre à plat pour repartir sur des bases propres. »
J’espère que ce retour d’expérience vous sera utile. N’hésitez pas si vous avez des questions, et lancez-vous !

Démo




