refactor: 统一使用 OpenAI 兼容 API,支持自定义 base_url/key/model

- 移除 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
This commit is contained in:
2026-04-18 18:42:42 +10:00
parent f1214be148
commit 1c1c68a214
7 changed files with 1399 additions and 2072 deletions
+68 -44
View File
@@ -1,62 +1,86 @@
## 留子课程幻灯片整理翻译工具
# 留子课程幻灯片整理翻译工具
本工具旨在为海外留学生提供一个高效、智能的课程资料处理解决方案,以应对他们在学习过程中遇到的语言障碍和复杂的幻灯片整理挑战
将课程 PDF 幻灯片自动转换为结构化中文 Markdown,利用 LLM 优化排版、解释图片、翻译并保留英文专业术语
许多留学生在面对英文或其他语言的课程幻灯片时,不仅需要理解专业内容,还要克服语言隔阂,并且手动整理和翻译耗时费力,容易遗漏关键信息,尤其是在处理含有大量图表的幻灯片时。
## 功能
### 程序功能
- **PDF → Markdown**:自动将 PDF 转为结构化 Markdown
- **智能排版**:LLM 优化格式、修正标题层级、修复数学公式
- **图片注解**:自动识别图片内容并添加说明
- **中文翻译**:翻译为简体中文,保留专业术语英文原文(如 `磁共振成像(MRI)`
- **断点续跑**:自动跳过已完成的步骤,支持中断后继续
1. **自动化内容提取与转换:** 将 PDF 格式的课程幻灯片**自动转换为结构化的 Markdown 格式**,便于后续编辑和阅读。
2. **智能格式优化与增强:** 利用**大型语言模型 (LLM) 进行深度处理,对转换后的 Markdown 内容进行微调,优化版面格式,并智能地为图片增加注解**,提升理解效率。
3. **精准专业翻译:** 将内容**翻译成简体中文,同时智能识别并保留专业名词的英文原文注解**,确保专业术语的准确性,避免翻译歧义,让学生在中文语境下理解内容的同时,也能熟悉和掌握专业英文表达。
## 前置要求
### 前置要求
- Nvidia GPUdocling 转换需要)
- OpenAI 兼容 API(支持 OpenAI / DeepSeek / 通义千问 / Ollama 等)
- Nvidia GPU
- LLMs API Key
- Gemini
- OpenAI
- Ollama
## 安装
### 安装
```bash
pip install uv
uv venv
uv sync
```
1. **安装 uv** 如果您尚未安装 `uv`,请按照官方文档进行安装。通常可以使用 pip 安装:
## 配置
```bash
pip install uv
```
复制 `config.example.ini``config.ini` 并填入你的 API 信息:
2. **安装依赖:** 在项目根目录下,使用 `uv` 安装所有必要的依赖:
```bash
cp config.example.ini config.ini
```
```bash
uv venv
uv sync
```
### 配置
本项目使用 `config.ini` 文件来管理 API 密钥。请确保在运行程序之前,在项目根目录下创建 `config.ini` 文件,并按照以下格式配置:
`config.ini` 格式:
```ini
[llm]
# openai/gemini/ollama
PROVIDER = openai
GEMINI_MODEL_NAME = gemini-2.5-flash
OPENAI_MODEL_NAME = gpt-5-mini
OLLAMA_MODEL_NAME = gemma3:latest
OLLAMA_BASE_URL = http://localhost:11434
BASE_URL = https://api.openai.com/v1
API_KEY = sk-xxxx
MODEL = gpt-4o
TEMPERATURE = 0.7
GOOGLE_API_KEY =
OPENAI_API_KEY=
MAX_RETRIES = 3
```
### 使用方法
**常见服务配置:**
1. 将需要处理的 PDF 文件放入 `input` 目录下。
2. 运行 `main.py` 脚本。程序将自动处理 `input` 目录下的所有 PDF 文件。请使用 `uv run` 命令来执行脚本,以确保在正确的虚拟环境中运行:
```bash
uv run python main.py
```
| 服务 | 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 精炼**
如需重新处理,删除对应的输出文件即可。
## 引用
@@ -67,8 +91,8 @@ OPENAI_API_KEY=
### docling 转换 PDF 时报错
可能是 PDF 文件不规范导致的,可以尝试使用 ghostscript 规范文件。
可能是 PDF 不规范用 ghostscript 修复:
```shell
gs -o <output.pdf> -sDEVICE=pdfwrite -dPDFSETTINGS=/default <input.pdf>
```bash
gs -o output.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/default input.pdf
```