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
相关产品推荐
相关产品推荐

