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

Google Cloud Document AI批量处理报错及UI功能缺失求助

Google Cloud Document AI批量处理报错及UI功能缺失问题

问题描述

1. Python脚本执行报错

在Cloud Shell运行Python脚本时,持续触发ValueError,报错信息如下:

Traceback (most recent call last):
File "/home/akihiro/process_document.py", line 101, in <module>
batch_process_document(
File "/home/akihiro/process_document.py", line 48, in batch_process_document
gcs_documents=documentai.GcsDocuments(
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/proto/message.py", line 724, in init
raise ValueError(
ValueError: Unknown field for GcsDocuments: gcs_uri

错误提示gcs_uri字段不被documentai.GcsDocuments识别,但根据API文档及客户端库用法,该字段应为合法字段。

2. 控制台UI功能缺失

Document AI处理器控制台(「我的处理器」或处理器详情页)仅显示「Test」按钮,缺少「Start Batch Processing」选项,无法通过UI发起批量处理。

项目及资源信息

  • Google Cloud项目ID:docai-test-XXXXXX-new(项目编号:619893412057)
  • Document AI处理器类型:Document OCR
  • 处理器名称:document-ocr-XXXXXX-2025
  • 处理器ID:bf52b8e242a187ff
  • 处理器区域:us
  • 输入GCS存储桶名称:docai-new-input-XXXXXX-2025-final
  • 输入文件URI:gs://docai-new-input-XXXXXX-2025-final/ZZZ07_600dpi.pdf(约75MB的PDF文件)

使用的Python脚本代码

import os
from urllib.parse import urlparse

# Cloud Shell 環境での最新かつ確実なインポート方法
from google.cloud import documentai
from google.api_core.client_options import ClientOptions
from google.cloud import storage 

# --- あなたの設定情報(ここだけご確認ください) ---
# 【確認1】あなたのGoogle CloudプロジェクトIDを正確に入力してください。
# 例: "your-project-id-123456"
PROJECT_ID = "docai-test-XXXXXX-new" # ★★★ここをあなたの新しいプロジェクトIDに更新してください!★★★

# 【確認2】Document AIプロセッサのロケーションを正確に入力してください。
# プロセッサ作成時に選択したロケーションです (通常は us)。
LOCATION = "us"  

# 【確認3】Document AIプロセッサIDを正確に入力してください。
# 「マイプロセッサ」画面で確認できるIDです。
PROCESSOR_ID = "bf52b8e242a187ff" # ★★★ここをあなたの新しいプロジェクトIDに更新してください!★★★

# 【確認4】処理したいPDFファイルがGCS上のどこにあるか、そのURIを正確に入力してください。
# 例: "gs://docai-new-input-XXXXXX-2025-final/ZZZ07_600dpi.pdf"
# このパスは、あなたがGCSにアップロードしたあなたの75MBのPDFファイルの場所です。
GCS_INPUT_FILE_URI = "gs://docai-new-input-XXXXXX-2025-final/ZZZ07_600dpi.pdf" # ★★★ここをあなたが指定したGCS URIに更新してください!★★★

# 【確認5】GCSの出力フォルダ名を指定してください。
# これは結果が保存されるバケット内のフォルダ名です。末尾に / を忘れずにつけてください。
# 例: "processed_results/"
GCS_OUTPUT_PREFIX = "processed_results/" 

# --- メインの非同期処理関数 ---
def batch_process_document(project_id, location, processor_id, gcs_input_uri, gcs_output_prefix):
    opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")
    
    # Document AI クライアントの初期化 (documentai モジュールから直接取得)
    client = documentai.DocumentProcessorServiceClient(client_options=opts)

    processor_name = client.processor_path(project_id, location, processor_id)

    # GCS入力URIからバケット名とオブジェクト名を抽出
    parsed_uri = urlparse(gcs_input_uri)
    gcs_input_bucket = parsed_uri.netloc # バケット名

    # 1. BatchProcessDocumentsRequest の作成
    # Document AI クライアントの型定義も documentai モジュールから直接アクセス
    input_config = documentai.BatchDocumentsInputConfig(
        gcs_documents=documentai.GcsDocuments(
            gcs_uri=gcs_input_uri 
        )
    )
    
    # 出力パスのGCSバケット名を決定 (入力バケットと同じとする)
    gcs_output_bucket_uri = f"gs://{gcs_input_bucket}/{gcs_output_prefix}"

    output_config = documentai.DocumentOutputConfig(
        gcs_output_config=documentai.DocumentOutputConfig.GcsOutputConfig(
            gcs_uri=gcs_output_bucket_uri 
        )
    )

    request = documentai.BatchProcessRequest(
        name=processor_name,
        input_documents=input_config,
        document_output_config=output_config,
    )

    print(f"Document AI で非同期処理を開始します...")
    try:
        operation = client.batch_process_documents(request=request)

        print(f"処理が開始されました。Operation ID: {operation.operation.name}")
        print("完了を待機中... (これには時間がかかる場合があります)")

        operation.result() 
        print("Document AI Batch Processing が完了しました!")
        print(f"結果は GCS バケット '{gcs_input_bucket}' の '{gcs_output_prefix}' 以下に保存されています。")

        # GCSから結果ファイルを列挙し、存在を確認する簡単な例
        storage_client = storage.Client() # Cloud Shellでは認証済み
        blobs_in_output = storage_client.list_blobs(gcs_input_bucket, prefix=gcs_output_prefix)
        found_result_files = False
        print("\nGCSの出力パスで結果ファイルを探しています...")
        for blob_item in blobs_in_output:
            if blob_item.name.endswith(".json"): # JSON形式の結果ファイルを想定
                print(f"-> 結果ファイルが見つかりました: gs://{gcs_input_bucket}/{blob_item.name}")
                found_result_files = True
        if not found_result_files:
            print("注意: 指定されたGCS出力パスに結果ファイルが見つかりませんでした。Cloud LoggingとGCSを確認してください。")

    except Exception as e:
        print(f"Document AI Batch Processing 中にエラーが発生しました: {e}")
        print("Cloud Logging で詳細なエラーログを確認してください。")
        print("特に、Document AI プロセッサが Cloud Storage バケットへのアクセス権を持っているか確認してください。")

if __name__ == "__main__":
    # Cloud Shell ではGCSバケットの自動作成やローカルからのアップロードは行いません
    # GCS_INPUT_FILE_URI で指定されたファイルが既にGCSに存在することを前提とします。

    # Batch Process を実行
    batch_process_document(
        PROJECT_ID,
        LOCATION,
        PROCESSOR_ID,
        GCS_INPUT_FILE_URI, 
        GCS_OUTPUT_PREFIX
    )

预期与实际结果

预期:脚本成功启动Document AI批量处理,结果存入指定GCS输出路径。
实际:持续触发上述ValueError,且无法通过控制台UI作为替代方案。

已尝试的排查步骤

  • 将脚本中的gcs_uris=[gcs_input_uri]改为gcs_uri=gcs_input_uri以匹配最新API规范;
  • 确认PROJECT_ID、PROCESSOR_ID、GCS_INPUT_FILE_URI已正确配置为新项目资源;
  • 删除Cloud Shell中的旧脚本文件后重新上传最新版本;
  • 创建全新Google Cloud项目,完成所有配置(启用API、创建新Document OCR处理器、新GCS存储桶、上传PDF)后使用新Cloud Shell会话;
  • 在新项目中启用Document AI API;
  • 将处理器类型从「Form Parser」切换为「Document OCR」;
  • 在Cloud Shell执行pip install google-cloud-documentai --upgrade升级客户端库。

怀疑原因

当前Cloud Shell运行Python 3.12,怀疑是Cloud Shell环境缓存或库关联问题,或是google-cloud-documentai客户端库与Python 3.12的兼容性问题;控制台UI的限制可能表明处理器状态或配置存在深层问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:35:54