Reranking des resultats
L’approche de retrieval hybride fonctionne bien, mais il reste des imperfections. Quand vous cherchez des termes specifiques ou utilisez des abreviations, les resultats peuvent ne pas etre parfaitement ordonnes.
Reranking par LLM
Le reranking ajoute une etape de post-traitement apres la fusion des resultats. Le concept : prendre vos resultats de recherche et demander a Claude de les reordonner selon leur pertinence par rapport a la question de l’utilisateur.
Le processus :
- Executer la recherche hybride (vectorielle + BM25) normalement
- Fusionner les resultats comme d’habitude
- Passer les resultats fusionnes a une fonction de reranking
- La fonction envoie le tout a Claude avec un prompt specifique
- Claude renvoie une liste reordonnee des documents les plus pertinents
Le prompt de reranking
Vous etes charge de trouver les documents les plus pertinents
par rapport a la question d'un utilisateur.
<user_question>
Que s'est-il passe avec INC-2023-Q4-011 ?
</user_question>
Voici des documents potentiellement pertinents :
<documents>
<document>Section 10...</document>
<document>Section 2...</document>
</documents>
Renvoyez les 3 documents les plus pertinents, par ordre decroissant de pertinence.
Optimisation : utiliser des IDs
Demander a Claude de renvoyer le texte complet des chunks serait inefficace. Assignez un ID unique a chaque chunk, puis demandez a Claude de ne renvoyer que ces IDs dans le bon ordre. C’est beaucoup plus rapide.
Implementation
def reranker_fn(docs, query_text, k):
joined_docs = "\n".join([
f"<document><document_id>{doc['id']}</document_id>"
f"<document_content>{doc['content']}</document_content></document>"
for doc in docs
])
# Creer le prompt avec la question et les documents
# Obtenir la reponse de Claude et parser les IDs
result = chat(messages, stop_sequences=["```"])
return json.loads(result["text"])["document_ids"]
Compromis
Le reranking augmente la latence (il faut attendre la reponse de Claude), mais ameliore significativement la precision de la recherche en exploitant la comprehension du contexte et de la pertinence par Claude.