Section 14.6.3 : RAG pour entreprise
🎯 Objectif pédagogique
Implémenter un système RAG (Retrieval-Augmented Generation) pour permettre aux agents IA d'accéder à la knowledge base de l'entreprise et de fournir des réponses précises basées sur les données internes.
RAG : donner de la mémoire à l'IA
Le RAG permet à un LLM de répondre en se basant sur vos documents internes plutôt que sur ses connaissances générales. C'est la technologie fondamentale derrière les agents IA d'entreprise.
Implémentation RAG pour RevOps
# RAG pipeline pour knowledge base RevOps
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Pinecone
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# 1. Préparer les documents
def prepare_documents(sources):
"""Charger et découper les documents"""
all_docs = []
# Playbooks de vente (Notion)
playbooks = notion.get_pages(database_id="sales_playbooks")
all_docs.extend(playbooks)
# FAQ support (Intercom)
faqs = intercom.get_articles()
all_docs.extend(faqs)
# Documentation produit (Confluence)
docs = confluence.get_pages(space="PRODUCT")
all_docs.extend(docs)
# Découpage en chunks
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["\n## ", "\n### ", "\n\n", "\n", " "]
)
chunks = splitter.split_documents(all_docs)
return chunks
# 2. Indexer dans le vector store
def index_documents(chunks):
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Pinecone.from_documents(
chunks,
embeddings,
index_name="revops-knowledge"
)
return vectorstore
# 3. Créer la chaîne RAG
def create_rag_chain(vectorstore):
llm = ChatOpenAI(model="gpt-4", temperature=0)
retriever = vectorstore.as_retriever(
search_type="mmr", # Maximum Marginal Relevance
search_kwargs={"k": 5, "fetch_k": 20}
)
chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
return chain
# Usage
chain = create_rag_chain(vectorstore)
result = chain({"query": "Quel est le processus de qualification BANT ?"})
print(result["result"]) # Réponse basée sur VOS playbooks
print(result["source_documents"]) # Sources citées
Bonnes pratiques RAG en entreprise
## Pièges courants et solutions
### Piège 1 : Chunks trop grands ou trop petits
- Trop grands : contexte dilué, réponses vagues
- Trop petits : perte de contexte
- Solution : chunks de 500-1500 tokens avec overlap de 100-200
### Piège 2 : Pas de metadata
- Sans metadata, impossible de filtrer par source/date/type
- Solution : toujours ajouter source, date, type, auteur, département
### Piège 3 : Données obsolètes
- Le RAG renvoie des infos périmées (ancien pricing, anciens process)
- Solution : pipeline de sync automatique + date de fraîcheur dans le prompt
### Piège 4 : Hallucinations malgré le RAG
- Le LLM peut "inventer" en combinant des sources incompatibles
- Solution : prompt "Réponds UNIQUEMENT à partir des sources fournies.
Si l information n est pas dans les sources, dis-le."
### Piège 5 : Sécurité des données
- Tous les employés ne doivent pas voir toutes les données
- Solution : contrôle d accès au niveau du retriever (filtrer par rôle)
Vector databases pour RAG enterprise
← Scroll horizontally →
Pourquoi le RAG est-il préférable au fine-tuning pour une knowledge base d'entreprise ?
Apprendre l’IA, du premier prompt aux agents