📦 Tag 1 – Block 4: Dokumente vorbereiten – Laden, Splitting, Chunking¶
Diese Einheit führt in die Grundlagen der Dokumentenvorverarbeitung ein – der essenzielle erste Schritt im Retrieval-Augmented Generation (RAG) Workflow.
📂 Überblick¶
- Warum Dokumentenvorbereitung wichtig ist
- Laden von Dokumenten mit LangChain
- Dokument-Splitting in verdauliche Chunks
- Chunking mit Overlap und Heuristiken
- Chunk-Metadaten und vorbereitende QA
- Visualisierung des Pipelines
- Vorschau auf Embedding & Retrieval
🧱 Warum Dokumente vorbereiten?¶
LLMs haben eine begrenzte Kontextlänge. Ein typischer Geschäftsbericht (PDF) hat oft 30–100+ Seiten.
Problem: Ohne Aufteilung kann man diese Texte nicht in Gänze sinnvoll an LLMs übergeben.
Lösung: Dokumente splitten – in kleinere, überlappende Chunks, die später effizient durchsucht werden können.
📅 Dokumente laden¶
LangChain bietet einfache Loader für viele Formate:
| Format | Beispiel | Loader |
|---|---|---|
| Quartalsbericht | PyPDFLoader |
|
| DOCX | Verträge, Richtlinien | UnstructuredWordDocumentLoader |
| HTML | Webseiten, Intranet | UnstructuredHTMLLoader |
| CSV | Tabellen, KPIs | CSVLoader |
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("finanzbericht_q1.pdf")
pages = loader.load()
✂️ Splitting: Vom Dokument zur Chunkliste¶
Ein LangChain TextSplitter zerlegt große Dokumente in kleine Blöcke mit definierter Länge.
Typen von Splittern:
CharacterTextSplitter– einfach, aber wenig semantischRecursiveCharacterTextSplitter– bevorzugt, da semantischerTokenTextSplitter– GPT-kompatibel (z. B. mit TikToken)
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=100
)
chunks = splitter.split_documents(pages)
🔀 Warum Overlap?¶
Ein fester Overlap stellt sicher, dass zusammenhängende Informationen nicht auseinandergerissen werden.
| Ohne Overlap | Mit Overlap |
|---|---|
| Satzteile getrennt | Zusammenhang bleibt erhalten |
| Höheres Risiko für schlechte Antworten | Bessere Kontextkohärenz |
🏇 Chunk-Metadaten¶
Jeder Chunk erhält automatisch Metadaten – z. B. Seitenzahl, Quelle oder Dateiname:
{
"page_content": "...",
"metadata": {
"source": "finanzbericht_q1.pdf",
"page": 12
}
}
Diese helfen beim späteren Antwortbezug („laut Seite 12...“) und bei der Nachverfolgbarkeit.
🧪 Vorschau: Chunk-Inhalte anzeigen¶
Ein kleiner Check nach dem Split hilft beim Debugging:
from rich import print
print(chunks[0].page_content)
print(chunks[0].metadata)
Alternativ: Eine CSV-Datei mit allen Chunks erzeugen und visuell überprüfen (z. B. mit Pandas/Excel).
🧠 Tools in LangFlow (Visualisierung)¶
LangFlow erlaubt es, diesen Pipeline-Schritt visuell zusammenzusetzen:
- 🧹 Loader-Node (z. B. PDF-Loader)
- ➡️ TextSplitter-Node (z. B. Recursive Splitter)
- 📓 Ausgabe als Liste oder für weiteren Fluss
🧠 Übergang zu Embeddings & Retrieval¶
Im nächsten Block (🧠 Tag 2 Block 1) behandeln wir:
- Embeddings generieren (OpenAI, HuggingFace, Cohere…)
- Speicherung in einem Vektorstore (FAISS, Chroma…)
- Vorteile von semantischer Suche
📌 Takeaways¶
✅ LLMs brauchen kleine, zusammenhängende Textbausteine ✅ Splitter sind essenziell für QA mit LangChain ✅ Overlap erhöht Antwortqualität ✅ Metadaten sorgen für bessere Referenzierbarkeit ✅ Visual Tools wie LangFlow senken die Einstiegshürde