マルチエージェントで作るData Scienceシステム

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の使い分け

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

CTA
  • URLをコピーしました!
  • URLをコピーしました!
この記事を書いた人
目次