PDF 别直接喂给 AI:先用 MarkItDown 转 Markdown,省 token 也少翻车
PDF 别直接喂给 AI:先用 MarkItDown 转 Markdown,省 token 也少翻车
很多人用 AI 读 PDF,第一反应是:
直接上传,总结,提炼重点。
看起来很省事。
但只要你处理过几份真实 PDF,就会发现问题来了。
页眉页脚会被读进去。
页码会被当成正文。
双栏论文的阅读顺序可能乱掉。
表格被拆成一堆碎片。
目录、脚注、版权声明、换行、断词,全都混在上下文里。
最后你以为 AI 在读资料。
其实它先在吃一大堆排版噪声。
噪声也算 token。
这就是为什么很多 PDF 总结看起来「字很多」,但重点不准。不是模型完全不会读,而是你给它的输入太脏。
这篇教程只解决一个小问题:
先把 PDF 转成 Markdown,再把干净文本交给 AI。
工具用微软开源的 MarkItDown:https://github.com/microsoft/markitdown
1. MarkItDown 是什么
MarkItDown 是微软开源的 Python 工具,目标是把各种文件转换成 Markdown,方便后续交给 LLM 使用。
它支持的不只是 PDF。
常见的 Word、PPT、Excel、HTML、CSV、JSON 等,也可以按依赖组合来处理。
但这篇先不展开。
我们只做一个最小闭环:
PDF -> Markdown -> AI 总结 / 提问 / 改写 / 提炼
2. 适合什么场景
MarkItDown 特别适合这些场景:
- 你有一份 PDF 报告,想让 AI 总结。
- 你有一批论文,想先提取可读文本。
- 你有产品手册、合同、白皮书,不想让 AI 被排版干扰。
- 你想把资料沉淀进 Obsidian、Notion 或知识库。
- 你想减少 token 浪费,让 AI 只读正文。
但它不是万能 OCR。
如果你的 PDF 是扫描件,里面其实是一张张图片,普通转换可能提不出多少文字。这种情况要走 OCR 插件或其他 OCR 工具。
先记住一句话:
可复制文字的 PDF,MarkItDown 很适合。
纯扫描图片 PDF,要先考虑 OCR。
3. 第 1 步:准备 Python 环境
MarkItDown 需要 Python 3.10 或更高版本。
先检查版本:
python --version
或者:
py --version
如果版本低于 3.10,先升级 Python。
建议为这个工具单独建一个虚拟环境,避免和其他项目依赖打架。
在你的资料文件夹里执行:
py -m venv .venv
.\.venv\Scripts\Activate.ps1
看到命令行前面出现 (.venv),说明虚拟环境已经激活。
4. 第 2 步:安装 MarkItDown
微软官方推荐安装全部可选依赖:
pip install "markitdown[all]"
如果你只处理 PDF、Word、PPT,也可以更克制一点:
pip install "markitdown[pdf,docx,pptx]"
我建议新手先用 [all]。
原因很简单:
你刚开始不会只遇到一种文件。
今天是 PDF,明天可能就是 PPT、Excel、HTML。
先把工具跑起来,比一开始抠依赖更重要。
安装完以后检查:markitdown --help
如果提示命令不存在,先关闭终端重开,或者确认虚拟环境是否激活。
5. 第 3 步:把 PDF 转成 Markdown
假设你的文件叫:report.pdf
转换命令是:
markitdown report.pdf -o report.md
也可以用重定向:
markitdown report.pdf > report.md
我更推荐 -o。
它更直观,也更不容易因为终端编码或重定向问题出奇怪结果。
转换完成后,你会得到:report.md
先别急着喂给 AI,先打开看一眼。
6. 第 4 步:检查 Markdown 是否干净
打开 report.md,重点看五件事:
- 标题层级是否基本正常。
- 正文顺序是否和原 PDF 一致。
- 页眉页脚是否大量混入正文。
- 表格是否还能看懂。
- 有没有明显乱码、断词、重复页码。
不要追求 100% 完美。
我们要的是「比原始 PDF 更适合 AI 阅读」。
如果 Markdown 已经把正文顺序理清楚,页码和排版噪声也少很多,那就可以进入下一步。
7. 第 5 步:先让 AI 做结构化阅读
不要上来就问:总结这篇 PDF。
这句话太笼统。更好的做法是,先让 AI 检查材料结构。
把 report.md 粘给 AI,然后用这个 prompt:
我会给你一份由 PDF 转成的 Markdown。
请先不要直接总结。
请先检查这份 Markdown 的结构质量,输出:
1. 文档主题;
2. 主要章节;
3. 是否存在页眉、页脚、页码、目录、版权声明等噪声;
4. 哪些段落可能是表格或排版残留;
5. 这份材料适合进一步做哪些任务。
要求:
- 只基于我提供的 Markdown;
- 不补充外部信息;
- 不确定的地方标注“不确定”。
这一步很有用。
它等于让 AI 先看现场,再干活。
如果它发现 Markdown 里有很多噪声,你可以先清理,再继续总结。
8. 第 6 步:再让 AI 总结
结构检查没问题后,再用这个 prompt:
请基于这份 Markdown 做结构化总结。
输出格式:
1. 一句话结论;
2. 5 个核心观点;
3. 每个观点对应的原文依据;
4. 关键数据或案例;
5. 作者的推理链;
6. 适合我继续追问的 5 个问题。
要求:
- 不要编造原文没有的信息;
- 如果某个结论缺少依据,请标注“依据不足”;
- 保留重要术语;
- 用中文输出。
注意这里有一个关键要求:
每个观点对应原文依据。
这会逼 AI 回到材料里找支撑,而不是顺着标题自由发挥。
9. 第 7 步:把它变成学习笔记
如果你的目标不是简单总结,而是沉淀知识,可以让 AI 输出笔记版:
请把这份 Markdown 整理成学习笔记。
输出:
1. 核心问题:这份材料试图回答什么;
2. 关键概念:每个概念用一句话解释;
3. 论证结构:按“背景 -> 问题 -> 方法 -> 证据 -> 结论”整理;
4. 可复用方法:哪些做法可以迁移到我的工作里;
5. 反常识点:哪些结论和直觉不同;
6. 待核查点:哪些地方需要回到原文或外部资料确认。
限制:
- 不写空泛鸡汤;
- 不新增文献;
- 不把推断写成事实。
这比“总结一下”更像真正读资料。
10. 批量转换多个 PDF
如果一个文件夹里有很多 PDF,可以用 PowerShell 批量转:
Get-ChildItem -Filter *.pdf | ForEach-Object {
$out = [System.IO.Path]::ChangeExtension($_.FullName, ".md")
markitdown $_.FullName -o $out
}
执行后:
a.pdf -> a.md
b.pdf -> b.md
c.pdf -> c.md
如果你要把输出统一放进 markdown 文件夹:
New-Item -ItemType Directory -Force -Path ".\markdown" | Out-Null
Get-ChildItem -Filter *.pdf | ForEach-Object {
$name = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
markitdown $_.FullName -o ".\markdown\$name.md"
}
批量跑完以后,不建议直接把所有 Markdown 一次性喂给 AI。
先抽查 2-3 份。
确认转换质量稳定,再批量进入下一步。
11. 扫描版 PDF 怎么办
如果转换出来几乎没有正文,只有图片描述或空内容,大概率是扫描版 PDF。
这种 PDF 的本质是一组图片。
MarkItDown 默认转换不一定能提取图片里的文字。
微软仓库里有 OCR 插件路线,例如 markitdown-ocr,但它需要额外配置 LLM Vision 客户端。
新手可以先用更简单的判断:
- 在 PDF 阅读器里试着选中文字。
- 能选中正文,优先用 MarkItDown。
- 选不中正文,先做 OCR,再转 Markdown。
不要拿纯扫描 PDF 硬喂 AI。
那不是省事,那是把识别、清洗、理解三个任务全堆给模型。
成本高,结果还不稳。
12. 常见问题
12.1. markitdown 命令不存在
先确认虚拟环境是否激活:.\.venv\Scripts\Activate.ps1
再检查:pip show markitdown
如果能看到包信息,但命令仍不可用,重开终端再试。
Windows 上有时是 Scripts 目录没有进入当前会话 PATH。
12.2. 转出来乱码
先换一个 PDF 测试。
如果只有某个文件乱码,可能是 PDF 内部字体编码特殊。
这种情况可以尝试:
- 先用 PDF 阅读器另存为新 PDF
- 或用其他工具先导出文本
- 再交给 MarkItDown
12.3. 表格乱了
PDF 表格本来就是难点。
如果表格是核心信息,不要只靠一次转换。
可以让 AI 单独处理表格区域:
下面这段 Markdown 可能来自 PDF 表格转换,格式有些乱。 请不要补充新数据,只基于现有内容,把它整理成一个 Markdown 表格。 如果某个单元格无法判断,请填“不确定”。
12.4. 文件太大,AI 还是吃不下
不要整份塞。先让 AI 根据目录或标题分段处理:
我会分批提供一份长文档的 Markdown。 请每批只做局部笔记,并保留“本批结论”和“需要和后文核对的问题”。 等我说“全部发送完毕”后,再做总总结。
这比一次性塞满上下文稳得多。
13. 一个更省 token 的完整工作流
可以按这个顺序走:
- PDF 转 Markdown
- 人眼抽查 Markdown
- AI 检查结构质量
- 清理明显噪声
- AI 分章节总结
- AI 输出问题清单
- 人回到原文核查关键结论
重点不是“多一个工具”。
重点是把 AI 从清理垃圾输入里解放出来。
你给它的材料越干净,它越容易把能力用在理解、判断和提炼上。
14. 可以直接复制的总控 prompt
我会给你一份由 PDF 转成的 Markdown。
你的任务不是直接概括总结,而是做可靠阅读。
请按顺序完成:
1. 判断文档主题和材料类型;
2. 识别目录、页眉页脚、页码、版权声明等噪声;
3. 按章节提取核心观点;
4. 为每个核心观点给出原文依据;
5. 标注哪些内容是事实、哪些是作者观点、哪些是你的推断;
6. 列出需要回到原 PDF 核查的位置。
限制:
- 只使用我提供的 Markdown;
- 不补充外部背景;
- 不编造数据、作者、文献或案例;
- 不确定就写“不确定”;
- 输出要适合我继续做学习笔记。
15. 输入越干净越好
AI 读资料这件事,很多时候不是模型越强越好,而是输入越干净越好。
PDF 是给人看的格式。
Markdown 更像给 AI 读的格式。
你先花 30 秒把 PDF 转成 Markdown,后面可能省掉几千、几万 token,也省掉一堆看似合理但其实被排版噪声带偏的总结。
这就是 MarkItDown 最实用的地方。
它不是炫技工具,它是喂 AI 之前的一道清洗工序。