产品介绍 | 大装置帮助中心
跳到主要内容

API 使用指南

概述

本文描述文档解析服务的 API 接口,支持文件上传、解析任务创建和任务状态查询。系统采用异步处理模式,适用于 WORD、PPT、PDF、图片等文档的智能解析场景。

基础信息

  • Base URL: https://uniparse.cn-sh-01.sensecoreapi.cn
  • Content-Type: application/json

接口鉴权

获取API KEY

核心流程

典型使用流程:

  1. 获取上传地址 → 2. 上传文件 → 3. 创建解析任务 → 4. 轮询任务状态 → 5. 获取结果

API 接口详情

1. 获取上传文件地址

接口描述:获取文件上传的预签名 URL 和文件唯一标识

POST https://uniparse.cn-sh-01.sensecoreapi.cn/api/v1/files

请求参数

字段类型必填说明
file_namestring文件名称(含扩展名)
file_sizeinteger文件大小(单位:字节)

请求示例

{
"file_name": "contract.pdf",
"file_size": 1048576
}

请求响应

字段类型说明
file_idstring文件唯一标识,后续操作需使用
upload_urlstring预签名上传地址(有效期通常为 15 分钟)

响应示例

{
"file_id": "file_1234567890abcdef",
"upload_url": "https://storage.example.com/upload/xxxxxx?signature=xxxxx"
}

使用说明

  • 获取到 upload_url 后,需使用 PUT 方法上传文件内容
  • 上传请求头需包含 Content-Type: application/octet-stream
  • 上传成功后,文件将与返回的 file_id 绑定

2. 上传文件到指定地址

接口描述:使用获取到的 upload_url 将文件内容上传到对象存储。这是核心步骤,需要特别注意请求方法。

HTTP 请求

PUT https://storage.example.com/upload/xxxxxx?signature=xxxxx

关键说明

项目要求
HTTP 方法必须使用 PUT,不支持 POST
请求头Content-Type: application/octet-stream(必须)
请求体文件的原始二进制数据,不要进行 JSON 封装或 Base64 编码
URL 参数使用获取到的完整 upload_url(已包含认证信息),不要额外添加参数
超时设置建议设置 30-60 秒超时,大文件可适当延长

使用限制

  • 上传 URL 有效期通常为 15 分钟,过期后需重新获取
  • 不要对 upload_url 进行 URL 编码或修改,使用返回的原始地址

3. 创建解析任务

接口描述:提交文档解析任务,系统异步处理

POST https://uniparse.cn-sh-01.sensecoreapi.cn/api/v1/parseTasks

请求参数

字段类型必填说明
file_namestring文件名称
file_idstring-文件 ID(与 file_url/file_content 三选一)
file_urlstring-公开可访问的文件 URL(三选一)
file_contentstring-Base64 编码的文件内容(三选一)
parse_typeenum解析类型(见下方枚举说明)
page_rangesstring指定解析页码范围,如"1-3,5,7-9"

parse_type 枚举值

适用场景输出特点
PARSE_TYPE_PIPLELINE合同、报告、论文等长文档完整结构提取,包含段落、表格、标题层级
PARSE_TYPE_KIE发票、身份证、表格等结构化文档关键字段抽取,如姓名、金额、日期等

请求示例

{
"file_name": "invoice.pdf",
"file_id": "file_1234567890abcdef",
"parse_type": "PARSE_TYPE_KIE",
"page_ranges": "1-5"
}

请求响应

字段类型说明
task_idstring任务唯一标识,用于后续查询
file_namestring文件名称

响应示例

{
"task_id": "task_abcdef1234567890",
"file_name": "invoice.pdf"
}

注意事项

  • 必须且仅提供 file_idfile_urlfile_content 中的一种
  • file_content 需为 Base64 编码字符串,适用于小文件(<10MB)
  • 大文件建议使用 file_id 方式(先上传后解析)

4. 获取解析任务信息

接口描述:查询任务执行状态、进度和结果

GET https://uniparse.cn-sh-01.sensecoreapi.cn/api/v1/parseTasks/{task_id}

路径参数

参数类型说明
task_idstring任务 ID(创建任务时返回)

请求响应

字段类型说明
task_idstring任务 ID
file_namestring文件名称
batch_idstring批次 ID(用于批量查询)
parse_typeenum解析类型
page_rangesstring页码范围
stateenum任务状态(见下方枚举说明)
error_messagestring错误信息(仅失败时有效)
total_pagesinteger总页数
parsed_pagesinteger成功解析页数
failed_pagesinteger失败页数
result_zip_urlstring结果压缩包下载地址(成功后生成)
result_jsonstring解析结果 JSON(成功后生成)
created_atstring创建时间
updated_atstring更新时间
finished_atstring完成时间

state 枚举值

说明
TASK_STATE_UNSPECIFIED未指定
TASK_STATE_PENDING排队中
TASK_STATE_RUNNING解析中
TASK_STATE_SUCCEEDED解析成功
TASK_STATE_FAILED解析失败
TASK_STATE_CANCELED已取消

响应示例(运行中)

{
"task_id": "task_abcdef1234567890",
"file_name": "invoice.pdf",
"batch_id": "batch_20241107",
"parse_type": "PARSE_TYPE_KIE",
"state": "TASK_STATE_RUNNING",
"total_pages": 10,
"parsed_pages": 6,
"failed_pages": 0,
"created_at": "2024-11-07T10:00:00Z",
"updated_at": "2024-11-07T10:05:30Z"
}

