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.