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

GCP工作流调用Document AI触发内存超限错误求助

GCP工作流调用DocumentAI触发内存超限问题排查与解决

问题描述

我用GCP工作流结合Eventarc触发器对接Cloud Storage,实现存储桶接收文档时自动调用Document AI解析。但每次解析都会触发“内存超限”错误,测试文档仅120KB,且GCP工作流响应上限为2MB。一开始以为是日志输出响应导致的问题,改成把响应存到独立存储桶后还是报错,想问是不是需要先压缩Document AI的响应再存储?

当前使用的YAML代码:

main:
  params: [event]
  steps:
    - start:
        call: sys.log
        args:
          text: ${event}
    - vars:
        assign:
          - file_name: ${event.data.name}
          - mime_type: ${event.data.contentType}
          - input_gcs_bucket: ${event.data.bucket}
    - batch_doc_process:
        call: googleapis.documentai.v1.projects.locations.processors.process
        args:
          name: ${"projects/" + sys.get_env("GOOGLE_CLOUD_PROJECT_ID") + "/locations/" + sys.get_env("LOCATION") + "/processors/" + sys.get_env("PROCESSOR_ID")}
          location: ${sys.get_env("LOCATION")}
          body:
            gcsDocument:
              gcsUri: ${"gs://" + input_gcs_bucket + "/" + file_name}
              mimeType: ${mime_type}
            skipHumanReview: true
        result: doc_process_resp
    - store_process_resp:
        call: googleapis.storage.v1.objects.insert
        args:
          bucket: ${sys.get_env("OUTPUT_GCS_BUCKET")}
          name: ${file_name}
          body: ${doc_process_resp}

问题原因与解决办法

  • 核心原因:Document AI返回的结构化响应包含文本、布局、实体等大量详细信息,体积可能远超原始文档大小——哪怕原始文档只有120KB,解析后的响应也可能突破2MB的工作流内存限制。
  • 无需提前压缩响应,更高效的方案是避免将完整响应加载到工作流内存中,改用异步处理模式让Document AI直接把结果写入目标GCS桶:
    1. 将同步调用的process接口替换为异步的batchProcess接口
    2. 在请求体中指定outputConfig.gcsDestination,让解析结果直接输出到指定存储桶
    3. 工作流只需触发异步任务,无需等待和缓存完整响应,彻底规避内存占用问题
  • 修改后的关键代码片段:
- batch_doc_process:
    call: googleapis.documentai.v1.projects.locations.processors.batchProcess
    args:
      name: ${"projects/" + sys.get_env("GOOGLE_CLOUD_PROJECT_ID") + "/locations/" + sys.get_env("LOCATION") + "/processors/" + sys.get_env("PROCESSOR_ID")}
      location: ${sys.get_env("LOCATION")}
      body:
        inputDocuments:
          gcsDocuments:
            documents:
              - gcsUri: ${"gs://" + input_gcs_bucket + "/" + file_name}
                mimeType: ${mime_type}
        outputConfig:
          gcsDestination:
            uri: ${"gs://" + sys.get_env("OUTPUT_GCS_BUCKET") + "/"}
        skipHumanReview: true
  • 补充优化:如果必须使用同步处理,可以在工作流中仅提取响应中需要的字段(而非存储完整响应),减少内存占用;也可检查并启用工作流的内存优化配置。

内容的提问来源于stack exchange,提问作者Lofton Gentry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:37:21