You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用prebuilt-invoice模型调用Form Recognizer API无法获取发票行项目

问题描述

在Form Recognizer Studio中提交发票时,系统可正常识别并展示发票行项目;但使用该平台生成的代码提交同一张发票,返回的JSON数据中缺少行项目,其余发票数据均可正常获取。请问出现该问题的可能原因是什么?

项目配置

<TargetFramework>net6.0</TargetFramework>
<PackageReference Include="Azure.AI.FormRecognizer" Version="4.0.0" />

处理发票的代码

public async Task<IActionResult> ProcessInvoice(IFormFile pdfInvoice) {
    try {
        string endpoint = "https://xxx.cognitiveservices.azure.com/";
        string key = "xxx";
        AzureKeyCredential credential = new AzureKeyCredential(key);
        DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
        using var stream = pdfInvoice.OpenReadStream();
        AnalyzeDocumentOperation operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-invoice", stream);
        AnalyzeResult result = operation.Value;

        return Ok(JsonConvert.SerializeObject(result));
    } catch (Exception ex) {
        return BadRequest(ex.Message);
    }
}
可能的原因分析
  • SDK版本过低:你使用的Azure.AI.FormRecognizer 4.0.0版本较旧,Form Recognizer服务后续对行项目的识别逻辑有更新,旧SDK可能无法正确解析服务返回的行项目字段。建议升级到最新稳定版(比如4.1.x或更高),新版本会同步服务端的字段映射和解析逻辑。
  • 序列化遗漏字段:用JsonConvert.SerializeObject直接序列化AnalyzeResult时,可能因为部分行项目相关属性的嵌套结构、访问修饰符问题,被Json.NET忽略。可以尝试手动提取result.Documents[0].Tables(发票行项目通常被识别为表格结构)的数据后再序列化,而非直接序列化整个AnalyzeResult对象。
  • 请求参数不一致:Form Recognizer Studio提交请求时可能默认启用了额外参数(比如开启文本细节返回、指定识别模式),但你生成的代码里没包含这些参数。可以对比Studio的请求和代码请求的参数,确保一致性,比如是否添加了includeTextDetails = true这类影响返回数据完整性的参数。
  • 流处理位置错误:读取IFormFile流时,若流的位置不在起始处,可能导致发票部分内容未被正确发送到服务端。可以在打开流后添加stream.Position = 0;重置流位置,再调用识别接口。

内容的提问来源于stack exchange,提问作者Garland Duvall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:20:28