Index de recherche

Les backends de stockage conservent les fragments traités et permettent une recherche efficace dans votre collection de documents. Les magasins de vecteurs permettent une recherche sémantique en stockant les plombages de fragments et en trouvant des vecteurs similaires.

Magasins de vecteurs disponibles

Magasins de vecteurs disponibles

Magasin de vecteursUsage
Index de recherche VespaBase de données vectorielle évolutive avec gestion de schéma et déploiement
Magasins de vecteurs personnalisésBackend de stockage personnalisé
Index de recherche Vespa

Index de recherche Vespa

Utilisez Vespa comme magasin de vecteurs dans les pipelines d'ingestion et de récupération de Search Toolkit. Vespa offre une recherche vectorielle évolutive avec gestion de schéma, classement et clusterisation prête pour la production.

i
Information

Prérequis : vous devez avoir une application Vespa en cours d’exécution avant de vous Connecter avec cet index de recherche. Consultez Gérer et déployer Vespa pour définir des schémas et déployer votre application au préalable.

Fonctions :

  • Recherche vectorielle évolutive optimisée de manière native avec l’indexation HNSW
  • Recherche textuelle BM25 pour un classement hybride
  • Classement multi-phases avec Fonctions de notation personnalisées
  • Prête pour la production avec prise en charge de la mise en cluster et de la réplication

Installation :

uv add "mistralai-search-toolkit[vespa]"

Prérequis

Avant d’utiliser Vespa comme index de recherche :

  1. Définissez votre application — Créez des schémas avec des champs et des profils de classement à l’aide de migrations Python
  2. Déployez Vespa — Exécutez mistral-vespa migrate pour déployer votre application
  3. Obtenez l’endpoint — Notez l’endpoint de requête Vespa (par exemple http://localhost:8080)

Consultez Gérer et déployer Vespa pour des instructions de configuration complètes.

Guide de démarrage rapide

Configurer Vespa comme magasin de vecteurs :

from mistralai.search.toolkit.plugins.vespa import VespaClientConfig
from vespa_app import app

collection_name = "my_collection"
config = VespaClientConfig(
    endpoint="http://localhost:8080",
)

vector_store = app.get_search_index(config, collection_name=collection_name)

Utilisation dans un pipeline d’ingestion :

from mistralai.search.toolkit.ingestion.pipelines import Pipeline

pipeline = Pipeline(
    loader=loader,
    extractor=extractor,
    text_splitter=splitter,
    embedder=embedder,
    stores=vector_store,
)

num_chunks = await pipeline.run(documents=["doc1.pdf", "doc2.pdf"])

Utilisation dans un pipeline de récupération :

from mistralai.search.toolkit.retrieval import QueryEngine
from mistralai.search.toolkit.retrieval.retrievers import VectorRetriever

embedder = MistralEmbedder(client=mistral_client)
query_engine = QueryEngine(
    retriever=VectorRetriever(client=vector_store, embedder=embedder),
)

result = await query_engine.search(query="What is RAG?", top_k=5)

Pour une configuration complète, la conception de schémas et les opérations, consultez Gérer et déployer Vespa.

Magasins de vecteurs personnalisés

Magasins de vecteurs personnalisés

Implémentez des backends de stockage personnalisés en sous-classant VectorStoreIndex (ou KeywordStoreIndex pour la recherche par mots-clés) et en implémentant ses trois méthodes :

from mistralai.search.toolkit.context import IngestContext, RetrievalContext
from mistralai.search.toolkit.search import VectorStoreIndex, VectorSearchQuery, SearchResult
from mistralai.search.toolkit.document import Document

class MyVectorStore(VectorStoreIndex):
    async def index_document(self, document: Document, context: IngestContext = IngestContext()) -> None:
        # Store the document and its chunks
        pass

    async def search(self, query: VectorSearchQuery, context: RetrievalContext = RetrievalContext()) -> list[SearchResult]:
        # Search and return results
        pass

    async def delete_document(self, doc_id: str, context: IngestContext = IngestContext()) -> None:
        # Delete a document by ID
        pass