@jerryjliu0:当前代理框架(Codex, Cowork)的最新RAG趋势是进行两次文档处理以解决…

X AI KOLs Timeline 工具

摘要

文章讨论了AI代理的两阶段文档处理趋势,其中快速OSS阶段实现高效检索,基于VLM的阶段确保准确性,推广Llama Index的LiteParse和LlamaParse工具以提高成本和性能。

当前代理框架(Codex, Cowork)的最新RAG趋势是进行两次文档处理,以解决文档数据室中的知识工作任务: 一个快速轻量的阶段,通常使用免费/开源文档解析工具。这可以廉价地运行在成千上万的文件上,使代理能够进行检索(如grep、语义检索)以找到相关的上下文子集。 一个“即时”基于VLM的阶段。一旦代理找到相关的上下文页面,它将截取文档截图,调用自己的VLM(或编写代码)来分析这些页面。 只使用基于VLM的OCR工具处理大规模临时客户文件转储的问题是其缓慢且昂贵。进行即时VLM OCR允许代理廉价地过滤数据,同时保留任务所需上下文的准确性。 代理框架默认使用现成工具进行两阶段文档处理:pdf2text作为第一阶段,自身(Opus 5)作为第二阶段。参见下方视频,其中Cowork处理一堆PDF以回答关于Kimi k3论文中基准图的问题。 这些代理提供的“开箱即用”文档处理的主要问题包括: * Opus 5并非最佳的OCR VLM。它在规模化时成本过高且缺乏基础。 * 像pypdf、pdf2text这样的开源工具可能作为第一阶段不够 versatile。 * 代理将编写大量一次性代码来重写OCR工具本应提供的功能,如图表处理、边界框、置信度分数,导致成本和速度增加。 我们在@llama_index内拥有所有工具,可帮助任何代理以更高准确度和更低成本进行两阶段文档处理。 我们有liteparse用于第一阶段 - 一个用Rust编写的免费/开源解析器,比其他开源解析器更快/更准确,并支持50多种文档类型。 我们有LlamaParse用于第二阶段 - 一个代理文档引擎,使用VLM和框架在各种文档解析和提取任务中实现准确度和成本的最佳状态(SOTA)。它可以作为MCP或技能从任何代理框架调用。它以页码作为输入,因此代理可以选择对文档子集运行LlamaParse,而不是整个文档,作为“放大”阶段。 快来看看吧! LiteParse: https://github.com/run-llama/liteparse… LlamaParse: https://cloud.llamaindex.ai 所有相关文档,包括MCP,都在这里:https://developers.llamaindex.ai/llamaparse/for-agents/mcp/…
查看原文
查看缓存全文

缓存时间: 2026/08/23 17:42

当前智能体工具框架(如Codex、Cowork)最新的RAG趋势是采用两阶段文档处理来解决数据室文档中的知识工作任务:第一阶段为快速轻量级处理,通常使用免费/开源的文档解析工具,可低成本运行在10-1000个文件上,使智能体能够进行检索(如grep、语义搜索)以定位相关上下文子集。第二阶段为“即时“VLM处理——当智能体找到相关页面后,会截取文档页面并调用自身VLM(或编写代码)解析页面内容。

仅依靠VLM视觉语言模型OCR工具处理海量客户临时文件的弊端在于速度慢且成本高。即时VLM OCR策略允许智能体低成本筛选数据,同时保持任务所需上下文的准确性。这些智能体框架默认使用现成工具实现两阶段文档处理:第一阶段采用pdf2text,第二阶段使用自身(如Opus 5模型)。下方视频展示了Cowork处理一系列PDF文档,回答关于Kimi k3论文中基准图表问题的实例。

目前这些“开箱即用“的文档处理方案存在主要问题:

  • Opus 5并非最佳VLM OCR工具,且大规模使用成本过高且缺乏定位能力
  • pypdf、pdf2text等开源工具作为第一阶段处理可能功能不足
  • 智能体将编写大量临时代码来实现OCR工具本可直接提供的功能(如图表处理、边界框识别、置信度计算),导致成本与时间损耗增加

我们在@llama_index中提供了全套工具,支持任何智能体以更高准确度、更低成本实现两阶段文档处理:

  • 第一阶段采用liteparse:基于Rust的免费/开源解析器,速度与准确度优于其他开源方案,支持50+文档类型
  • 第二阶段采用LlamaParse:智能文档引擎,通过VLM+工具框架在各类文档解析与提取任务中实现精度与成本的最优化。可作为MCP技能从任何智能体框架调用,支持按页码输入参数,使智能体能选择对文档子集执行“聚焦式“解析

