AI
2026/01/29
佐藤 大生

Google ADK公式サンプルで学ぶ:マルチエージェントで作るData Scienceシステム(BigQuery×Python可視化)

Google ADK(Agent Development Kit)の公式サンプル「data-science」を題材に、Root Agentが複数の専門エージェント(BigQuery/Analytics/AlloyDB/BQML)を束ねて“データ取得→分析→可視化”までを自然言語で実行する仕組みを解説します。エージェント間のデータ受け渡しにtool_context.stateを使う疎結合パターン、NL2SQLのBASELINEとCHASE-SQLの使い分け、拡張しやすい設計の考え方までを押さえます。

注意

本記事は2026年1月22日時点のadk-samplesに基づいています。最新版ではサンプルデータセット、設定ファイル形式、およびBigQuery接続方法などが更新されている可能性があります。最新情報は公式リポジトリをご確認ください。

はじめに

Google ADK(Agent Development Kit)を使えば、単一のエージェントを簡単に作成できます。


しかし、現実の業務では「SQLでデータを取得して、Pythonで分析して、グラフを作成する」といった複数のスキルを組み合わせた処理が必要になります。一つのエージェントにすべてを任せると、プロンプトが肥大化し、メンテナンスが困難になります。


そこで登場するのがマルチエージェントアーキテクチャです。


本記事では、Google ADKの公式サンプル「data-science」を使って、複数のエージェントが協調して動作する仕組みを解説します。


アーキテクチャ概観

全体構成


data-scienceサンプルは、Root Agent4つの専門エージェントを束ねる構造になっています。




各エージェントの役割



なぜこの設計なのか?



  • 専門性の分離: SQLの専門家、Pythonの専門家、MLの専門家がそれぞれ担当

  • 保守性の向上: 各エージェントのプロンプトが小さく保てる

  • 拡張性: 新しい専門エージェントを追加しやすい


動かしてみる

環境構築


# リポジトリをクローン


git clone <https://github.com/google/adk-samples.git>


cd adk-samples/python/agents/data-science


# 依存関係をインストール


uv sync


# .envファイルを設定


cp .env.example .env


.envファイルの以下の項目を編集します:


# Vertex AIを使用する場合は1に設定


GOOGLE_GENAI_USE_VERTEXAI=1


# GCPプロジェクトの設定


GOOGLE_CLOUD_PROJECT=your-project-id   # GCPコンソールで確認


GOOGLE_CLOUD_LOCATION=us-central1    # リージョン


# BigQueryの設定


BQ_COMPUTE_PROJECT_ID=your-project-id    # 同じプロジェクトIDでOK


BQ_DATA_PROJECT_ID=your-project-id    # 同じプロジェクトIDで


OKBQ_DATASET_ID=your_dataset_name    # 作成するデータセット名


GCPプロジェクトIDは、Google Cloud Consoleの左上で確認できます。


# サンプルデータをBigQueryにロード(train/testテーブルを作成)


uv run python3 data_science/utils/create_bq_table.py


# サーバーを起動


uv run adk web



BigQuery Agent を試す


ターミナルに表示されるURLをブラウザで開き、data_science エージェントを選択します。


trainテーブルの行数を教えて」と入力すると、以下のように動作します:




Root Agentが質問を受け取り、call_bigquery_agentを呼び出しています。BigQuery Agentは内部で:



  1. bigquery_nl2sqlツールでSQLを生成

  2. execute_sqlツールでクエリを実行

  3. 結果(229,680行)を返答


このように、自然言語からSQLが自動生成され、実行される仕組みです。



Analytics Agent を試す


次に、「trainテーブルのcountry別の売上合計を棒グラフで表示して」と入力してみます。



今度は2つのエージェントが連携しています:



  1. BigQuery Agent: データを取得

  2. Analytics Agent: Pythonコードを生成し、グラフを描画


Analytics AgentはVertex AI Code Interpreterを使用しており、matplotlibでグラフを生成しています。データ取得から可視化まで、自然言語の指示だけで完結します。


状態共有の仕組み:tool_context.state

マルチエージェントで最も重要なのは「エージェント間でどうデータを共有するか」です。


このサンプルでは、tool_context.stateという共有辞書を使ったシンプルなパターンを採用しています。


データフロー



コード例


BigQuery Agentがクエリ結果を保存:



# BigQuery Agent のツール内


tool_context.state["bigquery_query_result"] = query_results


 


tool_context.state["sql_query"] = generated_sql


Analytics Agentがデータを参照して分析:


# Analytics Agent のツール内


data = tool_context.state.get("bigquery_query_result")


# → pandas DataFrame として分析・可視化

NL2SQL:2つの手法

BigQuery Agentには、自然言語からSQLを生成する2つの手法が実装されています。


BASELINE(ベースライン)


シンプルな1回のLLM呼び出しでSQLを生成します。


ユーザーの質問 → LLMに1回プロンプト → SQL出力


メリット:



  • 高速(1回のAPI呼び出し)

  • コストが低い


デメリット:



  • 複雑なクエリで精度が落ちやすい



CHASE-SQL(チェイスSQL)


ICLR 2025で発表された最新手法。複数ステップの推論で精度を上げます。


複雑な質問


↓ Divide(分解)


サブ質問1, サブ質問2, サブ質問3


↓ Conquer(各サブ質問のSQL生成)


SQL断片1, SQL断片2, SQL断片3


↓ Combine(統合・最適化)


最終SQL


メリット:



  • 複雑なクエリでも高精度


デメリット:



  • 処理時間が長い

  • コストが高い(複数回のAPI呼び出し)



切り替え方法


.envファイルで設定を変更するだけで切り替え可能です:

# シンプル・高速

BQ_NL2SQL_METHOD="BASELINE"

# 高精度・低速

BQ_NL2SQL_METHOD="CHASE"

その他のエージェント

今回は試せませんでしたが、data-scienceサンプルには以下のエージェントも含まれています。


AlloyDB Agent


PostgreSQL互換のAlloyDBに対してNL2SQLを実行するエージェントです。MCP Toolbox for Databasesを使用しており、BigQueryとAlloyDBを組み合わせたクロスデータベースクエリも可能です。


BQML Agent


BigQuery MLを使った機械学習モデルの訓練・推論を行うエージェントです。RAG(Retrieval-Augmented Generation)を使ってBQMLのドキュメントを参照しながら、適切なMLコードを生成します。


 

まとめ

本記事では、Google ADKの公式サンプル「data-science」を通じて、以下を学びました。



  1. マルチエージェントアーキテクチャ: Root Agentが専門エージェントを束ねる階層構造

  2. エージェント連携の実例: BigQuery Agent → Analytics Agent のデータ連携

  3. 状態共有パターン: tool_context.stateによる疎結合なデータ受け渡し

  4. NL2SQL手法の選択: BASELINEとCHASE-SQLの使い分け


マルチエージェントアーキテクチャを採用することで、各エージェントの責務を明確に分離し、保守性と拡張性の高いシステムを構築できます。


New call-to-action