1c1c68a214
- 移除 Gemini 和 Ollama 独立适配,统一使用 ChatOpenAI + base_url - config.ini 简化为 BASE_URL / API_KEY / MODEL / TEMPERATURE / MAX_RETRIES - 新增 config.example.ini 示例配置 - 移除 langchain-google-genai / langchain-ollama / pymupdf 依赖 - main.py 新增断点续跑:跳过已有 index.md / index_refined.md - LLM 请求支持 max_retries 自动重试(默认 3 次) - 优化 README
2.4 KiB
Executable File
2.4 KiB
Executable File
留子课程幻灯片整理翻译工具
将课程 PDF 幻灯片自动转换为结构化中文 Markdown,利用 LLM 优化排版、解释图片、翻译并保留英文专业术语。
功能
- PDF → Markdown:自动将 PDF 转为结构化 Markdown
- 智能排版:LLM 优化格式、修正标题层级、修复数学公式
- 图片注解:自动识别图片内容并添加说明
- 中文翻译:翻译为简体中文,保留专业术语英文原文(如
磁共振成像(MRI)) - 断点续跑:自动跳过已完成的步骤,支持中断后继续
前置要求
- Nvidia GPU(docling 转换需要)
- OpenAI 兼容 API(支持 OpenAI / DeepSeek / 通义千问 / Ollama 等)
安装
pip install uv
uv venv
uv sync
配置
复制 config.example.ini 为 config.ini 并填入你的 API 信息:
cp config.example.ini config.ini
config.ini 格式:
[llm]
BASE_URL = https://api.openai.com/v1
API_KEY = sk-xxxx
MODEL = gpt-4o
TEMPERATURE = 0.7
MAX_RETRIES = 3
常见服务配置:
| 服务 | BASE_URL | MODEL 示例 |
|---|---|---|
| OpenAI | https://api.openai.com/v1 |
gpt-4o |
| DeepSeek | https://api.deepseek.com/v1 |
deepseek-chat |
| 通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-max |
| Ollama | http://localhost:11434/v1 |
gemma3:latest |
Ollama 的
API_KEY可填任意值(如ollama)。
环境变量 OPENAI_API_KEY / OPENAI_BASE_URL 也可配置,优先级低于 config.ini。
使用
将 PDF 放入 input/ 目录,然后运行:
uv run python main.py
输出结构:
output/
└── 课程名称/
├── index.md # PDF 转 Markdown
├── index_refined.md # LLM 精炼翻译
└── images/ # 提取的图片
断点续跑
程序会自动跳过已完成的步骤:
index_refined.md已存在 → 跳过整个文件index.md已存在但index_refined.md不存在 → 跳过 PDF 转换,仅运行 LLM 精炼
如需重新处理,删除对应的输出文件即可。
引用
常见问题
docling 转换 PDF 时报错
可能是 PDF 不规范,用 ghostscript 修复:
gs -o output.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/default input.pdf