立即体验:

  • LiteParse:https://github.com/run-llama/liteparse
  • LlamaParse:https://cloud.llamaindex.ai
  • 完整文档(含MCP):https://developers.llamaindex.ai/llamaparse/for-agents/mcp/

run-llama/liteparse

来源:https://github.com/run-llama/liteparse

LiteParse

CI状态(https://github.com/run-llama/liteparse/actions/workflows/ci.yml) | Crates.io版本(https://crates.io/crates/liteparse) | npm版本(https://www.npmjs.com/package/@llamaindex/liteparse) | WASM版本(https://www.npmjs.com/package/@llamaindex/liteparse-wasm) | PyPI版本(https://pypi.org/project/liteparse/) | 许可证(https://opensource.org/licenses/Apache-2.0) | 文档(https://developers.llamaindex.ai/liteparse/) English | 简体中文

寻找LiteParse V1版本?请通过此链接访问旧代码库(https://github.com/run-llama/liteparse/tree/logan/liteparse-v1)

LiteParse是专注快速轻量级解析的独立开源PDF解析工具。提供带边界框的高质量空间文本解析,无需专有LLM功能或云端依赖,所有处理均在本地机器完成。

突破本地解析限制? 对于复杂文档(密集表格、多栏布局、图表、手写文字或扫描PDF),使用LlamaParse(https://developers.llamaindex.ai/python/cloud/llamaparse/?utm_source=github&utm_medium=liteparse)可获得显著更优效果——这是专为生产文档流水线构建的云端文档解析器。LlamaParse处理复杂内容,确保您的模型获得干净、结构化的数据和Markdown格式。

免费注册LlamaParse(https://cloud.llamaindex.ai?utm_source=github&utm_medium=liteparse)

概览

  • 快速文本解析:使用PDFium进行空间文本解析
  • 灵活OCR系统
    • 内置引擎:Tesseract(零配置,集成于库内)
    • HTTP服务器:可接入任何OCR服务器(EasyOCR、PaddleOCR、自定义方案)
    • 标准API:简洁明确的OCR接口规范
  • 复杂度检测:低成本检测文档是否需要OCR或更深度解析——支持路由、拒绝或在完整解析前估算成本
  • 截图生成:为LLM智能体生成高质量页面截图
  • 多格式输出:Markdown、JSON和纯文本
    • Markdown输出:带标题、表格、列表、图像和链接的结构化Markdown——完美适配LLM与RAG流水线
    • 边界框:精确的文本定位信息
  • 多语言支持:可从Rust、Node.js/TypeScript、Python或浏览器(WASM)调用
  • 跨平台:Linux、macOS(Intel/ARM)、Windows
flowchart LR
    subgraph Input["输入格式"]
        direction TB
        PDF["PDF"]
        DOCX["DOCX"]
        XLSX["XLSX"]
        PPTX["PPTX"]
        IMG["图像文件"]
    end

    subgraph Core["Rust核心"]
        direction TB
        CONV["格式转换\nLibreOffice / Rust image + resvg + usvg crates"]
        EXTRACT["文本提取\nPDFium C库"]
        OCR["选择性OCR\nTesseract / HTTP服务 / 自定义引擎"]
        MERGE["OCR结果合并\n原生文本 + OCR结果"]
        PROJ["网格投影\n空间布局重构"]
        CONV --> EXTRACT
        EXTRACT --> OCR --> MERGE --> PROJ
        EXTRACT --> MERGE
    end

    subgraph Output["输出格式"]
        direction TB
        JSON["结构化JSON\n文本 + 边界框"]
        TEXT["纯文本\n保留布局"]
        SCREEN["页面截图\nPNG渲染"]
    end

    subgraph Bindings["语言绑定"]
        direction TB
        NAPI["Node.js / TypeScript\nnapi-rs"]
        PYO3["Python\nPyO3"]
        WASM["浏览器 / WASM\nwasm-bindgen"]
        CLI["命令行工具\ncargo / npm / pip"]
        NAPI ~~~ PYO3 ~~~ WASM ~~~ CLI
    end

    PDF --> EXTRACT
    DOCX & XLSX & PPTX & IMG --> CONV
    PROJ --> JSON & TEXT & SCREEN
    JSON & TEXT & SCREEN --> Bindings

    style Input fill:#F5F5F5,color:#000000,stroke:#37D7FA,stroke-width:2px
    style Core fill:#F5F5F5,color:#000000,stroke:#3E18F9,stroke-width:2px
    style Output fill:#F5F5F5,color:#000000,stroke:#FF8705,stroke-width:2px
    style Bindings fill:#F5F5F5,color:#000000,stroke:#FF8DF2,stroke-width:2px
    style PDF fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
    style DOCX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
    style XLSX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
    style PPTX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
    style IMG fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
    style CONV fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
    style EXTRACT fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
    style OCR fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
    style MERGE fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
    style PROJ fill:#4B72FE,color:#FFFFFF,stroke:#3E18F9,stroke-width:2px
    style JSON fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
    style TEXT fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
    style SCREEN fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
    style NAPI fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
    style PYO3 fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
    style WASM fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
    style CLI fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px

安装

通过首选包管理器安装。所有版本(除WASM外)均包含相同的lit命令行工具。

语言环境安装命令库文档
Node.js / TypeScriptnpm i -g @llamaindex/liteparseNode.js说明文档
Pythonpip install liteparsePython说明文档
Rustcargo install liteparse (CLI) / cargo add liteparse (lib)Rust说明文档(crates.io)
浏览器(WASM)npm i @llamaindex/liteparse-wasmWASM说明文档

智能体技能

您可使用skills命令行工具下载liteparse作为智能体技能:

npx skills add run-llama/llamaparse-agent-skills --skill liteparse

或直接复制SKILL.md文件至您的技能配置目录。详细要求与使用模式请参阅智能体技能指南

命令行使用

所有安装方式(npm/pip/cargo)提供相同的CLI工具。

解析文件

# 基础解析
lit parse document.pdf

# 转换为Markdown——保留标题、表格、列表、图像与链接
lit parse document.pdf --format markdown -o output.md

# 指定输出格式
lit parse document.pdf --format json -o output.json

# 解析特定页面
lit parse document.pdf --target-pages "1-5,10,15-20"

# 跳过OCR处理
lit parse document.pdf --no-ocr

# JSON输出中包含页面级矢量图形路径数据
lit parse document.pdf --format json --extract-vector-graphics

# JSON输出中包含逐项PDF文本元数据
lit parse document.pdf --format json --extract-text-metadata

# JSON输出中包含页面批注数据
lit parse document.pdf --format json --extract-annotations

# JSON输出中包含表单字段与值(自动修复内存中的孤立表单组件)
lit parse document.pdf --format json --extract-form-fields

# 解析远程PDF文档
curl -sL https://example.com/report.pdf | lit parse -

Markdown输出

LiteParse可将文档直接渲染为Markdown,通过空间布局重构标题、表格、列表、图像和链接。此模式特别适合为LLM与RAG流水线提供文档输入。该模式基于启发式与规则实现,复杂文档可能无法完美渲染,但速度极快。

# 渲染为Markdown
lit parse document.pdf --format markdown -o output.md

# 移除图像而非生成占位符
lit parse document.pdf --format markdown --image-mode off

# 提取嵌入式图像至磁盘并在Markdown中引用
lit parse document.pdf --format markdown --image-mode embed --extract-images --image-output-dir ./images

# 提取图像字节与元数据(不改变Markdown图像处理方式)
lit parse document.pdf --format json --extract-images

# 链接文本输出为纯文本(不使用[text](url)语法)
lit parse document.pdf --format markdown --no-links

# JSON输出中包含标记PDF逻辑结构树
lit parse document.pdf --format json --extract-structure-tree

# JSON输出中包含分类布局块(带边界框)
lit parse document.pdf --format json --extract-blocks

图像处理通过--image-mode控制:

模式行为
placeholder(默认)按阅读顺序生成``引用
off完全移除图像
embed生成与placeholder相同的图像引用

--extract-images选项启用嵌入式图像提取功能。需配合使用--image-output-dir指定提取图像的磁盘存储路径。

JSON输出包含每张图像的namepath、页面边界框、原始像素尺寸、旋转角度、格式及重复关系;像素数据永远不会嵌入JSON。相同图像资源会复用输出文件。

库调用方可通过extract_images: true(Rust)、extractImages: true(Node/WASM)或extract_images=True(Python)启用,默认为禁用状态。

Markdown图像模式仅控制呈现方式;即使未提取字节,占位符引用仍会被发现。

Markdown重建质量随文档复杂度变化。对于最复杂的文档(密集表格、多栏布局、扫描件), LlamaParse(https://developers.llamaindex.ai/python/cloud/llamaparse/?utm_source=github&utm_medium=liteparse) 仍是最精确的解决方案。

矢量图形

矢量路径输出为可选功能,因为路径密集的PDF可能产生大量数据。通过--extract-vector-graphics、Rust/Python的extract_vector_graphics = true或JavaScript/WASM的extractVectorGraphics: true启用。

启用后每页将包含vector_graphics(JavaScript中为vectorGraphics):

  • shapes:路径边界框、描边/填充绘制状态及ARGB颜色,以及路径是否包含贝塞尔曲线
  • lines:基于描边宽度与绘制颜色合并的兼容水平/垂直线段,采用左上角72-DPI视口坐标

表示方式遵循LlamaParse PDFium路径提取规范;LiteParse将形状矩形字段命名为bbox(而非PDFium的coords),使用width/height(而非w/h)。默认情况下该字段不存在(或None/undefined)。对角线与曲线段由父形状表示,不会作为lines单独输出。

标记PDF结构树

启用--extract-structure-tree(Rust/Python对应extract_structure_tree,JavaScript/WASM对应extractStructureTree)可添加页面级structure_tree字段。该字段保留所有根节点,并递归暴露元素类型、ID、实际/替代文本、标题、类型化标量属性、标记内容ID、子元素及引用的链接批注。默认情况下字段不存在;已启用但未标记的页面将包含roots: []

布局块

Markdown渲染器通过将页面分类为块(标题、段落、列表项、表格、代码、分隔线、图表)后进行渲染。启用--extract-blocks(Rust/Python对应extract_blocks,JavaScript/WASM对应extractBlocks)可获取分类结果数据(而非仅渲染文本),包含分类器使用的坐标信息。

每页按阅读顺序生成blocks数组——与Markdown输出构建顺序一致。每个块包含:

  • kindheadingparagraphlist_itemcodetablegrid_fallbackrulefigure中的一种
  • bbox:占用区域(与text_items采用相同的左上角72-DPI视口坐标)。此为所有输入行源数据的并集,因此换行标题或多行段落会报告完整区域
  • 类型特有字段(不适用时省略):标题的textlevel;列表项的ordered/marker;代码的lineslang;表格的headerrows;图表的id/format

表格单元格为对象(非纯字符串),每个单元格包含text及其独立bbox,支持将单元格映射回源页面区域。带边框表格的bbox为绘制的网格单元;无边框表格的bbox为构建该单元的文本跨度范围。仅用于填充不规则网格的空白单元格不包含bbox(因其背后无墨迹数据)。

{
  "kind": "table",
  "bbox": {
    "x": 72.0,
    "y": 310.5,
    "width": 468.0,
    "height": 96.0
  },
  "header": [
    {
      "text": "Territory Code",
      "bbox": {
        "x": 72.0,
        "y": 310.5,
        "width": 120.0,
        "height": 24.0
      }
    },
    {
      "text": "Factor",
      "bbox": {
        "x": 192.0,
        "y": 310.5,
        "width": 96.0,
        "height": 24.0
      }
    }
  ],
  "rows": [
    [
      {
        "text": "001",
        "bbox": {
          "x": 72.0,
          "y": 334.5,
          "width": 120.0,
          "height": 24.0
        }
      },
      {
        "text": "1.25",
        "bbox": {
          "x": 192.0,
          "y": 334.5,
          "width": 96.0,
          "height": 24.0
        }
      }
    ]
  ]
}

文档元数据、内容边界与XFA数据包

解析结果(Rust/Node/Python API)在可用时包含文档/Info字段中的creatorproducer条目;这些为API专用数据,不会出现在CLI的JSON输出中。

启用extract_document_metadata(JavaScript/WASM对应extractDocumentMetadata)可添加doc_meta/docMeta字段,包含:

  • /Info创建/修改日期、PDF版本与加密权限
  • 签名状态、增量保存标记、尾部ID对比
  • 文档目录的XMP数据包(上限64 KiB,截断时包含xmp_truncated标记)
  • 源文件大小

默认禁用该选项(因需流式处理整个源文件);对于从非PDF格式转换的输入,由于描述的是中间PDF而非原始文件,该字段将不存在。

相似文章