结构化字段抽取工具 - 根据用户定义的schema从文档中抽取结构化字段,支持文本、表格、段落三种抽取类型。
结构化字段抽取工具 (extract_structured_data_from_document)
功能概述
结构化字段抽取工具 (extract_structured_data_from_document)是一项面向实际任务的技能,主要用于extract_structured_data_from_document 是一个 结构化字段抽取工具 ,根据用户定义的schema从文档中抽取结构化数据;重要提示 :此工具专注于从文档中提取结构化字段,不适用于:;
核心要点
- 文档摘要生成;
- 文档结构解析;
- 如需解析文档结构,请使用 parse。
使用与执行
它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
结构化字段抽取工具 (extract_structured_data_from_document)
概述
extract_structured_data_from_document 是一个结构化字段抽取工具,根据用户定义的schema从文档中抽取结构化数据。
重要提示:此工具专注于从文档中提取结构化字段,不适用于:
- 文档摘要生成
- 通用问答
- 文档结构解析
如需解析文档结构,请使用 parse_document 工具。
适用场景
- 从PDF/Word/Excel等文档中提取结构化数据
- 财务报表数据抽取(如营收、利润、资产负债表等)
- 合同关键条款提取
- 表单数据提取
- 任何需要从非结构化文档中提取结构化信息的任务
不适用场景
- 文档结构解析(请使用
parse_document) - 文档摘要或总结
- 通用问答任务
- 无明确抽取目标的探索性分析
输入参数
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| document_url | string | 是 | 文档的URL地址,支持PDF、Word、Excel、图片等格式 |
| schema | object | 是 | 抽取规则定义,包含要抽取的字段及语义描述 |
document_url 既可以是公网可访问的文件 URL,也可以是本地文件路径。
当传入本地路径时,工具会先上传到 DPA 文档里指定的文件服务,再调用字段抽取接口。
环境变量
DPA_ENV:sim或prod,默认simDPA_BASE_URL: 可选,自定义覆盖解析服务地址DPA_UPLOAD_URL: 可选,自定义覆盖文件上传地址
默认端点:
- 仿真环境:
http://imsfz.gjzq.cn:18087/ismp/yx-dpa/document - 仿真上传:
http://imsfz.gjzq.cn:18087/ismp/yx-gw/infras/file/file/v3/upload - 生产环境:
http://ims.gjzq.cn:18087/ismp/yx-dpa/document - 生产上传:
http://ims.gjzq.cn:18087/ismp/yx-gw/infras/file/file/v3/upload
Schema结构
schema是一个JSON对象,支持三种字段类型:
{
"text": [
{
"keyName": "字段名称",
"keyPrompt": "字段的语义描述和抽取要求"
}
],
"table": [
{
"tableName": "表格名称",
"tableDescription": "表格的描述信息",
"tableColumn": [
{
"keyName": "列名称",
"keyPrompt": "列的语义描述和抽取要求"
}
]
}
],
"paragraph": [
{
"keyName": "段落名称",
"keyPrompt": "段落的语义描述和抽取要求"
}
]
}
关键使用规则
⚠️ 必须先构造Schema
如果用户没有提供schema,必须先根据用户需求构造schema,然后再调用此工具。
LLM负责:
- 理解用户的抽取需求
- 将需求转换为符合格式的schema定义
- 调用此工具执行抽取
Schema构造原则
- keyName: 字段的标识名称,应简洁明了
- keyPrompt: 字段的详细描述,包含:
- 字段的含义
- 数据格式要求(如"输出纯数字"、"带单位"等)
- 来源说明(如"从合并资产负债表提取")
- 特殊处理要求(如"取绝对值"、"单位转换"等)
输出格式
返回JSON格式的结构化抽取结果,包含:
- 文本字段的抽取值和溯源信息
- 表格数据的二维数组结构
- 段落内容的完整文本
- 每个抽取结果的来源页码和坐标信息
⚠️ 执行模式
此工具提交的是 DPA 文档规定的异步字段抽取任务:先调用 POST /parse 获取 taskId,然后轮询 GET /{taskId}/status,成功后再读取 GET /{taskId}/result。
为了便于上层调用,工具默认会在本地帮你等待完成后直接返回结果(包含 data 中的 text、table、paragraph)。
注意:默认等待超时为 60 秒。如果文档较大、60 秒内未完成,工具会返回 taskId、当前 status 和提示信息,供后续继续查询。
也可以传入 async 模式立即返回 taskId,手动查询结果。
步骤1:获取 taskId(async模式)
工具返回格式:
{
"taskId": "202603251633-8e44b4a2",
"taskType": "extraction",
"message": "字段抽取任务已创建"
}
重要:请记录返回的 taskId,用于后续查询任务状态和结果。
步骤2:查询任务状态
使用 document_get_result 工具查询抽取结果:
{
"tool": "document_get_result",
"args": {
"task_id": "202603251633-8e44b4a2"
}
}
步骤3:解析结果
成功时返回的结构:
{
"code": 200,
"message": "检索成功,召回内容已返回。",
"data": {
"text": [
{
"keyName": "本期营业收入",
"keyValue": "500亿元",
"source": {
"docUrl": "https://example.com/report.pdf",
"pageNum": 3,
"bbox": [100, 200, 300, 250]
}
}
],
"table": [...],
"paragraph": [...]
}
}
完整调用流程示例
- 调用 extract_structured_data:
输入: /path/to/document.pdf, schema={...}
返回: {"taskId": "202603251633-abc123", "taskType": "extraction", "message": "字段抽取任务已创建"}
- 查询结果:
输入: task_id="202603251633-abc123"
返回: {"code": 200, "data": {"text": [...], "table": [...], "paragraph": [...]}}
返回字段说明
| 字段 | 类型 | 描述 |
|---|---|---|
| taskId | string | 任务ID,用于查询任务状态 |
| taskType | string | 任务类型,"extraction" 表示字段抽取任务 |
| message | string | 任务状态描述 |
| data.text | array | 文本字段抽取结果列表 |
| data.table | array | 表格抽取结果列表 |
| data.paragraph | array | 段落抽取结果列表 |
调用示例
示例1:用户直接给抽取需求(无schema)
用户请求:
请从这份年报中提取公司的营业收入、去年同期营业收入、本期营业费用等信息
LLM首先构造Schema:
{
"text": [
{
"keyName": "本期营业收入",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
},
{
"keyName": "去年同期营业收入",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
},
{
"keyName": "本期营业费用",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
},
{
"keyName": "去年同期营业费用",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
}
],
"table": [],
"paragraph": []
}
然后调用工具:
{
"tool": "extract_structured_data_from_document",
"args": {
"document_url": "https://example.com/annual_report_2024.pdf",
"schema": {
"text": [
{
"keyName": "本期营业收入",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
},
{
"keyName": "去年同期营业收入",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
},
{
"keyName": "本期营业费用",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
},
{
"keyName": "去年同期营业费用",
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元"
}
],
"table": [],
"paragraph": []
}
}
}
工具返回:
{
"text": [
{
"keyName": "本期营业收入",
"keyValue": "500亿元",
"source": {
"docUrl": "https://example.com/annual_report_2024.pdf",
"pageNum": 3,
"bbox": [100, 200, 300, 250]
}
},
{
"keyName": "去年同期营业收入",
"keyValue": "420亿元",
"source": {
"docUrl": "https://example.com/annual_report_2024.pdf",
"pageNum": 3,
"bbox": [100, 260, 300, 310]
}
}
],
"table": [],
"paragraph": []
}
示例2:复杂文档 - 表格数据抽取
用户请求:
从这份银行资产负债表中提取同业存放的数据,包括本期和去年年底的数值
LLM构造Schema:
{
"text": [],
"table": [
{
"tableName": "合并及银行资产负债表",
"tableDescription": "银行合并及本身的资产负债表",
"tableColumn": [
{
"keyName": "序号",
"keyPrompt": "依据表格顺序增加序号,如1,2,3,4"
},
{
"keyName": "项目",
"keyPrompt": "仅采集下述项目:同业存放"
},
{
"keyName": "项目值",
"keyPrompt": "不同年份的项目值按照年份紧邻排列,如果某一年为空值也按空值输出,输出纯数字,且取绝对值"
},
{
"keyName": "所属时期",
"keyPrompt": "从下述选择项目所属时期:本期、去年同期、前年同期、去年年底、前年年底"
},
{
"keyName": "年份",
"keyPrompt": "项目值对应时间,包括年份、月份、日期等"
},
{
"keyName": "单位",
"keyPrompt": "项目单位,比如:亿元、百万元、元等"
}
]
}
],
"paragraph": []
}
调用工具:
{
"tool": "extract_structured_data_from_document",
"args": {
"document_url": "https://example.com/bank_balance_sheet.pdf",
"schema": {
"table": [
{
"tableName": "合并及银行资产负债表",
"tableDescription": "银行合并及本身的资产负债表",
"tableColumn": [
{"keyName": "序号", "keyPrompt": "依据表格顺序增加序号,如1,2,3,4"},
{"keyName": "项目", "keyPrompt": "仅采集下述项目:同业存放"},
{"keyName": "项目值", "keyPrompt": "输出纯数字,且取绝对值"},
{"keyName": "所属时期", "keyPrompt": "从下述选择:本期、去年同期、前年同期、去年年底"},
{"keyName": "年份", "keyPrompt": "项目值对应时间"},
{"keyName": "单位", "keyPrompt": "项目单位"}
]
}
]
}
}
}
示例3:用户已提供Schema
用户请求:
请使用以下schema从文档中提取数据: - 本期营业收入(单位:亿元) - 去年同期营业收入(单位:亿元) - 董事会制度(段落内容)
由于用户已提供schema,直接调用:
{
"tool": "extract_structured_data_from_document",
"args": {
"document_url": "https://example.com/company_report.pdf",
"schema": {
"text": [
{
"keyName": "本期营业收入",
"keyPrompt": "输出纯数字,单位亿元"
},
{
"keyName": "去年同期营业收入",
"keyPrompt": "输出纯数字,单位亿元"
}
],
"paragraph": [
{
"keyName": "董事会制度",
"keyPrompt": "公司的董事会制度相关信息"
}
],
"table": []
}
}
}
完整Schema示例
以下是一个完整的schema示例,涵盖文本、表格和段落三种类型:
{
"paragraph": [
{
"keyName": "财务会计制度、利润分配和审计",
"keyPrompt": "公司的财务会计制度、利润分配和审计相关信息"
},
{
"keyName": "董事会制度",
"keyPrompt": "公司的董事会制度相关信息"
}
],
"text": [
{
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元",
"keyName": "本期营业收入"
},
{
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元",
"keyName": "去年同期营业收入"
},
{
"keyPrompt": "输出纯数字,且取绝对值。必须带上单位。若项目值单位是百万元,需要转换为亿元",
"keyName": "本期营业费用"
}
],
"table": [
{
"tableName": "合并及银行资产负债表",
"tableDescription": "",
"tableColumn": [
{
"keyPrompt": "依据表格顺序增加序号,如1,2,3,4",
"keyName": "序号"
},
{
"keyPrompt": "仅采集下述项目:同业存放",
"keyName": "项目"
},
{
"keyPrompt": "输出纯数字,且取绝对值",
"keyName": "项目值"
},
{
"keyPrompt": "从下述选择:本期、去年同期、前年同期、去年年底",
"keyName": "所属时期"
},
{
"keyPrompt": "项目值对应时间",
"keyName": "年份"
},
{
"keyPrompt": "项目单位",
"keyName": "单位"
}
]
}
]
}
工具定义
{
"name": "extract_structured_data_from_document",
"description": "结构化字段抽取工具 - 基于schema从文档中抽取结构化字段,支持文本、表格、段落三种类型",
"parameters": {
"type": "object",
"properties": {
"document_url": {
"type": "string",
"description": "文档的URL地址,支持PDF、Word、Excel、图片等格式"
},
"schema": {
"type": "object",
"description": "抽取规则定义,必须包含text、table、paragraph三个字段,每个字段都是数组",
"properties": {
"text": {
"type": "array",
"items": {
"type": "object",
"properties": {
"keyName": {"type": "string"},
"keyPrompt": {"type": "string"}
},
"required": ["keyName", "keyPrompt"]
}
},
"table": {
"type": "array",
"items": {
"type": "object",
"properties": {
"tableName": {"type": "string"},
"tableDescription": {"type": "string"},
"tableColumn": {
"type": "array",
"items": {
"type": "object",
"properties": {
"keyName": {"type": "string"},
"keyPrompt": {"type": "string"}
},
"required": ["keyName", "keyPrompt"]
}
}
},
"required": ["tableName", "tableDescription", "tableColumn"]
}
},
"paragraph": {
"type": "array",
"items": {
"type": "object",
"properties": {
"keyName": {"type": "string"},
"keyPrompt": {"type": "string"}
},
"required": ["keyName", "keyPrompt"]
}
}
},
"required": ["text", "table", "paragraph"]
}
},
"required": ["document_url", "schema"]
}
}
热门AI工具
相关专题
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。
0
2026.10.22
PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.5万人学习
共6课时 | 54.7万人学习
