weiwill88/Local_Pdf_Chat_RAG
🧠 纯原生 Python 实现的 RAG 框架 | FAISS + BM25 混合检索 | 支持 Ollama / SiliconFlow | 适合新手入门学习
它解決了什麼問題
此專案提供一個本地化的智慧問答系統,旨在協助開發者了解與實作 Retrieval‑Augmented Generation(RAG)。它透過透明、模組化的管線,解決「黑盒」RAG 實作的問題,讓使用者能與本機文件聊天,同時支援多種 LLM 後端。
工作原理
系統遵循結構化的 RAG 流程:
- 文件處理:從多種格式(.pdf、.txt、.docx、.md、.html、.csv、.xls、.xlsx)擷取文字,切分成區塊,並轉換為向量。
- 混合檢索:結合 FAISS 語意搜尋與 BM25 關鍵字搜尋,以提升召回率與精確度。
- 重新排序:使用 CrossEncoder 或 LLM 進一步精練檢索結果。
- 生成:將檢索到的上下文組成提示詞,送給已配置的 LLM(Ollama、SiliconFlow 或 Magick API)產生最終答案。
- 可選增強功能:可整合 SerpAPI 進行即時網路搜尋,並支援透過 DeepSeek‑R1 的 Chain‑of‑Thought 處理。
目標對象
主要針對開發者與 RAG 初學者,提供一個可實作文件載入、向量化、混合檢索與 LLM 整合的實作平台。
重點特色
- 混合搜尋策略:同時整合 FAISS(語意)與 BM25(關鍵字)檢索。
- 彈性 LLM 後端:支援 Ollama 本地推論,以及 SiliconFlow、Magick API 等雲端 API,並具自動後端偵測功能。
- 進階 RAG 技術:實作透過 CrossEncoder 的結果重新排序與遞迴檢索。
- 互動式 UI:提供基於 Gradio 的網頁介面,包含文件區塊的可視化。