文档智能(Document Mind)基于多年技术积累打造的多模态文档识别与理解引擎,依托文档智能预训练技术,将非结构化文档解析为结构化数据。目前已上线的文档解析-大模型版对各类版式的文档(电子版和扫描版)进行解析,从文档中提取出层级树和版面信息。可作为大模型预训练、RAG的文档预处理链路,提供高质量、高精度的文档解析服务,能够帮助企业高效地进行大模型应用的场景建设。
您可以在产品控制台可视化页面上传文档进行试用,也可以通过API接口进行调用
(1)实际使用的大模型文档处理场景落地实践
在我的实际工作中,我使用了阿里云的文档解析(大模型版)服务来支持多个文档处理场景。以下是实践案例:
RAG场景:在处理大量文档时,RAG技术能够帮助我们更有效地从文档中检索信息并生成相关文本。文档解析(大模型版),我们能够更精确地提取文档中的关键信息,进而提升RAG系统的性能。具体来说,通过文档解析服务提取的结构化信息,我们为RAG系统提供了更丰富、更准确的输入,从而提高了生成文本的相关性和质量。
步骤一:调用文档解析(大模型版)异步提交服务
调用submitDocStructureJobAdvance接口,通过fileUrlObject参数实现本地文档上传。
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_tea_util import models as util_models
from alibabacloud_credentials.client import Client as CredClient
def submit_file():
# 使用默认凭证初始化Credentials Client。
cred=CredClient()
config = open_api_models.Config(
# 通过credentials获取配置中的AccessKey ID
access_key_id=cred.get_access_key_id(),
# 通过credentials获取配置中的AccessKey Secret
access_key_secret=cred.get_access_key_secret()
)
# 访问的域名
config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
client = docmind_api20220711Client(config)
request = docmind_api20220711_models.SubmitDocParserJobAdvanceRequest(
# file_url_object : 本地文件流
file_url_object=open("./example.pdf", "rb"),
# file_name :文件名称。名称必须包含文件类型
file_name='123.pdf',
# file_name_extension : 文件后缀格式。与文件名二选一
file_name_extension='pdf'
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
response = client.submit_doc_parser_job_advance(request, runtime)
# API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。如下示例为打印返回的业务id格式
# 获取属性值均以小写开头,
print(response.body.data.id)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
传入文档URL调用方式的请求示例代码如下,调用SubmitDocParserJob接口,通过fileUrl参数实现传入文档URL。请注意,您传入的文档URL必须为公网可访问下载的公网URL地址,无跨域限制,URL不带特殊转义字符。
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient
def submit_url():
# 使用默认凭证初始化Credentials Client。
cred=CredClient()
config = open_api_models.Config(
# 通过credentials获取配置中的AccessKey ID
access_key_id=cred.get_access_key_id(),
# 通过credentials获取配置中的AccessKey Secret
access_key_secret=cred.get_access_key_secret()
)
# 访问的域名
config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
client = docmind_api20220711Client(config)
request = docmind_api20220711_models.SubmitDocParserJobRequest(
# file_url : 文件url地址
file_url='https://example.com/example.pdf',
# file_name :文件名称。名称必须包含文件类型
file_name='123.pdf',
# file_name_extension : 文件后缀格式。与文件名二选一
file_name_extension='pdf'
)
try:
# 复制代码运行请自行打印 API 的返回值
response = client.submit_doc_parser_job(request)
# API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。如下示例为打印返回的业务id格式
# 获取属性值均以小写开头,
print(response.body.data.id)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
正常返回示例
{
"RequestId": "43A29C77-405E-4DC0-BC55-EE694AD0****",
"Data": {
"Id": "docmind-20240712-b15f****"
}
}
步骤二:调用文档解析(大模型版)状态查询服务QueryDocParserStatus接口
调用查询接口的入参ID就是前面异步任务提交接口返回的出参ID,查询结果有status状态和numberOfSuccessfulParsing已处理块。status状态有队列中、处理中、处理成功、处理失败三种情况。
调用文档解析接口的结果查询类API示例代码如下,调用 接口,通过ID参数传入查询流水号。
from typing import List
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient
def query():
# 使用默认凭证初始化Credentials Client。
cred=CredClient()
config = open_api_models.Config(
# 通过credentials获取配置中的AccessKey ID
access_key_id=cred.get_access_key_id(),
# 通过credentials获取配置中的AccessKey Secret
access_key_secret=cred.get_access_key_secret()
)
# 访问的域名
config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
client = docmind_api20220711Client(config)
request = docmind_api20220711_models.QueryDocParserStatusRequest(
# id : 任务提交接口返回的id
id='docmind-20220902-824b****'
)
try:
# 复制代码运行请自行打印 API 的返回值
response = client.query_doc_parser_status(request)
# API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。获取属性值均以小写开头
# 获取返回结果。建议先把response.body.data转成json,然后再从json里面取具体需要的值。
print(response.body.data)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
正常返回示例
{
"RequestId": "43A29C77-405E-4DC0-BC55-EE694AD0****",
"Data": {
"Status": "success",
"NumberOfSuccessfulParsing": 166
}
}
步骤三:调用文档解析(大模型版)结果获取服务GetDocParserResult接口
调用文档解析接口的结果查询类API示例代码如下。
from typing import List
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient
def query():
# 使用默认凭证初始化Credentials Client。
cred=CredClient()
config = open_api_models.Config(
# 通过credentials获取配置中的AccessKey ID
access_key_id=cred.get_access_key_id(),
# 通过credentials获取配置中的AccessKey Secret
access_key_secret=cred.get_access_key_secret()
)
# 访问的域名
config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
client = docmind_api20220711Client(config)
request = docmind_api20220711_models.GetDocParserResultRequest(
# id : 任务提交接口返回的id
id='docmind-20220902-824b****',
layout_step_size=10,
layout_num=0
)
try:
# 复制代码运行请自行打印 API 的返回值
response = client.get_doc_parser_result(request)
# API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。获取属性值均以小写开头
# 获取返回结果。建议先把response.body.data转成json,然后再从json里面取具体需要的值。
print(response.body.data)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
处理成功的返回结果如下所示
{
"requestId": "4B207147-016E-1F36-A379-4B08F80E6361",
"data": {
"layouts": [{
"markdownContent": "# KV结构模板-用户白皮书\n",
"index": 0,
"subType": "none",
"text": "KV结构模板-用户白皮书",
"alignment": "left",
"type": "title",
"pageNum": 0,
"uniqueId": "d69ad26e76859ed45bd75e3c3cc74ff2"
}, {
"markdownContent": "![cc0451f2018b31ca3e2c2e4cf6579b17.jpeg](http://docmind-api-pre-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/publicDocStreamStructure/docmind-PRE-20240708-7d12091ced01454689a2d3c81050d5d0/0.png?Expires=1721035172&OSSAccessKeyId=xxxxxxxxx&Signature=Vo9fghzlnmDYYAqB66%2FAlIpTuA4%3D&x-oss-process=image%2Fcrop%2Cx_108%2Cy_211%2Cw_1269%2Ch_7)",
"index": 1,
"subType": "none",
"text": "",
"alignment": "left",
"type": "split_line",
"pageNum": 0,
"uniqueId": "cc0451f2018b31ca3e2c2e4cf6579b17"
}, {
"markdownContent": "产品介绍\n",
"index": 2,
"subType": "none",
"text": "产品介绍",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "2a544c4c31da7ad3db1ffd8360209a20"
}, {
"markdownContent": "产品范围\n",
"index": 3,
"subType": "none",
"text": "产品范围",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "527a96a970ddd98e584999926d7a3a4b"
}, {
"markdownContent": "产品亮点\n",
"index": 4,
"subType": "none",
"text": "产品亮点",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "7d664615a2cb182e66ad316cc7ea02e3"
}, {
"markdownContent": "产品步骤\n",
"index": 5,
"subType": "none",
"text": "产品步骤",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "4dc284608402a363e40106a27d1c4a76"
}, {
"markdownContent": "名词解释\n",
"index": 6,
"subType": "none",
"text": "名词解释",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "f77ae26e9a729c42e2c657bb22780c32"
}, {
"markdownContent": "具体操作\n",
"index": 7,
"subType": "none",
"text": "具体操作",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "82c733baee90d27978151c0d490d3a55"
}, {
"markdownContent": "1.模板配置\n",
"index": 8,
"subType": "none",
"text": "1.模板配置",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "79e7218df384d7e5ed3611df2025b494"
}, {
"markdownContent": "2.数据集与数据标注\n",
"index": 9,
"subType": "none",
"text": "2.数据集与数据标注",
"alignment": "left",
"type": "text",
"pageNum": 0,
"uniqueId": "d43f8e2bb4138a66ecadc8890a044448"
}]
}
}
(2)文档解析(大模型版)服务与其他可视化工具的比较
应用场景支撑:相比一些仅支持特定格式或类型的可视化工具,文档解析(大模型版)广泛支持市面上几乎全部文档格式
1.包括扫描文档,适应更多样化的业务场景需求。其提供的版面分析、层级树信息等,为构建复杂应用如RAG系统提供了坚实基础。
2.业务流程接入:该服务通过异步API设计,支持灵活的集成方式,无论是URL还是本地文件上传,都能方便快捷地接入现有业务流程。异步处理机制保证了高并发场景下的系统稳定性,避免了同步处理可能带来的延迟问题。
3.性能与可扩展性:文档解析(大模型版)在处理速度上表现出色,尤其电子文档解析速度最快而文档智能解析虽速度较慢,但提供了最全面的解析结果。服务的免费额度和按量付费模式,以及24小时内可查询处理结果的机制,既满足了初期测试需求,也保障了大规模应用时的扩展性和成本控制。
3.可扩展性方面,由于其基于大模型的技术架构,随着模型的持续迭代和优化,文档解析的准确度和效率预期将持续提升,为未来更复杂的文档理解和处理需求预留了发展空间。
综上所述,文档解析(大模型版)以其全面的格式支持、灵活的接入方式、良好的性能表现以及面向未来的可扩展性,在文档处理领域展现了显著优势,特别是在与大模型应用结合的场景下,其价值尤为突出。
同产品对比:
之前有使用百度智能云的文档解析,以下是阿里云相对于百度智能云的对比:
- 大模型技术的应用:
- 阿里云:阿里云的文档解析(大模型版)采用了大模型技术,这使得它在处理复杂文档结构,如图表、公式等元素时,具有更高的解析能力和准确性。
- 百度智能云:虽然百度智能云的文档解析技术也相当先进,但在大模型技术的应用方面,阿里云可能更具优势。
- 处理速度和可扩展性:
- 阿里云:阿里云的服务支持弹性计算资源,可以根据需求快速扩展,处理大量文档时效率更高。
- 百度智能云:百度智能云的文档解析技术也很高效,但在大规模文档处理和快速扩展方面,阿里云可能表现更佳。
- 集成和定制化能力:
- 阿里云:阿里云提供灵活的API接口,更容易与用户现有的系统和服务集成,支持更高级的定制化需求。
- 百度智能云:虽然百度智能云也提供API接口,但阿里云在集成和定制化方面的灵活性可能更强。
- 行业应用广度:
- 阿里云:阿里云的文档解析服务适用于多种行业和场景,如大模型数据训练、智能问答、知识库管理等,应用范围更广。
- 百度智能云:百度智能云的文档解析技术主要聚焦于特定行业,如法律和医疗健康,虽然在这些领域表现优异,但在其他行业的应用可能不如阿里云广泛。
- 平台支持和服务稳定性:
- 阿里云:作为阿里云平台的一部分,文档解析(大模型版)服务享有阿里云强大的技术背景和稳定性保障。
- 百度智能云:百度智能云同样提供稳定的服务,但阿里云在平台支持和整体服务稳定性方面可能更具优势。
综上所述,阿里云文档解析(大模型版)在应用大模型技术、处理速度和可扩展性、集成和定制化能力、行业应用广度以及平台支持和服务稳定性等方面相对于百度智能云展现出更明显的优势。这些优势使得阿里云成为处理大规模、复杂文档解析任务的优选服务。
待改进之处:
1.成本与资源消耗:虽然按需付费模式灵活,但对于处理大量文档或频繁调用的场景,成本可能会成为考虑因素。优化成本效益比,提供更经济的批量处理方案可能是改进方向。
2.处理速度与实时性:尽管电子文档解析速度快,但复杂文档的智能解析可能较为耗时,对于需要即时反馈的应用场景,如何进一步提升处理速度是一个挑战。
针对成本敏感型客户、实时处理需求、用户友好性及定制化需求方面,仍有提升空间。