Skip to main content
本教程面向单据处理场景,展示如何利用 xParse Extract API 直接从单据文档中抽取结构化信息,并通过 Agent 进行数据验证。

场景介绍

业务痛点

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

解决方案

通过构建单据提取Agent,我们可以实现:
  • 一步完成解析与抽取:使用 xParse Extract API,通过定义 Schema 直接从文档中提取结构化数据,无需先解析再用大模型抽取
  • Schema 驱动:为发票、合同、订单分别定义抽取 Schema,精确控制提取字段
  • 数据验证:自动验证提取的数据(金额校验、日期检查、必填项检查等)
  • 批量处理:支持批量处理大量单据

架构设计

核心思路:xParse Extract API 通过 Schema 定义一步完成文档解析与结构化抽取,Agent 负责根据用户意图选择合适的抽取工具和执行验证。

环境准备

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

完整代码示例

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

代码说明

Step 1: Extract API 配置

extract_from_file 是核心辅助函数,负责:
  • 读取文件并编码为 Base64
  • 构建请求体(文件 + Schema + 选项)
  • 调用 Extract API,一步完成文档解析与结构化抽取
  • 通过 x-ti-app-idx-ti-secret-code 请求头进行认证

Step 2: Schema 定义

为每种单据类型定义抽取 Schema:
  • INVOICE_SCHEMA:发票信息(发票号码、销售方/购买方、商品明细、金额等)
  • CONTRACT_SCHEMA:合同信息(合同编号、签约方、金额、关键条款等)
  • ORDER_SCHEMA:订单信息(订单号、客户信息、商品明细、金额等)
  • VALIDATION_SCHEMA:验证用的通用 Schema,覆盖各类单据的关键字段
Schema 遵循 JSON Schema 规范,通过 typedescriptionrequired 精确定义提取字段。

Step 3: 信息提取 Tools

每个 Tool 的工作流程:
  1. 从查询中提取文件名
  2. 调用 extract_from_file 传入对应的 Schema
  3. Extract API 直接返回结构化 JSON 结果
关键点:不再需要先解析文档再用大模型抽取,Extract API 一步完成。

Step 4: Agent 配置

Agent 会自动:
  • 根据用户意图选择合适的 Tool
  • 调用 Extract API 提取信息
  • 组织最终的回答

使用示例

示例 1:提取发票信息

示例 2:提取合同信息

示例 3:提取订单信息

示例 4:数据验证

最佳实践

  1. Schema 设计:根据实际业务需求定义 Schema 字段,使用 required 标记必要字段,使用 description 提供清晰的字段说明
  2. 文档质量:对于扫描件和图片,确保分辨率足够,Extract API 内置高精度 OCR 引擎
  3. 坐标引用:开启 generate_citations 可获取字段在文档中的位置坐标,便于人工核对
  4. 数据验证:提取后立即验证,确保数据完整性和准确性
  5. 批量处理:使用 process_documents 批量提取,提高效率
  6. 错误处理:对于提取失败的单据,记录错误信息,便于人工处理

常见问题

Q: 如何处理模糊的扫描件?
A: 1) 使用高质量的扫描件;2) 预处理图片(去噪、增强对比度);3) Extract API 内置了高精度 OCR 引擎,可以处理大多数扫描件。
Q: 如何自定义提取字段?
A: 修改对应的 Schema 定义即可。Schema 遵循 JSON Schema 规范,支持 stringnumberarrayobject 等类型,通过 description 描述字段含义。
Q: 如何处理多页单据?
A: Extract API 会自动处理多页文档,从所有页面中提取信息。
Q: 可以使用其他 LLM 吗?
A: 可以。Agent 编排部分使用 LangChain,支持多种 LLM,只需替换 ChatTongyi(通义千问)为对应的类,如 ChatOpenAI(OpenAI)、ChatZhipuAI(智谱AI)等。信息提取由 Extract API 完成,不依赖特定 LLM。

相关文档