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érateurObjectif
Récupérateur vectorielRecherche sémantique à l'aide d'embeddings
Récupérateurs personnalisésLogique 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 :

OptionTypeValeur par défautObjectif
clientVectorStoreClientObligatoireStockage vectoriel à interroger
embedderEmbedderObligatoireEmbedder 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
Information

La 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