Files
slide-translate/README.md
T
nite 1c1c68a214 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
2026-04-18 18:42:42 +10:00

2.4 KiB
Executable File
Raw Blame History

留子课程幻灯片整理翻译工具

将课程 PDF 幻灯片自动转换为结构化中文 Markdown,利用 LLM 优化排版、解释图片、翻译并保留英文专业术语。

功能

  • PDF → Markdown:自动将 PDF 转为结构化 Markdown
  • 智能排版:LLM 优化格式、修正标题层级、修复数学公式
  • 图片注解:自动识别图片内容并添加说明
  • 中文翻译:翻译为简体中文,保留专业术语英文原文(如 磁共振成像(MRI)
  • 断点续跑:自动跳过已完成的步骤,支持中断后继续

前置要求

  • Nvidia GPUdocling 转换需要)
  • OpenAI 兼容 API(支持 OpenAI / DeepSeek / 通义千问 / Ollama 等)

安装

pip install uv
uv venv
uv sync

配置

复制 config.example.iniconfig.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