Récupérateurs
Les retrievers exécutent la recherche sur votre index. Search Toolkit fournit des retrievers vectoriels (sémantiques) et par mots-clés (BM25), que vous pouvez combiner pour une recherche hybride.
Récupérateurs disponibles
| Récupérateur | Usage |
|---|---|
| Récupérateur vectoriel | Recherche sémantique à l’aide d’embeddings |
| Retriever par mots-clés | Recherche BM25 / par mots-clés |
| Recherche hybride | Combiner des retrievers vectoriels et par mots-clés |
| Récupérateurs personnalisés | Logique de recherche personnalisée |
Récupérateur vectoriel
Effectue une recherche sémantique à l’aide d’embeddings. Trouve des fragments de sens similaire à la requête, même s’ils utilisent des mots différents.
Installation : Bibliothèque principale (aucune dépendance supplémentaire requise)
Exemple :
from mistralai.search.toolkit.retrieval.retrievers import VectorRetriever
retriever = VectorRetriever(
client=vector_store, # Vector store client (Vespa or custom implementation)
embedder=embedder, # MistralEmbedder or custom Embedder
)
results = await retriever.retrieve(
query="What is semantic search?",
top_k=10,
)Options de configuration :
| Option | Type | Valeur par défaut | Usage |
|---|---|---|---|
client | VectorStoreIndex | Obligatoire | Stockage vectoriel à rechercher |
embedder | Embedder | Obligatoire | Embedder pour la vectorisation des requêtes |
Quand l’utiliser :
- Recherche sémantique générale dans vos documents
- Trouver du contenu similaire sur le plan conceptuel
- Gestion naturelle des synonymes et des reformulations
Retriever par mots-clés
Effectue une recherche par mots-clés dans un KeywordStoreIndex. Ce retriever trouve les fragments qui partagent des termes avec la requête et les classe par pertinence lexicale.
Les backends Vespa et Postgres intégrés n’implémentent pas KeywordStoreIndex. Utilisez KeywordRetriever avec un stockage de mots-clés personnalisé. Pour une recherche hybride avec un backend intégré, utilisez VectorRetriever ; il transmet le texte et l’embedding de la requête au backend.
Installation : Bibliothèque principale (aucune dépendance supplémentaire requise)
Exemple :
from mistralai.search.toolkit.retrieval.retrievers import KeywordRetriever
retriever = KeywordRetriever(
client=keyword_store, # Custom KeywordStoreIndex implementation
)
results = await retriever.retrieve(
query="quarterly revenue report",
top_k=10,
)Options de configuration :
| Option | Type | Valeur par défaut | Usage |
|---|---|---|---|
client | KeywordStoreIndex | Obligatoire | Stockage de mots-clés à interroger |
Quand l’utiliser :
- Correspondance de termes exacts (noms, identifiants, codes d’erreur)
- Requêtes où la pertinence lexicale compte plus que la sémantique
- Comme l’un des composants d’une recherche hybride (voir ci-dessous)
Recherche hybride
Si vous disposez de stockages vectoriels et de mots-clés personnalisés distincts, exécutez les deux retrievers et fusionnez leurs résultats. Transmettez les retrievers à QueryEngine et combinez-les avec un reranker de fusion comme RRFRanker :
from mistralai.search.toolkit.retrieval import QueryEngine
from mistralai.search.toolkit.retrieval.retrievers import VectorRetriever, KeywordRetriever
from mistralai.search.toolkit.retrieval.rerankers import RRFRanker
query_engine = QueryEngine(
retriever=[
VectorRetriever(client=vector_store, embedder=embedder),
KeywordRetriever(client=keyword_store),
],
rerankers=[RRFRanker(rrf_k=60, top_k=10)],
)
result = await query_engine.search(query="What is RAG?", top_k=10)Consultez Rerankers pour RRF et d’autres stratégies de fusion.
Récupérateurs personnalisés
Implémentez le protocole Retriever pour une logique de recherche personnalisée :
from mistralai.search.toolkit.context import RetrievalContext
from mistralai.search.toolkit.retrieval.retrievers import Retriever
from mistralai.search.toolkit.search import SearchResult
class CustomRetriever(Retriever):
"""Custom retriever with domain-specific logic."""
async def retrieve(
self,
query: str,
top_k: int = 10,
include_metadata: bool = True,
include_content: bool = True,
context: RetrievalContext = RetrievalContext(),
) -> list[SearchResult]:
"""Retrieve relevant chunks for the query."""
# 1. Preprocess query
processed_query = self._preprocess(query)
# 2. Search with custom logic
results = await self._search(processed_query, top_k)
# 3. Post-process or augment results
enhanced_results = self._enhance(results)
return enhanced_results
def _preprocess(self, query: str) -> str:
# Custom preprocessing (stemming, lemmatization, etc.)
return query.lower().strip()
async def _search(self, query: str, top_k: int) -> list[SearchResult]:
# Custom search implementation
...
def _enhance(self, results: list[SearchResult]) -> list[SearchResult]:
# Augment results with additional context
...
# Use in QueryEngine
query_engine = QueryEngine(retriever=CustomRetriever())Voir aussi
- Présentation de la récupération : Architecture du pipeline de récupération
- Réorganisateurs : Réévaluez les résultats pour un meilleur classement
- Prétraitement des requêtes : Améliorez les requêtes avant la récupération