Anydoc Skill:把任意 Office 文档秒变 Markdown 的 Agent 神器

把 PDF、Word、PowerPoint、Excel 这些”非结构化文档”喂给 AI 一直是老大难——同一份表格在 docx 和 pptx 里的列宽不一样,CSV 没有文件头就连格式都识别不了。Firecrawl 团队(开源爬虫引擎 firecrawl/firecrawl 背后的公司)刚开源的 Anydoc 专门解决这件事,并且直接把调用入口打成了标准 SKILL.md,可被 Claude Code / Codex / Cursor / OpenCode 一行命令装载,正成为本周 GitHub Trending 开发者工具榜上最热的文档类 Skill

功能与原则

Anydoc 是一套”任意文档 → 干净 Markdown”的转换引擎,核心能力是把 Word / PowerPoint / Excel / OpenDocument / RTF / EPUB / CSV / PDF 八种格式解析成统一的中间文档模型,再经同一个 Markdown 序列化器渲染——也就是”一种输入、一个输出”,无论是 2003 年的老 doc 还是刚保存的 pptx,结果里表格、列表、引用、脚注的行为完全一致。

设计原则有三条:① 纯格式识别,不依赖 ML 模型与外部服务;② 内容探测格式,从 PDF 头、RTF 开组、OLE 流名、ZIP mimetype 等字节特征判别类型,文件后缀错误也能正确解析;③ 绑定主流语言,核心包是 Rust crate,同时发布 Python、Node.js、浏览器 WebAssembly 三套绑定,单文档转换中位数 < 5ms。

认可度

  • GitHub Star:约 12K 星,截至 2026-08-10(首次进入 GitHub 周榜当周净增 7,214 星,居 OpenGithubs 2026.08.09 周榜第 4)
  • 上榜记录:连续两周(2026.08.03 周榜、2026.08.10 周榜)登顶 GitHub Trending 开发者工具分类
  • 包分发:crates.io/crates/anydoc · npm @firecrawl/anydoc · pypi firecrawl-anydoc,三端同步上线
  • 已上线 skills.sh/firecrawl/anydoc 官方 Skill 收录,被 Firecrawl Parse 商业产品作为底层引擎调用

链接

  • GitHub:https://github.com/firecrawl/anydoc
  • 文档站点:https://firecrawl.dev
  • 在线 WASM Demo:https://firecrawl.github.io/anydoc/
  • Agent Skill 索引:https://skills.sh/firecrawl/anydoc

原作者

Firecrawl 团队(GitHub: @firecrawl)。团队主项目 firecrawl/firecrawl 累计 25.6K Star(截至 2026-05-29),是当前最主流的”网页 → LLM 数据”爬虫引擎,主打 search / scrape / crawl / extract 四件套;Anydoc 是其将”文档 → LLM 数据”做成对位产品的开源尝试。

介绍

Anydoc 的目标只有一个:让任何 Office/PDF 文档都能在单次 API 调用内变成 LLM 友好的 Markdown。它先把任意格式解析成统一的 Document 中间表示(带 heading、list、table、image、footnote、speaker notes 等完整语义),然后用统一的 Markdown serializer 输出。这意味着,无论你丢给它的是 .docx、.pptx 还是 .xlsx,结果里表格列宽、列表编号、heading 锚点的行为都完全一致,不会出现”同一份数据在两个格式里渲染不一样”的尴尬。

它同时被发布成标准的 Agent Skill:npx skills add firecrawl/anydoc 即可让 Claude Code / Codex / Cursor / OpenCode 在遇到 report.docxslides.pptxdata.pdf 时自动调用 CLI 把它转成 Markdown 再喂给大模型,绕开”AI 看不懂二进制附件”的限制。

更关键的一点是 5ms 内单文档完成转换,纯 Rust 实现、不依赖任何 ML 模型——意味着本地部署、CI 流水线、低延迟批处理都能直接用,不需要云端 OCR、不需要把文件传出企业内网。

