Skip to main content
本教程面向单据处理场景,展示如何利用 xParse 解析单据文档,然后通过大模型自动提取结构化信息并进行数据验证。

场景介绍

业务痛点

在财务和采购场景中,企业面临以下挑战:
  • 单据量大:需要处理大量发票、合同、订单、收据等单据
  • 信息提取繁琐:需要从单据中提取关键信息(金额、税号、日期、商品明细等)
  • 数据验证困难:需要验证数据的完整性和准确性(金额计算、日期合理性等)
  • 格式多样:单据格式不统一,有PDF、图片、扫描件等
  • 人工成本高:手动录入和核对效率低,容易出错

解决方案

通过构建单据提取Agent,我们可以实现:
  • 自动化单据解析:使用 xParse Pipeline 自动解析各类单据(OCR + 表格识别)
  • 智能信息提取:调用大模型从解析后的文本中提取结构化信息(发票信息、合同条款、订单明细等)
  • 数据验证:自动验证提取的数据(金额校验、日期检查、必填项检查等)
  • 批量处理:支持批量处理大量单据
  • 结果可视化:保留坐标信息,便于可视化验证

架构设计

核心思路:xParse 负责将单据解析成文本,大模型负责从文本中提取结构化信息,无需向量数据库。

环境准备

首先安装必要的依赖:
创建 .env 文件存储配置:
提示:X_TI_APP_IDX_TI_SECRET_CODE 参考 API Key,请登录 Textin 工作台 获取。示例中使用 通义千问 的大模型能力,其他模型用法类似。

完整代码示例

下面是一个完整的、可以直接运行的示例:

代码说明

Step 1: Pipeline 配置

Pipeline 只包含两个阶段:
  • Parse:解析单据(OCR + 表格识别)
  • Chunk:按页面分块
不需要 Embed 阶段,因为我们直接使用解析后的文本,不需要向量化。 输出到本地文件系统,保存为 JSON 格式,包含:
  • 文档的文本内容
  • 页面信息
  • 元素坐标(用于可视化)

Step 2: 文档加载

load_parsed_document 函数负责:
  • 从输出目录加载解析后的 JSON 文件
  • 提取所有页面的文本内容
  • 返回结构化的文档数据

Step 3: 信息提取 Tools

每个 Tool 的工作流程:
  1. 从查询中提取文件名
  2. 加载解析后的文档文本
  3. 构建提取提示,调用大模型
  4. 返回结构化的 JSON 结果
关键点:大模型直接从文本中提取信息,不需要向量检索。

Step 4: Agent 配置

Agent 会自动:
  • 判断是否需要先处理文档
  • 选择合适的 Tool 提取信息
  • 组织最终的回答

使用示例

示例 1:处理文档

示例 2:提取发票信息

示例 3:提取合同信息

示例 4:数据验证

最佳实践

  1. OCR优化:对于扫描件和图片,使用 parse_mode: "scan" 确保文字识别准确
  2. 表格识别:确保表格结构完整提取,特别是发票明细和订单明细
  3. 坐标保留:开启 include_orig_elements,保留坐标信息,便于可视化验证
  4. 数据验证:提取后立即验证,确保数据完整性和准确性
  5. 批量处理:支持批量处理,提高效率
  6. 错误处理:对于识别失败的单据,记录错误信息,便于人工处理
  7. 提示工程:优化大模型的提示词,提高提取准确率

常见问题

Q: 如何处理模糊的扫描件?
A: 1) 使用高质量的扫描件;2) 预处理图片(去噪、增强对比度);3) 使用支持OCR的解析引擎(textin)。
Q: 如何提高表格识别准确率?
A: 1) 确保表格结构清晰;2) 使用支持表格识别的解析引擎;3) 在提示词中明确要求提取表格数据。
Q: 如何处理多页单据?
A: xParse会自动处理多页文档,使用 by_page 策略保持页面完整性,大模型会从所有页面中提取信息。
Q: 可以使用其他 LLM 吗?
A: 可以。LangChain 支持多种 LLM,只需替换 ChatTongyi(通义千问)为对应的类,如 ChatOpenAI(OpenAI)、ChatZhipuAI(智谱AI)等。
Q: 如何提高提取准确率?
A: 1) 优化提示词,明确提取字段和格式;2) 使用更强的模型(如 qwen-max);3) 对提取结果进行后处理和验证。

相关文档