欢迎光临
我们一直在努力

18、性能之王对决|Kreuzberg vs Docling 企业级文档解析横向评测

性能之王对决|Kreuzberg vs Docling 企业级文档解析横向评测

深度对比Rust原生的文档智能框架与IBM的AI解析引擎,为你的RAG系统选对工具

目录

  • 引言:企业文档解析的四大核心需求
  • Kreuzberg:Rust核心的多语言文档智能框架
  • Docling:IBM出品的AI文档解析引擎
  • RAG集成能力对比:谁更适合AI应用?
  • 横向对比总览:速度/内存/准确率/格式支持
  • 选型指南:小规模微服务 vs 大规模数据管道
  • 结论与展望

  • 1. 引言:企业文档解析的四大核心需求

    当企业将文档解析系统从“能用”推向“用好”,生产环境会暴露出一系列教科书和实验环境难以预见的挑战。RAG系统的上游文档解析环节,正成为落地过程中最隐蔽的性能瓶颈[reference:0]。

    在生产环境中,企业对文档解析工具的核心需求可以归纳为四个维度:

    渲染错误: Mermaid 渲染失败: Lexical error on line 3. Unrecognized text. …度 x-axis "低重要性" → "高重要性" y-axis ———————-^

  • 速度与吞吐量:在生产管道中,文档解析往往是串行处理的首个瓶颈。如果一个工具处理单份文档需要60分钟,那么在日处理数千份文档的场景下,这个工具根本无法进入候选名单。

  • 内存占用:在生产环境部署时,安装包大小和运行时内存决定了能否在资源受限的环境(如边缘节点、AWS Lambda)中运行。一个1GB+的安装包在容器化环境中意味着更长的镜像拉取时间、更高的存储成本和更大的攻击面。

  • 并发与可扩展性:企业文档处理通常不是单条流水线,而是需要同时处理大量文档。工具能否支持异步IO、多线程并行处理、以及水平扩展,直接决定了系统的天花板。

  • 格式支持与准确率:企业文档的多样性远超想象——从现代PDF、老旧DOC到扫描件图像,再到包含复杂表格和数学公式的学术论文。工具需要在这些格式之间保持稳定的提取质量。

  • 在这场对决中,我们将深入剖析两个明星选手:

    • Kreuzberg:一个基于Rust核心构建的“多语言文档智能框架”,声称平均速度快9倍,安装包仅71MB[reference:1]。
    • Docling:IBM开源的专业文档解析引擎,成为Python社区中近乎事实标准的选择[reference:2]。

    谁才是企业级生产环境的最佳选择?让我们从最硬核的数据开始。

    #mermaid-svg-MQlXEEna0Oi2vhwi{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MQlXEEna0Oi2vhwi .error-icon{fill:#552222;}#mermaid-svg-MQlXEEna0Oi2vhwi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MQlXEEna0Oi2vhwi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MQlXEEna0Oi2vhwi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MQlXEEna0Oi2vhwi .marker.cross{stroke:#333333;}#mermaid-svg-MQlXEEna0Oi2vhwi svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MQlXEEna0Oi2vhwi p{margin:0;}#mermaid-svg-MQlXEEna0Oi2vhwi .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-MQlXEEna0Oi2vhwi .cluster-label text{fill:#333;}#mermaid-svg-MQlXEEna0Oi2vhwi .cluster-label span{color:#333;}#mermaid-svg-MQlXEEna0Oi2vhwi .cluster-label span p{background-color:transparent;}#mermaid-svg-MQlXEEna0Oi2vhwi .label text,#mermaid-svg-MQlXEEna0Oi2vhwi span{fill:#333;color:#333;}#mermaid-svg-MQlXEEna0Oi2vhwi .node rect,#mermaid-svg-MQlXEEna0Oi2vhwi .node circle,#mermaid-svg-MQlXEEna0Oi2vhwi .node ellipse,#mermaid-svg-MQlXEEna0Oi2vhwi .node polygon,#mermaid-svg-MQlXEEna0Oi2vhwi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MQlXEEna0Oi2vhwi .rough-node .label text,#mermaid-svg-MQlXEEna0Oi2vhwi .node .label text,#mermaid-svg-MQlXEEna0Oi2vhwi .image-shape .label,#mermaid-svg-MQlXEEna0Oi2vhwi .icon-shape .label{text-anchor:middle;}#mermaid-svg-MQlXEEna0Oi2vhwi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MQlXEEna0Oi2vhwi .rough-node .label,#mermaid-svg-MQlXEEna0Oi2vhwi .node .label,#mermaid-svg-MQlXEEna0Oi2vhwi .image-shape .label,#mermaid-svg-MQlXEEna0Oi2vhwi .icon-shape .label{text-align:center;}#mermaid-svg-MQlXEEna0Oi2vhwi .node.clickable{cursor:pointer;}#mermaid-svg-MQlXEEna0Oi2vhwi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MQlXEEna0Oi2vhwi .arrowheadPath{fill:#333333;}#mermaid-svg-MQlXEEna0Oi2vhwi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MQlXEEna0Oi2vhwi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MQlXEEna0Oi2vhwi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MQlXEEna0Oi2vhwi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MQlXEEna0Oi2vhwi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MQlXEEna0Oi2vhwi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MQlXEEna0Oi2vhwi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MQlXEEna0Oi2vhwi .cluster text{fill:#333;}#mermaid-svg-MQlXEEna0Oi2vhwi .cluster span{color:#333;}#mermaid-svg-MQlXEEna0Oi2vhwi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MQlXEEna0Oi2vhwi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MQlXEEna0Oi2vhwi rect.text{fill:none;stroke-width:0;}#mermaid-svg-MQlXEEna0Oi2vhwi .icon-shape,#mermaid-svg-MQlXEEna0Oi2vhwi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MQlXEEna0Oi2vhwi .icon-shape p,#mermaid-svg-MQlXEEna0Oi2vhwi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MQlXEEna0Oi2vhwi .icon-shape .label rect,#mermaid-svg-MQlXEEna0Oi2vhwi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MQlXEEna0Oi2vhwi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MQlXEEna0Oi2vhwi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MQlXEEna0Oi2vhwi :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    四大核心维度

    生产环境

    速度优先

    结构理解优先

    企业文档输入

    文档解析引擎

    ⚡ 速度与吞吐量

    💾 内存占用

    🔀 并发与可扩展性

    📊 格式支持与准确率

    能否支撑大规模处理?

    选型决策

    Kreuzberg

    Docling


    2. Kreuzberg:Rust核心的多语言文档智能框架

    2.1 从Python重写为Rust:一次彻底的架构升级

    Kreuzberg最初是一个Python库,但随着使用场景从单机脚本扩展到生产级文档管道,Python实现的瓶颈日益明显——GIL限制了并发能力、内存占用难以优化、跨语言支持几乎不可能。

    于是,Kreuzberg v4进行了彻底的Rust重写。这个决定带来了几个革命性的变化[reference:3]:

    • 消除Python GIL瓶颈:Rust核心可以充分利用多核CPU,并发处理不再是限制。
    • 抛弃Pandoc依赖:改用原生Rust解析器处理所有格式,不再需要维护LibreOffice等系统依赖[reference:4]。
    • 10种语言绑定:同一套Rust核心通过FFI(外部函数接口)提供了Python、TypeScript/Node.js、Java、Go、C#、Ruby、PHP、Elixir、Rust和WASM的绑定,所有语言共享相同的API行为和提取结果[reference:5]。

    #mermaid-svg-SvhyXK3xCT0CbkAh{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SvhyXK3xCT0CbkAh .error-icon{fill:#552222;}#mermaid-svg-SvhyXK3xCT0CbkAh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SvhyXK3xCT0CbkAh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SvhyXK3xCT0CbkAh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SvhyXK3xCT0CbkAh .marker.cross{stroke:#333333;}#mermaid-svg-SvhyXK3xCT0CbkAh svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SvhyXK3xCT0CbkAh p{margin:0;}#mermaid-svg-SvhyXK3xCT0CbkAh .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-SvhyXK3xCT0CbkAh .cluster-label text{fill:#333;}#mermaid-svg-SvhyXK3xCT0CbkAh .cluster-label span{color:#333;}#mermaid-svg-SvhyXK3xCT0CbkAh .cluster-label span p{background-color:transparent;}#mermaid-svg-SvhyXK3xCT0CbkAh .label text,#mermaid-svg-SvhyXK3xCT0CbkAh span{fill:#333;color:#333;}#mermaid-svg-SvhyXK3xCT0CbkAh .node rect,#mermaid-svg-SvhyXK3xCT0CbkAh .node circle,#mermaid-svg-SvhyXK3xCT0CbkAh .node ellipse,#mermaid-svg-SvhyXK3xCT0CbkAh .node polygon,#mermaid-svg-SvhyXK3xCT0CbkAh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SvhyXK3xCT0CbkAh .rough-node .label text,#mermaid-svg-SvhyXK3xCT0CbkAh .node .label text,#mermaid-svg-SvhyXK3xCT0CbkAh .image-shape .label,#mermaid-svg-SvhyXK3xCT0CbkAh .icon-shape .label{text-anchor:middle;}#mermaid-svg-SvhyXK3xCT0CbkAh .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SvhyXK3xCT0CbkAh .rough-node .label,#mermaid-svg-SvhyXK3xCT0CbkAh .node .label,#mermaid-svg-SvhyXK3xCT0CbkAh .image-shape .label,#mermaid-svg-SvhyXK3xCT0CbkAh .icon-shape .label{text-align:center;}#mermaid-svg-SvhyXK3xCT0CbkAh .node.clickable{cursor:pointer;}#mermaid-svg-SvhyXK3xCT0CbkAh .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SvhyXK3xCT0CbkAh .arrowheadPath{fill:#333333;}#mermaid-svg-SvhyXK3xCT0CbkAh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SvhyXK3xCT0CbkAh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SvhyXK3xCT0CbkAh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SvhyXK3xCT0CbkAh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SvhyXK3xCT0CbkAh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SvhyXK3xCT0CbkAh .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SvhyXK3xCT0CbkAh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SvhyXK3xCT0CbkAh .cluster text{fill:#333;}#mermaid-svg-SvhyXK3xCT0CbkAh .cluster span{color:#333;}#mermaid-svg-SvhyXK3xCT0CbkAh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SvhyXK3xCT0CbkAh .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SvhyXK3xCT0CbkAh rect.text{fill:none;stroke-width:0;}#mermaid-svg-SvhyXK3xCT0CbkAh .icon-shape,#mermaid-svg-SvhyXK3xCT0CbkAh .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SvhyXK3xCT0CbkAh .icon-shape p,#mermaid-svg-SvhyXK3xCT0CbkAh .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SvhyXK3xCT0CbkAh .icon-shape .label rect,#mermaid-svg-SvhyXK3xCT0CbkAh .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SvhyXK3xCT0CbkAh .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SvhyXK3xCT0CbkAh .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SvhyXK3xCT0CbkAh :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    部署形态

    Kreuzberg 架构

    语言绑定层 (FFI)

    🔴 Rust 核心引擎原生解析器 + OCR + 布局分析

    Python

    TypeScript/Node.js

    Go

    Java

    Ruby

    PHP

    Elixir

    C#

    WASM

    🐳 Docker 镜像

    🖥️ CLI 工具

    🌐 REST API

    🔌 MCP Server

    这种“一次编写,到处运行”的设计哲学对企业级应用意义重大:Python团队可以用Kreuzberg做数据管道,Go团队可以用它写微服务,TypeScript前端也可以直接调用——所有人使用同一套引擎、输出完全一致的结果[reference:6]。

    2.2 安装与基础用法

    Kreuzberg的安装极为简单。通过pip安装:

    pip install kreuzberg

    对于需要OCR功能的场景,可以安装带OCR支持的版本:

    pip install kreuzberg[ocr]

    基础使用示例:

    import kreuzberg
    import asyncio

    # 同步方式
    result = kreuzberg.extract_text("document.pdf")
    print(result.text)
    print(result.metadata)

    # 异步方式(推荐用于生产环境)
    async def extract_docs():
    results = await asyncio.gather(*[
    kreuzberg.extract_text_async(pdf_path)
    for pdf_path in pdf_list
    ])
    for result in results:
    print(f"Page {result.page}: {result.text[:100]}…")

    asyncio.run(extract_docs())

    结构化提取与Markdown输出(v4.5+):

    # 提取文档结构(标题、段落、表格等)
    from kreuzberg import ExtractionConfig

    config = ExtractionConfig(
    extract_structure=True, # 启用文档结构提取
    output_format="markdown" # 输出Markdown格式
    )

    result = kreuzberg.extract_text(
    "academic_paper.pdf",
    config=config
    )
    print(result.markdown) # 带层级标题、表格、公式的Markdown

    Kreuzberg提供了统一的同步/异步接口,并支持OCR、文档结构提取和嵌入生成。它的核心设计原则是开箱即用——无需配置复杂的系统依赖,即可处理50+种文档格式[reference:7]。

    2.3 多后端OCR架构

    Kreuzberg的OCR能力是其最引人注目的特性之一。它支持多种OCR后端,开发者可以根据场景灵活选择:

    OCR后端特点适用场景
    Tesseract 经典开源OCR,20+年历史,Google维护 通用场景、多语言支持
    EasyOCR 基于深度学习,轻量级 中文/日文/韩文等东亚语言
    PaddleOCR 百度出品,Rust原生实现,东亚语言表现出色 中文文档、复杂扫描件
    Apple Vision macOS/iOS原生 Apple生态内应用
    Windows OCR Windows原生 Windows企业环境

    Kreuzberg v4.3.0引入的PaddleOCR后端尤其值得关注——这是首个在Rust中原生实现的PaddleOCR支持,意味着PaddleOCR的性能优势可以同时惠及所有语言绑定[reference:8]。对于中文文档的OCR识别,PaddleOCR相比Tesseract有明显优势,特别适合中国企业的文档处理场景[reference:9]。

    #mermaid-svg-yuAYC78o5ovIp12W{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yuAYC78o5ovIp12W .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yuAYC78o5ovIp12W .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yuAYC78o5ovIp12W .error-icon{fill:#552222;}#mermaid-svg-yuAYC78o5ovIp12W .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yuAYC78o5ovIp12W .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yuAYC78o5ovIp12W .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yuAYC78o5ovIp12W .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yuAYC78o5ovIp12W .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yuAYC78o5ovIp12W .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yuAYC78o5ovIp12W .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yuAYC78o5ovIp12W .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yuAYC78o5ovIp12W .marker.cross{stroke:#333333;}#mermaid-svg-yuAYC78o5ovIp12W svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yuAYC78o5ovIp12W p{margin:0;}#mermaid-svg-yuAYC78o5ovIp12W .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-yuAYC78o5ovIp12W .cluster-label text{fill:#333;}#mermaid-svg-yuAYC78o5ovIp12W .cluster-label span{color:#333;}#mermaid-svg-yuAYC78o5ovIp12W .cluster-label span p{background-color:transparent;}#mermaid-svg-yuAYC78o5ovIp12W .label text,#mermaid-svg-yuAYC78o5ovIp12W span{fill:#333;color:#333;}#mermaid-svg-yuAYC78o5ovIp12W .node rect,#mermaid-svg-yuAYC78o5ovIp12W .node circle,#mermaid-svg-yuAYC78o5ovIp12W .node ellipse,#mermaid-svg-yuAYC78o5ovIp12W .node polygon,#mermaid-svg-yuAYC78o5ovIp12W .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yuAYC78o5ovIp12W .rough-node .label text,#mermaid-svg-yuAYC78o5ovIp12W .node .label text,#mermaid-svg-yuAYC78o5ovIp12W .image-shape .label,#mermaid-svg-yuAYC78o5ovIp12W .icon-shape .label{text-anchor:middle;}#mermaid-svg-yuAYC78o5ovIp12W .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yuAYC78o5ovIp12W .rough-node .label,#mermaid-svg-yuAYC78o5ovIp12W .node .label,#mermaid-svg-yuAYC78o5ovIp12W .image-shape .label,#mermaid-svg-yuAYC78o5ovIp12W .icon-shape .label{text-align:center;}#mermaid-svg-yuAYC78o5ovIp12W .node.clickable{cursor:pointer;}#mermaid-svg-yuAYC78o5ovIp12W .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yuAYC78o5ovIp12W .arrowheadPath{fill:#333333;}#mermaid-svg-yuAYC78o5ovIp12W .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yuAYC78o5ovIp12W .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yuAYC78o5ovIp12W .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yuAYC78o5ovIp12W .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yuAYC78o5ovIp12W .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yuAYC78o5ovIp12W .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yuAYC78o5ovIp12W .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yuAYC78o5ovIp12W .cluster text{fill:#333;}#mermaid-svg-yuAYC78o5ovIp12W .cluster span{color:#333;}#mermaid-svg-yuAYC78o5ovIp12W div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yuAYC78o5ovIp12W .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yuAYC78o5ovIp12W rect.text{fill:none;stroke-width:0;}#mermaid-svg-yuAYC78o5ovIp12W .icon-shape,#mermaid-svg-yuAYC78o5ovIp12W .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yuAYC78o5ovIp12W .icon-shape p,#mermaid-svg-yuAYC78o5ovIp12W .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yuAYC78o5ovIp12W .icon-shape .label rect,#mermaid-svg-yuAYC78o5ovIp12W .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yuAYC78o5ovIp12W .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yuAYC78o5ovIp12W .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yuAYC78o5ovIp12W :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Kreuzberg OCR 架构

    默认

    中文优先

    轻量级

    Apple生态

    Windows生态

    📄 扫描图像/PDF

    OCR路由器

    🔧 Tesseract经典引擎

    🐉 PaddleOCRRust原生

    ⚡ EasyOCR深度学习

    🍎 Apple Vision

    🪟 Windows OCR

    📝 提取文本

    2.4 内存占用与QPS实测

    根据权威的独立基准测试(基于94份真实文档、~210MB数据),Kreuzberg在资源占用和吞吐量方面表现惊艳[reference:10][reference:11]:

    #mermaid-svg-cquj91GgU4NA0Zat{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cquj91GgU4NA0Zat .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cquj91GgU4NA0Zat .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cquj91GgU4NA0Zat .error-icon{fill:#552222;}#mermaid-svg-cquj91GgU4NA0Zat .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cquj91GgU4NA0Zat .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cquj91GgU4NA0Zat .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cquj91GgU4NA0Zat .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cquj91GgU4NA0Zat .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cquj91GgU4NA0Zat .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cquj91GgU4NA0Zat .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cquj91GgU4NA0Zat .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cquj91GgU4NA0Zat .marker.cross{stroke:#333333;}#mermaid-svg-cquj91GgU4NA0Zat svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cquj91GgU4NA0Zat p{margin:0;}#mermaid-svg-cquj91GgU4NA0Zat .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-cquj91GgU4NA0Zat .cluster-label text{fill:#333;}#mermaid-svg-cquj91GgU4NA0Zat .cluster-label span{color:#333;}#mermaid-svg-cquj91GgU4NA0Zat .cluster-label span p{background-color:transparent;}#mermaid-svg-cquj91GgU4NA0Zat .label text,#mermaid-svg-cquj91GgU4NA0Zat span{fill:#333;color:#333;}#mermaid-svg-cquj91GgU4NA0Zat .node rect,#mermaid-svg-cquj91GgU4NA0Zat .node circle,#mermaid-svg-cquj91GgU4NA0Zat .node ellipse,#mermaid-svg-cquj91GgU4NA0Zat .node polygon,#mermaid-svg-cquj91GgU4NA0Zat .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cquj91GgU4NA0Zat .rough-node .label text,#mermaid-svg-cquj91GgU4NA0Zat .node .label text,#mermaid-svg-cquj91GgU4NA0Zat .image-shape .label,#mermaid-svg-cquj91GgU4NA0Zat .icon-shape .label{text-anchor:middle;}#mermaid-svg-cquj91GgU4NA0Zat .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-cquj91GgU4NA0Zat .rough-node .label,#mermaid-svg-cquj91GgU4NA0Zat .node .label,#mermaid-svg-cquj91GgU4NA0Zat .image-shape .label,#mermaid-svg-cquj91GgU4NA0Zat .icon-shape .label{text-align:center;}#mermaid-svg-cquj91GgU4NA0Zat .node.clickable{cursor:pointer;}#mermaid-svg-cquj91GgU4NA0Zat .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-cquj91GgU4NA0Zat .arrowheadPath{fill:#333333;}#mermaid-svg-cquj91GgU4NA0Zat .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cquj91GgU4NA0Zat .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cquj91GgU4NA0Zat .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cquj91GgU4NA0Zat .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-cquj91GgU4NA0Zat .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cquj91GgU4NA0Zat .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-cquj91GgU4NA0Zat .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cquj91GgU4NA0Zat .cluster text{fill:#333;}#mermaid-svg-cquj91GgU4NA0Zat .cluster span{color:#333;}#mermaid-svg-cquj91GgU4NA0Zat div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cquj91GgU4NA0Zat .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-cquj91GgU4NA0Zat rect.text{fill:none;stroke-width:0;}#mermaid-svg-cquj91GgU4NA0Zat .icon-shape,#mermaid-svg-cquj91GgU4NA0Zat .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cquj91GgU4NA0Zat .icon-shape p,#mermaid-svg-cquj91GgU4NA0Zat .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-cquj91GgU4NA0Zat .icon-shape .label rect,#mermaid-svg-cquj91GgU4NA0Zat .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cquj91GgU4NA0Zat .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-cquj91GgU4NA0Zat .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-cquj91GgU4NA0Zat :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    安装包大小对比

    Kreuzberg71 MB

    Docling1,032 MB

    MarkItDown251 MB

    Unstructured146 MB

    指标KreuzbergDocling备注
    安装包大小 71 MB 1,032 MB 相差14.5倍
    依赖数量 20个 88个 依赖管理更简单
    处理速度 35+ 文件/秒 60+ 分钟/文件 吞吐量差异巨大
    平均速度优势 基准 慢9倍 Kreuzberg官方基准数据
    冷启动时间 极短 模型加载耗时 Python深度学习库的通病

    数据来源:基于94份真实文档的基准测试[reference:12]

    特别值得注意的是,Kreuzberg在PDF Markdown提取质量上已经与Docling达到几乎持平的水平——在16份测试PDF上,Kreuzberg的平均F1为91.0%,Docling为91.4%,差异不到0.5个百分点[reference:13][reference:14]。而在速度方面,Kreuzberg比Docling快10-50倍。

    #mermaid-svg-0jHqkVFUnDJrmffQ{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0jHqkVFUnDJrmffQ .error-icon{fill:#552222;}#mermaid-svg-0jHqkVFUnDJrmffQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0jHqkVFUnDJrmffQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0jHqkVFUnDJrmffQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0jHqkVFUnDJrmffQ .marker.cross{stroke:#333333;}#mermaid-svg-0jHqkVFUnDJrmffQ svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0jHqkVFUnDJrmffQ p{margin:0;}#mermaid-svg-0jHqkVFUnDJrmffQ .mermaid-main-font{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-0jHqkVFUnDJrmffQ .exclude-range{fill:#eeeeee;}#mermaid-svg-0jHqkVFUnDJrmffQ .section{stroke:none;opacity:0.2;}#mermaid-svg-0jHqkVFUnDJrmffQ .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-0jHqkVFUnDJrmffQ .section2{fill:#fff400;}#mermaid-svg-0jHqkVFUnDJrmffQ .section1,#mermaid-svg-0jHqkVFUnDJrmffQ .section3{fill:white;opacity:0.2;}#mermaid-svg-0jHqkVFUnDJrmffQ .sectionTitle0{fill:#333;}#mermaid-svg-0jHqkVFUnDJrmffQ .sectionTitle1{fill:#333;}#mermaid-svg-0jHqkVFUnDJrmffQ .sectionTitle2{fill:#333;}#mermaid-svg-0jHqkVFUnDJrmffQ .sectionTitle3{fill:#333;}#mermaid-svg-0jHqkVFUnDJrmffQ .sectionTitle{text-anchor:start;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-0jHqkVFUnDJrmffQ .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-0jHqkVFUnDJrmffQ .grid .tick text{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;fill:#333;}#mermaid-svg-0jHqkVFUnDJrmffQ .grid path{stroke-width:0;}#mermaid-svg-0jHqkVFUnDJrmffQ .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-0jHqkVFUnDJrmffQ .task{stroke-width:2;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskText{text-anchor:middle;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutsideRight{fill:black;text-anchor:start;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-0jHqkVFUnDJrmffQ .task.clickable{cursor:pointer;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskText0,#mermaid-svg-0jHqkVFUnDJrmffQ .taskText1,#mermaid-svg-0jHqkVFUnDJrmffQ .taskText2,#mermaid-svg-0jHqkVFUnDJrmffQ .taskText3{fill:white;}#mermaid-svg-0jHqkVFUnDJrmffQ .task0,#mermaid-svg-0jHqkVFUnDJrmffQ .task1,#mermaid-svg-0jHqkVFUnDJrmffQ .task2,#mermaid-svg-0jHqkVFUnDJrmffQ .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutside0,#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutside2{fill:black;}#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutside1,#mermaid-svg-0jHqkVFUnDJrmffQ .taskTextOutside3{fill:black;}#mermaid-svg-0jHqkVFUnDJrmffQ .active0,#mermaid-svg-0jHqkVFUnDJrmffQ .active1,#mermaid-svg-0jHqkVFUnDJrmffQ .active2,#mermaid-svg-0jHqkVFUnDJrmffQ .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-0jHqkVFUnDJrmffQ .activeText0,#mermaid-svg-0jHqkVFUnDJrmffQ .activeText1,#mermaid-svg-0jHqkVFUnDJrmffQ .activeText2,#mermaid-svg-0jHqkVFUnDJrmffQ .activeText3{fill:black!important;}#mermaid-svg-0jHqkVFUnDJrmffQ .done0,#mermaid-svg-0jHqkVFUnDJrmffQ .done1,#mermaid-svg-0jHqkVFUnDJrmffQ .done2,#mermaid-svg-0jHqkVFUnDJrmffQ .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-0jHqkVFUnDJrmffQ .doneText0,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText1,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText2,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText3{fill:black!important;}#mermaid-svg-0jHqkVFUnDJrmffQ .doneText0.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText0.taskTextOutsideRight,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText1.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText1.taskTextOutsideRight,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText2.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText2.taskTextOutsideRight,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText3.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-0jHqkVFUnDJrmffQ .crit0,#mermaid-svg-0jHqkVFUnDJrmffQ .crit1,#mermaid-svg-0jHqkVFUnDJrmffQ .crit2,#mermaid-svg-0jHqkVFUnDJrmffQ .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-0jHqkVFUnDJrmffQ .activeCrit0,#mermaid-svg-0jHqkVFUnDJrmffQ .activeCrit1,#mermaid-svg-0jHqkVFUnDJrmffQ .activeCrit2,#mermaid-svg-0jHqkVFUnDJrmffQ .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-0jHqkVFUnDJrmffQ .doneCrit0,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCrit1,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCrit2,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-0jHqkVFUnDJrmffQ .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-0jHqkVFUnDJrmffQ .milestoneText{font-style:italic;}#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText0,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText1,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText2,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText3{fill:black!important;}#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText0.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText0.taskTextOutsideRight,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText1.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText1.taskTextOutsideRight,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText2.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText2.taskTextOutsideRight,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText3.taskTextOutsideLeft,#mermaid-svg-0jHqkVFUnDJrmffQ .doneCritText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-0jHqkVFUnDJrmffQ .vert{stroke:navy;}#mermaid-svg-0jHqkVFUnDJrmffQ .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#mermaid-svg-0jHqkVFUnDJrmffQ .activeCritText0,#mermaid-svg-0jHqkVFUnDJrmffQ .activeCritText1,#mermaid-svg-0jHqkVFUnDJrmffQ .activeCritText2,#mermaid-svg-0jHqkVFUnDJrmffQ .activeCritText3{fill:black!important;}#mermaid-svg-0jHqkVFUnDJrmffQ .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-0jHqkVFUnDJrmffQ :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    00秒

    00秒

    00秒

    00秒

    00秒

    00秒

    00秒

    00秒

    00秒

    00秒

    表格识别

    OCR处理

    提取完成

    模型加载

    布局分析

    Kreuzberg

    Docling

    单份复杂PDF处理时间对比

    注:Docling处理中等以上复杂度的PDF时,经常出现超时或失败[reference:15]

    内存占用实测:在实际运行中,Kreuzberg处理一份50MB的学术PDF时,峰值内存占用约为200-300MB,而Docling在同样任务下可能消耗1.5GB+内存[reference:16]。这意味着在资源受限的环境中(如AWS Lambda的内存限制为512MB-10GB),Kreuzberg可以稳定运行,而Docling则需要更昂贵的配置。


    3. Docling:IBM出品的AI文档解析引擎

    3.1 产品定位与开源背景

    Docling是IBM Research开源的文档解析工具包,专为生成式AI和RAG系统设计。它在不到一年时间内收获了近3万GitHub Star,并成为Linux AI & Data Foundation的一部分[reference:17]。据报道,目前已有约47%的RAG系统正在使用或转向Docling[reference:18]。

    Docling的核心价值主张非常明确:将PDF、Word、HTML等格式转换为结构化Markdown或JSON,同时保留文档的布局语义——标题层级、表格结构、阅读顺序[reference:19]。

    它不同于传统OCR工具的地方在于:传统OCR只识别“哪里有文字”,而Docling理解“文字在文档中的角色”——哪个是标题、哪个是正文、哪个是表格、哪个是页脚。这种布局感知能力使其特别适合处理复杂的学术论文、财务报表和技术文档[reference:20]。

    #mermaid-svg-YoB6Ea5g7SnpZvcc{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YoB6Ea5g7SnpZvcc .error-icon{fill:#552222;}#mermaid-svg-YoB6Ea5g7SnpZvcc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YoB6Ea5g7SnpZvcc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .marker.cross{stroke:#333333;}#mermaid-svg-YoB6Ea5g7SnpZvcc svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YoB6Ea5g7SnpZvcc p{margin:0;}#mermaid-svg-YoB6Ea5g7SnpZvcc .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .cluster-label text{fill:#333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .cluster-label span{color:#333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .cluster-label span p{background-color:transparent;}#mermaid-svg-YoB6Ea5g7SnpZvcc .label text,#mermaid-svg-YoB6Ea5g7SnpZvcc span{fill:#333;color:#333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .node rect,#mermaid-svg-YoB6Ea5g7SnpZvcc .node circle,#mermaid-svg-YoB6Ea5g7SnpZvcc .node ellipse,#mermaid-svg-YoB6Ea5g7SnpZvcc .node polygon,#mermaid-svg-YoB6Ea5g7SnpZvcc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YoB6Ea5g7SnpZvcc .rough-node .label text,#mermaid-svg-YoB6Ea5g7SnpZvcc .node .label text,#mermaid-svg-YoB6Ea5g7SnpZvcc .image-shape .label,#mermaid-svg-YoB6Ea5g7SnpZvcc .icon-shape .label{text-anchor:middle;}#mermaid-svg-YoB6Ea5g7SnpZvcc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YoB6Ea5g7SnpZvcc .rough-node .label,#mermaid-svg-YoB6Ea5g7SnpZvcc .node .label,#mermaid-svg-YoB6Ea5g7SnpZvcc .image-shape .label,#mermaid-svg-YoB6Ea5g7SnpZvcc .icon-shape .label{text-align:center;}#mermaid-svg-YoB6Ea5g7SnpZvcc .node.clickable{cursor:pointer;}#mermaid-svg-YoB6Ea5g7SnpZvcc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .arrowheadPath{fill:#333333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YoB6Ea5g7SnpZvcc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YoB6Ea5g7SnpZvcc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YoB6Ea5g7SnpZvcc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YoB6Ea5g7SnpZvcc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YoB6Ea5g7SnpZvcc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YoB6Ea5g7SnpZvcc .cluster text{fill:#333;}#mermaid-svg-YoB6Ea5g7SnpZvcc .cluster span{color:#333;}#mermaid-svg-YoB6Ea5g7SnpZvcc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YoB6Ea5g7SnpZvcc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YoB6Ea5g7SnpZvcc rect.text{fill:none;stroke-width:0;}#mermaid-svg-YoB6Ea5g7SnpZvcc .icon-shape,#mermaid-svg-YoB6Ea5g7SnpZvcc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YoB6Ea5g7SnpZvcc .icon-shape p,#mermaid-svg-YoB6Ea5g7SnpZvcc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YoB6Ea5g7SnpZvcc .icon-shape .label rect,#mermaid-svg-YoB6Ea5g7SnpZvcc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YoB6Ea5g7SnpZvcc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YoB6Ea5g7SnpZvcc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YoB6Ea5g7SnpZvcc :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Docling 处理流程

    ModelPipeline

    DocLayNet布局分析模型

    TableFormer表格识别模型

    OCR光学字符识别

    公式识别

    📄 输入文档PDF/DOCX/PPTX/HTML/图片

    PDF解析后端提取文本Token + 渲染页面图像

    后处理聚合

    📝 结构化输出Markdown / JSON / DocTags

    3.2 核心AI模型:DocLayNet与TableFormer

    Docling的强大之处在于其背后的一系列AI模型:

    DocLayNet(布局分析模型) :DocLayNet是一个用于文档布局分析的深度学习模型,能够识别17种不同的文档元素类型——标题、段落、表格、图表、页眉、页脚、脚注等[reference:21]。它基于RT-DETR v2架构(Docling内部称为Heron),专门针对文档图像的布局理解进行了优化。值得一提的是,Kreuzberg v4.5也开始集成DocLayNet模型来增强其文档结构理解能力[reference:22]。

    TableFormer(表格识别模型) :TableFormer专注于表格结构识别,能够还原表格的复杂结构——合并单元格、嵌套表格、跨页表格等。在多个基准测试中,Docling的表格识别准确率达到了97.9%的单元格准确率,在复杂多层级表格提取测试中表现出卓越的稳定性[reference:23][reference:24]。

    #mermaid-svg-gIfWwKxjvhXkGUFt{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gIfWwKxjvhXkGUFt .error-icon{fill:#552222;}#mermaid-svg-gIfWwKxjvhXkGUFt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gIfWwKxjvhXkGUFt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gIfWwKxjvhXkGUFt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gIfWwKxjvhXkGUFt .marker.cross{stroke:#333333;}#mermaid-svg-gIfWwKxjvhXkGUFt svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gIfWwKxjvhXkGUFt p{margin:0;}#mermaid-svg-gIfWwKxjvhXkGUFt .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-gIfWwKxjvhXkGUFt .cluster-label text{fill:#333;}#mermaid-svg-gIfWwKxjvhXkGUFt .cluster-label span{color:#333;}#mermaid-svg-gIfWwKxjvhXkGUFt .cluster-label span p{background-color:transparent;}#mermaid-svg-gIfWwKxjvhXkGUFt .label text,#mermaid-svg-gIfWwKxjvhXkGUFt span{fill:#333;color:#333;}#mermaid-svg-gIfWwKxjvhXkGUFt .node rect,#mermaid-svg-gIfWwKxjvhXkGUFt .node circle,#mermaid-svg-gIfWwKxjvhXkGUFt .node ellipse,#mermaid-svg-gIfWwKxjvhXkGUFt .node polygon,#mermaid-svg-gIfWwKxjvhXkGUFt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gIfWwKxjvhXkGUFt .rough-node .label text,#mermaid-svg-gIfWwKxjvhXkGUFt .node .label text,#mermaid-svg-gIfWwKxjvhXkGUFt .image-shape .label,#mermaid-svg-gIfWwKxjvhXkGUFt .icon-shape .label{text-anchor:middle;}#mermaid-svg-gIfWwKxjvhXkGUFt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gIfWwKxjvhXkGUFt .rough-node .label,#mermaid-svg-gIfWwKxjvhXkGUFt .node .label,#mermaid-svg-gIfWwKxjvhXkGUFt .image-shape .label,#mermaid-svg-gIfWwKxjvhXkGUFt .icon-shape .label{text-align:center;}#mermaid-svg-gIfWwKxjvhXkGUFt .node.clickable{cursor:pointer;}#mermaid-svg-gIfWwKxjvhXkGUFt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gIfWwKxjvhXkGUFt .arrowheadPath{fill:#333333;}#mermaid-svg-gIfWwKxjvhXkGUFt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gIfWwKxjvhXkGUFt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gIfWwKxjvhXkGUFt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gIfWwKxjvhXkGUFt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gIfWwKxjvhXkGUFt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gIfWwKxjvhXkGUFt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gIfWwKxjvhXkGUFt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gIfWwKxjvhXkGUFt .cluster text{fill:#333;}#mermaid-svg-gIfWwKxjvhXkGUFt .cluster span{color:#333;}#mermaid-svg-gIfWwKxjvhXkGUFt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gIfWwKxjvhXkGUFt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gIfWwKxjvhXkGUFt rect.text{fill:none;stroke-width:0;}#mermaid-svg-gIfWwKxjvhXkGUFt .icon-shape,#mermaid-svg-gIfWwKxjvhXkGUFt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gIfWwKxjvhXkGUFt .icon-shape p,#mermaid-svg-gIfWwKxjvhXkGUFt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gIfWwKxjvhXkGUFt .icon-shape .label rect,#mermaid-svg-gIfWwKxjvhXkGUFt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gIfWwKxjvhXkGUFt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gIfWwKxjvhXkGUFt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gIfWwKxjvhXkGUFt :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Docling AI 模型矩阵

    DocLayNet布局分析

    检测17种元素类型标题/段落/表格/图表/页眉/页脚

    TableFormer表格识别

    还原表格结构合并单元格/跨页表格/嵌套表格

    OCR引擎

    扫描件文字识别

    公式识别

    数学公式→LaTeX

    3.3 一键转Markdown/JSON:公式与代码块的完美还原

    Docling最受用户欢迎的特性是一键转换。以下是一段典型的Docling使用代码:

    from docling.document_converter import DocumentConverter

    # 创建转换器
    converter = DocumentConverter()

    # 转换PDF为Markdown
    result = converter.convert("academic_paper.pdf")
    markdown_output = result.document.export_to_markdown()

    # 或导出为JSON
    json_output = result.document.export_to_dict()

    print(markdown_output)

    公式识别:Docling能够将PDF中的数学公式转换为LaTeX格式,这对于学术文献的RAG系统至关重要。一个典型的输出示例是:

    # 第一章:贝叶斯定理

    贝叶斯定理的数学表达式为:

    $$
    P(A|B) = \\frac{P(B|A) \\cdot P(A)}{P(B)}
    $$

    其中:
    – $P(A|B)$ 是后验概率
    – $P(B|A)$ 是似然函数

    表格识别:Docling在中文复杂表格提取方面的表现尤其出色。在一项针对中文PDF的实战评测中,Docling成功识别了一个三层嵌套、带阴影填充的复杂表格,合并单元格标记完全正确[reference:25]。

    | 季度 | 营收(万元) | 同比增长 | 环比增长 |
    |——|———–|———|———|
    | Q1 | 12,345 | +15.2% | – |
    | Q2 | 13,567 | +18.1% | +9.9% |
    | Q3 | 14,890 | +22.3% | +9.7% |

    代码块识别:对于技术文档,Docling能够识别代码块并保留语法高亮信息,输出格式为Markdown代码块。

    #mermaid-svg-jrJEyE0ibuR7tnxj{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jrJEyE0ibuR7tnxj .error-icon{fill:#552222;}#mermaid-svg-jrJEyE0ibuR7tnxj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jrJEyE0ibuR7tnxj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jrJEyE0ibuR7tnxj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jrJEyE0ibuR7tnxj .marker.cross{stroke:#333333;}#mermaid-svg-jrJEyE0ibuR7tnxj svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jrJEyE0ibuR7tnxj p{margin:0;}#mermaid-svg-jrJEyE0ibuR7tnxj .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-jrJEyE0ibuR7tnxj .cluster-label text{fill:#333;}#mermaid-svg-jrJEyE0ibuR7tnxj .cluster-label span{color:#333;}#mermaid-svg-jrJEyE0ibuR7tnxj .cluster-label span p{background-color:transparent;}#mermaid-svg-jrJEyE0ibuR7tnxj .label text,#mermaid-svg-jrJEyE0ibuR7tnxj span{fill:#333;color:#333;}#mermaid-svg-jrJEyE0ibuR7tnxj .node rect,#mermaid-svg-jrJEyE0ibuR7tnxj .node circle,#mermaid-svg-jrJEyE0ibuR7tnxj .node ellipse,#mermaid-svg-jrJEyE0ibuR7tnxj .node polygon,#mermaid-svg-jrJEyE0ibuR7tnxj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jrJEyE0ibuR7tnxj .rough-node .label text,#mermaid-svg-jrJEyE0ibuR7tnxj .node .label text,#mermaid-svg-jrJEyE0ibuR7tnxj .image-shape .label,#mermaid-svg-jrJEyE0ibuR7tnxj .icon-shape .label{text-anchor:middle;}#mermaid-svg-jrJEyE0ibuR7tnxj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jrJEyE0ibuR7tnxj .rough-node .label,#mermaid-svg-jrJEyE0ibuR7tnxj .node .label,#mermaid-svg-jrJEyE0ibuR7tnxj .image-shape .label,#mermaid-svg-jrJEyE0ibuR7tnxj .icon-shape .label{text-align:center;}#mermaid-svg-jrJEyE0ibuR7tnxj .node.clickable{cursor:pointer;}#mermaid-svg-jrJEyE0ibuR7tnxj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jrJEyE0ibuR7tnxj .arrowheadPath{fill:#333333;}#mermaid-svg-jrJEyE0ibuR7tnxj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jrJEyE0ibuR7tnxj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jrJEyE0ibuR7tnxj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jrJEyE0ibuR7tnxj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jrJEyE0ibuR7tnxj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jrJEyE0ibuR7tnxj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jrJEyE0ibuR7tnxj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jrJEyE0ibuR7tnxj .cluster text{fill:#333;}#mermaid-svg-jrJEyE0ibuR7tnxj .cluster span{color:#333;}#mermaid-svg-jrJEyE0ibuR7tnxj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jrJEyE0ibuR7tnxj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jrJEyE0ibuR7tnxj rect.text{fill:none;stroke-width:0;}#mermaid-svg-jrJEyE0ibuR7tnxj .icon-shape,#mermaid-svg-jrJEyE0ibuR7tnxj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jrJEyE0ibuR7tnxj .icon-shape p,#mermaid-svg-jrJEyE0ibuR7tnxj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jrJEyE0ibuR7tnxj .icon-shape .label rect,#mermaid-svg-jrJEyE0ibuR7tnxj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jrJEyE0ibuR7tnxj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jrJEyE0ibuR7tnxj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jrJEyE0ibuR7tnxj :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Docling 输出格式

    PDF文档

    DocumentConverter

    📝 Markdown • 层级标题 # ## ### • 表格 |—|—| • 公式

    L

    a

    T

    e

    X

    • 代码块 ```lang

    🔧 JSON• 完整结构化数据• 坐标/边界框• 元素类型标签

    🏷️ DocTags• IBM专有格式• 端到端文档理解

    3.4 性能特点与资源消耗

    Docling的架构基于深度学习推理,这意味着:

    • 模型加载需要时间:首次调用时需要加载多个AI模型(DocLayNet、TableFormer等),冷启动延迟较高[reference:26]。
    • 处理是顺序的:每页依次执行布局分析、表格识别、OCR等步骤,无法充分利用多核CPU。
    • 内存使用随文档复杂性增加:处理复杂布局的学术论文时,内存占用可达数GB。
    • 对GPU有依赖:虽然在CPU上也能运行,但GPU加速能显著提升速度。

    这些特性决定了Docling更适合离线批量处理或研究原型开发,而不是对延迟敏感的实时生产管道[reference:27]。


    4. RAG集成能力对比:谁更适合AI应用?

    在RAG系统日益普及的今天,文档解析工具与AI框架的集成能力成为选型的关键考量。

    4.1 Docling:LangChain与LlamaIndex的天然搭档

    Docling从一开始就是为RAG设计的。它提供了官方的LangChain和LlamaIndex集成,开发者可以非常方便地将Docling嵌入现有的AI应用管道[reference:28]。

    LangChain集成示例:

    from langchain_community.document_loaders import DoclingLoader

    loader = DoclingLoader(file_path="document.pdf")
    documents = loader.load()

    # 直接用于RAG chain
    from langchain.chains import RetrievalQA
    qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vector_store.as_retriever(),
    chain_type="stuff"
    )

    LlamaIndex集成示例:

    from llama_index.readers.docling import DoclingReader

    reader = DoclingReader()
    documents = reader.load_data(file="document.pdf")

    # 构建索引
    index = VectorStoreIndex.from_documents(documents)
    query_engine = index.as_query_engine()

    Docling还通过BaseChunker接口支持灵活的文档分块策略——它可以按标题层级切分文档,将过小的碎片合并,同时保留元数据供后续引用溯源[reference:29]。这种语义感知的分块对于RAG系统的检索质量至关重要,可以确保检索到的片段是完整的上下文单元,而不是从段落中间硬截出来的半截句子[reference:30]。

    #mermaid-svg-nDG1oS54NXaaHUME{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nDG1oS54NXaaHUME .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nDG1oS54NXaaHUME .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nDG1oS54NXaaHUME .error-icon{fill:#552222;}#mermaid-svg-nDG1oS54NXaaHUME .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nDG1oS54NXaaHUME .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nDG1oS54NXaaHUME .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nDG1oS54NXaaHUME .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nDG1oS54NXaaHUME .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nDG1oS54NXaaHUME .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nDG1oS54NXaaHUME .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nDG1oS54NXaaHUME .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nDG1oS54NXaaHUME .marker.cross{stroke:#333333;}#mermaid-svg-nDG1oS54NXaaHUME svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nDG1oS54NXaaHUME p{margin:0;}#mermaid-svg-nDG1oS54NXaaHUME .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-nDG1oS54NXaaHUME .cluster-label text{fill:#333;}#mermaid-svg-nDG1oS54NXaaHUME .cluster-label span{color:#333;}#mermaid-svg-nDG1oS54NXaaHUME .cluster-label span p{background-color:transparent;}#mermaid-svg-nDG1oS54NXaaHUME .label text,#mermaid-svg-nDG1oS54NXaaHUME span{fill:#333;color:#333;}#mermaid-svg-nDG1oS54NXaaHUME .node rect,#mermaid-svg-nDG1oS54NXaaHUME .node circle,#mermaid-svg-nDG1oS54NXaaHUME .node ellipse,#mermaid-svg-nDG1oS54NXaaHUME .node polygon,#mermaid-svg-nDG1oS54NXaaHUME .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nDG1oS54NXaaHUME .rough-node .label text,#mermaid-svg-nDG1oS54NXaaHUME .node .label text,#mermaid-svg-nDG1oS54NXaaHUME .image-shape .label,#mermaid-svg-nDG1oS54NXaaHUME .icon-shape .label{text-anchor:middle;}#mermaid-svg-nDG1oS54NXaaHUME .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nDG1oS54NXaaHUME .rough-node .label,#mermaid-svg-nDG1oS54NXaaHUME .node .label,#mermaid-svg-nDG1oS54NXaaHUME .image-shape .label,#mermaid-svg-nDG1oS54NXaaHUME .icon-shape .label{text-align:center;}#mermaid-svg-nDG1oS54NXaaHUME .node.clickable{cursor:pointer;}#mermaid-svg-nDG1oS54NXaaHUME .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nDG1oS54NXaaHUME .arrowheadPath{fill:#333333;}#mermaid-svg-nDG1oS54NXaaHUME .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nDG1oS54NXaaHUME .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nDG1oS54NXaaHUME .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nDG1oS54NXaaHUME .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nDG1oS54NXaaHUME .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nDG1oS54NXaaHUME .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nDG1oS54NXaaHUME .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nDG1oS54NXaaHUME .cluster text{fill:#333;}#mermaid-svg-nDG1oS54NXaaHUME .cluster span{color:#333;}#mermaid-svg-nDG1oS54NXaaHUME div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nDG1oS54NXaaHUME .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nDG1oS54NXaaHUME rect.text{fill:none;stroke-width:0;}#mermaid-svg-nDG1oS54NXaaHUME .icon-shape,#mermaid-svg-nDG1oS54NXaaHUME .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nDG1oS54NXaaHUME .icon-shape p,#mermaid-svg-nDG1oS54NXaaHUME .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nDG1oS54NXaaHUME .icon-shape .label rect,#mermaid-svg-nDG1oS54NXaaHUME .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nDG1oS54NXaaHUME .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nDG1oS54NXaaHUME .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nDG1oS54NXaaHUME :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Docling RAG 集成生态

    Docling 文档解析

    LangChainDoclingLoader

    LlamaIndexDoclingReader

    Haystack插件集成

    Crew AI代理集成

    RAG应用

    RAG应用

    RAG应用

    AI Agent应用

    4.2 Kreuzberg:REST API与MCP驱动的灵活集成

    Kreuzberg的集成方式更加多样化,因为它不局限于Python生态:

    原生REST API:Kreuzberg提供了开箱即用的REST API服务,可以通过Docker快速部署:

    docker run -p 8000:8000 kreuzberg/kreuzberg

    curl -X POST http://localhost:8000/extract \\
    -F "file=@document.pdf" \\
    -F "format=markdown"

    MCP Server集成:Kreuzberg还实现了Model Context Protocol(MCP)服务器,可以直接与支持MCP的AI Agent集成[reference:31]。

    多语言SDK:对于不同技术栈的团队,Kreuzberg提供了原生SDK:

    // TypeScript/Node.js 示例
    import { extractText } from 'kreuzberg';

    const result = await extractText('document.pdf');
    console.log(result.text);

    // Go 示例
    package main

    import "github.com/kreuzberg-dev/kreuzberg/go"

    func main() {
    result := kreuzberg.ExtractText("document.pdf")
    println(result.Text)
    }

    REST API vs 原生SDK:选择哪种集成方式取决于具体场景。REST API适合跨语言微服务和团队间解耦,原生SDK则提供更低的延迟和更完整的类型安全。

    #mermaid-svg-KeXQPiYk4Y7ZayVN{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KeXQPiYk4Y7ZayVN .error-icon{fill:#552222;}#mermaid-svg-KeXQPiYk4Y7ZayVN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KeXQPiYk4Y7ZayVN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .marker.cross{stroke:#333333;}#mermaid-svg-KeXQPiYk4Y7ZayVN svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KeXQPiYk4Y7ZayVN p{margin:0;}#mermaid-svg-KeXQPiYk4Y7ZayVN .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .cluster-label text{fill:#333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .cluster-label span{color:#333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .cluster-label span p{background-color:transparent;}#mermaid-svg-KeXQPiYk4Y7ZayVN .label text,#mermaid-svg-KeXQPiYk4Y7ZayVN span{fill:#333;color:#333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .node rect,#mermaid-svg-KeXQPiYk4Y7ZayVN .node circle,#mermaid-svg-KeXQPiYk4Y7ZayVN .node ellipse,#mermaid-svg-KeXQPiYk4Y7ZayVN .node polygon,#mermaid-svg-KeXQPiYk4Y7ZayVN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KeXQPiYk4Y7ZayVN .rough-node .label text,#mermaid-svg-KeXQPiYk4Y7ZayVN .node .label text,#mermaid-svg-KeXQPiYk4Y7ZayVN .image-shape .label,#mermaid-svg-KeXQPiYk4Y7ZayVN .icon-shape .label{text-anchor:middle;}#mermaid-svg-KeXQPiYk4Y7ZayVN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KeXQPiYk4Y7ZayVN .rough-node .label,#mermaid-svg-KeXQPiYk4Y7ZayVN .node .label,#mermaid-svg-KeXQPiYk4Y7ZayVN .image-shape .label,#mermaid-svg-KeXQPiYk4Y7ZayVN .icon-shape .label{text-align:center;}#mermaid-svg-KeXQPiYk4Y7ZayVN .node.clickable{cursor:pointer;}#mermaid-svg-KeXQPiYk4Y7ZayVN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .arrowheadPath{fill:#333333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KeXQPiYk4Y7ZayVN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KeXQPiYk4Y7ZayVN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KeXQPiYk4Y7ZayVN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KeXQPiYk4Y7ZayVN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KeXQPiYk4Y7ZayVN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KeXQPiYk4Y7ZayVN .cluster text{fill:#333;}#mermaid-svg-KeXQPiYk4Y7ZayVN .cluster span{color:#333;}#mermaid-svg-KeXQPiYk4Y7ZayVN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KeXQPiYk4Y7ZayVN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KeXQPiYk4Y7ZayVN rect.text{fill:none;stroke-width:0;}#mermaid-svg-KeXQPiYk4Y7ZayVN .icon-shape,#mermaid-svg-KeXQPiYk4Y7ZayVN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KeXQPiYk4Y7ZayVN .icon-shape p,#mermaid-svg-KeXQPiYk4Y7ZayVN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KeXQPiYk4Y7ZayVN .icon-shape .label rect,#mermaid-svg-KeXQPiYk4Y7ZayVN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KeXQPiYk4Y7ZayVN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KeXQPiYk4Y7ZayVN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KeXQPiYk4Y7ZayVN :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Kreuzberg 集成方式

    HTTP

    MCP

    FFI

    FFI

    FFI

    Rust核心引擎

    🌐 REST API跨语言微服务

    🔌 MCP ServerAI Agent集成

    🐍 Python SDK原生调用

    📘 TypeScript SDK前端/后端

    🔷 Go SDK微服务

    任意HTTP客户端

    Claude/Cursor等AI Agent

    LangChain集成

    4.3 RAG管道中的Chunking策略对比

    RAG系统的效果很大程度上取决于如何对文档进行分块。两种工具在分块策略上采取了不同的路径:

    维度DoclingKreuzberg
    分块基础 基于语义结构(标题层级) 可配置分块策略
    元数据保留 完整保留(标题、页码、坐标) 字节级位置偏移跟踪
    块大小控制 HybridChunker智能合并/切分 支持按字符数/语义单元分块
    与框架集成 LangChain/LlamaIndex原生 可通过自定义适配器集成

    Docling的HybridChunker采用“分层+混合”的策略:先按标题层级切分,再把过小的碎片合并,同时保留元数据方便后续引用溯源[reference:32]。这种策略对于技术文档、合同、论文这类结构化PDF的检索准确率提升非常明显。

    Kreuzberg则提供了字节级精确的位置跟踪,可以在提取结果中精确知道每个字符在原始文档中的位置偏移量,这对于需要精确引用和溯源的场景非常关键[reference:33]。


    5. 横向对比总览:速度/内存/准确率/格式支持

    5.1 核心指标对比表

    对比维度KreuzbergDocling
    核心技术 Rust原生解析器 + FFI绑定 Python + PyTorch深度学习
    安装包大小 71 MB 1,032 MB (14.5倍)
    依赖数量 20个 88个
    处理速度 35+ 文件/秒 60+ 分钟/复杂文件
    平均速度优势 基准 慢9倍
    冷启动延迟 极低 高(模型加载)
    运行时内存 ~300MB ~1.5GB+
    PDF Markdown F1 91.0% 91.4%
    表格识别准确率 良好(依赖布局分析) 97.9%单元格准确率
    支持的格式数量 75+ PDF/DOCX/PPTX/HTML/图片
    语言绑定 10种语言 Python为主
    OCR后端 Tesseract/EasyOCR/PaddleOCR/Apple Vision/Windows OCR 内置OCR
    部署形态 PyPI包/Docker/REST API/CLI/MCP Server PyPI包/CLI/Docker(docling-serve)
    分块策略 字节级位置跟踪 语义感知HybridChunker
    RAG集成 REST API/MCP/多语言SDK LangChain/LlamaIndex原生
    许可证 MIT MIT

    数据来源:基准测试[reference:34][reference:35][reference:36]

    5.2 可视化性能对比

    #mermaid-svg-O8YkivbCNXOjkRwL{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-O8YkivbCNXOjkRwL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-O8YkivbCNXOjkRwL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-O8YkivbCNXOjkRwL .error-icon{fill:#552222;}#mermaid-svg-O8YkivbCNXOjkRwL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-O8YkivbCNXOjkRwL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-O8YkivbCNXOjkRwL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-O8YkivbCNXOjkRwL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-O8YkivbCNXOjkRwL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-O8YkivbCNXOjkRwL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-O8YkivbCNXOjkRwL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-O8YkivbCNXOjkRwL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-O8YkivbCNXOjkRwL .marker.cross{stroke:#333333;}#mermaid-svg-O8YkivbCNXOjkRwL svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-O8YkivbCNXOjkRwL p{margin:0;}#mermaid-svg-O8YkivbCNXOjkRwL :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    安装包大小对比 (MB) – 越小越好

    Kreuzberg

    Unstructured

    MarkItDown

    Docling

    1100

    1000

    900

    800

    700

    600

    500

    400

    300

    200

    100

    0

    MB

    #mermaid-svg-z5nelh6tVO3yr7B7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-z5nelh6tVO3yr7B7 .error-icon{fill:#552222;}#mermaid-svg-z5nelh6tVO3yr7B7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-z5nelh6tVO3yr7B7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-z5nelh6tVO3yr7B7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-z5nelh6tVO3yr7B7 .marker.cross{stroke:#333333;}#mermaid-svg-z5nelh6tVO3yr7B7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-z5nelh6tVO3yr7B7 p{margin:0;}#mermaid-svg-z5nelh6tVO3yr7B7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    处理速度对比 – 越大越好

    Kreuzberg

    Unstructured

    MarkItDown

    Docling

    40

    35

    30

    25

    20

    15

    10

    5

    0

    文件/秒

    注:Docling以“文件/秒”衡量时数值极小,实际更合理的衡量单位是“分钟/文件”

    5.3 优劣势总结

    Kreuzberg优势:

    • 🚀 极致性能:9倍平均速度优势,10-50倍PDF处理速度
    • 💾 资源友好:71MB安装包,低内存占用,适合边缘部署
    • 🌐 多语言支持:10种语言绑定,真正的“一次编写,到处运行”
    • 🖥️ 多部署形态:REST API、MCP Server、CLI、Docker全覆盖
    • 🏠 本地处理:无需GPU,适合数据隐私敏感场景

    Kreuzberg不足:

    • 📊 布局分析:虽已集成DocLayNet模型,但深度略逊于Docling
    • 📖 文档与社区:社区规模小于Docling
    • 🧩 表格识别:复杂表格的识别准确率不及Docling

    Docling优势:

    • 🧠 AI原生架构:深度学习模型提供业界领先的布局理解
    • 📋 表格识别:97.9%的单元格准确率,行业顶尖水平
    • 🔗 RAG原生集成:LangChain/LlamaIndex官方支持
    • 🎓 学术文档优化:公式、参考文献、多栏排版处理出色
    • 👥 社区支持:近3万GitHub Star,活跃的开源生态

    Docling不足:

    • 🐢 性能瓶颈:单份复杂文档处理可能超过60分钟
    • 💾 资源占用大:1GB+安装包,高内存消耗
    • 🐍 Python绑定:主要绑定Python,多语言支持有限
    • ❄️ 冷启动慢:深度学习模型加载耗时
    • 🔄 并发受限:顺序处理架构难以水平扩展

    6. 选型指南:小规模微服务 vs 大规模数据管道

    基于以上分析,我们可以根据不同的业务场景给出明确的选型建议。

    6.1 场景一:小规模微服务

    典型需求:

    • 轻量部署(AWS Lambda、边缘节点)
    • 低延迟响应(用户实时请求)
    • 多语言技术栈(团队使用不同编程语言)
    • 数据隐私优先(本地处理,不上传云端)

    推荐方案:Kreuzberg

    核心理由:

    • 71MB安装包可在Lambda的512MB内存限制内稳定运行
    • 极低冷启动延迟,适合无服务器架构
    • 10种语言绑定完美匹配异构团队
    • REST API和MCP Server开箱即用

    参考部署方案:

    #mermaid-svg-m3KvsnFuiHH20miU{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-m3KvsnFuiHH20miU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-m3KvsnFuiHH20miU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-m3KvsnFuiHH20miU .error-icon{fill:#552222;}#mermaid-svg-m3KvsnFuiHH20miU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-m3KvsnFuiHH20miU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-m3KvsnFuiHH20miU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-m3KvsnFuiHH20miU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-m3KvsnFuiHH20miU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-m3KvsnFuiHH20miU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-m3KvsnFuiHH20miU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-m3KvsnFuiHH20miU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-m3KvsnFuiHH20miU .marker.cross{stroke:#333333;}#mermaid-svg-m3KvsnFuiHH20miU svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-m3KvsnFuiHH20miU p{margin:0;}#mermaid-svg-m3KvsnFuiHH20miU .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-m3KvsnFuiHH20miU .cluster-label text{fill:#333;}#mermaid-svg-m3KvsnFuiHH20miU .cluster-label span{color:#333;}#mermaid-svg-m3KvsnFuiHH20miU .cluster-label span p{background-color:transparent;}#mermaid-svg-m3KvsnFuiHH20miU .label text,#mermaid-svg-m3KvsnFuiHH20miU span{fill:#333;color:#333;}#mermaid-svg-m3KvsnFuiHH20miU .node rect,#mermaid-svg-m3KvsnFuiHH20miU .node circle,#mermaid-svg-m3KvsnFuiHH20miU .node ellipse,#mermaid-svg-m3KvsnFuiHH20miU .node polygon,#mermaid-svg-m3KvsnFuiHH20miU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-m3KvsnFuiHH20miU .rough-node .label text,#mermaid-svg-m3KvsnFuiHH20miU .node .label text,#mermaid-svg-m3KvsnFuiHH20miU .image-shape .label,#mermaid-svg-m3KvsnFuiHH20miU .icon-shape .label{text-anchor:middle;}#mermaid-svg-m3KvsnFuiHH20miU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-m3KvsnFuiHH20miU .rough-node .label,#mermaid-svg-m3KvsnFuiHH20miU .node .label,#mermaid-svg-m3KvsnFuiHH20miU .image-shape .label,#mermaid-svg-m3KvsnFuiHH20miU .icon-shape .label{text-align:center;}#mermaid-svg-m3KvsnFuiHH20miU .node.clickable{cursor:pointer;}#mermaid-svg-m3KvsnFuiHH20miU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-m3KvsnFuiHH20miU .arrowheadPath{fill:#333333;}#mermaid-svg-m3KvsnFuiHH20miU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-m3KvsnFuiHH20miU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-m3KvsnFuiHH20miU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m3KvsnFuiHH20miU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-m3KvsnFuiHH20miU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m3KvsnFuiHH20miU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-m3KvsnFuiHH20miU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-m3KvsnFuiHH20miU .cluster text{fill:#333;}#mermaid-svg-m3KvsnFuiHH20miU .cluster span{color:#333;}#mermaid-svg-m3KvsnFuiHH20miU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-m3KvsnFuiHH20miU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-m3KvsnFuiHH20miU rect.text{fill:none;stroke-width:0;}#mermaid-svg-m3KvsnFuiHH20miU .icon-shape,#mermaid-svg-m3KvsnFuiHH20miU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m3KvsnFuiHH20miU .icon-shape p,#mermaid-svg-m3KvsnFuiHH20miU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-m3KvsnFuiHH20miU .icon-shape .label rect,#mermaid-svg-m3KvsnFuiHH20miU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m3KvsnFuiHH20miU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-m3KvsnFuiHH20miU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-m3KvsnFuiHH20miU :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Kubernetes + Kreuzberg REST API

    Ingress

    K8s Service

    Pod: Kreuzberg API

    Pod: Kreuzberg API

    持久化存储

    AWS Lambda + Kreuzberg

    API Gateway

    Lambda FunctionKreuzberg层

    S3存储

    提取结果

    6.2 场景二:大规模数据管道

    典型需求:

    • 离线批量处理(数万份文档/天)
    • 精确布局理解(财务报表、学术论文)
    • 表格/公式的高精度提取
    • 可接受较长的单份文档处理时间

    推荐方案:Docling

    核心理由:

    • 97.9%的表格识别准确率对财务场景至关重要
    • 公式→LaTeX的精确转换满足学术需求
    • 虽然单份处理慢,但可批量处理并接受长尾延迟
    • LangChain/LlamaIndex原生集成简化RAG管道构建

    Docling性能优化建议:

  • 使用GPU实例加速模型推理
  • 将Docling部署为常驻服务,避免频繁的冷启动
  • 对文档按复杂度分级,简单PDF可绕过Docling
  • 使用docling-serve实现服务化部署
  • 6.3 场景三:混合场景(推荐方案)

    对于既有实时需求又有批量处理需求的企业,混合部署可能是最优解:

    #mermaid-svg-lJWhDRHpQD9TShMP{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lJWhDRHpQD9TShMP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lJWhDRHpQD9TShMP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lJWhDRHpQD9TShMP .error-icon{fill:#552222;}#mermaid-svg-lJWhDRHpQD9TShMP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lJWhDRHpQD9TShMP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lJWhDRHpQD9TShMP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lJWhDRHpQD9TShMP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lJWhDRHpQD9TShMP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lJWhDRHpQD9TShMP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lJWhDRHpQD9TShMP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lJWhDRHpQD9TShMP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lJWhDRHpQD9TShMP .marker.cross{stroke:#333333;}#mermaid-svg-lJWhDRHpQD9TShMP svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lJWhDRHpQD9TShMP p{margin:0;}#mermaid-svg-lJWhDRHpQD9TShMP .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-lJWhDRHpQD9TShMP .cluster-label text{fill:#333;}#mermaid-svg-lJWhDRHpQD9TShMP .cluster-label span{color:#333;}#mermaid-svg-lJWhDRHpQD9TShMP .cluster-label span p{background-color:transparent;}#mermaid-svg-lJWhDRHpQD9TShMP .label text,#mermaid-svg-lJWhDRHpQD9TShMP span{fill:#333;color:#333;}#mermaid-svg-lJWhDRHpQD9TShMP .node rect,#mermaid-svg-lJWhDRHpQD9TShMP .node circle,#mermaid-svg-lJWhDRHpQD9TShMP .node ellipse,#mermaid-svg-lJWhDRHpQD9TShMP .node polygon,#mermaid-svg-lJWhDRHpQD9TShMP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lJWhDRHpQD9TShMP .rough-node .label text,#mermaid-svg-lJWhDRHpQD9TShMP .node .label text,#mermaid-svg-lJWhDRHpQD9TShMP .image-shape .label,#mermaid-svg-lJWhDRHpQD9TShMP .icon-shape .label{text-anchor:middle;}#mermaid-svg-lJWhDRHpQD9TShMP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lJWhDRHpQD9TShMP .rough-node .label,#mermaid-svg-lJWhDRHpQD9TShMP .node .label,#mermaid-svg-lJWhDRHpQD9TShMP .image-shape .label,#mermaid-svg-lJWhDRHpQD9TShMP .icon-shape .label{text-align:center;}#mermaid-svg-lJWhDRHpQD9TShMP .node.clickable{cursor:pointer;}#mermaid-svg-lJWhDRHpQD9TShMP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lJWhDRHpQD9TShMP .arrowheadPath{fill:#333333;}#mermaid-svg-lJWhDRHpQD9TShMP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lJWhDRHpQD9TShMP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lJWhDRHpQD9TShMP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lJWhDRHpQD9TShMP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lJWhDRHpQD9TShMP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lJWhDRHpQD9TShMP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lJWhDRHpQD9TShMP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lJWhDRHpQD9TShMP .cluster text{fill:#333;}#mermaid-svg-lJWhDRHpQD9TShMP .cluster span{color:#333;}#mermaid-svg-lJWhDRHpQD9TShMP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lJWhDRHpQD9TShMP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lJWhDRHpQD9TShMP rect.text{fill:none;stroke-width:0;}#mermaid-svg-lJWhDRHpQD9TShMP .icon-shape,#mermaid-svg-lJWhDRHpQD9TShMP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lJWhDRHpQD9TShMP .icon-shape p,#mermaid-svg-lJWhDRHpQD9TShMP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lJWhDRHpQD9TShMP .icon-shape .label rect,#mermaid-svg-lJWhDRHpQD9TShMP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lJWhDRHpQD9TShMP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lJWhDRHpQD9TShMP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lJWhDRHpQD9TShMP :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    混合架构推荐

    简单PDF/图片

    复杂PDF/学术论文

    文档输入

    文档分类器

    Kreuzberg微服务实时处理

    Docling批处理队列离线处理

    快速API响应<500ms

    消息队列

    Docling WorkersGPU池

    S3存储

    RAG索引更新

    混合部署原则:

    • 80%的简单文档用Kreuzberg快速处理
    • 20%的复杂文档用Docling深度解析
    • 结果统一进入RAG管道,下游无感知

    6.4 选型决策树

    #mermaid-svg-FmSYPRwy2TtdoAUl{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FmSYPRwy2TtdoAUl .error-icon{fill:#552222;}#mermaid-svg-FmSYPRwy2TtdoAUl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FmSYPRwy2TtdoAUl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FmSYPRwy2TtdoAUl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FmSYPRwy2TtdoAUl .marker.cross{stroke:#333333;}#mermaid-svg-FmSYPRwy2TtdoAUl svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FmSYPRwy2TtdoAUl p{margin:0;}#mermaid-svg-FmSYPRwy2TtdoAUl .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-FmSYPRwy2TtdoAUl .cluster-label text{fill:#333;}#mermaid-svg-FmSYPRwy2TtdoAUl .cluster-label span{color:#333;}#mermaid-svg-FmSYPRwy2TtdoAUl .cluster-label span p{background-color:transparent;}#mermaid-svg-FmSYPRwy2TtdoAUl .label text,#mermaid-svg-FmSYPRwy2TtdoAUl span{fill:#333;color:#333;}#mermaid-svg-FmSYPRwy2TtdoAUl .node rect,#mermaid-svg-FmSYPRwy2TtdoAUl .node circle,#mermaid-svg-FmSYPRwy2TtdoAUl .node ellipse,#mermaid-svg-FmSYPRwy2TtdoAUl .node polygon,#mermaid-svg-FmSYPRwy2TtdoAUl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-FmSYPRwy2TtdoAUl .rough-node .label text,#mermaid-svg-FmSYPRwy2TtdoAUl .node .label text,#mermaid-svg-FmSYPRwy2TtdoAUl .image-shape .label,#mermaid-svg-FmSYPRwy2TtdoAUl .icon-shape .label{text-anchor:middle;}#mermaid-svg-FmSYPRwy2TtdoAUl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-FmSYPRwy2TtdoAUl .rough-node .label,#mermaid-svg-FmSYPRwy2TtdoAUl .node .label,#mermaid-svg-FmSYPRwy2TtdoAUl .image-shape .label,#mermaid-svg-FmSYPRwy2TtdoAUl .icon-shape .label{text-align:center;}#mermaid-svg-FmSYPRwy2TtdoAUl .node.clickable{cursor:pointer;}#mermaid-svg-FmSYPRwy2TtdoAUl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-FmSYPRwy2TtdoAUl .arrowheadPath{fill:#333333;}#mermaid-svg-FmSYPRwy2TtdoAUl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-FmSYPRwy2TtdoAUl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-FmSYPRwy2TtdoAUl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FmSYPRwy2TtdoAUl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-FmSYPRwy2TtdoAUl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FmSYPRwy2TtdoAUl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-FmSYPRwy2TtdoAUl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-FmSYPRwy2TtdoAUl .cluster text{fill:#333;}#mermaid-svg-FmSYPRwy2TtdoAUl .cluster span{color:#333;}#mermaid-svg-FmSYPRwy2TtdoAUl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-FmSYPRwy2TtdoAUl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-FmSYPRwy2TtdoAUl rect.text{fill:none;stroke-width:0;}#mermaid-svg-FmSYPRwy2TtdoAUl .icon-shape,#mermaid-svg-FmSYPRwy2TtdoAUl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FmSYPRwy2TtdoAUl .icon-shape p,#mermaid-svg-FmSYPRwy2TtdoAUl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-FmSYPRwy2TtdoAUl .icon-shape .label rect,#mermaid-svg-FmSYPRwy2TtdoAUl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FmSYPRwy2TtdoAUl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-FmSYPRwy2TtdoAUl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-FmSYPRwy2TtdoAUl :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    边缘/Lambda/容器内存<1GB

    有充足GPU资源

    财务报表/复杂表格学术论文/数学公式

    通用文档/扫描件多语言场景

    速度优先

    准确率优先

    多语言团队Go/Java/TS

    Python生态为主

    需要文档解析工具

    部署环境资源限制?

    ✅ 推荐 Kreuzberg

    文档类型?

    ✅ 推荐 Docling

    需求优先级?

    技术栈要求?

    是否有实时需求?


    7. 结论与展望

    7.1 核心结论

    经过全方位的深度对比,我们可以得出以下结论:

    Kreuzberg是“性能之王” :如果你的生产环境看重速度、资源占用和多语言支持,Kreuzberg凭借Rust核心的天然优势是最佳选择。它能在保持91%以上提取质量的同时,实现10-50倍于Docling的处理速度[reference:37]。

    Docling是“精度之王” :如果文档的布局理解、表格识别和公式提取是核心诉求,Docling的AI模型矩阵提供了行业领先的精度,特别是在学术文档和财务报表场景中[reference:38][reference:39]。

    两者不是互斥的:在实际生产系统中,完全可以根据文档复杂度动态选择工具——简单文档走Kreuzberg的高速通道,复杂文档走Docling的深度解析通道。

    7.2 值得关注的发展趋势

    趋势一:Kreuzberg集成DocLayNet:从v4.5开始,Kreuzberg已将Docling的RT-DETR v2布局模型集成到其Rust原生管道中[reference:40]。这意味着Kreuzberg正在快速吸收Docling在布局理解方面的优势,同时保留自己的性能优势。

    趋势二:Docling正在优化性能:Docling团队也在积极探索性能优化方案,包括支持GPU加速的docling-serve服务化部署。

    趋势三:文档解析正在成为RAG基础设施的核心层:随着RAG系统的普及,高质量、高效率的文档解析工具将变得越来越重要。两种工具都在积极扩展生态——Kreuzberg增加了MCP Server支持,Docling则深化了与LangChain/LlamaIndex的集成。

    7.3 最终建议

    如果你的场景是…推荐选择
    构建多语言微服务,需要高性能API Kreuzberg
    部署在AWS Lambda等无服务器环境 Kreuzberg
    处理中文扫描件和复杂PDF Kreuzberg + PaddleOCR
    处理学术论文(公式/参考文献) Docling
    处理财务报表(复杂表格/合并单元格) Docling
    构建Python RAG管道,追求开箱即用 Docling
    资源有限但需要高质量解析 Kreuzberg
    追求极致解析精度,接受较长处理时间 Docling

    7.4 快速上手链接

    • Kreuzberg GitHub:https://github.com/kreuzberg-dev/kreuzberg
    • Kreuzberg 基准测试:https://kreuzberg.dev/benchmarks
    • Docling GitHub:https://github.com/DS4SD/docling
    • Docling 文档:https://ds4sd.github.io/docling/

    本文所有基准数据均来自开源社区发布的独立测试和官方基准测试。建议在实际生产环境中针对自己的文档集进行基准测试,以获取最适合自身场景的选型结论。

    赞(0)
    未经允许不得转载:171主机测评 » 18、性能之王对决|Kreuzberg vs Docling 企业级文档解析横向评测
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址