Récupérateurs
Les récupérateurs exécutent la recherche dans votre index. Search Toolkit propose des récupérateurs vectoriels (sémantiques) pour effectuer des recherches sémantiques sur vos documents.
Récupérateurs disponibles
Récupérateurs disponibles
| Récupérateur | Objectif |
|---|---|
| Récupérateur vectoriel | Recherche sémantique à l'aide d'embeddings |
| Récupérateurs personnalisés | Logique de recherche personnalisée |
Récupérateur vectoriel
Récupérateur vectoriel
Effectue une recherche sémantique à l'aide d'embeddings. Trouve des fragments dont le sens est similaire à la requête, même si les mots utilisés sont 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 | Objectif |
|---|---|---|---|
client | VectorStoreClient | Obligatoire | Stockage vectoriel à interroger |
embedder | Embedder | Obligatoire | Embedder pour la vectorisation des requêtes |
Filtrage :
Filtrez par métadonnées pour affiner les résultats :
results = await retriever.retrieve(
query="machine learning",
top_k=10,
filter={"category": "tutorials", "year": 2024}, # Depends on store support
)i
InformationLa prise en charge du filtrage dépend de votre backend de stockage vectoriel. Vespa magie le filtrage par métadonnées en natif.
Quand l'utiliser :
- Recherche sémantique générale dans vos documents
- Trouver du contenu conceptuellement similaire
- Gestion naturelle des synonymes et des reformulations
Récupérateurs personnalisés
Récupérateurs personnalisés
Implémentez le protocole Retriever pour une logique de recherche personnalisée :
from mistralai.search.toolkit.retrieval.retrievers import Retriever
from mistralai.search.toolkit.indices import SearchResult
class CustomRetriever(Retriever):
"""Custom retriever with domain-specific logic."""
async def retrieve(
self,
query: str,
top_k: int = 10,
filter: dict | None = None,
) -> 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, filter)
# 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, filter: dict) -> 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
Voir aussi
- Présentation de la récupération — Architecture du pipeline de récupération
- Reclassements — Réévaluer les résultats pour un meilleur classement
- Prétraitement des requêtes — Améliorer les requêtes avant récupération