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 → Response1. 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