Intégrer un système RAG avec LangChain et FastAPI
Le RAG permet d'ancrer un LLM dans vos propres données. Voici comment construire un pipeline RAG production-ready avec LangChain et FastAPI.
Le RAG (Retrieval-Augmented Generation) est la façon la plus pratique de donner à un LLM accès à vos données privées,sans fine-tuning. On stocke les documents dans une base vectorielle, on récupère les chunks les plus pertinents à la requête, et on les injecte dans le prompt du LLM comme contexte.
Architecture RAG en résumé
- ✓Indexation : découper les documents en chunks → les embedder → stocker dans une DB vectorielle (Chroma, Qdrant, Pinecone)
- ✓Récupération : embedder la requête utilisateur → recherche par similarité → retourner les top-k chunks
- ✓Génération : construire un prompt avec le contexte récupéré → appeler le LLM → retourner la réponse
Mise en place du pipeline avec LangChain
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
# 1. Charger et découper les documents
loader = PyPDFLoader("docs/spec-technique.pdf")
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
docs = splitter.split_documents(loader.load())
# 2. Embedder et stocker
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db")
# 3. Construire la chaîne RAG
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k": 4}),
)Exposition via FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class QueryRequest(BaseModel):
question: str
@app.post("/ask")
async def ask(body: QueryRequest):
result = qa_chain.invoke({"query": body.question})
return {"answer": result["result"]}Points clés en production : limiter les appels LLM (rate limit), mettre en cache les requêtes fréquentes, monitorer la consommation de tokens par requête, et implémenter la détection d'hallucinations (seuils de confiance, citation des sources).
La stratégie de chunking est déterminante
La qualité d'un système RAG dépend à 70% du chunking et de la récupération, et seulement à 30% du LLM. Expérimenter les tailles de chunks (500–1500 tokens), l'overlap (10–20%) et les stratégies de récupération (similarité, MMR, recherche hybride) avant de toucher au modèle.
Besoin d'aide sur ce sujet ? Intégration IA & RAG
Découvrir ce service →