Einführung: Was ist eine Retrieval-Wissensdatenbank?
Stellen Sie sich vor, Sie haben einen riesigen Stapel von Unternehmensdokumenten, Handbüchern oder Wissensartikeln. Wenn ein Mitarbeiter eine Frage stellt, möchten Sie, dass das System automatisch die relevantesten Informationen findet – nicht irgendwelche allgemeinen Antworten, sondern exakt die Inhalte, die zur Frage passen. Genau das ermöglicht eine Retrieval-Wissensdatenbank.
In diesem Tutorial zeige ich Ihnen, wie Sie mit LangChain eine eigene Wissensdatenbank aufbauen. Ich erkläre jeden Schritt so, dass auchabsolute Anfänger ohne Programmiererfahrung dem folgen können. Wir verwenden dabei HolySheep AI als KI-Backend – einen Service, der über 85% günstiger ist als vergleichbare Anbieter bei gleicher Qualität.
Grundkonzepte verständlich erklärt
Was passiert bei Retrieval?
Bevor wir Code schreiben, verstehen wir das Prinzip: Eine Retrieval-Wissensdatenbank funktioniert wie eine超级图书馆 (Super-Bibliothek), aber mit künstlicher Intelligenz. Das System durchsucht nicht einfach nach Stichwörtern, sondern versteht den Sinngehalt Ihrer Dokumente.
Die vier Bausteine im Überblick
- Document Loader: Lädt Ihre Dokumente (PDF, TXT, Webseiten) in das System
- Text Splitter: Teilt lange Texte in kleinere, verarbeitbare Stücke
- Vector Store: Speichert die Dokumente in einer mathematischen Darstellung (Vektoren)
- Retriever: Findet die relevantesten Stücke für eine gegebene Frage
Schritt 1: Installation der benötigten Pakete
Öffnen Sie Ihr Terminal (bei Windows: Eingabeaufforderung oder PowerShell) und geben Sie folgende Befehle ein:
# Grundlegende LangChain-Pakete installieren
pip install langchain langchain-community langchain-huggingface
Für Vektor-Speicherung (ChromaDB ist kostenlos und lokal)
pip install chromadb
Für Dokumentenverarbeitung
pip install pypdf python-docx unstructured
Für die HolySheep-Integration
pip install openai
Tipp: Falls Sie pip nicht kennen: Es ist ein Paketmanager für Python, ähnlich wie ein App Store für Programmbibliotheken. Geben Sie die Befehle Zeile für Zeile ein und warten Sie, bis jeder Befehl erfolgreich abgeschlossen ist.
Schritt 2: Dokumente laden mit Document Loaders
Der erste Schritt besteht darin, Ihre Dokumente in das System zu bringen. LangChain bietet über 100 verschiedene Document Loaders für unterschiedliche Dateitypen.
# Importieren der benötigten Bibliotheken
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.document_loaders import TextLoader
from langchain_community.document_loaders import UnstructuredHTMLLoader
Beispiel 1: PDF-Datei laden
pdf_loader = PyPDFLoader("mein_handbuch.pdf")
pdf_documents = pdf_loader.load()
Beispiel 2: Textdatei laden
txt_loader = TextLoader("meine_notizen.txt", encoding="utf-8")
txt_documents = txt_loader.load()
Beispiel 3: Webseite laden
html_loader = UnstructuredHTMLLoader("https://beispiel.de/info.html")
html_documents = html_loader.load()
Alle Dokumente zusammenführen
all_documents = pdf_documents + txt_documents + html_documents
print(f"Geladene Dokumente: {len(all_documents)} Stück")
for i, doc in enumerate(all_documents):
print(f"Dokument {i+1}: {len(doc.page_content)} Zeichen")
Wichtig: Ersetzen Sie die Dateipfade durch Ihre eigenen Dokumente. Die PDF-Datei muss im gleichen Ordner liegen wie Ihr Python-Skript, oder Sie geben den vollständigen Pfad an.
Schritt 3: Texte in verarbeitbare Stücke teilen
Warum teilen wir Texte? Große Dokumente müssen in kleinere Teile zerlegt werden, damit das System effizient arbeiten kann. Stellen Sie sich vor, Sie müssten ein Buch Seite für Seite durchsuchen – effizienter ist es, wenn Sie gezielt in Kapiteln suchen können.
from langchain.text_splitter import RecursiveCharacterTextSplitter
Konfiguration des Text-Splitters
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # Maximale Zeichen pro Stück
chunk_overlap=200, # Überlappung zwischen Stücken (wichtig!)
length_function=len, # Verwende Zeichenanzahl
separators=["\n\n", "\n", " ", ""] # Trennzeichen-Priorität
)
Dokumente aufteilen
chunked_documents = text_splitter.split_documents(all_documents)
print(f"Originale Dokumente: {len(all_documents)}")
print(f"Erstellte Textstücke: {len(chunked_documents)}")
print(f"\nBeispiel für ein Textstück:")
print(chunked_documents[0].page_content[:200] + "...")
Praxistipp aus meiner Erfahrung: Die Parameter chunk_size und chunk_overlap sind entscheidend für die Qualität. Zu kleine Stücke verlieren Kontext, zu große Stücke werden ungenau. Ich empfehle für die meisten Anwendungen 800-1000 Zeichen mit 150-200 Zeichen Überlappung.
Schritt 4: Vektoren erstellen und speichern
Jetzt kommt der spannende Teil: Wir wandeln die Textstücke in mathematische Vektoren um – das sind Listen von Zahlen, die den semantischen Inhalt repräsentieren. Dokumente mit ähnlicher Bedeutung haben ähnliche Vektoren.
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
import os
HolySheep AI Konfiguration - KEINE OpenAI API verwenden!
os.environ["OPENAI_API_KEY"] = "YOUR_HOLYSHEEP_API_KEY"
os.environ["OPENAI_API_BASE"] = "https://api.hol