Skip to content
LlamaParse 文档版本 跟随上游 源快照 3e6c4a79 更新于 2026-10-17

60 秒了解 Parse

Parse 是 LlamaParse(LlamaIndex 出品的平台)上的文档解析产品。 它为 LLM 流水线而生,能以通用 OCR 与 PDF 转文本工具比不上的版面感知精度,读取表格、图表、扫描页以及 130 多种文件类型 —— 并交给你可直接喂给模型的干净 markdown、纯文本或 JSON。

各团队用 Parse 构建什么

  • 金融 RAG —— 解析 10-K、财报与投资人材料里的表格、脚注与图表,且不丢失单元格结构。
  • 合规流程 —— 把申报文件、会议记录与政策文档变成干净文本,供自动审阅与标记使用。
  • 合同情报 —— 保留章节层级,并用自定义提示词抽取条款。
  • 医疗与保险记录 —— 解析扫描的理赔单、化验报告与受理表单,字段抽取可靠。
  • 运营单据 —— 从工单、订单、发票与表单里抽取字段,供下游流程使用。
  • 科技文献 —— 处理论文与手册里的多栏版式、公式、图表与参考文献。

为什么选 Parse

高质量的文档解析是 LLM 技术栈里最容易被忽视、却也最关键的一步。模型只能就你给它的信息做推理,而现实世界的大多数文档开箱即用都很难读懂:多栏版式、合并的表格单元格、以图片形式嵌入的图表、手写批注、角度歪斜的扫描页。

多数解析器不过是挂在 OCR 引擎上的边界框检测器。 Parse 不一样:它用生成式模型做端到端的文档理解,因此版式、结构、表格、图表与文本都出自同一次推理,而不是靠几十条脆弱的启发式规则再拼回去。这正是它能应付传统解析器会崩掉的复杂真实文档的原因。

Parse 对比:直接把 PDF 塞给 LLM

对一份简短的文档,把原始 PDF 交给多模态模型往往也没问题。但到了规模上就会崩:表格丢结构、扫描页产出噪声很多的 OCR,而 token 成本不管页面内容是否携带有用信息,都随原始页面内容线性增长。Parse 把结构化的工作在上游一次性做完,下游模型看到的就只有干净的、具备版面感知的输入。

并排对比:通用解析器渲染的原始 PDF 表格,与 Parse 保留单元格结构、输出为干净 markdown 的结果。

5 行完成第一次解析

先下载一份样例 PDF —— 财政服务局的 FY2024 执行摘要,存为 doc.pdf:

终端窗口

curl -fL -o doc.pdf https://fiscal.treasury.gov/system/files/files/reports-statements/financial-report/2024/executive-summary-2024.pdf
  • Python
  • TypeScript
  • Go
  • Java
  • CLI
from llama_cloud import LlamaCloud

client = LlamaCloud()  # reads LLAMA_CLOUD_API_KEY
file = client.files.create(file="doc.pdf", purpose="parse")
result = client.parsing.parse(file_id=file.id, tier="agentic", version="latest", expand=["markdown"])
print(result.markdown.pages[0].markdown)
import LlamaCloud from '@llamaindex/llama-cloud';
import fs from 'fs';

const client = new LlamaCloud(); // reads LLAMA_CLOUD_API_KEY
const file = await client.files.create({ file: fs.createReadStream('doc.pdf'), purpose: 'parse' });
const result = await client.parsing.parse({ file_id: file.id, tier: 'agentic', version: 'latest', expand: ['markdown'] });
console.log(result.markdown.pages[0].markdown);
package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "time"

    llamacloud "github.com/run-llama/llama-parse-go"
)

func main() {
    ctx := context.Background()
    client := llamacloud.NewClient() // reads LLAMA_CLOUD_API_KEY

    f, err := os.Open("doc.pdf")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    file, err := client.Files.New(ctx, llamacloud.FileNewParams{File: f, Purpose: "parse"})
    if err != nil {
        log.Fatal(err)
    }

    job, err := client.Parsing.New(ctx, llamacloud.ParsingNewParams{
        FileID:  llamacloud.String(file.ID),
        Tier:    llamacloud.ParsingNewParamsTierAgentic,
        Version: llamacloud.ParsingNewParamsVersionLatest,
    })
    if err != nil {
        log.Fatal(err)
    }

    // Poll until the job reaches a terminal status
    getParams := llamacloud.ParsingGetParams{Expand: []string{"markdown"}}
    result, err := client.Parsing.Get(ctx, job.ID, getParams)
    if err != nil {
        log.Fatal(err)
    }
    for result.Job.Status != "COMPLETED" && result.Job.Status != "FAILED" && result.Job.Status != "CANCELLED" {
        time.Sleep(2 * time.Second)
        result, err = client.Parsing.Get(ctx, job.ID, getParams)
        if err != nil {
            log.Fatal(err)
        }
    }

    fmt.Println(result.Markdown.Pages[0].Markdown)
}
import ai.llamaindex.llamacloud.client.LlamaCloudClient;
import ai.llamaindex.llamacloud.client.okhttp.LlamaCloudOkHttpClient;
import ai.llamaindex.llamacloud.models.files.FileCreateParams;
import ai.llamaindex.llamacloud.models.files.FileCreateResponse;
import ai.llamaindex.llamacloud.models.parsing.ParsingCreateParams;
import ai.llamaindex.llamacloud.models.parsing.ParsingCreateResponse;
import ai.llamaindex.llamacloud.models.parsing.ParsingGetParams;
import ai.llamaindex.llamacloud.models.parsing.ParsingGetResponse;
import java.nio.file.Paths;

