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
| Magasin de vecteurs | Usage |
|---|---|
| Index de recherche Vespa | Base de données vectorielle évolutive avec gestion de schéma et déploiement |
| Magasins de vecteurs personnalisés | Backend de stockage personnalisé |
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.
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 :
- Définissez votre application — Créez des schémas avec des champs et des profils de classement à l’aide de migrations Python
- Déployez Vespa — Exécutez
mistral-vespa migratepour déployer votre application - 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
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