内容参考于:图灵AI大模型全栈

LLamaindex提供了一个叫LLamaParse东西,它是一个在线的收费的,每个月有免费额度,它上一章里写的是本地加载文档(PDFReader、DocxReader 等),本地加载文档它有缺陷不是很智能,LLamaParse就比较智能

LLamaParse官网地址:https://cloud.llamaindex.ai/

如下图登录后(账号如果不会申请,可以去某宝、某鱼去买)

如下图红框免费使用的额度

申请一个key,如下图红框,官网也提供了Python调用的代码示例

它的库安装地址:https://developers.llamaindex.ai/llamaparse/?gl=1

pip install llama-cloud>=2.1

代码效果图:

代码

# 导入操作系统标准模块,用于读取环境变量、处理文件路径
import os
# 导入 Python 标准异步IO库,用于管理异步事件循环、运行异步函数
import asyncio
# 从 llama_cloud 包导入异步版 LlamaCloud 客户端
# 模块说明:LlamaCloud 是 LlamaIndex 官方推出的云端文档解析服务(核心能力为 LlamaParse)
#          主打高精度 PDF/文档解析,可智能识别表格、版式、目录、公式、跨页内容,解析效果远优于本地解析工具
# AsyncLlamaCloud 是异步版本的客户端,适合批量处理、高并发场景;对应还有同步版 LlamaCloud
from llama_cloud import AsyncLlamaCloud
# 导入环境变量加载函数,用于读取 .env 文件中的配置,避免 API 密钥等敏感信息硬编码在代码中
from dotenv import load_dotenv

# 执行加载 .env 配置文件,将文件内的键值对写入系统环境变量
# 执行后 os.getenv() 才可读取到 LLamaParseKey 等自定义配置项
load_dotenv()

# 初始化异步 LlamaCloud 客户端实例
# 必填入参:
#   api_key:LlamaCloud 服务的 API 密钥,需从 LlamaCloud 官网申请获取
#   此处从环境变量 LLamaParseKey 中读取,对应 .env 文件里的同名配置项
client = AsyncLlamaCloud(api_key=os.getenv("LLamaParseKey"))

# 定义异步主函数,包含完整的「文件上传 → 云端解析 → 结果处理 → 本地保存」全流程
async def main():
    # ========== 第一步:上传本地文件到 LlamaCloud 云端 ==========
    # 方法名:client.files.create
    # 作用:将本地文档文件上传到 LlamaCloud 服务器,返回文件对象;后续解析任务基于返回的文件 ID 执行
    # 必填入参:
    #   file:str 类型,本地待解析文件的路径(支持相对路径/绝对路径)
    #   purpose:str 类型,文件用途标识,固定传 "parse" 表示该文件用于文档解析
    # 返回值:文件对象,包含 id(文件唯一标识)、文件名、文件大小等元数据属性
    file_obj = await client.files.create(file="./data_file/财务管理文档.pdf", purpose="parse")
    # 打印文件唯一 ID,可用于任务追溯、问题排查
    print(file_obj.id)

    # ========== 第二步:发起文档解析请求,等待解析完成 ==========
    # 方法名:client.parsing.parse
    # 作用:根据文件 ID 发起云端解析任务,await 会阻塞等待解析完成后返回完整结果
    # 必填入参:
    #   file_id:str 类型,上传文件得到的唯一 ID,指定本次要解析的目标文件
    # 常用可选入参:
    #   tier:str 类型,解析等级模式
    #       - "standard":标准模式,速度快、成本低,适合版式简单的普通文字版 PDF
    #       - "agentic":智能模式,调用 Agent 能力处理复杂版式、嵌套表格、跨页内容、扫描件,解析质量更高,成本也更高
    #   version:str 类型,解析引擎版本,"latest" 表示使用最新稳定版,也可指定具体版本号保证一致性
    #   expand:list[str] 类型,指定需要返回的解析结果格式,支持多选
    #       - "markdown":返回分页的 Markdown 内容,结果包含 pages 数组,每页独立对应一段 Markdown
    #       - "markdown_full":返回完整拼接好的全文 Markdown,直接得到单段完整文本,无需手动拼接
    #       - "text":返回纯文本内容
    #       - "json":返回结构化 JSON 结果,包含段落、表格、标题层级等详细语义结构
    # 返回值:解析结果对象,包含 expand 指定的对应内容属性
    result =  await client.parsing.parse(
        file_id=file_obj.id,
        tier="agentic",
        version="latest",
        # 此处指定返回分页 Markdown,后续需手动遍历每页拼接全文
        expand=["markdown"],
    )

    # 打印 Markdown 结果的完整结构对象,调试时可用于校验返回格式
    print(result.markdown)

    # ========== 第三步:遍历分页结果,逐页写入本地 Markdown 文件 ==========
    # 以追加模式打开本地文件,指定 utf-8 编码,避免中文乱码
    # 注意:使用 'a' 追加模式,多次运行代码会重复追加内容;若只需单次生成,建议改为 'w' 覆盖模式
    with open('财务管理文档.md', 'a', encoding='utf-8')as f:
        # 遍历分页 Markdown 列表,enumerate 同时获取索引和单页对象
        # result.markdown.pages 是列表类型,每个元素对应一页的解析结果
        for i, page in enumerate(result.markdown.pages):
            # 打印分页分隔线与页码,索引 i 从 0 开始,+1 后符合人类阅读的页码习惯
            print(f"========== 第 {i+1} 页 ==========")
            # 以 repr 形式打印当前页的 Markdown 内容,可看到换行符、特殊字符等原始格式,用于调试校验
            print(repr(page.markdown))
            # 将当前页的 Markdown 内容写入本地文件,逐页拼接成完整文档
            f.write(page.markdown)

