Azure AI Document Intelligence 的预建发票模型 prebuilt-invoice 能从发票 PDF 或图像提取字段和行项目,返回结构化结果及字段置信度。下面用 Python SDK 对 Microsoft 提供的公开样例发票发起分析,读取供应商、发票号和总额;真实文件要先确认组织允许上传,并在进入付款或记账流程前由人逐项复核。
准备资源和安全凭据
- 在 Azure 门户创建 Document Intelligence 资源,记录该资源的 endpoint 和 key。使用有权访问该资源的订阅和区域。
- 在本地虚拟环境安装官方 Python SDK:
pip install azure-ai-documentintelligence==1.0.2。此版本与本文核对的 Azure API v4.0 文档相符;开发前仍应查看 Microsoft quickstart 当前版本。 - 把 endpoint 和 key 设置为环境变量
AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT与AZURE_DOCUMENT_INTELLIGENCE_KEY。不要把密钥硬编码进脚本、提交到 Git 或贴进共享工单。
用预建模型分析公开样例发票
以下最小示例使用 Microsoft Azure Samples 的公开测试 PDF,因此不需要把自己的账单上传到公共网址。真实文件可按官方 SDK 文档选择受控的文件流输入方式,并确认数据处理和存储要求。

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest
endpoint = os.environ["AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT"]
key = os.environ["AZURE_DOCUMENT_INTELLIGENCE_KEY"]
sample_url = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
client = DocumentIntelligenceClient(endpoint, AzureKeyCredential(key))
poller = client.begin_analyze_document(
"prebuilt-invoice", AnalyzeDocumentRequest(url_source=sample_url)
)
result = poller.result() # SDK 等待长时间运行的分析任务完成并取回结果
for invoice in result.documents or []:
for name in ("VendorName", "InvoiceId", "InvoiceDate", "InvoiceTotal", "SubTotal", "TotalTax"):
field = invoice.fields.get(name)
if field is None:
print(name, "未识别")
continue
if field.value_currency is not None:
typed_value = f"{field.value_currency.amount} {field.value_currency.currency_code}"
elif field.value_date is not None:
typed_value = field.value_date.isoformat()
else:
typed_value = field.content
print(name, "content=", field.content, "typed_value=", typed_value,
"confidence=", field.confidence)
在 azure-ai-documentintelligence==1.0.2 中,invoice.fields 的值是 DocumentField 模型;应读 field.content、field.confidence 等属性,而不是假定字段本身是字典。日期类型用 value_date.isoformat() 变成可序列化字符串;金额类型从 value_currency.amount 与 currency_code 读取数值和币种,避免只打印格式化文字后丢失类型。
begin_analyze_document 返回长时间运行任务的 poller,poller.result() 会等待任务完成并读取结果,不要在结果尚未完成时把请求当成成功。SDK 管理分析操作的轮询;使用 REST 而非 SDK 时,应按该 API 的响应头保存操作位置,并按官方接口要求轮询直到终态,再读取结果;不要猜测或拼接操作 ID。
先读结果,再对照原件复核
逐张检查 result.documents 中是否有发票对象;每个字段一般包含识别内容和置信度。模型字段可见性因版式而异,空缺值应保留为空并转人工处理。官方 JSON 输出也包含页级结果、表格单元格与文本定位信息,可用于回查原文位置。
| 字段 | 人工检查 |
|---|---|
| VendorName、InvoiceId | 与原件抬头、发票号码逐字对照,留心 O/0、I/1 等近似字符。 |
| InvoiceDate、币种 | 检查日期格式和币种符号,避免把月日顺序或币种识错。 |
| InvoiceTotal、SubTotal、TotalTax | 与原件汇总区核对,并按该发票的税额、折扣、运费及舍入规则重算。 |
| 低置信字段或缺失字段 | 列为必审项;即使置信度较高,也不能代替财务审批或原件核验。 |
可以在自己的审批流程中设置人工复核阈值,但阈值应以代表性样本验证后制定,不能把某个任意百分比当成微软保证的准确率。金额不平、字段缺失、币种不明或原件模糊时,暂停自动入账。
Studio 快速试跑与适用边界
不写代码时,在 Document Intelligence Studio 打开预建模型体验,选择 Invoice 模型、上传获准处理的测试文件并启动分析;完成后查看关键值、行项目及高亮位置。公开门户入口和账号权限可能变化,若无法访问则先检查订阅、区域和资源权限,再用上述 SDK 快速入门。
微软说明该模型使用 OCR 处理数字 PDF、扫描件和拍摄图像,但图像质量、版式和遮挡会影响字段结果。真实发票包含客户、供应商和付款资料,上传前应确认数据分类、服务地区、组织授权和保留规则。本文的公开样例演示不是本站租户实测;不得将模型输出直接作为付款指令。
参考:Microsoft Learn:Invoice data extraction、Microsoft Learn:Document Intelligence SDK/REST quickstart、Azure SDK for Python 1.0.2:DocumentField 类型定义(查阅日期:2026-10-01)。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32370.html