Construire un assistant RAG local avec Ollama
Architecture, embeddings, vector store et patterns pour un chatbot privé qui répond sur vos documents internes.
Quand un client refuse d'envoyer ses documents internes vers un LLM cloud, la question devient : comment construire un assistant qui répond aussi bien que ChatGPT, mais qui tourne entièrement sur leurs serveurs ?
La réponse tient en trois lettres : RAG. Retrieval-Augmented Generation. Et avec Ollama, on peut le faire en quelques heures sur une machine raisonnablement puissante.
Le pattern en 4 étapes
Un système RAG, c'est essentiellement un pipeline qui (1) découpe vos documents en chunks, (2) calcule un embedding par chunk, (3) stocke ces vecteurs dans une base, et (4) au moment de la question, retrouve les chunks pertinents et les injecte dans le prompt.
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Qdrant
embeddings = OllamaEmbeddings(model="nomic-embed-text")
store = Qdrant.from_documents(chunks, embeddings, url="http://localhost:6333")
retriever = store.as_retriever(search_kwargs={"k": 4})Le piège classique : le chunking
90% de la qualité d'un RAG dépend du découpage. Trop petit, on perd le contexte. Trop grand, on noie les embeddings. Le sweet spot tourne autour de 500 tokens avec un overlap de 50 - mais sur des contrats juridiques, on monte à 1500. Sur du code, on suit les frontières syntaxiques.
Ce que je livre en mission
En général, l'objectif tient en une phrase : votre équipe pose une question en français, l'assistant répond avec les sources. Concrètement, ça donne une stack Ollama + Qdrant + FastAPI + un front Streamlit ou React. Le tout en local, traçable, sans envoi de données.