你好,这里是郭震AI实验室!
我最近在 GitHub 看到一个刚创建三天的新项目:firecrawl/anydoc。
项目地址:https://github.com/firecrawl/anydoc
它只解决一件很具体的事:把 Word、PowerPoint、Excel、PDF、OpenDocument、RTF、EPUB 和 CSV,统一转换成适合 LLM 读取的 GitHub-Flavored Markdown。

▲ AnyDoc 官方浏览器演示:任意办公文档输入,统一输出 Markdown
我在 8 月 6 日核对时,项目已经拿到约 4,870 stars、213 forks,仓库创建于 8 月 3 日,采用 MIT 许可证。

▲ AnyDoc GitHub 仓库首页与当前项目数据
最新正式版本是 v0.1.6,8 月 5 日刚发布。项目同时提供 Rust、Node.js、Python、浏览器 WebAssembly、命令行和 Agent Skill。
先说结论
AnyDoc 最有价值的不是“又能提取文字了”,而是它用一套共享文档模型接住多种办公格式,让 Agent 不必为 Word、PPT、Excel 和 PDF 分别准备一套解析流程。
普通文本提取最容易丢掉的,恰恰是决定文档能不能被理解的部分:标题层级、列表嵌套、表头、合并单元格、脚注、链接和演讲者备注。
AnyDoc 会先识别格式,再交给对应解析器,最后都汇入同一个 Document 模型,由一套 Markdown 序列化器输出。

▲ AnyDoc 官方架构:格式检测、独立解析器、共享文档模型与统一 Markdown 输出
这样做的好处是,表格转义或脚注渲染只需要修一次,Word、RTF、OpenDocument 等格式都能一起受益。
官方列出的结构能力包括粗体、斜体、删除线、代码块、内部链接、嵌套列表、任务列表、合并单元格、脚注、尾注和 PPT 演讲者备注。

▲ GitHub README 的功能列表:文档结构、内嵌资源、内容识别与多语言绑定
当前支持的扩展名覆盖传统 Office 二进制格式和新式压缩格式,包括 .doc、.ppt、.xls、.docx、.pptx、.xlsx,也支持 ODT、ODS、ODP、RTF、EPUB、CSV 和 PDF。

▲ AnyDoc 官方支持格式表:Word、PPT、Excel、OpenDocument、RTF、EPUB、CSV 与 PDF
说白了,它不是把文件“拍扁成一段文字”,而是尽量把原文档的逻辑骨架翻译成 Markdown。
PART 02
不只是一条命令,它还直接做成了 Agent Skill
最短上手方式是运行 npx @firecrawl/anydoc report.docx,Markdown 会直接输出到终端;也可以用 -o 写入文件。

▲ AnyDoc 快速开始:Agent Skill、CLI、Node.js 等入口放在同一套项目中
如果你在 Claude Code、Codex、Cursor 或 OpenCode 里工作,还可以用 npx skills add firecrawl/anydoc 安装项目自带的 Skill。

▲ GitHub 中的 AnyDoc Agent Skill:教 Agent 判断格式、执行转换并处理结果
这意味着 Agent 遇到需求文档、财务表格或演示稿时,不必把整个办公套件塞进上下文,也不必先把文件上传到一个在线转换网站。
Python 接口可以从路径或字节读取,也能停在共享文档模型这一层,继续访问内嵌资源。

▲ AnyDoc Python 绑定:文件路径、字节输入与共享文档模型接口
浏览器版本则通过 WebAssembly 在本地页面里完成转换。官方演示明确写着:文件不会离开你的机器。

▲ AnyDoc 浏览器 WebAssembly 说明:相同 Rust 核心在网页本地运行
我在官方页面点击了内置的 RTF 样本,页面返回 258 个字符的 Markdown,并显示这次转换用时 44ms。

▲ AnyDoc 官方在线样本实测:RTF 的加粗、斜体和结构被转换成 Markdown
我检查的主分支提交是 8eecca5a,测试版本固定为 v0.1.6。
第一层是 CLI。我分别转换了项目自带的 DOCX、PPTX、XLSX、文本 PDF 和 CSV 样本,五次退出码都是 0。
DOCX 输出保留了表格、项目列表和内嵌对象说明;PPTX 输出保留了两页内容、嵌套列表、表格与演讲者备注;XLSX 和 CSV 被整理成 Markdown 表格。
实测说明|文本 PDF 也能提取标题和正文,但列表、表格等结构明显没有原始 DOCX 稳定。这一点很重要:PDF 本身保存的是页面绘制结果,不一定保留完整的语义结构。
第二层是内容识别。我把一个真实 DOCX 文件故意改名为 wrong-extension.pdf,没有额外指定格式,AnyDoc 仍然从文件字节识别出 DOCX,并成功输出标题、列表、表格、脚注和链接。

