夜雨聆风学习资料网

ARTICLE · 1166866

超越 AnyDoc!纯 Go 文档解析库 docling 完全开源,20 种格式统一解析,CAD、GLB 也能读给 AI

超越 AnyDoc!纯 Go 文档解析库 docling 完全开源,20 种格式统一解析,CAD、GLB 也能读给 AI

⬆️ 关注 联犀,最及时最干货的 AI + IoT 分享

docling 完全开源!纯 Go 实现、MIT 许可。 20 种输入格式统一解析,可直接嵌入 Go 服务;PDF、Office、CAD、GLB 都能接进来,输入范围包含 Docling JSON 专用回读。

AnyDoc 聚焦办公文档转 Markdown;我们把 CAD 拆图、GLB 属性提取也接了进来! 统一导出 Markdown、HTML、Docling JSON、content_list,并提供知识库分块接口,让图名、文字、模型属性和来源继续交给 AI 与知识库。

项目地址:https://github.com/unitedrhino/docling

表格里的数值,图表里也能读

先看一份 Excel。它有月度数据,也有折线图。只提取一段文字,当然不够:想让 AI 比较销量,得把数值交给它。

仓库构造样例:1 月 120、2 月 186、3 月 154;下方为 v1.5.0 实际解析出的图表数据。

docling 会读取 Office 原生图表的系列、类别和缓存数据;Excel 图表还可以结合引用的单元格区域取数。图表中的数据因此能组织成可检索的表格,继续比较、计算。

图表里的数值也能导出来,AI 接着比较、计算,就有了具体依据! 缺失单元格会保留空位;图片里的图表需要视觉识别,走的是另一条路径。

Word、PPT 也有原生图表处理。批注、脚注、修订记录、PPT 备注、Excel 原始公式,以及可转成 LaTeX 的 Word 原生公式,都有对应处理。仓库还放了微软 Open XML SDK 的真实测试文件,想看六个图表的 Word、三维饼图的 PPT,可以直接下载运行。

先拿一份文件跑起来

装好 docling CLI,先转一份资料,就能判断它适不适合自己的文件。开发者需要 Go 1.25 或以上,安装只需一行:

go install github.com/unitedrhino/docling/cmd/docling@v1.5.0

看 PDF 的结构,或者把 Excel 导出为 Markdown:

docling parse 报告.pdf --format outline
docling parse 设备清单.xlsx --format md

在终端看结果就能开始核对。想把解析嵌入 Go 服务,文末有完整 main.go;想在 WorkBuddy 里让 AI 调用,后面也有联犀 CLI 的一行安装命令。

PDF:文字之外,还要保留来源

再看 PDF。文字、线条、图片往往分开存放;一张表在底层可能只是坐标,双栏正文也未必按阅读顺序排列。

docling 会处理文字与坐标、字体映射、标题、表格和内嵌图片,也有多栏排序、跨页表格的处理路径。下面是仓库中一份 196 页公开论文的首页局部与解析节选:

上方为公开论文首页局部,下方为解析后的标题与作者信息节选;该图展示首页效果。

内容进入统一文档结构后,可以导出 Markdown,并保留页码、位置等来源信息。知识库查到一条要求,审阅的人能回到对应页面核对,才好决定该不该采用。

复杂版面、特殊字体和扫描页仍要检查解析结果。后面介绍的 OCR 和视觉模型入口,可以用于增强这类页面。

CAD 图纸,也能走这个入口

这次我们特别想把 CAD 带进来。 设备说明书能进知识库,工程图里的设计说明和材料文字,也值得有同样的入口。

从 docling v1.4.0 起,联犀的 go-cad 已集成进来,支持 DWG、DXF、DXFB。go-cad 读取 DWG R9~R2018 容器,处理 CAD 文本和中文编码,识别图框;docling 把每个识别到的图框组织成一页。

go-cad 的四图幅 DXF 构造示例:先看整张图的图幅排列。

其中一幅给水系统图,图框与标题栏一起保留。

拆开后,图名标题、渲染图片和框内文本一起留下。检索到设计说明时,能知道它属于哪幅图;把图纸和设备说明书放进同一套资料流程,也有了对应入口。

图纸里画成线条的字、嵌入图片里的说明需要另行识别。解析结果用于整理与核对资料,工程审核仍要结合原图。

源码地址:https://github.com/unitedrhino/go-cad

