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

使用Cloud Document AI API提取发票数据遇无效架构错误求助

解决Cloud Document AI API的"No valid schema provided"及Windows缓存权限错误

一、解决"No valid schema provided for processing"错误

  • 修复语法错误:
    代码中location变量未加引号,会被当作未定义变量,导致处理器路径无效。修改为:

    const location = 'us'; // 或 'eu',根据你的处理器区域
    

    同时确保projectId和processorId替换为正确的字符串值:

    const projectId = '你的项目ID';
    const processorId = '你的处理器ID';
    
  • 确认处理器类型:
    确保在Cloud Console创建的是预训练发票处理器(Invoice Processor),而非通用文档处理器或自定义处理器。预训练发票处理器无需手动传入schema参数,自定义处理器才需要配置对应schema。

  • 验证请求参数:
    确保rawDocument的mimeType与文件实际类型完全匹配:

    • PNG图片:"image/png"
    • PDF文档:"application/pdf"
    • JPG图片:"image/jpeg"

二、解决Windows缓存权限错误

这个错误是谷歌认证库在Windows上创建缓存目录时权限不足导致的,可通过以下方法解决:

  • 以管理员身份运行终端:打开命令提示符或PowerShell时选择"以管理员身份运行",再执行Node.js代码。

  • 禁用认证缓存:
    在代码开头添加环境变量设置,禁用谷歌认证库的缓存:

    process.env.GOOGLE_AUTH_DISABLE_CACHE = '1';
    
    const { DocumentProcessorServiceClient } = require("@google-cloud/documentai").v1;
    // 后续代码...
    

    或者在运行代码前,在终端执行:

    set GOOGLE_AUTH_DISABLE_CACHE=1
    
  • 指定自定义缓存路径:
    手动设置一个你有读写权限的缓存目录,比如:

    const { DocumentProcessorServiceClient } = require("@google-cloud/documentai").v1;
    
    const client = new DocumentProcessorServiceClient({
      auth: {
        cachePath: 'C:/Users/你的用户名/.cache/google-auth'
      }
    });
    

完整修正后的代码示例

process.env.GOOGLE_AUTH_DISABLE_CACHE = '1';

const projectId = '你的项目ID';
const location = 'us'; // 或 'eu'
const processorId = '你的处理器ID';
const filePath = "./testImage.png";

const { DocumentProcessorServiceClient } = require("@google-cloud/documentai").v1;

const client = new DocumentProcessorServiceClient();

async function quickstart() {
  try {
    const name = `projects/${projectId}/locations/${location}/processors/${processorId}`;

    const fs = require("fs").promises;
    const imageFile = await fs.readFile(filePath);
    const encodedImage = Buffer.from(imageFile).toString("base64");

    const request = {
      name,
      rawDocument: {
        content: encodedImage,
        mimeType: "image/png",
      },
    };

    const [result] = await client.processDocument(request);
    const { document } = result;
    const { text } = document;

    console.log("提取的文本内容:", text);

    // 若使用发票处理器,可提取结构化实体(如发票号、金额等)
    // document.entities.forEach(entity => {
    //   console.log(`${entity.type}: ${entity.mentionText}`);
    // });
  } catch (e) {
    console.error("处理失败:", e);
  }
}

quickstart();

内容的提问来源于stack exchange,提问作者Maurizio Liguori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:17:12