Skip to content

[A02] /admin/analyze with 1000-column CSV consistently fails on Bedrock converse read timeout #2

@ogawsh

Description

@ogawsh

[A02] /admin/analyze が 1000 カラムの CSV で Bedrock converse の read timeout に必ず失敗する

再現条件

  • 1 CSV に 1000 カラム前後(実測 column_0000..column_0999、ヘッダー 11,999 バイト、1 行あたり ~17 KB)
  • Admin UI で該当プレフィックスを指定して analyze 実行

観測された挙動

  • /admin/analyze 呼び出しから約 5 分 7 秒後、Admin UI に以下のエラーが表示される:
    テーブル定義を生成できませんでした — testcase/A02-construction-1000-cols/wide_table.csv:
    Read timeout on endpoint URL: "https://bedrock-runtime.ap-northeast-1.amazonaws.com/model/<model-id>/converse"
    
  • 同じ操作を 2 回実施して再現(5:07, 5:08)
  • Step Functions execution ARN は生成されない(analyze 段階で失敗しているため apply に進まない)
  • AdminBackend Lambda の CloudWatch Logs で analyze: [1/1] group(1 files, rep=testcase/A02-construction-1000-cols/wide_table.csv) を AI 分析中... → WARNING analyze: ... AI 分析失敗: Read timeout on endpoint URL ...

原因(推定)

1. bedrock-runtime クライアントに read_timeout / リトライ設定が無い

lambda/adminwebbackend/app.py L232:

bedrock_runtime = boto3.client("bedrock-runtime")
  • botocore.config.Config を渡していないため、bedrock-runtime の同期 converse に対して read timeout やリトライを明示コントロールできていない
  • 一方で S3 クライアントは BotoConfig(signature_version="v4", ...) を渡している(同じファイル L33)ため、設計上忘れられたと思われる

2. カラム数が多い CSV で入出力トークンが極端に肥大化する

_analyze_single_csv_with_bedrock が送るプロンプトには以下すべてが埋め込まれる:

  • ヘッダー 1000 要素の Python リストの文字列表現(~12 KB)
  • 先頭 20 行のサンプル(1 行 ~17 KB × 20 = ~340 KB)
  • 中程 20 行のサンプル(~340 KB)
  • 末尾 20 行のサンプル(~340 KB)

合計 ~1 MB 級のプロンプトを非ストリーミングの converse に投入している。

加えて、ツールスキーマ _TABLE_TOOL_SCHEMAcolumns: [{name, type, description}, ...]descriptionrequired にしているため、Claude は全 1000 カラムに日本語説明を返す必要があるinferenceConfig={"maxTokens": 8192} では到底足りないし、8192 トークン出し切ること自体に数分かかる。

3. 同期 converse + デフォルト SDK 設定では長時間応答に耐えられない

  • Bedrock の同期 converse は 60 秒を超える応答に対して信頼性が低い(公式には converse_stream が推奨)
  • 1MB プロンプト + 1000 カラム分の構造化出力というワークロードは converse_stream でないと現実的に処理できない

再現手順

  1. S3 に testcase/A02-construction-1000-cols/wide_table.csv を配置(ヘッダー 1000 カラム、10,000 行、~185 MB)
  2. Admin UI から該当プレフィックスを指定して Agent を作成
  3. analyze を実行
  4. 約 5 分後に Read timeout on endpoint URL: ".../converse" が表示されることを観測

期待される挙動

  • カラム数が多い CSV でもテーブル定義を生成できる、または明示的に「カラム数が多すぎて分析できない」「サンプルを減らして再試行」等のガイド付きエラーを返す
  • 具体的な改善候補:
    • bedrock-runtime クライアントに Config(read_timeout=600, retries={...}) を設定
    • converse ではなく converse_stream を使い、チャンクを受け取りながらタイムアウトを延ばす
    • カラム数が多い場合は サンプル行数を 20 行から自動的に縮小する / サンプルを送らず「先頭 1 行のみ + 各列の値のハッシュ統計」に置き換える
    • _TABLE_TOOL_SCHEMAcolumns[].description を required から外し、Claude が省略できるようにする
    • inferenceConfig.maxTokens を動的に調整(カラム数 × 50 程度を最低限確保)

参考情報

  • 対象スタック: arn:aws:cloudformation:ap-northeast-1:411521242467:stack/devDwhAgentStack/6619ffe0-3f8b-11f1-a3dc-068ad41190bd
  • AdminBackend Lambda: devDwhAgentStack-AdminBackendHandler45CB5D31-3hja9Gbucn5k(Timeout 900 秒 / Memory 2048 MB / コンテナ)
  • モデル: global.anthropic.claude-sonnet-4-6
  • 関連ファイル: lambda/adminwebbackend/app.py L232, L461 以降 (_analyze_single_csv_with_bedrock)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions