Spaces:
Sleeping
Sleeping
| title: PDF2podcast 1 Script | |
| emoji: 🔥 | |
| colorFrom: pink | |
| colorTo: indigo | |
| sdk: gradio | |
| sdk_version: 5.24.0 | |
| app_file: app.py | |
| pinned: false | |
| short_description: 原tbdavid2019/PDF2podcast拆出的劇本生成(1) | |
| # PDF2Podcast 腳本生成器 (重構版) | |
| PDF2Podcast 是一個強大的文件轉換工具,能夠將 PDF、TXT 和 EPUB 檔案轉換成生動的對話腳本。此工具特別適合創建 podcast、講座、教學內容或摘要,透過大型語言模型 (LLM) 將靜態文字轉換為引人入勝的對話或演講稿。 | |
| ## 🚀 最新更新 (2025-10-02) | |
| ### 重大架構重構 | |
| - **模組化設計**:將原本複雜的單一檔案拆分為多個專業模組 | |
| - `prompts.py`:現代化提示詞管理,採用簡潔高效的設計 | |
| - `quality_control.py`:對話品質檢查和連貫性驗證 | |
| - `content_planner.py`:智能內容規劃和主題導向分段 | |
| - **簡化提示詞**:摒棄複雜的多段式提示詞,採用現代 AI 系統最佳實踐 | |
| ### 核心功能優化 | |
| - **解決文稿斷裂問題**: | |
| - 大幅提升 `max_tokens` 至 65,536 (支援 Gemini Flash 2.5) | |
| - 智能截斷檢測,自動啟用分批生成備用機制 | |
| - 品質檢查針對完整文稿進行,而非逐批檢查 | |
| - **可調整參數**: | |
| - 最大輸出 Token 數可調整 (1,024 - 131,072) | |
| - 最大輸入文本長度可調整 (50,000 - 2,000,000 字符) | |
| - 適配不同模型的限制 (Gemini: 65536, GPT-4: 4096, Claude: 8192) | |
| ### 全新摘要功能 📝 | |
| - **Podcast Summary 生成**:專為 podcast 上架準備 | |
| - **博客式摘要**:適合搜索引擎收錄的 Markdown 格式文章 | |
| - **極簡摘要**:200 字以內的節目介紹,適合平台描述 | |
| - **一鍵生成**:從腳本直接生成多種格式的摘要內容 | |
| ### Discord 分享功能 🔗 (NEW!) | |
| - **一鍵分享到 Discord**:將生成的腳本和摘要直接分享到 Discord 頻道 | |
| - **自動文件上傳**: | |
| - 腳本文件:`podcast_script_YYYYMMDD_HHMMSS.txt` | |
| - 摘要文件:`podcast_summary_YYYYMMDD_HHMMSS.txt` | |
| - **Webhook 支援**:透過 Discord Webhook URL 實現無縫整合 | |
| - **智能驗證**:URL 格式檢查和錯誤處理 | |
| ### 介面優化 | |
| - **簡化設計**:隱藏複雜的多段式提示詞欄位 | |
| - **專注核心**:保留模板選擇和自定義提示詞功能 | |
| - **三輸出區域**:腳本生成 + 摘要生成 + Discord 分享並行操作 | |
| ## 功能特點 | |
| - **多種檔案格式支援**:可處理 PDF、TXT 和 EPUB 檔案 | |
| - **現代化模板系統**: | |
| - Podcast 對話(兩位主持人 David 和 Cordelia) | |
| - 單人播客獨白 | |
| - 科學材料發現摘要(教授與學生對話) | |
| - 講座腳本(單一演講者) | |
| - 一般摘要和簡短摘要 | |
| - **新增**:博客式摘要和極簡摘要 | |
| - **Discord 整合功能**: | |
| - 一鍵分享腳本和摘要到 Discord 頻道 | |
| - 支援 Discord Webhook URL | |
| - 自動文件上傳和格式化 | |
| - 智能錯誤處理和狀態提示 | |
| - **智能品質控制**:自動檢測對話品質和連貫性 | |
| - **彈性 API 整合**:支援 OpenAI API 及其他相容的 API 端點 | |
| - **模型選擇**:可從連接的 API 獲取並選擇可用的語言模型 | |
| - **繁體中文輸出**:預設生成繁體中文腳本 | |
| - **現代化介面**:基於 Gradio 的直觀操作界面 | |
| ## 技術架構 | |
| ### 核心模組 | |
| ``` | |
| PDF2podcast-1-script/ | |
| ├── app.py # 主應用程式 (Gradio 介面) | |
| ├── prompts.py # 現代化提示詞管理 | |
| ├── quality_control.py # 品質檢查系統 | |
| ├── content_planner.py # 內容規劃器 | |
| ├── requirements.txt # 依賴清單 | |
| └── README.md # 專案說明 | |
| ``` | |
| ### 提示詞設計原則 | |
| - **簡潔高效**:摒棄複雜的多段式設計 | |
| - **現代化**:採用最新 AI 系統最佳實踐 | |
| - **可擴展**:易於添加新模板和自定義內容 | |
| - **向後兼容**:保持與舊版本的相容性 | |
| ## 安裝指南 | |
| ### 前置需求 | |
| - Python 3.7 或更高版本 | |
| - pip 套件管理器 | |
| ### 安裝步驟 | |
| 1. 複製此專案到本地: | |
| ```bash | |
| git clone https://github.com/tbdavid2019/PDF2podcast-1-script.git | |
| cd PDF2podcast-1-script | |
| ``` | |
| 2. 安裝所需依賴: | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| 3. 設定 API 金鑰(可選): | |
| ```bash | |
| cp .env.example .env | |
| # 編輯 .env 檔案,添加您的 API 金鑰 | |
| ``` | |
| ## 使用方法 | |
| ### 基本操作流程 | |
| 1. **啟動應用程式**: | |
| ```bash | |
| python app.py | |
| ``` | |
| 2. **設定 API 參數**: | |
| - 輸入 API Base URL(預設為 Gemini API) | |
| - 輸入您的 LLM API 金鑰 | |
| - 點擊「獲取模型列表」按鈕 | |
| 3. **上傳文件**:支援 PDF、TXT 或 EPUB 格式 | |
| 4. **選擇模板**:從下拉選單選擇適合的提示詞模板 | |
| 5. **調整參數**: | |
| - 最大輸出 Token 數 (建議 Gemini: 65536) | |
| - 最大輸入文本長度 | |
| - 分批生成部分數量 (通常設為 1) | |
| 6. **生成腳本**:點擊「生成腳本」按鈕 | |
| 7. **生成摘要**: | |
| - 選擇摘要類型(博客式 / 極簡) | |
| - 點擊「生成摘要」按鈕 | |
| 8. **Discord 分享** (可選): | |
| - 填寫 Discord Webhook URL | |
| - 點擊「Share to Discord」按鈕 | |
| - 自動將腳本和摘要以文件形式發送到 Discord 頻道 | |
| ### Discord Webhook 設定 | |
| #### 獲取 Webhook URL | |
| 1. 在 Discord 中,前往您要發送文件的頻道 | |
| 2. 點擊頻道設置 → 整合 → Webhook | |
| 3. 創建新的 Webhook 或複製現有的 URL | |
| 4. URL 格式:`https://discord.com/api/webhooks/[ID]/[TOKEN]` | |
| #### 使用方式 | |
| - **文件格式**:自動生成帶時間戳的 `.txt` 文件 | |
| - **發送內容**: | |
| - 腳本文件:包含完整的對話腳本 | |
| - 摘要文件:包含生成的摘要內容(如果有) | |
| - **Discord 消息**:包含專業格式的通知消息 | |
| #### 範例 Webhook URL | |
| ``` | |
| https://discord.com/api/webhooks/1423428306505830423/efDwfztnktEwTqa_US0wX4qZPvY0P0Z1Z01_rmGmaKhYg9teYgccPUsxW796_YUv5Fia | |
| ``` | |
| ### 進階功能 | |
| #### 自定義提示詞 | |
| - 在「自定義提示詞」欄位添加特殊要求 | |
| - 系統會自動將其整合到主要提示詞中 | |
| #### 模型適配建議 | |
| - **Gemini Flash 2.5**: max_tokens = 65536 (推薦) | |
| - **GPT-4**: max_tokens = 4096 | |
| - **Claude**: max_tokens = 8192 | |
| - **其他模型**: 請參考官方文檔 | |
| ## 提示詞模板說明 | |
| ### 主要模板 | |
| #### Podcast 模板 (推薦) | |
| 生成兩位主持人(David 和 Cordelia)之間的對話: | |
| - 開場:「歡迎收聽 David888 Podcast,我是 David...」 | |
| - 風格:類似 All-In-Podcast,輕鬆專業 | |
| - 長度:50-200 輪對話,根據內容自動調整 | |
| #### 單人播客模板 | |
| 生成單一主持人的播客獨白: | |
| - 風格親切專業,適合深度講解 | |
| - 內容豐富且易懂 | |
| #### 摘要模板 (新增) | |
| - **博客式摘要**:適合 SEO 的 Markdown 格式文章 | |
| - **極簡摘要**:200 字以內的節目介紹 | |
| ### 科學專用模板 | |
| - **SciAgents 材料發現**:專門介紹 AI 材料發現成果 | |
| - **講座模板**:費曼風格的教學內容 | |
| ## 品質控制系統 | |
| ### 自動檢測功能 | |
| - **截斷檢測**:智能識別內容是否被提前截斷 | |
| - **連貫性檢查**:驗證對話的邏輯一致性 | |
| - **格式驗證**:確保 speaker-1/speaker-2 格式正確 | |
| - **品質評分**:提供整體品質評估 (0-100分) | |
| ### 備用機制 | |
| - 當單次生成被截斷時,自動啟用分批生成 | |
| - 智能內容規劃,確保主題連貫性 | |
| - 全局品質檢查,而非逐批檢查 | |
| ## 故障排除 | |
| ### 常見問題 | |
| #### 文稿被截斷 | |
| - **解決方案**:提高 max_tokens 設定至模型支援上限 | |
| - **Gemini Flash 2.5**: 可設定至 65536 | |
| - **自動備用**:系統會自動偵測並啟用分批生成 | |
| #### API 連接問題 | |
| - 檢查 API 金鑰是否正確 | |
| - 確認 API Base URL 格式 | |
| - 查看錯誤日誌獲取詳細資訊 | |
| #### Discord 分享失敗 | |
| - **常見原因及解決方案**: | |
| 1. **Webhook URL 格式錯誤** | |
| - 確認 URL 以 `https://discord.com/api/webhooks/` 開頭 | |
| - 檢查是否包含完整的 ID 和 Token | |
| 2. **權限問題** | |
| - 確認 Webhook 在目標頻道有發送訊息權限 | |
| - 檢查 Discord 伺服器設定 | |
| 3. **文件大小限制** | |
| - Discord 免費版限制 8MB,Nitro 用戶為 50MB | |
| - 如果文件過大,考慮分段生成較短內容 | |
| 4. **網路連線問題** | |
| - 檢查網路連線穩定性 | |
| - 嘗試重新發送 | |
| #### 品質評分偏低 | |
| - 檢查原始內容品質 | |
| - 考慮調整提示詞模板 | |
| - 嘗試不同的 temperature 設定 | |
| ## 技術規格 | |
| ### 支援的模型 | |
| - **推薦**: Gemini Flash 2.5 (65536 tokens) | |
| - **相容**: OpenAI GPT 系列、Claude、其他 OpenAI API 相容模型 | |
| ### 效能規格 | |
| - **最大輸入**: 2,000,000 字符 | |
| - **最大輸出**: 131,072 tokens (視模型而定) | |
| - **處理速度**: 視模型 API 回應時間而定 | |
| - **記憶體需求**: 約 500MB (含依賴) | |
| ### 依賴套件 | |
| 主要依賴套件: | |
| - gradio:Web 介面框架 | |
| - pymupdf:PDF 文件處理 | |
| - ebooklib:EPUB 文件處理 | |
| - beautifulsoup4:HTML 內容解析 | |
| - requests:API 通訊 | |
| - python-dotenv:環境變數管理 | |
| 完整依賴列表請參見 `requirements.txt` 檔案。 | |
| ## 版本歷史 | |
| ### v2.0.0 (2025-10-02) - 重構版 | |
| - 🎯 **重大重構**:模組化架構,分離關注點 | |
| - 🚀 **解決斷裂**:提升 token 限制,修復文稿截斷問題 | |
| - 📝 **新增摘要**:Podcast 上架專用的摘要生成功能 | |
| - 🔗 **Discord 整合**:一鍵分享腳本和摘要到 Discord 頻道 | |
| - 🎨 **介面優化**:簡化複雜設定,專注核心功能 | |
| - ⚙️ **參數化**:可調整輸出 token 限制,適配不同模型 | |
| - 🔧 **品質提升**:智能品質檢查和截斷偵測 | |
| ### v1.x - 初始版本 | |
| - 基本的 PDF/EPUB 轉 Podcast 功能 | |
| - 複雜的多段式提示詞設計 | |
| - 固定的 token 限制 | |
| ## 貢獻指南 | |
| 歡迎提交 Issues 和 Pull Requests! | |
| ### 開發環境設置 | |
| 1. Fork 此專案 | |
| 2. 創建功能分支:`git checkout -b feature/新功能` | |
| 3. 提交變更:`git commit -am '添加新功能'` | |
| 4. 推送分支:`git push origin feature/新功能` | |
| 5. 創建 Pull Request | |
| ### 程式碼規範 | |
| - 使用 Python PEP 8 風格 | |
| - 添加適當的註釋和文檔字符串 | |
| - 確保向後相容性 | |
| ## 授權條款 | |
| [在此添加授權資訊] | |
| ## 聯絡資訊 | |
| - GitHub: https://github.com/tbdavid2019/PDF2podcast-1-script | |
| - Issues: https://github.com/tbdavid2019/PDF2podcast-1-script/issues | |
| ## 注意事項 | |
| - 處理大型檔案可能需要較長時間 | |
| - API 使用可能會產生費用,請查閱您使用的 API 提供商的計費政策 | |
| - 生成的內容質量取決於所選模型和提供的提示詞 | |
| - 建議在生產環境使用前進行充分測試 |