Eine Dokumentmenge indexieren
Erzeugen Sie für jeden Chunk ein Embedding und speichern Sie die Vektoren in einem Index – der Offline-Vorbereitungsschritt jedes RAG-Systems.
Eine Dokumentmenge indexieren ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Ingestion-Pipeline
Die Offline-RAG-Pipeline umfasst vier Schritte:
- Laden von Dokumenten (PDF, HTML, MD)
- Aufteilen jedes Dokuments in Chunks
- Erzeugen von Embeddings für jeden Chunk
- Speichern der Vektoren und Metadaten in einem Index
Schritt 1: Dokumente laden
Verwenden Sie für verschiedene Formate spezialisierte Loader:
# PDFs
from pypdf import PdfReader
text = ''
for page in PdfReader('doc.pdf').pages:
text += page.extract_text()
# HTML
from bs4 import BeautifulSoup
text = BeautifulSoup(html, 'html.parser').get_text()
# Markdown — just read the file
text = open('doc.md').read()Schritt 2: In Chunks aufteilen
Verwenden Sie den Splitter aus der vorherigen Lektion:
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_text(text)Schritt 3: Embeddings stapelweise erzeugen
Erzeugen Sie pro API-Aufruf Embeddings für viele Chunks:
from openai import OpenAI
client = OpenAI()
def embed_batch(texts, batch_size=100):
vectors = []
for i in range(0, len(texts), batch_size):
batch = texts[i:i + batch_size]
resp = client.embeddings.create(model='text-embedding-3-small', input=batch)
vectors.extend(d.embedding for d in resp.data)
return vectorsSchritt 4: Speichern
Für 10.000–50.000 Chunks sind FAISS oder Chroma ausreichend:
import chromadb
client = chromadb.Client()
collection = client.create_collection('docs')
collection.add(
ids=[f'doc-{i}' for i in range(len(chunks))],
embeddings=vectors,
documents=chunks,
metadatas=[{'source': 'doc.pdf', 'page': i} for i in range(len(chunks))]
)Idempotente Ingestion
Machen Sie die Ingestion sicher wiederholbar. Verwenden Sie deterministische IDs (Hash des Inhalts), damit eine erneute Ausführung keine Duplikate erzeugt:
import hashlib
def chunk_id(source, text):
h = hashlib.sha256(text.encode()).hexdigest()[:16]
return f'{source}:{h}'
print(chunk_id('handbook.pdf', 'Employees get 20 vacation days per year.'))
print(chunk_id('handbook.pdf', 'Employees get 20 vacation days per year.'))
Inkrementelle Aktualisierungen
Wenn sich ein Dokument ändert:
- Neue Chunks berechnen
- Mit den vorhandenen IDs vergleichen
- Entfernte Chunks löschen, neue hinzufügen, unveränderte beibehalten
Der naive Ansatz (alles löschen und neu einfügen) ist für kleine Korpora in Ordnung, verursacht aber unnötige Aufrufe der Embedding-API.
Metadaten zum Filtern
Nehmen Sie jedes Feld auf, nach dem Sie später möglicherweise filtern möchten:
metadata = {
'source': '/docs/handbook.pdf',
'page': 42,
'department': 'engineering',
'updated_at': '2024-08-12',
'access_level': 'internal'
}
for k, v in metadata.items():
print(f"{k}: {v}")
Fortschritt und Prüfpunkte
Protokollieren Sie bei großen Ingestion-Läufen den Fortschritt und setzen Sie Prüfpunkte:
for i, batch in enumerate(batches):
embed_and_store(batch)
if i % 10 == 0:
save_checkpoint(i)
print(f'Processed {i * 100} chunks')Ratenbegrenzungen
Für OpenAI-Embeddings gilt eine hohe, aber reale Ratenbegrenzung. Verwenden Sie Semaphore oder `tenacity`-Retries:
from asyncio import Semaphore
sem = Semaphore(10) # 10 concurrent embed calls max
async def safe_embed(batch):
async with sem:
return await client.embeddings.create(...)Index überprüfen
Führen Sie nach der Ingestion einige Test-Queries aus und prüfen Sie die Ergebnisse manuell. Wenn keine relevanten Ergebnisse erscheinen, ist Ihr Chunking oder Embedding fehlerhaft — finden Sie das heraus, bevor es Ihre Benutzer tun.
Index versionieren
Versionieren Sie den Index, damit Sie ohne Ausfall auf ein neues Chunking- oder Embedding-Modell umstellen können:
collection = client.create_collection(f'docs-v2-{date.today()}')
# old collection stays live until new one is validatedIdempotente IDs
Warum sollten Sie Inhalts-Hashes als Chunk-IDs verwenden?
Zusammenfassung
Laden -> in Chunks aufteilen -> Embeddings erzeugen -> speichern, mit idempotenten IDs und Metadaten. Der Index ist die Grundlage für alle nachgelagerten Retrieval-Schritte.
Häufig gestellte Fragen
Ist die Lektion „Eine Dokumentmenge indexieren“ kostenlos?
Ja — der vollständige Text von „Eine Dokumentmenge indexieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Eine Dokumentmenge indexieren“?
Erzeugen Sie für jeden Chunk ein Embedding und speichern Sie die Vektoren in einem Index – der Offline-Vorbereitungsschritt jedes RAG-Systems. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Agents zu starten?
Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Eine Dokumentmenge indexieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?
Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was RAG löst (Wissensstichtag, Halluzinationen)
- Chunking-Strategien (fest, satzbasiert, semantisch)
- Eine Dokumentmenge indexieren
- Ein naives RAG mit FAISS oder Chroma erstellen