▲ AnyDoc 的内容识别机制:优先读取文件标记,而不是只相信扩展名
第三层是异常输入。我运行了四个官方破坏性夹具。
ZIP 膨胀和超大内嵌图片都触发 max_entry_bytes;超过 256 层的 XML 触发深度限制;被截断的 DOCX 则返回 malformed document。四次都以退出码 1 停止,没有假装转换成功。

▲ AnyDoc 错误分类:不支持、损坏、加密、资源超限、缺少部件与读取错误
最后我用 Rust 1.97.1 执行完整 cargo test。182 项单元测试、1 项变异健壮性测试和 8 项快照/集成测试通过,共 191 项通过;另有 1 项需要本地未公开样本目录,因此按项目设置跳过。

▲ AnyDoc 开发说明:Rust、Node、Python、WASM 测试与变异、模糊测试入口
实测说明|这次可以确认当前 Rust 核心、官方夹具和 v0.1.6 Windows 命令行都能工作,但我没有遍历所有 14 类格式,也没有复现官方 100 份真实文档的完整 benchmark。
PART 04
官方 4.4ms,为什么我看到的是 1 秒多
README 的官方对比覆盖 100 份真实文档和 14 种格式。
在官方表格里,AnyDoc 的中位转换时间是 4.4ms,综合得分 81;LibreOffice 是 1129.5ms,MarkItDown 是 134.8ms。

▲ AnyDoc 官方综合 benchmark:格式覆盖、转换中位时间与质量得分
但这组速度不能直接套到我执行的 npx 命令。
我这边五次完整命令耗时约 1.1–1.3 秒,其中包含启动 Node、启动 npx、加载本地包和进程退出。官方 4.4ms 测的是库已经加载后的单次转换,并明确排除了 Python 库的进程启动时间。
实测说明|两组数字测的不是同一层,所以不能拿 4.4ms 承诺“用户敲下命令后 4.4ms 就能看到结果”。
分格式结果同样要谨慎看。官方报告 AnyDoc 在参与评测的 14 种格式上覆盖最全、每种得分最高,但不同工具支持的格式数量不同,综合平均分并不是完全同一批样本。

▲ 官方分格式质量表与评测方法:不同工具覆盖范围并不相同
官方还说明,质量分由 Claude Sonnet 5 对照文档前六页的渲染图进行盲评,每一对结果交换顺序判断两次,共 481 次裁决。
这是一套公开方法,但评测语料因为授权原因没有放进仓库,我这次无法独立复算全部结果。
AnyDoc 明确只处理文本型 PDF。扫描件或纯图片 PDF 需要 OCR,当前会返回 unsupported;官方托管的 Firecrawl Parse 是另外一条带 OCR 的服务路线。
它也不是版式复刻工具。转换目标是让 LLM 和程序读懂结构,不是把 PPT 的视觉位置、Excel 的公式计算环境或 Word 的分页效果原样搬进 Markdown。
图片和内嵌对象在 Markdown 中通常表现为替代文字;原始字节可以留在 Document 模型中,但如果后续流程只保存 Markdown,资源文件仍需要你自己管理。
最新 v0.1.6 主要给 Node 和 WASM 绑定补充错误代码,并同时提供 Windows、macOS、Linux 的 Node 二进制和 Python wheels。

▲ AnyDoc v0.1.6 正式发布页与跨平台构建资产
因此真正接进知识库或 Agent 前,至少要测四类自己的文件:复杂合并表格、带备注的 PPT、带脚注和图片的 Word,以及扫描版 PDF。
一句话判断
AnyDoc 值得需要批量摄取混合办公文档、构建知识库或让 Agent 读取附件的开发者试一轮。
最适合
输入文件格式很杂,但希望得到一套稳定 Markdown 结构,并且愿意本地部署 Rust、Node、Python 或 WASM 绑定的人。
需要注意
官方 4.4ms 是库内转换时间,不是完整命令耗时;扫描 PDF 不支持 OCR;Markdown 保留的是语义结构,不是原始页面版式。
全文约 2400 字,16 图。如果你觉得这篇文章对你有帮助,也欢迎给我一个三连击:点赞、转发和在看;如果可以,再帮我点一个⭐️。谢谢你看到这里,我们下篇再见。