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
99 lines
2.4 KiB
Markdown
Executable File
99 lines
2.4 KiB
Markdown
Executable File
# 留子课程幻灯片整理翻译工具
|
||
|
||
将课程 PDF 幻灯片自动转换为结构化中文 Markdown,利用 LLM 优化排版、解释图片、翻译并保留英文专业术语。
|
||
|
||
## 功能
|
||
|
||
- **PDF → Markdown**:自动将 PDF 转为结构化 Markdown
|
||
- **智能排版**:LLM 优化格式、修正标题层级、修复数学公式
|
||
- **图片注解**:自动识别图片内容并添加说明
|
||
- **中文翻译**:翻译为简体中文,保留专业术语英文原文(如 `磁共振成像(MRI)`)
|
||
- **断点续跑**:自动跳过已完成的步骤,支持中断后继续
|
||
|
||
## 前置要求
|
||
|
||
- Nvidia GPU(docling 转换需要)
|
||
- OpenAI 兼容 API(支持 OpenAI / DeepSeek / 通义千问 / Ollama 等)
|
||
|
||
## 安装
|
||
|
||
```bash
|
||
pip install uv
|
||
uv venv
|
||
uv sync
|
||
```
|
||
|
||
## 配置
|
||
|
||
复制 `config.example.ini` 为 `config.ini` 并填入你的 API 信息:
|
||
|
||
```bash
|
||
cp config.example.ini config.ini
|
||
```
|
||
|
||
`config.ini` 格式:
|
||
|
||
```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/` 目录,然后运行:
|
||
|
||
```bash
|
||
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](https://github.com/docling-project/docling)
|
||
- [langchain](https://github.com/langchain-ai/langchain)
|
||
|
||
## 常见问题
|
||
|
||
### docling 转换 PDF 时报错
|
||
|
||
可能是 PDF 不规范,用 ghostscript 修复:
|
||
|
||
```bash
|
||
gs -o output.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/default input.pdf
|
||
```
|