Aller au contenu principal

Implementer le flux RAG

Implementons le pipeline RAG etape par etape.

Les cinq etapes

1. Decouper le texte par section

chunks = chunk_by_section(text)

2. Generer les embeddings

embeddings = generate_embedding(chunks)

3. Stocker en base vectorielle

store = VectorIndex()

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

On stocke l’embedding et le texte original. L’embedding seul est inutile pour nous : on a besoin du contenu lisible qu’il represente.

4. Generer l’embedding de la requete

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

5. Rechercher les documents pertinents

results = store.search(user_embedding, 2)

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

Comprendre les resultats

La recherche retourne les segments les plus proches avec leur score de distance cosinus. Plus la distance est faible, plus le contenu est similaire a la requete.

Pourquoi stocker le contenu avec les embeddings

Les embeddings ne sont que des tableaux de nombres sans signification directe pour un humain. Quand la recherche retourne les embeddings les plus similaires, il faut le texte original pour comprendre ce qui a ete trouve et l’utiliser dans les reponses.