tbdavid2019's picture
feat: 更新 README、app.py 和 requirements.txt,調整 SDK 版本及啟動方式
6a45158

A newer version of the Gradio SDK is available: 6.2.0

Upgrade
metadata
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. 複製此專案到本地:

    git clone https://github.com/tbdavid2019/PDF2podcast-1-script.git
    cd PDF2podcast-1-script
    
  2. 安裝所需依賴:

    pip install -r requirements.txt
    
  3. 設定 API 金鑰(可選):

    cp .env.example .env
    # 編輯 .env 檔案,添加您的 API 金鑰
    

使用方法

基本操作流程

  1. 啟動應用程式

    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 風格
  • 添加適當的註釋和文檔字符串
  • 確保向後相容性

授權條款

[在此添加授權資訊]

聯絡資訊

注意事項

  • 處理大型檔案可能需要較長時間
  • API 使用可能會產生費用,請查閱您使用的 API 提供商的計費政策
  • 生成的內容質量取決於所選模型和提供的提示詞
  • 建議在生產環境使用前進行充分測試