Search Toolkit
Search Toolkit est un framework Python pour construire des systèmes de recherche d’information (RI). Il fournit des composants pour l’ingestion, la récupération et l’évaluation. Il fonctionne avec plusieurs backends et chaque composant est remplaçable.
Les LLM ne sont pas entraînés sur vos données privées. Pour ancrer leurs réponses dans vos documents, vous avez besoin d’un pipeline de récupération qui ingère, indexe et recherche votre contenu. Search Toolkit fournit les briques de ce pipeline.
Caractéristiques clés
Ingestion
Ingestion comprend :
- Extraction multi-format : PDF, DOCX et PPTX via Mistral OCR, HTML, classeurs, e-mails, texte brut
- Chargement de fichiers : chargez depuis le système de fichiers local, S3, Google Cloud Storage ou Azure Blob Storage, ou implémentez des loaders personnalisés pour toute source
- Découpage flexible : découpage par caractères, par tokens, adapté au Markdown ou basé sur des séparateurs
- Enrichissement : enrichissez les documents et les fragments avec des métadonnées personnalisées ou des résumés générés par un LLM
- Indexation : indexez vos documents dans un Mistral Search Index
Récupération
Récupération comprend :
- Recherche : recherche vectorielle ou hybride sur l'index en un seul appel
- Accès Personnalisé aux données : avec
retrieve, combinez les méthodes de recherche vectorielle et par mots-clés, recherchez dans des champs personnalisés et pondérez la fusion des résultats - Filtres : restreignez les résultats de
retrievepar catégorie, date, source ou tout champ personnalisé avant le classement
Architecture
L'ingestion transforme des documents bruts en fragments exploitables pour la recherche. Un FileLoader lit des octets bruts depuis une source, un DocumentExtractor les convertit en document structuré, un TextSplitter le découpe en fragments, des étapes DocumentProcessor optionnelles (comme un ChunkEnricher ou un SummaryEnricher) ajoutent des métadonnées, et un Embedder produit des vecteurs pour l'indexation dans un Mistral Search Index.
La recherche trouve les fragments pertinents pour une requête donnée. L'index de recherche exécute la requête avec l'une des deux méthodes suivantes : search pour une recherche vectorielle ou En environnement hybride, ou retrieve pour une requête de recherche que vous composez vous-même, avec des filtres.
Pipeline orchestre l'ingestion. Vous pouvez remplacer chaque composant d'ingestion : utilisez les implémentations intégrées ou vos propres implémentations.
Composants
| Composant | Options intégrées |
|---|---|
| Loaders de fichiers | FilesystemFileLoader, S3FileLoader, GCSFileLoader, AzureBlobFileLoader, loaders personnalisés |
| Extracteurs | MistralOCRExtractor, SmartPDFExtractor, PlainTextExtractor, PyMuPDFExtractor, HTMLExtractor, SpreadsheetExtractor, EmailExtractor, EmailWithAttachmentsExtractor, NumbersExtractor, LegacyOfficeExtractor, MistralAudioTranscriptionExtractor |
| Découpeurs de texte | CharacterTextSplitter, TokenTextSplitter, MarkdownTextSplitter, ParagraphTokenTextSplitter, MarkdownTokenTextSplitter, SeparatorTextSplitter |
| Enrichisseurs | SummaryEnricher, ChunkEnricher personnalisé |
| Embedders | MistralEmbedder, Embedder personnalisé |
| Stockage | Mistral Search Index, Vespa, Postgres (pgvector), Qdrant ou base vectorielle personnalisée |
| Récupération | search et retrieve sur l'index, avec des filtres sur retrieve |
Installation et extras
Installez le package principal :
uv add mistralai-search-toolkitLe paquet principal comprend le backend Mistral Search Index, le stockage par défaut des pipelines du Search Toolkit. Les backends auto-hébergés tels que Vespa et Postgres sont livrés sous forme d'extras.
Les extras optionnels ajoutent des fonctionnalités spécialisées :
| Extra | Description |
|---|---|
vespa | Plugin Vespa pour le stockage vectoriel et la recherche sémantique |
postgres | Backend PostgreSQL avec pgvector et pg_textsearch |
extractor-pymupdf | Extraction PDF avancée avec PyMuPDF Pro |
extractor-spreadsheet | Analyse de classeurs (Excel, CSV, Apple Numbers) |
extractor-email | Analyse de fichiers e-mail (formats EML, MSG) |
html-converter-markdownify | Convertit le HTML en Markdown |
text-splitter-langchain | Stratégies supplémentaires de découpage de texte via LangChain |
storage-gcs | Intégration Google Cloud Storage |
storage-azure | Intégration Azure Blob Storage |
storage-s3 | Intégration Amazon S3 |
Installez les extras avec le package principal :
uv add "mistralai-search-toolkit[extractor-pymupdf]"
uv add "mistralai-search-toolkit[extractor-pymupdf,storage-s3]"Tous les packages sont disponibles sur PyPI.
Nécessite Python 3.12 à 3.14. Nous recommandons d’utiliser uv pour la gestion des dépendances.
Conventions
- Tout est asynchrone. Attendez chaque appel d'index, de service, de pipeline et de moteur de requêtes, et exécutez-les dans une fonction
asyncou avecasyncio.run. - Les modèles sont immuables.
Document,DocumentChunk, leurs métadonnées etSearchResultsont des modèles Pydantic figés. Pour en modifier un, créez une copie avecmodel_copy(update={...}). - Transmettez le contexte de la requête dans un objet de contexte. Chaque appel d'ingestion et de recherche accepte un objet
IngestContextouRetrievalContextfacultatif. Pour transmettre des identifiants de tenants, des spans de traçage ou des en-têtes de l'API Mistral propres à chaque requête à travers la pile sans ajouter d'arguments, créez des sous-classes de ces classes de contexte.
Vérifiez votre configuration
Avant de construire sur un nouvel index, vérifiez-le de bout en bout :
- Vérifiez que
(await service.get_index_info(name)).statusvautready. - Ingérez un document.
- Vérifiez qu'un appel à
searchouretrieveportant sur une phrase de ce document renvoie le document.
Le Guide de démarrage reprend ces trois étapes.
Étapes suivantes
- Guide de démarrage : construire de bout en bout votre premier pipeline d’ingestion et de récupération.
- Modèle de document : comprendre
Document,DocumentChunket l’identité qui les relie. - Modèle de représentations vectorielles : comprendre comment le schéma décrit les vecteurs, indépendamment de l’embedder.
- Index de recherche : configurer votre base vectorielle.
- Ingestion : charger, extraire, fragmenter, enrichir et indexer vos documents.
- Récupération : interrogez l'index avec
searchetretrieve.