Le reranking des resultats
Le reranking est une technique de post-traitement qui ameliore significativement la precision de la recuperation en ajoutant une etape supplementaire apres la recherche hybride.
Le processus
- Executer la recherche hybride (vectorielle + BM25)
- Fusionner les resultats comme avant
- Envoyer les resultats fusionnes a Claude avec un prompt de reranking
- Recuperer une liste reordonnee des documents les plus pertinents
Le prompt de reranking
Tu vas recevoir un ensemble de documents avec un identifiant chacun.
Ta tache est de selectionner les {k} documents les plus pertinents
pour repondre a la question de l'utilisateur.
<question>
{query_text}
</question>
<documents>
{joined_docs}
</documents>
Reponds dans ce format :
```json
{
"document_ids": str[] // Liste des IDs, {k} elements, tries par pertinence decroissante
}
Optimisation avec les IDs
Demandez des identifiants de documents plutot que le texte complet. Cela evite a Claude de recopier de gros blocs de texte et accelere le reranking.
Implementation
def reranker_fn(docs, query_text, k):
joined_docs = "\n".join([
f"""
<document>
<document_id>{doc["id"]}</document_id>
<document_content>{doc["content"]}</document_content>
</document>
"""
for doc in docs
])
# Construire le prompt, envoyer a Claude, parser les IDs
retriever = Retriever(bm25_index, vector_index, reranker_fn=reranker_fn)
Compromis
- Plus de latence : un appel LLM supplementaire
- Meilleure precision : le LLM comprend mieux le contexte et l’intention
- Cout supplementaire : chaque recherche necessite un appel API