GLB:模型里的信息,也别落下

v1.5.0 又把 GLB 2.0 接了进来! 文件里已有的场景、节点、父子关系、网格名称、渲染材质名称和自定义属性,可以整理为正文与内容列表。

例如模型已经写了设备编号,就可以把编号和对应节点一起留下。每个对象保留索引来源,如 #/nodes/1;重名节点可以据此区分,大整数属性保留原始精度。

知识库开发版预览实测,使用 OrientationTest 标准模型;支持旋转、缩放和平移,相关代码已接入,待部署上线。

现在用 docling CLI,就能先把模型中的已有信息导出来:

docling parse 设备.glb --format md
docling parse 设备.glb --format content-list --out model.json

模型里写了什么,打开输出就能核对。这些名称和属性,终于有机会和说明书一起被检索到。

这条路径读取结构与已有属性:docling 自身不渲染三维几何,预览由前端完成;不会凭外观推测尺寸、材料或设备清单。STEP、IFC 目前尚未接入。

在 WorkBuddy 里,让 AI 接着分析

联犀 CLI 已支持文档解析和 CAD,安装 Skills 后,可以在 WorkBuddy/CodeBuddy 中让 AI 调用。首次安装 CLI(Linux/macOS),一行命令:

curl -fsSL https://doc.unitedrhino.com/cli/install.sh | bash

已有 CLI 的用户先升级,再安装 Skills:

ur upgrade
ur skills install --dir ~/.codebuddy/skills
ur skills status

重启 WorkBuddy 会话,让它加载 Skills。把资料放进可访问的工作目录,可以这样给任务:

用联犀 CLI 读取工作目录里的说明书.pdf、设备清单.xlsx 和施工图.dwg。整理设备型号、数量与设计要求,注明对应文档、页码或图名;列出资料中写法不一致的地方,没有写明的信息单独列出。

可复制的请求示例,非 AI 实际执行记录。

工具读资料,AI 整理问题,人拿着来源核对。 工作可以从手头的一份说明书、一张施工图开始。自己先查看图纸结构和正文,也只需:

ur doc parse 施工图.dwg --format outline
ur doc parse 施工图.dwg --format md --out 施工图.md

联犀 CLI 的 GLB 支持已合入主线,尚未发布新版二进制;试 GLB 请使用前面的 docling CLI 或 Go API。

知识库接着用

解析之后,docling 还提供层级分块、混合分块和知识库分块能力,可以按章节组织内容、限制块长度、拆分大表格。

处理流程示意:docling 解析与分块,知识库接着完成嵌入、索引与检索。

已有解析结果 doc 时,可以这样生成检索分块:

// 将已解析的文档转成内容列表,再生成检索分块。
items := docling.ToContentList(doc, docling.SourceGolight)
chunks := docling.ChunkContentList(
    items, docling.ContentChunkOptions{})

把文件名、章节、页码、图名或模型对象来源一起保存。问答结果里出现一句设计要求,就能带着来源回查;资料多了,也有办法追到原件。

纯 Go 的部署方式与当前边界

部署方式

对 Go 服务来说,docling 是普通模块,基础解析和内容组织在进程内完成,随应用一起构建、部署。让 Go 项目更容易把文档能力接进去,是我们坚持纯 Go 实现的理由。

支持范围

Word、PPT、Excel 支持 .docx、.pptx、.xlsx,旧二进制 .doc、.ppt、.xls 不在当前范围内。

SVG 可读取文本节点、标题与描述;纯图形的文字识别需要 OCR。

DoclingDocument JSON 通过 ParseDoclingDocument 回读,扩展名入口 ParseByExt 不解析任意 JSON。

输出用途

Markdown 便于 AI 阅读与人工核对;HTML 用于展示;Docling JSON 保存完整文档结构;content_list 便于筛选条目和入库。

CLI 的 outline 用于查看结构目录,分块 API 用于生成检索条目。

模型增强

文本型文档和 Office 原生结构优先规则解析。扫描件、图片表格、公式密集页等,可通过 OCRHook、PDFVisualHook 配置模型增强。

模型可用自部署服务或兼容接口,位置、费用和效果取决于配置;未配置 OCR 的扫描件不会自动产出文字。

项目说明

这里介绍的是联犀的 Go docling,文档模型参考 Docling Core 协议。它与 Python Docling 有不同的工程取舍,协议兼容不代表所有解析能力相同。

