49.llama_index-文档加载(LLamaParse高精度文档解析)
内容参考于:图灵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()
