云启智联AI服务 API 文档

欢迎使用云启智联AI服务。本文档提供了完整的 API 接口说明,帮助您快速集成银行回单识别、对账单识别、发票识别等智能解析能力。

文档概述

云启智联AI服务提供以下核心能力:

能力 接口路径 说明
银行回单解析 /AIService/bank_receipt_parsing 识别银行回单图片/PDF,支持每页多张回单自动裁剪,提取交易信息
银行对账单解析 /AIService/bank_statement_parsing 识别银行对账单,提取交易明细
发票解析 /AIService/invoice_parsing 全票面发票解析,覆盖5大分类,提取38个关键字段
通用文件解析 /AIService/file_parsing 通用文件识别解析
异步结果查询 /AIService/async_result 查询已提交任务的执行结果

计费说明

所有识别类接口均采用按文件页数计费模式,调用失败的任务不产生费用。标准单价为 0.05 元 / 页,当月累计调用量达到阶梯门槛后自动享受更低单价。

接口名称 接口路径 计费模式 标准单价
银行回单解析 /AIService/bank_receipt_parsing 按文件页数 0.05 元 / 页
银行对账单解析 /AIService/bank_statement_parsing 按文件页数 0.05 元 / 页
发票解析 /AIService/invoice_parsing 按文件页数 0.05 元 / 页
通用文件解析 /AIService/file_parsing 按文件页数 0.05 元 / 页

阶梯优惠(自动生效)

当月累计页数 单价 说明
0 - 10,000 页 0.05 元 / 页 标准价,无门槛
10,001 - 100,000 页 0.04 元 / 页 月调用量超过 1 万页后自动适用
100,001 页以上 0.03 元 / 页 大客户价,月调用量超过 10 万页后自动适用
计费规则 页数按实际解析的文件页数计算(单张图片算 1 页,PDF 按实际页数计算)。任务执行失败(code 非 1000)时不扣费。费用按天汇总,次日从账户余额中统一结算扣除,结算时按当月累计页数所处阶梯计算当日费用。新用户注册即送 10 元体验金,按标准价约可解析 200 页。

认证鉴权

所有业务接口均需要在请求头中携带 Authorization 进行身份认证。

获取 API Key

登录云启智联AI服务管理面板,在「API Key管理」页面创建并获取您的 API Key。API Key 格式示例:

text
as-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456

请求头格式

http
Authorization: as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
安全提示 API Key 是调用接口的唯一凭证,请妥善保管,不要将其暴露在客户端代码或公共仓库中。如怀疑泄露,请立即在管理面板中禁用并重新创建。

回调机制

所有识别类接口均为异步执行模式。您可以通过以下两种方式获取任务结果:

  1. 主动查询:提交任务后获取 task_id,通过 async_result 接口主动轮询查询结果。
  2. 被动回调:提交任务时在 callback_url 参数中指定回调地址,任务完成后系统自动以 POST 方式推送结果。

回调请求格式

http
POST {您提供的callback_url}
Content-Type: application/json

{
    "code": 1000,
    "msg": "success",
    "data": [
        {
            "page_index": 1,
            "page_data": [...]
        }
    ]
}
回调说明 回调请求体中的数据结构,与通过 async_result 接口主动查询返回的数据结构完全一致。建议在回调接口中实现幂等处理,避免重复处理同一任务结果。

银行回单解析

识别银行回单图片或 PDF 文件,支持每页多张回单自动裁剪为单张回单,自动提取交易日期、交易金额、收付款方信息、摘要等关键字段。

POST /AIService/bank_receipt_parsing

请求头参数

参数名 类型 是否必填 描述
Authorization string 必填 API Key,用于身份认证
Content-Type string 选填 上传文件时设置为 multipart/form-data

请求体参数

参数名 类型 是否必填 描述
file file 选填 上传的回单文件,支持格式:pdf、png、jpeg、jpg、bmp、gif;与 file_url 二选一
file_url string 选填 文件 URL 地址,与 file 参数二选一
callback_url string 选填 回调地址,任务完成后以 POST 方式推送结果

请求示例

