PDF转Markdown为LLM和RAG准备:实测与避坑指南

以NIST CSF 2.0为例,展示PDF转Markdown为LLM和RAG准备文档的方法、陷阱与最佳实践。
文章指出语言模型只能读取文本而非页面,因此PDF必须先转换为字符流,Markdown因保留结构且体积小成为理想格式。作者用NIST CSF 2.0官方PDF(153万字节、32页)做了真实测试,一次API调用后得到约6.5万字符、1.6万Token的Markdown,压缩至原体积的4%,耗时1.7秒,且保留了标题、列表和表格结构。文中同时坦诚指出合并单元格会导致表格错位,并说明XFA表单和扫描版PDF因为缺少文本层而转换失败,好的转换器应通过emptyText标志显式告知。最后总结了面向LLM的文档处理五条规则,并介绍了Leafmelt API的多格式转换、Token计数、MCP服务能力与价格方案。
语言模型读的是文本,不是页面。把一份PDF交给模型之前,必须先有人把字体、分栏、页眉页脚和表格转换成字符流,而这一步直接决定了模型能理解多少。Markdown是目前最适合这一任务的格式——它保留了标题、列表、表格等结构,同时体积只有原始PDF的零头。

一次真实测试:NIST网络安全框架2.0
为验证转换效果,作者用一次API调用转换了NIST网络安全框架2.0的官方PDF(CSWP 29,32页),结果如下:
| 指标 | 结果 |
|---|---|
| PDF大小 | 1,518,858字节 |
| Markdown字符数 | 65,426 |
| 约计Token数 | 16,357 |
| 转换时间 | 1,451毫秒(端到端1.7秒) |
| 保留结构 | 页码标记、标题、列表、Table 1转为Markdown表格 |
PDF原始体积约1483KB,转换后Markdown文本仅约64KB——压缩到原来的4%左右。
以约16,000 Token的量级,整个框架可以轻松放入当前模型的上下文窗口,甚至还有富余。对于RAG场景,每个###标题天然就是分块边界,便于检索系统按语义切分。
以下是Table 1转换后的开头部分:
Table 1. CSF 2.0 Core Function and Category names and identifiers
| Function | Category | Category Identifier |
| - | - | - |
| Organizational Context | GV.OC |
| Risk Management Strategy | GV.RM |
| Roles, Responsibilities, and Authorities | GV.RR |
一个诚实的提醒:这张表中合并的"Function"单元格(Govern、Identify等)并没有在每一行重复,导致第一列发生了错位。合并单元格是所有PDF表格转换中最难处理的部分,如果某个表格很重要,务必在索引前手动检查。
关于NIST CSF与CSWP 29:NIST网络安全框架(Cybersecurity Framework,CSF)是美国国家标准与技术研究院发布的网络安全风险管理指南,广泛用于企业和政府机构的合规与安全建设。CSF 2.0于2024年2月发布,首次新增了"治理(Govern)"职能,使核心职能从原来的五类扩展为六类:治理、识别、保护、检测、响应、恢复。文档编号CSWP 29中的"CSWP"指NIST网络安全白皮书系列(Cybersecurity White Paper),这类文档通常包含大量结构化表格,正好是检验PDF转Markdown效果的理想样本。
哪些PDF会失败,以及如何识别
作者还测试了IRS的W-9表单PDF。转换本身约一秒完成,但6页文档只返回了85个字符——原因是该表单为XFA格式,文本存在于脚本层而非页面层。扫描版PDF(纸质照片)同样会失败,因为它们根本没有文本层。
优秀的转换器不会静默返回空字符串,而是会明确告知。Leafmelt在这种情况下会设置emptyText: true并附带说明,让下游管道可以将这些文件路由到OCR处理。
判断PDF是否为"危险分子",可以留意几个信号:转换结果异常短、无文本输出、或元数据中标识了XFA或扫描件特征。
XFA与扫描件为何不同:XFA(XML Forms Architecture)是Adobe为PDF表单设计的一种动态表单规范,表单的字段定义、数据绑定和渲染逻辑都存储为XML,很多情况下并不在PDF页面内容流中生成可见文本层。因此解析器读到的页面是"空"的,尽管用户在阅读器里能看到完整表单。相对地,扫描版PDF是把纸质文档拍照或扫描后生成的图像型PDF,页面本身就是像素图,没有可提取的字符。这两类文件都需要走OCR(光学字符识别)路径:先做版面分析定位文字区域,再逐块识别字符。识别质量受分辨率、倾斜角度和字体影响,通常需要在索引前人工抽检,尤其是表格和数字字段。
面向LLM的文档处理五条规则
- 保留结构。 Markdown中的标题和表格让模型和分块器都能看清主题的起止位置。
- 发送前先数Token。 每份文档的Token计数能帮你决定是分块、摘要还是整体发送。
- 去除噪声。 重复的页眉、页脚和页码会在每个分块中浪费Token。
- 标记空转换。 扫描件和XFA表单需要OCR,不要索引空白页面。
- 保留来源链接。 每个分块都应附带源链接,以便答案能引用出处页面。
通过API转换文档
Leafmelt支持每次调用最多转换5份文档,可以通过URL或上传方式处理PDF、Word、Excel、OpenDocument、Apple Numbers、CSV、HTML和XML,每份最大10MB。返回干净的Markdown(保留标题和表格)、字符和Token计数、文档元数据以及空文本标志。同一个密钥还可以作为远程MCP服务器使用,让Agent在对话过程中直接读取文档。
curl "https://leafmelt.cybermaxtools.com/api/convert?url=https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.29.pdf"
价格方面:每天免费50次调用,无需密钥和信用卡。付费方案从$19/月(3,000次调用)起,或$5按量付费(750次,无过期)。
作为对比,Apify Store上PDF提取器的公开价格范围为每PDF $0.005到$0.02,外加按页费用。Leafmelt的免费额度对于低频使用场景已经足够。
源文档:NIST CSWP 29,The NIST Cybersecurity Framework (CSF) 2.0,2024年2月26日(美国政府作品)。
MCP的作用:MCP(Model Context Protocol,模型上下文协议)是一种让AI Agent以标准化方式调用外部工具和数据源的开放协议。当转换服务以远程MCP服务器形式暴露时,Agent无需预先批量转换文档,而是可以在对话过程中按需调用"读取文档"工具,实时获得Markdown内容,再基于此进行推理或引用。这种模式特别适合处理用户临时上传的文件,或需要从多个来源动态检索的场景,相比一次性预处理全部文档更节省Token和存储。
相关推荐

@ai-sdk/vue 3.0.306 补丁发布 同步 [email protected] 更新
@ai-sdk/vue 3.0.306 发布,与 [email protected] 同步更新。这是 Vercel AI SDK 生态的一次常规补丁发布,无公开 API 变更,Vue 适配层保持与核心包版本对齐。

Gemini 4 Argon API发布:百万级输出Token时代来临
Google 正式发布 Gemini 4 Argon,稀疏 MoE 架构支持最高 100 万输出 token,Vals Index 以 68.90% 登顶,覆盖 API、AI Studio 和 Gemini 应用三端。

DukaanAI:用开源AI把商品照片变成库存清单
DukaanAI 是一款面向小零售商的 AI 库存工具,通过 Gemma 3 开源模型将商品照片转为库存条目,支持本地推理、字段编辑与 CSV 导出,探索 AI 辅助商品目录创建的可行路径。