Hasina Razafintsalama

Hasina RAZAFINTSALAMA

← Retour au Blog
IA & RAG

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.

2026-05-12·10 min

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

python
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

python
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