?
TemplateintermédiaireVérifié le 2025-05

Template : pipeline RAG avec LangChain

Boilerplate complet pour un pipeline RAG production-ready avec LangChain.

Pipeline RAG production-ready

Ce template implémente un pipeline RAG complet avec LangChain et LlamaIndex, prêt pour la production. Il couvre l'ingestion, le retrieval, et la génération.

Architecture

Documents → Loader → Splitter → Embeddings → Vector Store
                                                    ↓
User Query → Retriever → Reranker → Prompt → LLM → Response

1. Ingestion des documents

from langchain_community.document_loaders import (
    PyPDFLoader, TextLoader, UnstructuredMarkdownLoader
)
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import PGVector

# Chargement
loader = PyPDFLoader("document.pdf")
docs = loader.load()

# Découpage
splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
chunks = splitter.split_documents(docs)

# Stockage vectoriel
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = PGVector.from_documents(
    chunks, embeddings,
    connection_string="postgresql://...",
    collection_name="my_docs"
)

2. Retrieval et génération

from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate

template = """Utilise le contexte suivant pour répondre.
Si tu ne sais pas, dis-le.

Contexte: {context}
Question: {question}
Réponse:"""

prompt = PromptTemplate(template=template, input_variables=["context", "question"])

llm = ChatOpenAI(model="gpt-4o", temperature=0)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})

chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever,
    chain_type_kwargs={"prompt": prompt},
    return_source_documents=True
)

3. Améliorations production

Metadata filtering

retriever = vectorstore.as_retriever(
    search_kwargs={
        "k": 5,
        "filter": {"source": "guide_technique.pdf"}
    }
)

Conversational RAG (avec mémoire)

from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferWindowMemory

memory = ConversationBufferWindowMemory(
    memory_key="chat_history",
    return_messages=True,
    k=5
)

chain = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=retriever,
    memory=memory
)

4. Checklist production

  • Monitoring des latences (ingestion et retrieval)
  • Cache des embeddings pour les requêtes fréquentes
  • Retry logic sur les appels API
  • Logging des sources utilisées pour l'auditabilité
  • Tests de régression avec un golden dataset

Sources

RAGLangChaintemplate