Naive RAG
iaDéfinition
Le Naive RAG designe l'implementation fondamentale du RAG (Retrieval-Augmented Generation) suivant un pipeline lineaire en trois etapes : indexation, retrieval, et generation. C'est le point de depart de tout systeme RAG et la reference contre laquelle les approches Advanced RAG et Modular RAG sont comparees. Le pipeline Naive RAG : (1) Indexation — les documents sont decoupes en chunks de taille fixe (ex: 512 tokens avec 50 tokens de chevauchement), chaque chunk est encode avec un modele d'embedding, et les vecteurs sont stockes dans une base vectorielle. (2) Retrieval — la requete utilisateur est encodee, les k chunks les plus similaires sont recuperes. (3) Generation — les k chunks sont concatenes dans un prompt contextuel envoye au LLM. Malgre sa simplicite, le Naive RAG peut etre suffisant pour des use-cases simples avec des documents bien structures et des requetes claires. Sa principale valeur est pedagogique : il permet de comprendre les composants fondamentaux du RAG. Les limitations : qualite du retrieval tres dependante de la taille des chunks, questions necessitant la synthese de plusieurs documents mal gerees, requetes imprécises donnent des resultats pauvres, et pas de mecanisme pour evaluer si les chunks sont reellement pertinents. Ces limitations ont motive le developpement de l'Advanced RAG (avec pre-retrieval et post-retrieval processing) et du Modular RAG (avec composants remplacables et strategies adaptatives).
Pipeline Naive RAG minimal
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader
# 1. INDEXATION
docs = PyPDFLoader('politique-securite.pdf').load()
chunks = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50).split_documents(docs)
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
# 2. RETRIEVAL
retriever = vectorstore.as_retriever(search_kwargs={'k': 3})
# 3. GENERATION
question = 'Quels sont les mots de passe autorises ?'
context_docs = retriever.invoke(question)
context_text = '\n'.join([c.page_content for c in context_docs])
answer = ChatOpenAI().invoke(f'Context:\n{context_text}\n\nQuestion: {question}')Limitations communes du Naive RAG
- Chunking naif : les phrases coupees au milieu perdent leur coherence
- Pas de reranking : les k chunks ne sont pas filtres par pertinence reelle
- Absence de query expansion : les termes ambigus ne sont pas corriges
- Lost in the middle : les chunks au milieu du contexte LLM sont moins bien utilises
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h