curl
curl -X POST "https://your-domain.com/AIService/bank_receipt_parsing" \
  -H "Authorization: as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -F "file=@receipt.pdf" \
  -F "callback_url=https://your-app.com/callback"
python
import requests

url = "https://your-domain.com/AIService/bank_receipt_parsing"
headers = {"Authorization": "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
files = {"file": open("receipt.pdf", "rb")}
data = {"callback_url": "https://your-app.com/callback"}

response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
java
import java.io.File;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;

HttpClient client = HttpClient.newHttpClient();

String boundary = "----FormBoundary" + System.currentTimeMillis();
File file = new File("receipt.pdf");
String body = "--" + boundary + "\r\n"
    + "Content-Disposition: form-data; name=\"callback_url\"\r\n\r\n"
    + "https://your-app.com/callback\r\n"
    + "--" + boundary + "\r\n"
    + "Content-Disposition: form-data; name=\"file\"; filename=\"receipt.pdf\"\r\n"
    + "Content-Type: application/pdf\r\n\r\n";
byte[] fileBytes = Files.readAllBytes(file.toPath());
byte[] bodyEnd = ("\r\n--" + boundary + "--\r\n").getBytes();

byte[] bodyBytes = new byte[body.getBytes().length + fileBytes.length + bodyEnd.length];
System.arraycopy(body.getBytes(), 0, bodyBytes, 0, body.getBytes().length);
System.arraycopy(fileBytes, 0, bodyBytes, body.getBytes().length, fileBytes.length);
System.arraycopy(bodyEnd, 0, bodyBytes, body.getBytes().length + fileBytes.length, bodyEnd.length);

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://your-domain.com/AIService/bank_receipt_parsing"))
    .header("Authorization", "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
    .header("Content-Type", "multipart/form-data; boundary=" + boundary)
    .POST(HttpRequest.BodyPublishers.ofByteArray(bodyBytes))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
csharp
using var client = new HttpClient();
using var form = new MultipartFormDataContent();

form.Add(new ByteArrayContent(File.ReadAllBytes("receipt.pdf")), "file", "receipt.pdf");
form.Add(new StringContent("https://your-app.com/callback"), "callback_url");

client.DefaultRequestHeaders.Add("Authorization", "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

var response = await client.PostAsync("https://your-domain.com/AIService/bank_receipt_parsing", form);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

const form = new FormData();
form.append('file', fs.createReadStream('receipt.pdf'));
form.append('callback_url', 'https://your-app.com/callback');

const response = await axios.post(
    'https://your-domain.com/AIService/bank_receipt_parsing',
    form,
    {
        headers: {
            ...form.getHeaders(),
            'Authorization': 'as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        }
    }
);

console.log(response.data);

响应示例

提交成功

json
{
    "code": 1000,
    "msg": "success",
    "data": "任务已经提交,请稍候通过 async_result 接口查询任务结果...",
    "task_id": "d339b5e4-0c72-46bd-a17b-f23c5a3500cd"
}

查询结果成功

json
{
    "code": 1000,
    "msg": "success",
    "data": [
        {
            "page_index": 1,
            "companyName": "杭州气米科技有限公司",
            "companyAccount": "3301040160002492166",
            "page_data": [
                {
                    "bankName": "杭州银行",
                    "createDate": "2025-04-25",
                    "expendCustomer": "杭州气米科技有限公司",
                    "expendAccount": "3301040160002492166",
                    "incomeCustomer": "浙江顺丰速运有限公司",
                    "incomeAccount": "1202022329900002018",
                    "amount": 178.0,
                    "abstract": "汇兑",
                    "remark": "快递费",
                    "transNo": "20250425U0547466",
                    "curName": "人民币",
                    "image_url": "https://ks3-cn-beijing.ksyun.com/...",
                    "balanceDirection": "贷"
                }
            ]
        }
    ]
}

银行对账单解析

识别银行对账单文件,自动提取账户信息、交易明细等字段,支持按页分组返回结构化数据。

POST /AIService/bank_statement_parsing

请求头参数

参数名 类型 是否必填 描述
Authorization string 必填 API Key,用于身份认证

请求体参数

参数名 类型 是否必填 描述
file file 选填 上传的对账单文件,支持格式:pdf、png、jpeg、jpg、bmp、gif;与 file_url 二选一
file_url string 选填 文件 URL 地址,与 file 参数二选一
callback_url string 选填 回调地址,任务完成后以 POST 方式推送结果

请求示例

curl
curl -X POST "https://your-domain.com/AIService/bank_statement_parsing" \
  -H "Authorization: as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -F "file=@statement.pdf" \
  -F "callback_url=https://your-app.com/callback"
python
import requests

url = "https://your-domain.com/AIService/bank_statement_parsing"
headers = {"Authorization": "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
files = {"file": open("statement.pdf", "rb")}
data = {"callback_url": "https://your-app.com/callback"}

response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
java
import java.io.File;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;

HttpClient client = HttpClient.newHttpClient();

String boundary = "----FormBoundary" + System.currentTimeMillis();
File file = new File("statement.pdf");
String body = "--" + boundary + "\r\n"
    + "Content-Disposition: form-data; name=\"callback_url\"\r\n\r\n"
    + "https://your-app.com/callback\r\n"
    + "--" + boundary + "\r\n"
    + "Content-Disposition: form-data; name=\"file\"; filename=\"statement.pdf\"\r\n"
    + "Content-Type: application/pdf\r\n\r\n";
byte[] fileBytes = Files.readAllBytes(file.toPath());
byte[] bodyEnd = ("\r\n--" + boundary + "--\r\n").getBytes();

byte[] bodyBytes = new byte[body.getBytes().length + fileBytes.length + bodyEnd.length];
System.arraycopy(body.getBytes(), 0, bodyBytes, 0, body.getBytes().length);
System.arraycopy(fileBytes, 0, bodyBytes, body.getBytes().length, fileBytes.length);
System.arraycopy(bodyEnd, 0, bodyBytes, body.getBytes().length + fileBytes.length, bodyEnd.length);

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://your-domain.com/AIService/bank_statement_parsing"))
    .header("Authorization", "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
    .header("Content-Type", "multipart/form-data; boundary=" + boundary)
    .POST(HttpRequest.BodyPublishers.ofByteArray(bodyBytes))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
csharp
using var client = new HttpClient();
using var form = new MultipartFormDataContent();

form.Add(new ByteArrayContent(File.ReadAllBytes("statement.pdf")), "file", "statement.pdf");
form.Add(new StringContent("https://your-app.com/callback"), "callback_url");

client.DefaultRequestHeaders.Add("Authorization", "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

var response = await client.PostAsync("https://your-domain.com/AIService/bank_statement_parsing", form);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

const form = new FormData();
form.append('file', fs.createReadStream('statement.pdf'));
form.append('callback_url', 'https://your-app.com/callback');

const response = await axios.post(
    'https://your-domain.com/AIService/bank_statement_parsing',
    form,
    {
        headers: {
            ...form.getHeaders(),
            'Authorization': 'as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        }
    }
);

console.log(response.data);

响应示例

json
{
    "code": 1000,
    "msg": "success",
    "data": [
        {
            "page_index": 1,
            "page_data": {
                "global_fields": {
                    "accountName": "广州浩龙餐饮管理有限公司",
                    "bankName": "中国建设银行"
                },
                "detail_fields_list": [
                    {
                        "transAccount": "44050149110400002477",
                        "tradeDate": "2025-10-03",
                        "transNo": "578-440491104L0W06XW5IE",
                        "abstract": "电子转账",
                        "remark": "货款",
                        "counterpartyAccount": "01501271000000087",
                        "counterpartyName": "广州市白云区江高艳婷猪肉档",
                        "amountCredited": 0.0,
                        "amountDebited": 18900.0,
                        "balance": 6341.47,
                        "curName": "人民币元"
                    }
                ]
            }
        }
    ]
}

发票解析

全票面发票解析接口,覆盖5大分类:电子发票、定额发票、收据、费用票、增值税普通发票。自动识别发票类型并提取发票代码、发票号码、开票日期、购销方信息、金额税额、车船机票详情等38个关键字段,支持后处理自动分类。

POST /AIService/invoice_parsing

请求头参数

参数名 类型 是否必填 描述
Authorization string 必填 API Key,用于身份认证

请求体参数

参数名 类型 是否必填 描述
file file 选填 上传的发票文件,支持格式:pdf、png、jpeg、jpg、bmp、gif;与 file_url 二选一
file_url string 选填 文件 URL 地址,与 file 参数二选一
callback_url string 选填 回调地址,任务完成后以 POST 方式推送结果

响应示例

json
{
    "code": 1000,
    "msg": "success",
    "data": [
        {
            "page_index": 1,
            "page_data": [
                {
                    "fpdm": "044002200111",
                    "fphm": "25957000000004052544",
                    "kprq": "2025-11-06",
                    "gmfmc": "深圳市云启智联网络科技有限公司",
                    "gmfsbh": "91440300MAKGJY5R7G",
                    "xfmc": "某某科技有限公司",
                    "xfsbh": "91440300XXXXXXXXXX",
                    "je": "1000.00",
                    "sl": "6%",
                    "se": "60.00",
                    "jshj": "1060.00",
                    "je_dx": "壹仟零陆拾元整",
                    "kpr": "张三",
                    "bz": "",
                    "fpzl": "电子发票",
                    "category": "电子发票",
                    "sub_type": "增值税电子普通发票"
                }
            ]
        }
    ]
}

通用文件解析

提供通用文件识别解析能力,支持多种文档类型的内容提取。

POST /AIService/file_parsing

请求头参数

参数名 类型 是否必填 描述
Authorization string 必填 API Key,用于身份认证

请求体参数

参数名 类型 是否必填 描述
file file 选填 上传的文件,支持格式:pdf、png、jpeg、jpg、bmp、gif;与 file_url 二选一
file_url string 选填 文件 URL 地址,与 file 参数二选一
callback_url string 选填 回调地址,任务完成后以 POST 方式推送结果

异步结果查询

通过任务 ID 查询已提交识别任务的执行结果。建议在提交任务后间隔 5-10 秒开始轮询查询,直至获取结果或任务超时。

POST /AIService/async_result

请求头参数

参数名 类型 是否必填 描述
Authorization string 必填 API Key,用于身份认证

请求体参数

参数名 类型 是否必填 描述
task_id string 必填 提交任务时返回的任务唯一标识

请求示例

curl
curl -X POST "https://your-domain.com/AIService/async_result" \
  -H "Authorization: as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -d "task_id=d339b5e4-0c72-46bd-a17b-f23c5a3500cd"
python
import requests

url = "https://your-domain.com/AIService/async_result"
headers = {"Authorization": "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
data = {"task_id": "d339b5e4-0c72-46bd-a17b-f23c5a3500cd"}

response = requests.post(url, headers=headers, data=data)
print(response.json())
java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://your-domain.com/AIService/async_result"))
    .header("Authorization", "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
    .header("Content-Type", "application/x-www-form-urlencoded")
    .POST(HttpRequest.BodyPublishers.ofString("task_id=d339b5e4-0c72-46bd-a17b-f23c5a3500cd"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
csharp
using var client = new HttpClient();

client.DefaultRequestHeaders.Add("Authorization", "as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

var content = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("task_id", "d339b5e4-0c72-46bd-a17b-f23c5a3500cd")
});

var response = await client.PostAsync("https://your-domain.com/AIService/async_result", content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
javascript
const axios = require('axios');

const response = await axios.post(
    'https://your-domain.com/AIService/async_result',
    { task_id: 'd339b5e4-0c72-46bd-a17b-f23c5a3500cd' },
    {
        headers: {
            'Authorization': 'as-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
            'Content-Type': 'application/json'
        }
    }
);

console.log(response.data);

响应示例

json
{
    "code": 1000,
    "msg": "success",
    "data": [
        {
            "page_index": 1,
            "page_data": [...]
        }
    ]
}

错误码列表

以下为云启智联AI服务返回的错误码及对应说明:

错误码 说明 处理建议
1000 处理成功 请求已成功处理
3000 未知的异常 请联系技术支持排查
3001 请求参数错误 请检查请求参数是否符合接口要求
3002 请求方式错误 请使用接口要求的 HTTP 方法
3003 请求异常 请检查网络连接或服务状态
3004 文件不存在 请确认 file 或 file_url 参数已正确传入
3005 不支持的文件格式 请上传支持的文件格式(pdf/png/jpeg/jpg/bmp/gif)
3006 接口未找到 请检查接口路径是否正确
3007 任务尚未完成 任务正在处理中,请稍后重试查询
3008 任务执行异常 任务执行过程中发生异常,请重新提交
3009 不支持的单据类型 请确认上传的文件类型与调用接口匹配
3010 调用大模型接口时出现异常 模型服务暂不可用,请稍后重试
3011 自动切割时出现异常 文件切割失败,请检查文件质量后重试
3012 强制切换到自研模型 系统已自动切换识别模型
3013 自研模型超时 识别耗时过长,请稍后重试
3014 自研模型切割异常 文件处理异常,请检查文件格式后重试
3015 URL 无效 请使用白名单内的 URL 地址
3016 请求频率太高 触发限流,请降低请求频率
3017 认证失败 Authorization 无效或缺失,请检查 API Key
3018 数据未找到 请求的数据不存在,请检查参数
3019 任务超时 任务超过最大处理时间,请重新提交
3020 回调失败 回调地址不可达,请检查回调服务状态

返回字段说明

回单识别字段

字段名 类型 是否可为空 描述
bankName string 单据所属银行名称
createDate string 交易或记账日期
expendCustomer string 付款方名称
expendAccount string 付款方账号
incomeCustomer string 收款方名称
incomeAccount string 收款方账号
abstract string 摘要
amount float 交易金额
remark string 附言或备注
transNo string 个别银行无 流水号、回单编号或校验码
curName string 币种
image_url string 回单图片 URL 地址
companyName string 主体公司名称。系统根据回单中收、付款方名称出现频次自动推断;若多个公司名称并列第一导致无法唯一判断,则不返回该字段
companyAccount string 主体公司账号。系统根据与主体公司同时出现的账号频次自动推断;若多个账号并列第一导致无法唯一判断,则不返回该字段
balanceDirection string 借贷方向。主体公司及主体公司账号均作为收款方时为"借",均作为付款方时为"贷";无法判断主体公司/账号时不返回该字段

对账单全局字段

字段名 类型 是否可为空 描述
accountName string 账户名称
bankName string 对账单所属银行名称
totalCreditAmount float 贷方总发生额
totalDebitAmount float 借方总发生额

对账单明细字段

字段名 类型 是否可为空 描述
transAccount string 交易账号
tradeDate string 交易日期
transNo string 交易流水号
abstract string 摘要
counterpartyAccount string 对方账号
counterpartyName string 对方名称
amountCredited float 贷方金额(转入金额)
amountDebited float 借方金额(转出金额)
balance float 余额
remark string 备注

发票识别字段

覆盖5大分类:电子发票、定额发票、收据、费用票、增值税普通发票。各字段适用范围见下表,未命中的字段返回空字符串。

基础字段

字段名 类型 描述 适用范围
fphm string 发票号码 电子发票、定额发票、费用票
fpdm string 发票代码 电子发票、定额发票、费用票
kprq string 开票日期(格式 YYYY-MM-DD) 电子发票、定额发票、费用票
fpzl string 发票种类(后处理自动填入,非正则提取) 全部分类
category string 文档分类(后处理自动填入:电子发票/定额发票/收据/费用票) 全部分类
sub_type string 子类型(后处理自动填入:具体发票子类型名称) 全部分类

购买方信息

字段名 类型 描述 适用范围
gmfmc string 购买方名称 电子发票
gmfsbh string 购买方纳税人识别号(统一社会信用代码/纳税人识别号) 电子发票
gmfaddr string 购买方地址 电子发票(增值税专用发票常见)
gmfbank string 购买方开户行 电子发票(增值税专用发票常见)

销售方信息

字段名 类型 描述 适用范围
xfmc string 销售方名称 电子发票
xfsbh string 销售方纳税人识别号(统一社会信用代码/纳税人识别号) 电子发票
xfaddr string 销售方地址 电子发票(增值税专用发票常见)
xfbank string 销售方开户行 电子发票(增值税专用发票常见)

金额与税额

字段名 类型 描述 适用范围
je string 金额(不含税) 电子发票、收据、费用票
sl string 税率(如 6%、13%,或免税/不征税) 电子发票
se string 税额 电子发票、费用票(通行费)
jshj string 价税合计 电子发票、费用票(通行费)
je_dx string 金额大写(中文大写金额) 电子发票、收据
de_amount string 定额金额(中文大写转阿拉伯数字) 定额发票

人员与备注

字段名 类型 描述 适用范围
kpr string 开票人 电子发票
fkrs string 收款人 电子发票
fhr string 复核人 电子发票
bz string 备注 电子发票、收据

收据字段

字段名 类型 描述 适用范围
sjhm string 收据编号 收据
rqrq string 收据日期(格式 YYYY-MM-DD) 收据
sfdf string 交款方/付款方 收据

定额发票字段

字段名 类型 描述 适用范围
sfss string 所属省市 定额发票、费用票(出租车)

费用票 — 出租车

字段名 类型 描述 适用范围
ch string 车号 费用票(出租车)
dj string 单价(如 2.60 元/公里) 费用票(出租车)
lc string 里程(公里数) 费用票(出租车)

费用票 — 车辆通行费

字段名 类型 描述 适用范围
cph string 车牌号码 费用票(车辆通行费)
rksite string 入口站 费用票(车辆通行费)
chksite string 出口站 费用票(车辆通行费)

费用票 — 火车票

字段名 类型 描述 适用范围
sfz string 出发站/始发地 费用票(火车票、机票)
ddz string 到达站/目的地 费用票(火车票、机票)
crrq string 乘车日期(格式 YYYY-MM-DD) 费用票(火车票)
xw string 席别/座位(如二等座、硬卧) 费用票(火车票)

费用票 — 机票行程单

字段名 类型 描述 适用范围
hkgs string 航空公司 费用票(机票行程单)
hbh string 航班号(如 CA1234) 费用票(机票行程单)

SDK 工具包

为帮助开发者快速集成云启智联 AI 文档解析服务,我们提供了 Python、Java、Node.js、C# 四种语言的官方 SDK。SDK 封装了所有 API 接口调用、异步任务轮询、错误处理和类型定义,让您只需几行代码即可完成文档解析。

SDK 特性

🐍
Python SDK
v1.0.0 · Python 3.8+
Pythonic 设计,遵循 PEP 8 规范,基于 dataclass 的数据模型,完整类型提示。
$ pip install ./yqzl-ai-sdk-python
Java SDK
v1.0.0 · Java 11+
线程安全,基于 Java 11 HttpClient,Builder 模式配置,支持 Maven 集成。
> 下载源码后引入 Maven 项目
Node.js SDK
v1.0.0 · Node.js 18+
TypeScript 编写,完整类型定义导出,Promise/async-await 风格,零回调地狱。
$ npm install ./yqzl-ai-sdk-nodejs
💻
C# SDK
v1.0.0 · .NET 6.0+
零外部依赖,基于 HttpClient 原生实现,支持 IDisposable 资源管理,async/await 异步调用。
> 下载源码后添加项目引用

Python SDK

Python SDK 提供了最简洁的集成方式,支持 Python 3.8 及以上版本。安装后即可通过几行代码完成文档解析。

安装

点击上方「下载源码」按钮获取 SDK 源码包,解压后执行:

# 解压源码包
unzip yqzl-ai-sdk-python.zip

# 进入目录安装(会自动安装 requests 依赖)
cd yqzl-ai-sdk-python
pip install .

快速开始

from yqzl_sdk import YunQiZhiLian

client = YunQiZhiLian(api_key="as-xxxxxxxxxxxx")

# 提交银行回单解析任务
resp = client.parse_bank_receipt(file="path/to/receipt.pdf")
print(f"任务已提交: {resp.task_id}")

# 自动轮询等待结果
result = client.wait_for_result(resp.task_id)
for page in result.pages:
    for receipt in page.get_receipts():
        print(f"付款方: {receipt.expend_customer}, 金额: {receipt.amount}")

支持的方法

方法说明
parse_bank_receipt(file=..., file_url=...)银行回单解析
parse_bank_statement(file=..., file_url=...)银行对账单解析
parse_invoice(file=..., file_url=...)发票解析
parse_file(file=..., file_url=...)通用文件解析
get_result(task_id)查询任务结果
wait_for_result(task_id)轮询等待任务完成并返回结果
ping()测试连通性

Java SDK

Java SDK 基于 Java 11 HttpClient 构建,线程安全,支持 Maven/Gradle 集成。

安装

点击上方「下载源码」按钮获取 SDK 源码包,解压后在 Maven 项目中引入:

# 解压源码包
unzip yqzl-ai-sdk-java.zip

# 安装到本地 Maven 仓库
cd yqzl-ai-sdk-java
mvn install

然后在你的项目 pom.xml 中添加依赖:

<dependency>
    <groupId>com.yunqizhilian</groupId>
    <artifactId>yqzl-ai-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

快速开始

import com.yunqizhilian.sdk.YunQiZhiLianClient;
import com.yunqizhilian.sdk.YunQiZhiLianConfig;
import com.yunqizhilian.sdk.ParseResult;
import com.yunqizhilian.sdk.PageData;
import com.yunqizhilian.sdk.TaskResponse;

import java.io.File;
import java.util.List;

// 初始化客户端
YunQiZhiLianConfig config = YunQiZhiLianConfig.builder()
    .apiKey("as-xxxxxxxxxxxx")
    .build();
YunQiZhiLianClient client = new YunQiZhiLianClient(config);

// 提交解析任务(本地文件)
TaskResponse resp = client.parseBankReceipt(new File("receipt.pdf"));
System.out.println("任务已提交: " + resp.getTaskId());

// 等待结果并解析为结构化对象
TaskResponse result = client.waitForResult(resp.getTaskId());
var mapper = client.getObjectMapper();
List<ParseResult> pages = result.getParseResults(mapper);
for (ParseResult page : pages) {
    for (PageData field : page.getPageData()) {
        System.out.println("付款方: " + field.getAsString("expendCustomer")
            + ", 金额: " + field.getAsString("amount"));
    }
}

Node.js SDK

Node.js SDK 使用 TypeScript 编写,提供完整的类型定义,支持 async/await 风格的异步调用。

安装

点击上方「下载源码」按钮获取 SDK 源码包,解压后安装:

# 解压源码包
unzip yqzl-ai-sdk-nodejs.zip

# 在你的项目目录中引入本地包
cd your-project
npm install ../yqzl-ai-sdk-nodejs

快速开始

import { YunQiZhiLianClient } from 'yqzl-ai-sdk';

const client = new YunQiZhiLianClient({ apiKey: 'as-xxxxxxxxxxxx' });

// 提交解析任务
const resp = await client.parseBankReceipt({ file: './receipt.pdf' });
console.log(`任务已提交: ${resp.taskId}`);

// 等待结果
const result = await client.waitForResult(resp.taskId);
result.data.forEach(page => {
    page.pageData.forEach(r => {
        console.log(`付款方: ${r.expendCustomer}, 金额: ${r.amount}`);
    });
});

C# SDK

C# SDK 基于 .NET 6.0 HttpClient 实现,零外部依赖,支持 async/await 异步调用和 IDisposable 资源管理。

安装

点击上方「下载源码」按钮获取 SDK 源码包,解压后在项目中添加引用:

# 解压源码包
unzip yqzl-ai-sdk-csharp.zip

# 在你的项目中添加引用
dotnet add reference ../yqzl-ai-sdk-csharp/YunQiZhiLian.SDK.csproj

快速开始

using YunQiZhiLian.SDK;
using YunQiZhiLian.SDK.Models;

using var client = new YunQiZhiLianClient("as-xxxxxxxxxxxx");

// 提交解析任务
var resp = await client.ParseBankReceiptAsync("./receipt.pdf");
Console.WriteLine($"任务已提交: {resp.TaskId}");

// 等待结果
var result = await client.WaitForResultAsync(resp.TaskId);
foreach (var page in result.Data)
{
    foreach (var field in page.PageDataItems)
    {
        field.TryGetValue("expendCustomer", out var payer);
        field.TryGetValue("amount", out var amount);
        Console.WriteLine($"付款方: {payer}, 金额: {amount}");
    }
}