Aller au contenu principal

Implementer le flux RAG

Ce guide pratique demontre l’implementation complete du RAG en utilisant un document exemple. Nous construisons une base vectorielle et executons les cinq etapes du workflow RAG.

Etape 1 : Decouper le texte par section

with open("./report.md", "r") as f:
    text = f.read()

chunks = chunk_by_section(text)

Etape 2 : Generer les embeddings pour chaque chunk

embeddings = [generate_embedding(chunk) for chunk in chunks]

Cette etape implique plusieurs appels API et prend du temps. Chaque chunk est converti en representation vectorielle numerique.

Etape 3 : Stocker dans la base vectorielle

store = VectorIndex()

for embedding, chunk in zip(embeddings, chunks):
    store.add_vector(embedding, {"content": chunk})

Point essentiel : stockez a la fois l’embedding et le texte original. Recuperer uniquement une liste de nombres n’est pas utile — vous avez besoin du texte reel qui correspond a ces embeddings.

Etape 4 : Generer l’embedding de la requete utilisateur

user_embedding = generate_embedding(
    "Qu'a fait le departement d'ingenierie logicielle l'annee derniere ?"
)

Cela cree une representation vectorielle de la question qui peut etre comparee aux embeddings stockes.

Etape 5 : Rechercher et recuperer les chunks pertinents

results = store.search(user_embedding, 2)

for doc, distance in results:
    print(distance, "\n", doc["content"][0:200], "\n")

Les resultats sont classes par pertinence. La distance cosinus aide a comprendre le niveau de confiance du systeme sur la pertinence de chaque resultat. Des distances plus faibles = de meilleurs resultats.

Pourquoi stocker le texte avec les embeddings

Une decision de conception cruciale. Sans le texte original, vous ne recupereriez que des tableaux de nombres inutilisables. En incluant le texte source, vous pouvez immediatement utiliser les chunks recuperes pour fournir du contexte a votre modele de langage.

Cela complete le workflow RAG de base. Des optimisations supplementaires (recherche hybride, reranking, retrieval contextuel) peuvent ameliorer significativement les performances.