Exercices IA & Data Science Top-K recherche de documents
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Top-K recherche de documents

En RAG, on ne veut pas juste le meilleur document, on veut souvent les K meilleurs. Ca permet de donner plus de contexte au modèle de langage pour générer sa réponse.

numpy.argsort() trie les indices d'un tableau. Pour avoir les K plus grands :
indices_tries = scores.argsort()[::-1][:k]
Ca trie par ordre decroissant et prend les K premiers.

Écris une fonction search_top_k(query, documents, k) qui renvoie les k Documents les plus pertinents, tries du plus pertinent au moins pertinent.

Si k est plus grand que le nombre de documents, renvoie tous les documents tries.

Exemple :
docs = [Document(page_content='Python'), Document(page_content='Java'), Document(page_content='Python web')]
search_top_k('Python', docs, 2)
renvoie les 2 Documents les plus proches de 'Python'

Tests (1/1)

Tests
from langchain_core.documents import Document
docs = [
    Document(page_content='Python est un langage de programmation'),
    Document(page_content='Java est un autre langage'),
    Document(page_content='Python et Django pour le web'),
    Document(page_content='Les chats sont mignons'),
]
result = search_top_k('Python programmation', docs, 2)
assert len(result) == 2, f'Attendu 2 résultats, obtenu {len(result)}'
assert all(isinstance(r, Document) for r in result), 'Les résultats doivent etre des Documents'
top1 = result[0].page_content
assert 'Python' in top1, f'Le premier résultat devrait mentionner Python: {top1}'
result_all = search_top_k('Python', docs, 10)
assert len(result_all) == 4, 'Si k > nombre de docs, renvoyer tous les docs'

Indices (3 disponibles)

solution.py