# 脚本入口保护:仅直接运行该脚本时执行逻辑,被其他文件导入时不执行
if __name__ == "__main__":
    # 启动异步事件循环,运行 main 异步函数
    # asyncio.run() 是 Python 3.7+ 提供的标准异步入口,会自动创建、管理、关闭事件循环
    asyncio.run(main())

上面的是异步的方式,下方是同步的

# 导入操作系统标准模块,用于读取环境变量、处理文件路径
import os
# 导入环境变量加载函数,用于读取 .env 配置文件,避免密钥硬编码
from dotenv import load_dotenv
# 导入 LlamaCloud 同步客户端类
# 模块说明:LlamaCloud 是 LlamaIndex 官方的云端文档解析服务(核心能力为 LlamaParse)
#           主打高精度 PDF 解析,可智能还原表格、版式、目录、公式、跨页内容,效果远优于本地开源解析工具
# 本类为同步版本客户端,调用方式简单直观,适合单文件处理、简单脚本场景;对应还有 AsyncLlamaCloud 异步版
from llama_cloud import LlamaCloud

# 加载 .env 文件中的配置到系统环境变量
# 执行后 os.getenv() 可读取到 LLamaParseKey 等自定义配置项
load_dotenv()


# 初始化 LlamaCloud 同步客户端实例
# 必填入参:
#   api_key:LlamaCloud 服务的 API 密钥,需在 LlamaCloud 官网申请获取
#   此处从环境变量 LLamaParseKey 读取,对应 .env 文件中的同名配置
client = LlamaCloud(api_key=os.getenv('LLamaParseKey'))

# ====================== 第一步:上传本地文件到云端 ======================
# 方法:client.files.create
# 作用:将本地文档文件上传至 LlamaCloud 服务器,生成唯一文件 ID,后续解析基于该 ID 执行
# 必填入参:
#   file:字符串类型,本地待解析文件的相对路径或绝对路径
#   purpose:字符串类型,文件用途标识,解析场景固定传 "parse"
# 返回值:文件对象,包含 id(文件唯一标识)、文件名、文件大小等元数据属性
file = client.files.create(
    file="./data/财务管理文档.pdf",   # 本地文件路径
    purpose="parse",              # 固定写法,表示用于解析
)

print(f"文件上传成功,file_id: {file.id}")

# ====================== 第二步:发起云端解析并获取结果 ======================
# 方法:client.parsing.parse
# 作用:根据文件 ID 发起文档解析任务,同步阻塞等待解析完成后返回完整结果
# 必填入参:
#   file_id:字符串类型,上传文件返回的唯一 ID,指定本次解析的目标文件
# 常用可选入参:
#   tier:字符串类型,解析精度等级
#       - standard:标准模式,速度快、成本低,适合版式简单的普通文字版 PDF
#       - agentic:智能增强模式,通过 Agent 能力处理复杂版式、嵌套表格、跨页内容、扫描件,解析准确率更高,成本也更高
#   version:字符串类型,解析引擎版本,"latest" 表示使用最新稳定版;也可指定具体版本号保证结果一致性
#   expand:列表类型,指定需要返回的解析结果格式,支持多选
#       - "markdown":返回分页 Markdown,结果包含 pages 数组,每页对应独立 Markdown 内容,粒度灵活
#       - "markdown_full":返回完整拼接好的全文 Markdown,直接得到单段完整文本,无需手动拼接
#       - "text":返回纯文本内容
#       - "json":返回结构化 JSON,包含段落、表格、标题层级、版式信息等详细语义结构
# 返回值:解析结果对象,包含 expand 指定的对应内容属性
result = client.parsing.parse(
    file_id=file.id,
    tier="agentic",        # 解析层级(推荐 agentic,最高精度)
    version="latest",      # 使用最新版本的解析引擎
    expand=["markdown"],   # 返回 Markdown 格式
)

# print(result)  # 调试时可打开,查看完整结果对象结构

# ====================== 第三步:分页写入本地 Markdown 文件 ======================
# 以追加模式打开本地文件,指定 utf-8 编码避免中文乱码
# 注意:'a' 为追加模式,多次运行脚本会向文件尾部重复追加内容;若只需单次生成,建议改为 'w' 覆盖模式
with open('财务管理文档.md', 'a', encoding='utf-8')as f:
    # 遍历分页 Markdown 列表,enumerate 同时获取页索引和单页对象
    # result.markdown.pages 为列表类型,每个元素对应一页的解析结果
    for i, page in enumerate(result.markdown.pages):
        # 打印分页分隔线与页码,索引从 0 开始,+1 后符合人类阅读的页码习惯
        print(f"========== 第 {i+1} 页 ==========")
        # 以 repr 形式打印单页 Markdown 内容,可直观看到换行符、特殊字符等原始格式,用于调试校验
        print(repr(page.markdown))
        # 将当前页的 Markdown 内容写入本地文件,逐页拼接成完整文档
        f.write(page.markdown)
        # print()


img

更多推荐