使用本檔案旁的 pdfread.py 工具來讀取 PDF。執行方式有兩種:
- 使用 uv 0.11 以上版本(推薦):直接執行
pdfread.py— shebang 會讓它透過uv run執行,第一次執行會下載相依套件,可能需要一分鐘。 - 不使用 uv:在已安裝
pymupdf4llm>=0.0.17的 Python 3.10+ 環境中,使用python3 pdfread.py …即可(pip install pymupdf4llm)。
search 命令需要支援 FTS5 的 SQLite;由 uv 管理的 Python 以及絕大多數現代系統的 Python 都包含此功能,若缺少,腳本會清楚提示錯誤。
執行 pdfread.py --help 查看完整用法。簡要說明如下:
pdfread.py info FILE— 頁數、元資料、大綱/目錄。從這裡開始。pdfread.py search FILE "terms"— 尋找提及關鍵字的頁面,採用 BM25 排序並附帶每個匹配的片段。初次搜尋會建立快取索引(需數秒);後續搜尋即時完成。搜尋詞預設為 AND 邏輯,term*可匹配前綴,--raw啟用完整的 FTS5 語法("exact phrase"、OR、NEAR)。僅限文字圖層 — 掃描頁面無法搜尋。pdfread.py text FILE --pages 10-25— 指定頁碼範圍(從 1 開始)的 Markdown 格式文字。圖片會以[image: p12-img2 640x480px]佔位符表示。pdfread.py image FILE p12-img2— 將該圖片儲存為 PNG 並輸出其路徑;使用您的檔案讀取工具檢視。pdfread.py images FILE --pages 12— 列出頁面上的圖片 ID。pdfread.py render FILE 7— 將整頁(或使用--rect x0,y0,x1,y1裁切)渲染為 PNG;適用於掃描頁面以及文字圖層遺漏的內容。
處理大型 PDF 時的上下文保留策略
對於精確問題(如「合約中何處提到解約費用?」),請先執行 search,再使用 text --pages 只讀取命中的頁面 — 無需子代理分散處理。索引快取是共用的,因此子代理也能使用 search 而無需重建索引。
對於廣泛的綜合分析,請不要將整個文件倒入主要對話中。
請改為:
- 執行
info取得頁數與大綱,並將文件分成合理的區段(按章節,或約 15–25 頁)。 - 為每個區段啟動一個子代理,並指示:「執行
<path>/pdfread.py text <file> --pages 10-25並回答 <使用者的問題> / 以最多 N 字總結。如果[image: ...]佔位符看起來相關,請使用image命令提取並檢視它。」 - 僅將總結/答案保留在主對話中,並據此進行綜合分析。僅在總結表明答案在某個頁面時,才由您自己直接重新定位該頁面。
備註
- 無 OCR 功能:沒有文字圖層的頁面只會傳回全頁的
[image: ...]佔位符(或「無法提取文字」的提示)— 請提取或render該頁面,並以視覺方式讀取圖片。 - 提取具有確定性:圖片 ID 在不同執行之間保持穩定,因此子代理回報的 ID 可在稍後的主對話中提取。