Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DTD_BQによる生成AIのバッチ処理とデータエンジニアリング

 DTD_BQによる生成AIのバッチ処理とデータエンジニアリング

Avatar for BrainPad

BrainPad

July 31, 2025
Tweet

More Decks by BrainPad

Other Decks in Technology

Transcript

  1. 第三回 DEU TECH DRIVE:Crossing ML, Data & App BigQuery による生成AIのバッチ処理(Batch

    Prediction)と データエンジニアリング 2025年 7月31日
  2. ©BrainPad Inc. 2 プロダクトユニット フロンティア開発 柴内 一宏 2019年にブレインパッドに入社。 CDPツールの Rtoaster

    insight+の開発や埋込型レコメンドエンジンの Rtoaster action+ のデータ基盤開発を経て、 LLMを用いた商品検索サービス Rtoaster GenAI の立ち上げを行った。現在は新規プロダクト企画・研究開発を行う。 業務では Google Cloud 、特に BigQuery を活用している。 自己紹介
  3. ©BrainPad Inc. 3 Rtoaster GenAI – BrainPad の生成AIプロダクト ※本サービスに用いられている技術は特許出願中です 「Rtoaster

    GenAI」は、感覚的な言葉による検索 を可能にする機能を提供するもので、Webサイト内 の検索体験を、より自由かつパーソナライズされたも のへと進化させます。 ユーザーは、“うまく単語を使用しないと希望どおりの 検索結果が表示されない”といった従来のキーワード 検索から解放され、より自然な言葉やフレーズで情 報を検索できるようになります。
  4. ©BrainPad Inc. 4 1. 生成AIのバッチ処理について 2. Batch Prediction の概要 3.

    Batch Prediction の使い方 4. Batch Prediction の動かし方〜Cloud Workflow との統合 5. ケーススタディ:ベクトル埋め込みによるドキュメント検索システムの構築 6. まとめ 目次
  5. ©BrainPad Inc. 5 この発表は Google Cloud の機能の説明のため • 生成AI →

    Gemini (2.0, 2.5) • DWH → BigQuery を前提とします。 また、本資料の情報は2025年7月中旬時点のものです。 この発表のコンテキスト
  6. 7 ©BrainPad Inc. 生成AIとバッチ処理のユースケース 生成AIといえば「チャットUI」や「AIエージェント」といったリアルタイム・インタラクション処理が注目される傾向にあるが、大規模 データに対する活用も十分に領域が広い。 データエンリッチメントとコンテンツ生成 • 商品カタログの拡充: ECサイトの商品マスタにある数百万点の商品に対し、説明文やキャッチコピーを一括で生成・更新する

    。 • 非構造化データの構造化: 契約書PDFや顧客からの問い合わせメールなど、非構造化テキストの山から、契約期間、製品名、 要件といった重要情報を抽出し、分析可能な形式に変換する 。 • 顧客レビュー分析: 投稿された大量のレビューをバッチ処理し、感情分析、トピック分類、要約を行い、製品改善やマーケティング 施策に活かす。 • パーソナライズドコンテンツ生成: 顧客セグメントごとに、パーソナライズされたキャンペーンメールの文面やレコメンド理由をバッチで 大量に生成する。 データ変換・準備 • Embeddingの一括生成: RAGシステムの前処理として、ドキュメントや商品情報全体のEmbeddingベクトルを一括で計算す る。 • データ品質の自動化: データ品質ルールに基づき、不整合なデータの特定やクレンジング処理を大規模データセットに対して定期 的に実行する 。
  7. 8 ©BrainPad Inc. 生成AIとバッチ処理の課題 大規模なデータセットに通常の生成AIのAPIを利用しようとすると、コスト、パフォーマンス、データ移動の3つの課題に直面する • パフォーマンスの問題 • 並列度が高いリクエストをすると、429 Error(レートリミット超過)を起こしがち

    • Gemini の場合カタログスペックに到達しなくてもエラーになる場合がある。 • 流量制御、リトライ、指数的バックオフの実装… など面倒な実装が必要になる。 • コストの問題 • Gemini Flash はかなり安いとはいえ、データが大規模になってきた場コストが増大する。 • → 特にマルチモーダルな場合に顕著である。 • APIを呼び出すアプリケーション自体のインフラコスト(Cloud Run, Compute Engine, Dataflow, etc…) も発生する。 • データロケーションの問題 • 「計算をデータに近づけ、データ移動を最小化する」というデータエンジニアリングの原則に逆行する。
  8. 10 ©BrainPad Inc. Batch Prediction for Gemini Gemini には(他のVertex AIと同様に)バッチ予測機能がある。コストが半額という大きなアドバンテージが魅力だが、それ以

    外にレート制限などの複雑な制御を Google Cloud にオフロードできる、データエンジニアにとって非常に有利な機能となって いる。 • コスト:API利用料が標準のオンラインリクエストと比較して50%割引 • 利用できるモデル • Gemini 2.5 Pro/Flash/Flash-Lite • Gemini 2.0 Flash/Flash-Lite • 入出力:Cloud Storage / BigQuery • 制約事項 • 混雑時には処理に時間がかかり、終了時間が保証されない。 • 実行開始から24時間以内経つと終了する。 • 実行リージョンとモデルのリージョンが一致する必要がある(Tokyoリージョン asia-northeast1 未対応) • 推奨事項 • 最低でもバッチあたり25,000リクエストが推奨されているが、それより大きく下回っても動く。
  9. 11 ©BrainPad Inc. 補足: Batch Mode 7月初頭に Batch Prediction とは違うAPIで一括処理のためのエンドポイントである「Batch

    Mode」がリリースされた。ファイ ルを経由しないリクエストが可能であるのが特徴。 from google import genai from google.genai import types client = genai.Client() inline_requests = [ {'contents': [{'parts': [{'text': 'Tell me a one-sentence joke.'}], 'role': 'user'}]}, {'contents': [{'parts': [{'text': 'Why is the sky blue?'}], 'role': 'user'}]} ] inline_batch_job = client.batches.create( model="models/gemini-2.5-flash", src=inline_requests, config={ 'display_name': "inlined-requests-job-1", }, ) Batch Prediction との共通点 • 課金額が半額になる。 • 非同期API • レイテンシが大きい(数分程度) Batch Prediction との相違点 • 入出力がAPIで完結するので、外部リ ソース(ファイルやテーブル)の用意をす る必要がない。 • Batch Modeの管理画面はない。 • Vertex AI経由での利用ができない。
  10. 12 ©BrainPad Inc. Batch Prediction for Gemini vs 通常のGemini API

    特徴 Gemini API Batch Prediction Batch Mode 応答性 低レイテンシ 高レイテンシ (ジョブのプロビジョニングも必要) 中〜高レイテンシ コスト 標準価格 50%割引 50%割引 スループット 低〜中(レート制限あり ) 高 高 パイプライン アプリケーションへの組み 込み データ処理パイプラインへの組み込み アプリケーションへの組み 込み 主な用途 チャットボット リアルタイムエージェント データ拡充、レポート生成、バッチ分析 データ拡充、レポート生 成、バッチ分析
  11. 14 ©BrainPad Inc. Batch Prediction for Gemini 入出力として Cloud Storage

    (JSONL) あるいは BigQuery テーブルが使える。 今回は BigQuery テーブルを中心に解説する。 BigQuery Cloud Storage フォーマット テーブル JSON with NEWLINES単一ファイル 対応データ形式 配列・構造体・範囲・datetime・緯 度経度以外の BigQuery のデータ型 JSON(数値・文字列) 指定形式 bq://project_id.dataset.table gs://bucketname/path/to/file.jsonl 備考 テーブルのリージョンと処理リージョンを 合わせる必要がある
  12. 15 ©BrainPad Inc. 入力のフォーマット request カラムに Gemini のリクエストオブジェクトをJSON形式で格納したものを用意する。このとき、他のカラム(文字列・ 数値型etc)についても出力時に含まれるようになるので、識別できるIDなどを格納しておくと良い。 •

    必須列: request という名前の列を1つ用意する。 • データ型: request 列の型は JSON とする • 内容: Gemini APIの GenerateContentRequest オブジェクトを JSON文字列として格納する。 • 追加列: product_id や user_id といった、推論結 果と紐付けたい任意の列をテーブルに含めることが できる。これらの列は、処理には使われないが、出 力テーブルにそのままコピーされるため、後続のJOIN 処理が不要になる。 GenerateContentRequest contents[]: object (Content) モデルとの現在の会話内容 tools[]: object (Tool) モデルが使用できるツールのリスト toolConfig: object (ToolConfig) ツールの設定オプション safetySettings[]: object (SafetySetting) 安全でないコンテンツのブロック設定 systemInstruction: object (Content) システムインストラクション generationConfig: object (GenerationConfig) モデルの生成と出力に関する設定。 cachedContent: string 予測の文脈として使用するキャッシュ。
  13. 16 ©BrainPad Inc. BigQuery でのリクエストデータ構築 BigQuery SQL を使い、JSON関数でプロンプトを組み立てるだけで、 Batch Prediction

    の入力テーブルを作成できる。 SELECT code, JSON_OBJECT( 'contents', JSON_ARRAY( JSON_OBJECT( 'role', 'user', 'parts', JSON_ARRAY( JSON_OBJECT('text', request_text)) ) ), 'system_instruction', JSON_OBJECT('parts', JSON_ARRAY(JSON_OBJECT('text', 'system instruction…'))) ) AS request FROM `DATASET.item` SELECT code, JSON ''' { "contents": [ {"role": "user", "parts": [{"text": "request"}]} ], "system_instruction": {"parts": [ {"text": "system instruction"} ]} } ''' AS request JSON 関数による構築 JSON リテラルによる構築
  14. 17 ©BrainPad Inc. 外部ファイルを入力として利用する 画像や動画などのマルチモーダルな入力を扱う場合は、Cloud Storage あるいは公開Web(HTTP)上のURLを指定する 。 // GCS上のファイル指定

    {"contents": [{"role": "user", "parts": [{"text": "この画像について説明してください。"}, {"fileData": {"mimeType": "image/jpeg", "fileUri": "gs://my-bucket/image1.jpg"}}]}]} {"contents": [{"role": "user", "parts": [{"text": "この動画を要約してください。"}, {"fileData": {"mimeType": "video/mp4", "fileUri": "gs://my-bucket/movie1.mp4"}}]}]} // Web上のファイル指定 {"contents": [{"role": "user", "parts": [{"text": "この画像について説明してください。"}, {"fileData": {"mimeType": "image/jpeg", "fileUri": "https://domain.name/image1.jpg"}}]}]} {"contents": [{"role": "user", "parts": [{"text": "この動画を要約してください。"}, {"fileData": {"mimeType": "video/mp4", "fileUri": "https://domain.name/movie1.mp4"}}]}]} 対応ファイルタイプ (Pro 2.5) • 画像 PNG, JPEG, WebP • 文章 PDF, プレーンテキスト • 音声 AAC, FLAC, MP3, M4A, MPEG Audio, MPGA, MP4 Audio, Opus, PCM, WAV, WebM Audio • 映像 FLV, QuickTime, MPEG Video, MP4, WebM Video, WMV, 3GPP
  15. 20 ©BrainPad Inc. 出力のフォーマット BigQuery に出力すると、入力テーブルの全列(requestも含む)に加えて、responseというJSONが出力される。これは REST API と同じオブジェクトとなる。 {"candidates":

    [ { "avgLogprobs": -0.33088394018788686, "content": { "parts": [ {"text": "この画像は………………"} ], "role": "model" }, "finishReason": "STOP" } ], "createTime": "2025-07-14T01:10:46.452255Z", "modelVersion": "gemini-2.0-flash-lite-001", "responseId": "XXX", "usageMetadata": { "candidatesTokenCount": 313, … その他メタデータ … } } JSON_VALUE( response.candidates[0].content.parts[0].text ) AS content BigQuery のSQLでは 中身はJSONセレクタで抽出できる request
  16. 21 ©BrainPad Inc. 出力のフォーマット(カラム) BigQuery に出力すると、responseの他にも状態や実行時間も出力される。個々のリクエストについてエラーを個々に確認 できるので便利。 カラム名 型 説明

    status STRING エラー内容(文字列) 成功の場合は空 例) Bad Request: {"error": {"code": 400, "message": "Invalid JSON payload received. Unknown name "fileUri" at 'contents[0].parts[1]': Cannot find field. Invalid JSON payload received. Unknown name "mimeType" at 'contents[... processed_time TIMESTAMP 処理した時刻 request JSON リクエストオブジェクト response JSON レスポンスオブジェクト (前頁) 他のカラム 入力時に入っていたカラム
  17. 23 ©BrainPad Inc. Cloud Workflowについて Cloud Workflows は、サーバーレスのワークフローエンジン。リトライやエラー処理を含む堅牢なパイプラインをYAMLで簡単に 記述できる。 AWS

    の StepFunction に機能が近い。 • サーバーレス: インフラのプロビジョニングや管理が不要。 • コスト: 時間課金ではなく呼び出し課金なので、長時間で非同期のバ ッチ実行に最適。コストも豊富な無料枠があるので低く抑えられる。 • ステートフル: 長時間実行されるジョブの完了を自動で待機し、途中で 失敗しても状態を保持するため、信頼性の高いパイプラインを構築で きる。 • コネクタ: BigQuery や Batch Prediction など、 Google Cloud の 各種サービスを呼び出すためのコネクタが用意されており、簡単に連携 できる。 • 宣言的ワークフロー: 分岐や繰り返し、変数や例外処理、リトライなど がYAMLの構文で書ける。 main: params: [input] steps: - checkSearchTermInInput: switch: - condition: '${"searchTerm" in input}' assign: - searchTerm: '${input.searchTerm}' next: readWikipedia - getLocation: call: sys.get_env args: name: GOOGLE_CLOUD_LOCATION result: location - setFromCallResult: assign: - searchTerm: '${text.split(location, "-")[0]}' - readWikipedia: call: http.get args: url: 'https://en.wikipedia.org/w/api.php' query: action: opensearch search: '${searchTerm}' result: wikiResult - returnOutput: return: '${wikiResult.body[1]}' コード例
  18. 24 ©BrainPad Inc. Cloud Workflow から BigQuery の呼び出し パイプラインの前処理として、googleapis.bigquery.v2.jobs.insert コネクタを使い、入力テーブルを作成するSQLを直接実

    行できる。ただ、制限があるのでクエリの内容(SQL)は Stored Procedure にした方が良い。 - create_input_table: call: googleapis.bigquery.v2.jobs.insert args: projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} body: configuration: query: query: | CREATE OR REPLACE TABLE my_dataset.table AS SELECT ... useLegacySql: false result: createTableResult 注意 クエリの量が多くなり複雑性が増すと、制限により ワークフローが実行できなくなる。 (数十行〜数百行のクエリで実行できなくなる) ストアドプロシージャの機能を使って、Workflow内 のSQLは少な目に抑えるのが吉。 ex) query: "CALL `my_dataset.create_table`();"
  19. 25 ©BrainPad Inc. Cloud Workflow から Batch Prediction の呼び出し Workflow

    には Batch Prediction から 呼び出しができる batchPredictionJobs.create コネクタがある。polling_policy を組み合わせることで、非同期ジョブの起動から完了待ちまでをワンステップで実現できる。 - run_batch_embedding_prediction: call: googleapis.aiplatform.v1beta1.projects.locations.batchPredictionJobs.create args: parent: ${"projects/" + projectID + "/locations/us-west1"} region: us-west1 body: displayName: ${"batch_prediction_" + uuid.generate()} model: publishers/google/models/gemini-2.0-flash-lite-001 # モデル名 inputConfig: bigquerySource: { inputUri: "bq://dataset.batch_prediction_request" } instancesFormat: bigquery outputConfig: bigqueryDestination: { inputUri: "bq://dataset.batch_prediction_response" } predictionsFormat: bigquery connector_params: timeout: 3600 polling_policy: initial_delay: 60 multiplier: 1 非同期リクエストで、長時間リク エストになるようなジョブ系のリク エストについては、「ポーリングする ことで完了まで次のステップの実 行を待つ」という機能がある。 ここでは、1時間をリミットに、60 秒おきに結果を確認している
  20. 27 ©BrainPad Inc. ケーススタディ: ベクトル埋め込みによるドキュメント検索システムの構築 Cloud Storage に保管された大量の画像やPDFファイルを横断的に検索し、自然言語で検索できるシステムを構築する。 GCS上のPDF群を Batch

    Prediction への入力とし、各文書の要約とエンべディングを生成して BigQuery に格納する。 目的: GCS上の大量のPDFの要約文を作成に変換しテキスト埋め込みを実施、ベクトルDBを構築する。 処理フロー: 1. 要約生成: • 入力: PDFのGCS URI (gs://…) を含むリクエスト。 • プロンプト: 「このドキュメント全体を500字程度で要約してください。」 • 出力: 各PDFの要約テキストが BigQuery テーブルに書き込まれる。 2. Embedding生成: • 入力: ステップ1で生成された要約テキスト。 • 出力: 各要約に対応するEmbeddingベクトルが BigQuery テーブルに書き込まれる。 3. ベクトル検索: • 入力: ユーザーからの入力。 • 出力: BigQuery テーブルから検索し、マッチした上位データをクエリ結果として返却する。
  21. 28 ©BrainPad Inc. ケーススタディ: ベクトル埋め込みによるドキュメント検索システムの構築 Object Table (BigLake) を使い、 Cloud

    Storage のファイル一覧を取得。それを元に Batch Prediction の入力を作成す る。その後、テキスト埋め込み関数を使ってベクトルデータベースを作成する。
  22. 29 ©BrainPad Inc. ケーススタディ: ベクトル埋め込みによるドキュメント検索システムの構築 Object Table (BigLake) を使い、 Cloud

    Storage のファイル一覧を取得。それを元に Batch Prediction の入力を作成す る。その後、テキスト埋め込み関数を使ってベクトルデータベースを作成する。 リクエスト作成部分
  23. 30 ©BrainPad Inc. BigQuery で外部ファイルを入力として利用する (余談)BigQuery には GCS のメタデータを参照できる Object

    Table という機能があり、特定のパスにあるオブジェクトのフ ァイル一覧やそれらのメターデータが出力できる。 -- (1) メタデータのObject Tableが無い場合は作成 CREATE EXTERNAL TABLE IF NOT EXISTS `DATASET.gemini_pdfs` WITH CONNECTION DEFAULT OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET_NAME/PATH/*.pdf'] ); スキーマ
  24. 31 ©BrainPad Inc. BigQuery で Batch Prediction のリクエストを作成する。 Gemini のAPIに合わせたJSONリクエストオブジェクトを作成する。

    -- (2) リクエストテーブルを作成 CREATE OR REPLACE TABLE `DATASET.batch_summary_prediction_request` AS SELECT uri, JSON_OBJECT( 'contents', JSON_ARRAY( JSON_OBJECT( 'role', 'user', 'parts', JSON_ARRAY( JSON_OBJECT('text', 'PDFの内容を分析し、タイトルを抽出した上で、内容を300文字の日本語で要約してください。'), JSON_OBJECT('fileData', JSON_OBJECT("fileUri", uri, "mimeType", "application/pdf")) ) ) ), 'system_instruction', JSON_OBJECT('parts', JSON_ARRAY(JSON_OBJECT('text', 'AI応答風の表現(NG:はい/承知しました等)は禁止。' ))), 'generation_config', JSON_OBJECT( 'response_mime_type', 'application/json', 'response_schema', JSON '{"type":"OBJECT","properties":{"title":{"type":"STRING", "description":"タイトル"},"summary":{"type":"STRING","description":"要約"}},"required":["title","summary"]}' ) ) AS request FROM `DATASET.gemini_pdfs`; 入力プロンプト テキスト入力と 添付ファイルとしてGCSのURI システムプロンプト スキーマ {"title": タイトル, "summary": 要約} のJSON形式で出力。
  25. 32 ©BrainPad Inc. リクエスト作成クエリの Cloud Workflow でのSTEP記述 googleapis.bigquery.v2.jobs.insertを呼び出す。今回はSQLをワークフローに直接記述 main: steps:

    - create_summary_prediction_request: call: googleapis.bigquery.v2.jobs.insert args: projectId: PROJECT_ID body: configuration: query: query: | -- (1) メタデータのObject Tableが無い場合は作成 CREATE EXTERNAL TABLE IF NOT EXISTS `DATASET.gemini_pdfs` ... -- (2) リクエストテーブルを作成 CREATE OR REPLACE TABLE `DATASET.batch_summary_prediction_request` ... useLegacySql: false
  26. 33 ©BrainPad Inc. ケーススタディ: ベクトル埋め込みによるドキュメント検索システムの構築 Object Table (BigLake) を使い、 Cloud

    Storage のファイル一覧を取得。それを元に Batch Prediction の入力を作成す る。その後、テキスト埋め込み関数を使ってベクトルデータベースを作成する。 リクエスト部分
  27. 34 ©BrainPad Inc. Cloud WorkflowでのSTEP記述 batchPredictionJobs.createを呼び出す。ポーリング設定は1分おきに実行して1時間を上限に設定する。 main: steps: - create_summary_prediction_request:

    … - run_summary_prediction: call: googleapis.aiplatform.v1beta1.projects.locations.batchPredictionJobs.create args: parent: projects/PROJECT_ID/locations/us-west1 region: us-west1 body: displayName: ${"batch_summary_prediction_" + uuid.generate()} model: publishers/google/models/gemini-2.5-flash inputConfig: bigquerySource: inputUri: bq://PROJECT_ID.DATASET_ID.batch_summary_prediction_request instancesFormat: bigquery outputConfig: bigqueryDestination: outputUri: bq://PROJECT_ID.DATASET_ID.batch_summary_prediction_response predictionsFormat: bigquery connector_params: timeout: 3600 polling_policy: initial_delay: 60 multiplier: 1 入出力設定 BigQueryのテーブル パスを指定 リトライ設定 60秒おきに状態を確認 ジョブIDはランダムに生成
  28. 35 ©BrainPad Inc. ケーススタディ: ベクトル埋め込みによるドキュメント検索システムの構築 Object Table (BigLake) を使い、 Cloud

    Storage のファイル一覧を取得。それを元に Batch Prediction の入力を作成す る。その後、テキスト埋め込み関数を使ってベクトルデータベースを作成する。 ベクトルDB作成部分
  29. 36 ©BrainPad Inc. ベクトルテーブルを作成する 結果のJSONはresponseカラムの中に入っている。出力形式にJSONを指定している場合でも、出力結果は文字列にな るので、一度JSONをパースしなければならない。 uri processed_time request response

    gs://BUCKET_ID/pdfs /workspace_アカウント で_google_ai_studio_ にアクセスする _gemini_api_google_ ai_for_developers.pdf 2025-07-15 08:22:43.518000 UTC {"contents":[{"parts":[{"t ext":"PDFの内容を分析 し、タイトルを抽出した上 で、内容を300文字の日 本語で要約してください。 "},{"fileData":{"fileUri":" gs://BUCKET_ID/pdfs/ work... {"candidates":[{"avgLogprobs" :- 1.499813674786769,"content" :{"parts":[{"text":"{¥"summary ¥":¥"この文書は、Google Workspaceアカウントから..... ¥",¥"title¥":¥"Workspace アカ ウントで Google AI Studio にア クセスする...
  30. 37 ©BrainPad Inc. BigQuery: ベクトルテーブルを作成する 結果のJSONをパースしてタイトルと要約を取り出す。 ML.GENERATE_EMBEDDING関数を用いて要約テキストからそれを表現するベクトル(ARRAY<FLOAT>)を作成する。 CREATE MODEL IF

    NOT EXISTS `DATASET_ID.embedding_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'text-multilingual-embedding-002'); CREATE OR REPLACE TABLE `DATASET_ID.summary_embedding_vector` AS SELECT uri, title, ml_generate_embedding_result AS vector FROM ML.GENERATE_EMBEDDING( MODEL `DATASET_ID.embedding_model`, ( SELECT uri, JSON_VALUE(STRING(response.candidates[0].content.parts[0].text), '$.title') AS title, JSON_VALUE(STRING(response.candidates[0].content.parts[0].text), '$.summary') AS content FROM ` DATASET_ID.batch_summary_prediction_response` ), STRUCT(TRUE AS flatten_json_output, 'RETRIEVAL_DOCUMENT' AS task_type) ); テキストエンべディングを BigQuery から利用 するためにモデル定義を作成。 タイトル(title)と内容(content)をRETRIVAL_DOCUMENT(検索対象 ドキュメント)形式でベクトル形式へ変換する。 ※ Workflowのstepはp30と同じなので省略
  31. 39 ©BrainPad Inc. ケーススタディ: ベクトル埋め込みによるドキュメント検索システムの構築 Object Table (BigLake) を使い、 Cloud

    Storage のファイル一覧を取得。それを元に Batch Prediction の入力を作成す る。その後、テキスト埋め込み関数を使ってベクトルデータベースを作成する。 検索クエリ部分
  32. 40 ©BrainPad Inc. ベクトル検索を用いた文書クエリ クエリ自体をML.GENERATE_EMBEDDING関数でベクトル化して、VECTOR_SEARCH関数を使うことで近傍のベクト ル要素を取得する。ここでは「音楽生成AI」に近い文章を5件取得。 SELECT base.uri, base.title, distance

    FROM VECTOR_SEARCH( TABLE `DATASET_ID.summary_embedding_vector`, 'vector', (SELECT ml_generate_embedding_result FROM ML.GENERATE_EMBEDDING( MODEL `DATASET_ID.embedding_model`, ( SELECT '音楽生成AI' AS content ), STRUCT(TRUE AS flatten_json_output, 'RETRIEVAL_QUERY' AS task_type) )), top_k => 5, distance_type => 'COSINE', options => '{"use_brute_force": true}' ) ORDER BY distance 検索対象のベクトルDB 「音楽生成AI」をクエリとした ベクトル作成 ベクトル検索のオプション
  33. 41 ©BrainPad Inc. ベクトル検索を用いた文書クエリ クエリ自体をML.GENERATE_EMBEDDING関数でベクトル化して、VECTOR_SEARCH関数を使うことで近傍のベクト ル要素を取得する。ここでは「音楽生成AI」に近い文章を5件取得。 uri title distance gs://......./lyria_realtime_を使用した音楽生成

    _gemini_api_google_ai_for_developers.pdf Lyria RealTime を使用した音楽生成 0.249634151 gs://......./veo_-_google_deepmind.pdf Veo 0.277402631 gs://......./音声生成(テキスト読み上げ) _gemini_api_google_ai_for_developers.pdf 音声生成 (テキスト読み上げ) 0.329013614 gs://......./gemini_nano_ai_android_developers.pd f Gemini Nano 0.340221866 gs://......./veo_を使用して動画を生成する _gemini_api_google_ai_for_developers.pdf Veo を使用して動画を生成する 0.346607634
  34. 43 ©BrainPad Inc. まとめ Gemini Batch Prediction と BigQuery を組み合わせることで、データエンジニアはコスト効

    率よく、シンプルなアーキテクチャで、スケーラブルな生成AIパイプラインを構築できる。 • コスト効率: オンラインAPIの半額で大規模な生成AIタスクを実行できる。 • シンプルなアーキテクチャ: BigQuery を直接入出力に使うことで、データ移動がなくなり、パ イプラインが劇的に簡素化される。 • 堅牢なパイプライン: Cloud Workflows でジョブの起動、監視、後処理までを宣言的に記 述し、完全に自動化できる。 • データエンジニアの役割: RAGのような高度なAIパターンも、データエンジニアリングの延長線 上で構築可能になる。