Skip to content

📦 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
PDF 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 semantisch
  • RecursiveCharacterTextSplitter – bevorzugt, da semantischer
  • TokenTextSplitter – 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