项目 README 保留了两项历史 PDF 基准,均为文本型文件的 Go 规则解析,未启用 OCR 或模型推理:

PDF 样本
Go 规则解析耗时
141KB、10 页学术论文
0.31 秒
1.2MB、图文混排技术书稿
0.73 秒

这些数据只对应原测试条件。换机器、换版式,需要重新测;复杂资料仍要检查内容、顺序和来源。

本篇使用 v1.5.0 运行了 PDF、Word、PPT、Excel、CAD 和 GLB 样例。仓库还保留了源文件、期望输出与结构测试,欢迎拿自己的资料对照检查。

嵌入 Go 服务,完整示例在这里

创建目录并安装模块:

go mod init docling-demo
go get github.com/unitedrhino/docling@v1.5.0

下面的 main.go 按参数读文件,输出 Markdown、Docling JSON、内容列表,并统计检索分块:

// main.go 演示统一解析、文档导出与知识库分块。
package main
import (
    "encoding/json"
    "fmt"
    "os"
    "github.com/unitedrhino/docling"
)
// check 在读取或导出失败时终止示例,避免继续使用无效结果。
func check(err error) {
    if err != nil {
        panic(err)
    }
}
// writeJSON 将指定结构保存为可检查的 JSON 文件。
func writeJSON(name string, value any) {
    // raw 保存带缩进的 JSON 字节,便于直接检查。
    raw, err := json.MarshalIndent(value, "", "  ")
    check(err)
    check(os.WriteFile(name, raw, 0644))
}
// main 读取命令行指定的文件,在当前目录输出解析结果。
func main() {
    if len(os.Args) != 2 {
        fmt.Println("用法:go run . <文档路径>")
        os.Exit(2)
    }
    // data 为文件字节,doc 为统一的解析结果。
    data, err := os.ReadFile(os.Args[1])
    check(err)
    doc, err := docling.ParseByExt(os.Args[1], data)
    check(err)
    check(os.WriteFile("document.md",
        []byte(doc.ToMarkdown()), 0644))
    writeJSON("document.json", doc)
    // items 保留内容条目,chunks 用于后续检索入库。
    items := docling.ToContentList(doc, docling.SourceGolight)
    writeJSON("content-list.json", items)
    chunks := docling.ChunkContentList(
        items, docling.ContentChunkOptions{})
    fmt.Printf("内容条目:%d,检索分块:%d\n",
        len(items), len(chunks))
}

运行时指定文件:

go run . 说明书.pdf

换成 .docx、.xlsx、.dwg 或 .glb,仍使用这份示例。先打开 document.md 检查内容,再查看 JSON 中的来源信息。

规约更新,找到该检查的位置!

企业资料要用起来,来源和引用就得连起来! 联犀知识库已接入 docling,CAD 图纸、GLB 模型也能入库。

能力示意:建立字段引用后定位文档与位置,由人员核对修订。

检索和 AI 整理的内容可以回查原文;公式、参数可建立到行业规约的字段引用。规约更新后,沿引用找到需要核对的文档与位置,再修订。来体验联犀知识库,让资料之间的联系用起来!

实景:AI 整理内容与原文来源一起保留。

实景:语义关联展示两侧原文与判断依据。

能把这套纯 Go 的文档能力开源出来,我们很开心,也期待大家拿真实文件来打磨它! 做 AI 应用、工程资料管理或知识库的朋友,拿手头那份最难整理的资料试一次。把具体问题和样本带到 GitHub Issue,我们一起把它读得更好。

觉得有用,欢迎给 docling 一个 Star,也把这条接入路径分享给正在处理资料的同事。

GitHub:https://github.com/unitedrhino/docling

⬆️ 关注 联犀,最及时最干货的 AI + IoT 分享

往期回顾

别再一笔笔画了!WorkBuddy 几分钟搞定配电室组态:CAD 一次图、2D 和 3D

推荐一个 AIoT 物联网平台:免费商用,还能做自己的 SaaS

纯 Go 的 CAD 解析库 go-cad,开源啦,dwg/dxf格式直接解析

JEV 火了,物联网怎么用?附开源方案部署与测试

纯 Go 实现的文档解析库 docling,开源了

AI 时代的真万物互联:人和多个 AI Agent 如何通过设备通道与外部渠道协作

做物联网项目,不必先买平台授权:联犀私有化部署永久免费

相关学习资料