Aller au contenu principal

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 :

  1. Executer la recherche hybride (vectorielle + BM25) normalement
  2. Fusionner les resultats comme d’habitude
  3. Passer les resultats fusionnes a une fonction de reranking
  4. La fonction envoie le tout a Claude avec un prompt specifique
  5. 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.