Verwenden Sie das pdfread.py-Tool neben dieser Datei, um PDFs zu lesen. Führen Sie es auf eine der folgenden Arten aus:
- Mit uv 0.11+ (bevorzugt): Rufen Sie
pdfread.pydirekt auf – der Shebang führt es viauv runaus. Beim ersten Aufruf werden Abhängigkeiten heruntergeladen, was etwa eine Minute dauern kann. - Ohne uv:
python3 pdfread.py …funktioniert mit jedem Python 3.10+, daspymupdf4llm>=0.0.17installiert hat (pip install pymupdf4llm).
Der Befehl search benötigt SQLite mit FTS5. Von uv verwaltete sowie nahezu alle modernen System-Pythons enthalten dies. Das Skript gibt bei Fehlen eine klare Fehlermeldung aus.
Rufen Sie pdfread.py --help auf, um die vollständige Nutzung anzuzeigen. Kurz gefasst:
pdfread.py info DATEI– Seitenanzahl, Metadaten, Gliederung/Inhaltsverzeichnis. Hier beginnen.pdfread.py search DATEI "begriffe"– Seiten, die die Schlüsselwörter erwähnen, BM25-gereiht mit einem Ausschnitt pro Treffer. Die erste Suche erstellt einen zwischengespeicherten Index (Dauer: Sekunden); spätere Suchvorgänge sind sofort. Begriffe werden mit UND verknüpft,begriff*erlaubt Präfix-Suche,--rawschaltet die volle FTS5-Syntax frei ("exakter Satz", ODER, NEAR). Es wird nur die Textebene durchsucht – gescannte Seiten sind unsichtbar.pdfread.py text DATEI --pages 10-25– Markdown-Text für einen 1-basierten Seitenbereich. Abbildungen erscheinen als[image: p12-img2 640x480px]-Platzhalter.pdfread.py image DATEI p12-img2– Schreibt diese Abbildung als PNG und gibt den Pfad aus; zeigen Sie sie mit Ihrem Dateilesetool an.pdfread.py images DATEI --pages 12– Listet die Abbildungs-IDs auf den Seiten auf.pdfread.py render DATEI 7– Rendert eine ganze Seite (oder mit--rect x0,y0,x1,y1einen Ausschnitt) als PNG. Dies ist der Fallback für gescannte Seiten und alles, was die Textebene nicht erfasst.
Kontext bei großen PDFs erhalten
Bei punktgenauen Fragen („Wo erwähnt der Vertrag Kündigungsgebühren?“) führen Sie zuerst search aus und lesen Sie nur die Trefferseiten mit text --pages – kein Subagenten-Fan-out nötig. Der Index-Cache wird geteilt, sodass auch Subagenten search nutzen können, ohne ihn neu aufzubauen.
Bei breiter Synthese sollten Sie nicht das gesamte Dokument in die Hauptkonversation übernehmen. Gehen Sie stattdessen so vor:
- Führen Sie
infoaus, um Seitenzahl und Gliederung zu erhalten, und teilen Sie das Dokument in sinnvolle Bereiche ein (pro Kapitel oder etwa 15–25 Seiten). - Starten Sie pro Bereich einen Subagenten mit Anweisungen wie: „Führe
<pfad>/pdfread.py text <datei> --pages 10-25aus und beantworte / fasse in höchstens N Wörtern zusammen. Falls ein[image: ...]-Platzhalter relevant aussieht, extrahiere ihn mit dem Befehlimageund sieh ihn dir an.“ - Übernehmen Sie nur die Zusammenfassungen/Antworten in die Hauptkonversation und synthetisieren Sie daraus. Greifen Sie selbst nur dann auf bestimmte Seiten zurück, wenn eine Zusammenfassung darauf hinweist, dass die Antwort dort liegt.
Hinweise
- Es gibt keine OCR: Eine Seite ohne Textebene wird nur als
[image: ...]-Platzhalter (oder mit einem Hinweis „kein extrahierbarer Text“) zurückgegeben – extrahieren oderrender-Sie sie und lesen Sie das Bild visuell. - Extraktion ist deterministisch: Bild-IDs sind über mehrere Ausführungen hinweg stabil, sodass eine von einem Subagenten gemeldete ID später aus der Hauptkonversation extrahiert werden kann.