
anydoc 是由 Firecrawl 开发的开源 Rust 库,专为将办公文档(Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV、PDF)转换为干净的 GitHub-Flavored Markdown 而设计。其核心优势在于个位数毫秒级转换速度、统一输出结构及零外部依赖。提供 Node.js、Python、浏览器 WebAssembly 及原生 Rust 四种绑定,所有接口共享同一文档模型与序列化器,确保跨格式行为一致。内置基于内容的格式检测,无需依赖文件扩展名;嵌入资产保留原始字节并标记媒体类型;Node.js/Python 绑定均不阻塞主线程/GIL。可作为 Agent Skill 一键集成至 Claude Code、Codex 等智能体环境,或通过托管 API(Firecrawl Parse)获得 OCR 增强能力。

核心架构:统一文档模型与性能保障
anydoc 的设计哲学是“解析归一化,渲染标准化”,避免为每种格式维护独立输出逻辑:
- 共享文档模型:所有输入格式先解析为中间文档对象树(含标题锚点、列表嵌套、表格合并单元格、脚注、演讲者备注等完整结构),再经单一 Markdown 序列化器生成输出。这保证了
.doc与.pptx的表格转义、链接处理、代码块渲染等行为完全一致 - 内容驱动格式识别:通过文件头魔数(PDF
%PDF-、RTF{\rtf、OLE 流名、ZIP mimetype)自动判定格式,标签错误的文件仍可正确转换。CSV 等无签名格式需显式指定 - 纯 Rust 高性能:无 ML 模型、无网络调用、无系统依赖。中位转换时间 <5ms,适合批量处理与实时流水线
- 非阻塞绑定:Node.js 在 libuv 线程池执行,Python 释放 GIL,确保高并发场景下主线程/事件循环不受影响。TypeScript 类型定义与 Python stub 文件随包分发
- 嵌入资产保全:图片/对象在 Markdown 中以 alt 文本呈现,原始字节仍可通过文档模型访问并带 MIME 类型标记;外部 URL 图片转为标准 Markdown 图像语法
这种架构使 anydoc 成为 RAG 管道、知识库构建、文档迁移等场景的理想预处理层——下游 LLM 接收的是结构稳定、语义完整的 Markdown,而非格式碎片。
多语言接入与Agent集成实践
CLI 快速验证
npx @firecrawl/anydoc report.docx # stdout 输出
npx @firecrawl/anydoc slides.pptx -o out.md # 写入文件
npx @firecrawl/anydoc - --format csv < data.csv # stdin 输入
首次运行自动下载预编译二进制;全局安装用 npm install -g @firecrawl/anydoc。
编程接口要点
| 语言 | 安装命令 | 关键函数 | 注意事项 |
|---|---|---|---|
| Node.js | npm install @firecrawl/anydoc | toMarkdown(path) / toMarkdownBytes(buf, fmt?) | CSV 必须传 fmt 参数 |
| Python | pip install firecrawl-anydoc | to_markdown(path) / to_markdown_bytes(data, fmt?) | 同上 |
| WASM | npm install @firecrawl/anydoc-wasm | await init() + toMarkdownBytes(buf, fmt?) | 浏览器端仅支持字节输入 |
| Rust | cargo add anydoc | to_markdown(path)? / to_document(bytes, fmt?)? | 返回 Result,需错误处理 |
Agent Skill 集成
npx skills add firecrawl/anydoc
执行后,Claude Code/Codex/Cursor/OpenCode 等兼容代理即获得文档读取能力。Skill 封装了 CLI 调用逻辑,代理可直接理解“请分析这份合同”等自然语言指令并自动触发转换。
高级用法:文档模型访问
当需要提取嵌入图片或结构化元数据时,使用 toDocument() 获取完整文档对象,而非直接转 Markdown。该对象包含所有资产字节、媒体类型及语义节点,便于自定义后处理。
功能边界与选型考量
尽管 anydoc 覆盖主流办公格式,仍需注意以下限制:
- PDF 仅限文本层:基于 pdf-inspector 提取文字,扫描件/图片PDF 无法识别。需 OCR 时请使用 Firecrawl Parse 托管 API
- 复杂排版简化:GFM Markdown 本身不支持多栏、文本框、艺术字等高级布局,转换时会降级为线性文本或注释说明
- 宏与脚本剥离:
.docm/.xlsm等启用宏的文件仅提取内容,VBA 代码被忽略以防止安全风险 - 大文件内存占用:虽然转换快,但超大 PPTX/XLSX 可能消耗较多 RAM;建议流式处理或分片
- WASM 体积:浏览器端 WASM 模块约 2–3 MB,首屏加载需考虑懒加载策略
- CSV 方言:默认逗号分隔+双引号转义,非标格式(如制表符、单引号)需预处理
何时选择 anydoc vs 替代方案
- ✅ 选 anydoc:需要本地、快速、一致的文档→Markdown 转换;构建 LLM 数据管道;集成到代理工作流
- ❌ 不选 anydoc:需处理扫描PDF;要求保留原始排版样式;依赖 Word/PPT 特有功能(如批注修订追踪)
对于大多数 AI 应用场景,anydoc 提供了当前最优的“文档理解前置层”——它不做智能解读,只做精准转译,把复杂性留给下游模型,把确定性留给工程系统。这种克制恰恰是其价值所在。
相关导航


agtok

妙悟 Meoo

Perceptis

seo-audit-skill

Codex with ChatGPT

Claude Code Video Vision