特点

  • 统一中间表示:八种格式共享同一份 Document 模型 + 同一套 Markdown 序列化器,转出来格式一致
  • 内容级格式探测:从字节头判别 PDF/RTF/OLE/ZIP-mimetype,后缀错了也能正确解析
  • 毫秒级性能:纯 Rust 实现,单文档转换中位数 < 5ms,比多数 Python 解析方案快一到两个数量级
  • 三端绑定 + WASM:Node.js / Python / Rust / 浏览器 WASM 全部官方支持,可嵌 Web、可写 CLI、可作 Rust crate 直接调用
  • 原生 Agent Skill 入口SKILL.md 已写好,主流 IDE 与 CLI Agent(Claude Code / Codex / Cursor / OpenCode)开箱即用

使用方法

1) 安装(任选其一)

# 作为 Agent Skill 装载(推荐,给 Claude Code / Codex / Cursor 用)
npx skills add firecrawl/anydoc

# 全局 CLI
npm install -g @firecrawl/anydoc

# Python
pip install firecrawl-anydoc

# Rust
cargo add anydoc

2) CLI 调用

# 单文件转 Markdown 输出到 stdout
npx @firecrawl/anydoc report.docx

# 输出到文件
npx @firecrawl/anydoc slides.pptx -o slides.md

# 从 stdin 读(适合 CI)
npx @firecrawl/anydoc - --format csv < data.csv

3) Python 最小示例

import anydoc

markdown = anydoc.to_markdown("report.docx")           # 文件路径
markdown = anydoc.to_markdown_bytes(data, "csv")        # bytes + 显式格式
document = anydoc.to_document(data)                   # 拿结构化对象

使用场景与人群

典型场景

  • 让 Claude Code / Codex / Cursor 自动读懂你丢进去的合同 PDF、产品 PPT、数据 Excel
  • RAG 知识库批量预处理:把历史 docx / pptx / xlsx 一次性转 Markdown 入库
  • CI 流水线里的文档质量检查(diff Markdown 输出,捕捉非预期改动)
  • 离线 / 内网部署:纯 Rust、无 ML 依赖、不联网也能跑

目标用户

  • Agent / Skills 开发者:想要一个开箱即用的”文档加载 Skill”
  • RAG 工程师:要把企业里的 Office 文档批量送进向量库
  • 安全合规团队:需要本地化解析,不能让文件上传到云端 OCR
  • 文档自动化 / 数据迁移项目方:要做跨格式统一入库

输入与输出案例

案例 1:Agent 自动读懂 PPT

  • Input:用户在 Claude Code 里说 “把 slides.pptx 第 3 页那张产品对比表抽出来给我”;SKILL.md 触发 anydoc CLI
  • CLI:npx @firecrawl/anydoc slides.pptx -o slides.md
  • Output(slides.md 片段):
## 产品对比表

| 维度       | Anydoc        | 竞品 A     | 竞品 B     |
| ---------- | ------------- | ---------- | ---------- |
| 速度       | < 5ms         | ~120ms     | ~80ms      |
| ML 依赖    | 否            | 是         | 是         |
| 输出格式   | 一致 Markdown | 各异       | 各异       |
| 部署方式   | 本地 / WASM | 仅云端 | 仅云端 |

Agent 直接拿到这张 Markdown 表继续总结,无需自己理解 pptx 二进制。

案例 2:Python 离线批量入库

import anydoc, pathlib
for p in pathlib.Path("inbox").glob("**/*"):
    if p.suffix.lower() in {".docx", ".pptx", ".xlsx", ".pdf", ".csv", ".epub"}:
        out = pathlib.Path("md_out") / (p.stem + ".md")
        out.parent.mkdir(parents=True, exist_ok=True)
        out.write_text(anydoc.to_markdown(str(p)))

输出 md_out/ 目录里每个文件都是统一结构的干净 Markdown,可直接灌进 LangChain / LlamaIndex / 任何 RAG 框架的 loader。


GitHub: https://github.com/firecrawl/anydoc

评论区

0 条评论

登录后可评论。

Skill超级捕获手 15 阅读