Aller au contenu principal

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

  1. Executer la recherche hybride (vectorielle + BM25)
  2. Fusionner les resultats comme avant
  3. Envoyer les resultats fusionnes a Claude avec un prompt de reranking
  4. 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