PDF-Verarbeitung mit PyMuPDF und ChromaDB ohne Frameworks
In einer detaillierten Implementierung von Retrieval-Augmented Generation (RAG) ohne externe Frameworks zeigt das SEAD-Agent-Projekt, wie PDF-Dokumente mit PyMuPDF und ChromaDB effizient verarbeitet, in Teile zerlegt, summarisiert und für Abfragen nutzbar gemacht werden können. Der Prozess beginnt mit der Lade- und Analysephase: Mit fitz.open(stream=pdf_content, filetype="pdf") wird das PDF geöffnet, und jeder Seiteninhalt wird mit page.get_text() extrahiert. Text wird in Blöcke von maximal 512 Zeichen aufgeteilt, wobei Satzgrenzen respektiert werden, um semantische Kohärenz zu bewahren. Gleichzeitig werden Bilder mittels page.get_images(full=True) identifiziert, deren Binärdaten in PNG konvertiert und per base64 kodiert werden, um sie an ein Vision-Language-Modell (VLM) wie Pixtral 12B zu übergeben. Dieses generiert präzise, kontextbezogene Beschreibungen für jedes Bild, die als Text-Chunks in den Speicher aufgenommen werden. Jeder Chunk – ob Text oder Bildbeschreibung – erhält eine eindeutige ID und wird in einer Liste gesammelt. Anschließend erfolgt die summarische Analyse: Jeder Chunk wird einzeln mit einem spezifischen Prompt an das VLM gesendet, der eine strukturierte Zusammenfassung nach wissenschaftlichen Kriterien verlangt – darunter Forschungsziele, Methodik, Ergebnisse, Implikationen und Limitationen. Die einzelnen Chunk-Summaris werden dann in einer zweiten VLM-Anfrage zusammengefasst: Je nach gewünschter Detailliertheit („brief“ oder „detailed“) wird ein aggregiertes, flüssiges Dokument zusammengefügt, das die gesamte Inhaltsstruktur des ursprünglichen PDFs wiedergibt. Die Speicherung der Inhalte erfolgt über ChromaDB, einem lokal laufenden, persistenten Vektor-Speicher. Hier wird ein lokales Embedding-Modell (sentence-transformers/all-MiniLM-L6-v2) verwendet, um Texte in numerische Vektoren zu konvertieren. Diese werden zusammen mit Metadaten (Seitennummer, Typ, Quelle) in einer Sammlung gespeichert. Bei einer Benutzeranfrage wird die Eingabe ebenfalls in einen Embedding-Vektor umgewandelt und über eine semantische Suche in ChromaDB nach den relevantesten Chunks gesucht. Die Ergebnisse – inklusive Dokumenttexte, Metadaten und Ähnlichkeitswerte – werden zurückgegeben und als Kontext an ein Antwortmodell übermittelt. Die Log-Ausgaben zeigen eine reibungslose Verarbeitung: 118 Chunks wurden erstellt, inklusive Text- und Bildbeschreibungen. Bei einer Abfrage zur „Stadtplanung und EcoSphere“ wurden drei relevante Dokumentteile mit sehr hohen Ähnlichkeitswerten (0,797) gefunden, die den Fokus auf regionale Vergleiche und Optimierungsszenarien hinweisen. Die gesamte Pipeline demonstriert, dass komplexe RAG-Anwendungen ohne Frameworks wie LangChain oder LlamaIndex realisierbar sind, solange die Kernkomponenten – Dokumentenverarbeitung, Chunking, Embedding, Speicherung und Retrieval – sorgfältig implementiert werden. Industrieexperten loben die Transparenz und Kontrolle, die solche „low-level“ Ansätze bieten. Sie ermöglichen bessere Anpassung, geringeren Overhead und tiefere Einblicke in den RAG-Prozess. SEAD-Agent zeigt, dass moderne KI-Anwendungen nicht nur mit Frameworks, sondern auch durch klare, modulare Architekturen realisiert werden können – ideal für Forschung, Sicherheit und spezifische Anwendungsfälle.