响应示例(成功)

{
"task_id": "task_abcdef1234567890",
"file_name": "invoice.pdf",
"parse_type": "PARSE_TYPE_KIE",
"state": "TASK_STATE_SUCCEEDED",
"total_pages": 10,
"parsed_pages": 10,
"failed_pages": 0,
"result_zip_url": "https://storage.example.com/results/task_abcdef.zip?token=xxx",
"result_json": "{\"pages\": [...]}",
"created_at": "2024-11-07T10:00:00Z",
"finished_at": "2024-11-07T10:08:15Z"
}

轮询建议:任务状态查询建议间隔 5-10 秒,避免频繁请求


完整调用示例

cURL 示例

# 1. 获取上传地址
curl -X POST https://uniparse.cn-sh-01.sensecoreapi.cn/api/v1/files \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_TOKEN" \
-d '{"file_name":"sample.pdf","file_size":2048000}'

# 2. 上传文件(假设上一步返回的 upload_url)
curl -X PUT "https://storage.example.com/upload/xxxxxx" \
-H "Content-Type: application/octet-stream" \
--data-binary @sample.pdf

# 3. 创建解析任务
curl -X POST https://uniparse.cn-sh-01.sensecoreapi.cn/api/v1/parseTasks \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_TOKEN" \
-d '{"file_name":"sample.pdf","file_id":"file_123456","parse_type":"PARSE_TYPE_PIPLELINE"}'

# 4. 查询任务状态
curl https://uniparse.cn-sh-01.sensecoreapi.cn/api/v1/parseTasks/task_abcdef1234567890 \
-H "Authorization: Bearer $API_TOKEN"

Python 示例

import requests
import json
import time
import sys
import os

BASE_URL = "https://uniparse.cn-sh-01.sensecoreapi.cn"
TOKEN = "sk-xxxxxxxxx"

headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"
}

def upload_and_parse(file_path, parse_type="PARSE_TYPE_PIPLELINE"):
# 1. 获取上传地址
file_name = file_path.split("/")[-1]
file_size = os.path.getsize(file_path)

resp = requests.post(
f"{BASE_URL}/api/v1/files",
json={"file_name": file_name, "file_size": file_size},
headers=headers
)
upload_info = resp.json()
file_id = upload_info["file_id"]
upload_url = upload_info["upload_url"]

# 2. 上传文件
with open(file_path, "rb") as f:
requests.put(upload_url, data=f, headers={"Content-Type": "application/octet-stream"})

# 3. 创建解析任务
task_resp = requests.post(
f"{BASE_URL}/api/v1/parseTasks",
json={
"file_name": file_name,
"file_id": file_id,
"parse_type": parse_type
},
headers=headers
)
task = task_resp.json()
task_id = task["task_id"]

# 4. 轮询等待完成
while True:
status_resp = requests.get(f"{BASE_URL}/api/v1/parseTasks/{task_id}",headers=headers)
status = status_resp.json()

print(f"状态: {status['state']}, 进度: {status['parsed_pages']}/{status['total_pages']}")

if status["state"] == "TASK_STATE_SUCCEEDED":
print("解析完成!")
print(f"结果下载: {status['result_zip_url']}")
return status
elif status["state"] in ["TASK_STATE_FAILED", "TASK_STATE_CANCELED"]:
raise Exception(f"任务失败: {status['error_message']}")

time.sleep(3)

# 使用示例
result = upload_and_parse("invoice.pdf", "PARSE_TYPE_PIPLELINE")

状态流转

PENDING → RUNNING → SUCCEEDED
↘ FAILED
↘ CANCELED

错误处理

HTTP 状态码

错误码参考

业务错误

任务失败时,stateTASK_STATE_FAILEDerror_message 字段会包含具体原因:

{
"state": "TASK_STATE_FAILED",
"error_message": "文件格式不支持或文件已损坏",
"finished_at": "2024-11-07T10:10:00Z"
}

最佳实践

  1. 文件大小限制:建议单文件不超过 100MB,大文件请分割处理
  2. 超时处理:上传 URL 通常 15 分钟过期,请及时上传
  3. 结果保留:解析结果仅保留 7 天,请及时下载
  4. 并发控制:请避免一次性提交过多任务,会长时间处于pending状态,或返回 429 状态码
  5. 幂等设计:如创建任务失败,建议使用新 file_id 重试,避免重复提交
  6. 错误重试:对 TASK_STATE_FAILED 状态,根据错误信息决定是否重试

常见问题

Q: upload_url 如何使用? A: 必须使用 HTTP PUT 方法上传原始二进制文件,不能使用 POST 或 multipart/form-data。

Q: 如何获取 file_url? A: file_url 需是公开可访问的 HTTP/HTTPS 地址,适用于文件已存储在第三方云存储的场景。

Q: result_json 和 result_zip_url 的区别? A: result_json 直接返回解析结果(适合小文件),result_zip_url 提供打包下载链接(适合大文件或含图片资源)。

Q: 任务长时间卡在 PENDING 状态? A: 系统资源繁忙时可能需要排队,通常 1-2 分钟内会开始执行。若超过 30 分钟仍为 PENDING,请联系技术支持。


技术支持

  • 服务状态:检查系统健康状态
  • 问题反馈:提供 task_id 和请求时间以便排查