public class FirstParse {
    public static void main(String[] args) throws Exception {
        LlamaCloudClient client = LlamaCloudOkHttpClient.fromEnv(); // reads LLAMA_CLOUD_API_KEY

        FileCreateResponse file = client.files().create(FileCreateParams.builder()
                .file(Paths.get("doc.pdf"))
                .purpose("parse")
                .build());

        ParsingCreateResponse job = client.parsing().create(ParsingCreateParams.builder()
                .fileId(file.id())
                .tier(ParsingCreateParams.Tier.AGENTIC)
                .version(ParsingCreateParams.Version.LATEST)
                .build());

        // Poll until the job reaches a terminal status
        ParsingGetParams getParams = ParsingGetParams.builder()
                .jobId(job.id())
                .addExpand("markdown")
                .build();

        ParsingGetResponse result = client.parsing().get(getParams);
        while (!result.job().status().equals(ParsingGetResponse.Job.Status.COMPLETED)
                && !result.job().status().equals(ParsingGetResponse.Job.Status.FAILED)
                && !result.job().status().equals(ParsingGetResponse.Job.Status.CANCELLED)) {
            Thread.sleep(2000);
            result = client.parsing().get(getParams);
        }

        System.out.println(result.markdown().get().pages().get(0).asMarkdownResult().markdown());
    }
}

终端窗口

FILE_ID=$(llp files create --file doc.pdf --purpose parse | jq -r '.id')
JOB_ID=$(llp parsing create --file-id "$FILE_ID" --tier agentic --version latest | jq -r '.id')

# Poll until the job reaches a terminal status
while true; do
  STATUS=$(llp parsing get --job-id "$JOB_ID" | jq -er '.job.status') || break
  case "$STATUS" in COMPLETED|FAILED|CANCELLED) break ;; esac
  sleep 2
done

llp parsing get --job-id "$JOB_ID" --expand markdown | jq -r 'if .job.status == "COMPLETED" then .markdown.pages[0].markdown
  else "Parse job failed: \(.job.error_message // .)" end'

Python、TypeScript、REST 与 Web 界面的完整配置见 快速上手。

在用 Claude Code、Cursor 或其他编码智能体?

装上 Parse 的智能体技能,你的编码智能体就能在自己的推理过程中随手解析文档:

终端窗口

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

装好之后,你的智能体能解析任意文件、抽取表格、提取图片,而你不必写上一行 SDK 代码。技能与插件 →

核心能力

  • 灵活的档位 —— 为每份任务挑到合适的成本与精度平衡:

    • Agentic Plus —— 用最先进的模型,在最难的文档上追求最高精度。
    • Agentic —— 面向复杂、视觉丰富文件的高级解析智能体。
    • Cost Effective —— 为日常工作负载平衡性能与成本。
    • Fast —— 面向海量纯文本文档的最低延迟、最低成本档位;只返回文本与带位置的文本(不返回 markdown)。

    完整对比见档位比较 →

  • 具备版面感知的表格抽取 —— 从 PDF、扫描件与图片中准确还原表格并保留单元格结构,让下游模型与电子表格一次就把数据拿对。

  • 图表与示意图解析 —— 把图表、曲线与示意图抽成结构化数据,让 LLM 能对数字做推理,而不只是对着像素猜。

  • 自定义提示词与输出 schema —— 用自然语言指令或结构化的输出 schema 来引导解析器,让结果贴合你的流水线。

  • Cost Optimizer —— 只为真正需要的页面付高级价。 Parse 会自动把文档里的每一页路由到合适的档位:简单页面走更便宜的 cost_effective 档,复杂页面(表格、图表、多栏版式、示意图)留在你的高级档,两者并行运行故没有额外延迟代价。了解更多 →

  • 130 多种文件类型 —— PDF、DOCX、PPTX、XLSX、HTML、JPEG、PNG、XML、EPUB,以及更多类型 →。

  • 可上生产 —— 自动缓存、webhook、页级控制,以及可钉版本的档位,便于在生产里复现输出。

工作流

  1. 接入你的文档 通过我们的 API、SDK 或 Web 界面上传或流式传入文档 —— 面向企业数据源自带连接器。

  2. 配置解析方式 想快速起步就挑一个档位;要贴合你的用例,则可以自定义配置,指定具体模型、输出形态与解析指令。

  3. 拿到干净的结构化结果 收到的解析输出可被流水线直接消费 —— 完整清单见输出选项。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。