Ingestion
L'ingestion transforme des documents bruts en fragments indexés dans une base vectorielle. Le pipeline est modulaire — vous pouvez remplacer n'importe quel composant selon vos besoins.
Un FileLoader lit les octets bruts depuis une source (système de fichiers local, stockage cloud, ou toute source personnalisée) et renvoie un objet File.
Un DocumentExtractor convertit ce File en un Document structuré — en analysant les PDF via OCR, en convertissant le HTML en Markdown, ou en lisant du texte brut selon le type de fichier.
Un TextSplitter divise le Document en objets DocumentChunk plus petits. La stratégie et la taille des fragments affectent directement la qualité de la recherche.
Un ChunkEnricher optionnel ajoute des métadonnées à chaque fragment avant l'indexation — par exemple, un résumé généré par LLM ou des balises d'entités.
Un Embedder convertit chaque fragment en vecteur, et le store persiste à la fois le vecteur et le texte brut pour la recherche.
Pipeline
Pipeline est le point d'entrée principal. Il gère le chargement de fichiers, l'extraction, la fragmentation, l'embedding et l'indexation. Il prend en charge le traitement par batch avec concurrence, suivi de progression et points de contrôle.
from mistralai.search.toolkit.ingestion.pipelines import Pipeline
from mistralai.client import Mistral
from mistralai.search.toolkit.embedders import MistralEmbedder, MODEL_1024_EMBEDDING
from mistralai.search.toolkit.ingestion.extractors import PlainTextExtractor
from mistralai.search.toolkit.ingestion.loaders import FilesystemFileLoader
from mistralai.search.toolkit.ingestion.text_splitters import CharacterTextSplitter
from mistralai.search.toolkit.ingestion.enrichers import SummaryEnricher
from mistralai.search.toolkit.plugins.vespa import VespaClientConfig
from vespa_app import app
mistral_client = Mistral(api_key="...")
collection_name = "my_collection"
config = VespaClientConfig(
endpoint="http://localhost:8080",
)
vector_store = app.get_search_index(config, collection_name=collection_name)
pipeline = Pipeline(
loader=FilesystemFileLoader(),
extractor=PlainTextExtractor(),
text_splitter=CharacterTextSplitter(chunk_size=512),
chunk_enrichers=[SummaryEnricher(client=mistral_client)],
embedder=MistralEmbedder(client=mistral_client, model_name=MODEL_1024_EMBEDDING),
vector_store=vector_store,
)
num_chunks = await pipeline.run(
documents=["doc1.txt", "doc2.txt"],
collection_name="my_collection",
)collection_name agit comme un espace de noms pour vos fragments indexés. Utilisez le même nom lors de la récupération de documents ultérieurement.
Points de contrôle
Pour les grandes collections de documents, activez les points de contrôle pour récupérer après une défaillance :
from mistralai.search.toolkit.ingestion.progress import create_tqdm_progress_callback
from mistralai.search.toolkit.ingestion.enrichers import SummaryEnricher
pipeline = Pipeline(
loader=FilesystemFileLoader(),
extractor=extractor,
text_splitter=splitter,
chunk_enrichers=[SummaryEnricher(client=mistral_client)],
embedder=embedder,
vector_store=vector_store,
checkpoint_dir="./checkpoints",
)
num_chunks = await pipeline.run(
documents=document_paths,
collection_name="my_collection",
use_checkpoint=True,
progress_callback=create_tqdm_progress_callback(),
)Au redémarrage, les documents avec des fichiers de point de contrôle existants sont ignorés.
RoutedPipeline
RoutedPipeline achemine automatiquement les fichiers vers des pipelines spécifiques au protocole en fonction de l'extension de fichier et du type MIME. Utilisez-le lors de l'ingestion de collections de documents de formats mixtes — il sélectionne intelligemment le bon extracteur et le pipeline de traitement pour chaque type de fichier.
Protocoles
RoutedPipeline inclut 9 protocoles intégrés. Chaque protocole associe un ensemble de types de fichiers au pipeline d'extraction approprié :
| Protocole | Types de fichiers |
|---|---|
ocr | PDF, DOCX, PPTX, ODT, EPUB |
plain_text | TXT, MD, CSV, JS, PY, JSON, YAML, ... |
html | HTML, HTM |
xlsx | XLSX, XLS, ODS |
numbers | NUMBERS |
legacy_office | DOC, PPT, HWP, HWPX |
email | EML, MSG |
image | PNG, JPEG, GIF, WebP |
audio | MP3, WAV, M4A, FLAC, OGG |
Exemple
Utilisation de base avec les protocoles par défaut :
from mistralai.search.toolkit.ingestion.pipelines import RoutedPipeline
router = RoutedPipeline({
"ocr": ocr_pipeline,
"html": html_pipeline,
"plain_text": text_pipeline,
"xlsx": spreadsheet_pipeline,
})
document = await router.run_file(file=file)Paramètres
| Paramètre | Description |
|---|---|
pipelines | Dictionnaire associant les noms de protocoles aux instances Pipeline |
mime_registry | Registre MIME personnalisé optionnel pour la détection du type de fichier |
protocol_overrides | Dictionnaire optionnel pour remplacer le protocole par défaut pour des extensions de fichiers spécifiques |
Exemple de remplacement
Forcer des extensions de fichiers spécifiques à utiliser un protocole différent :
router = RoutedPipeline(
pipelines={
"ocr": ocr_pipeline,
"html": html_pipeline,
"plain_text": text_pipeline,
"xlsx": spreadsheet_pipeline,
},
protocol_overrides={
".doc": "ocr", # Force legacy docs through OCR instead of legacy_office
},
)
document = await router.run_file(file=file)Composants
Chaque composant d'ingestion est documenté en détail avec les options de configuration, les bonnes pratiques et des exemples :
- Chargeurs de fichiers — Charger des fichiers depuis le système de fichiers, le stockage cloud ou des sources personnalisées
- Extracteurs de documents — Extraire le contenu de PDF, HTML, feuilles de calcul et plus encore (7 formats pris en charge)
- Diviseurs de texte — Diviser les documents en fragments avec une taille et un chevauchement optimaux
- Enrichisseurs de fragments — Ajouter des métadonnées personnalisées pour le filtrage et le classement
- Embedders — Convertir le texte en vecteurs pour la recherche sémantique
- Index de recherche — Stocker et rechercher dans les fragments indexés