Content

こんにちは!みっちーです!


これまでの記事で、ADK(Agent Development Kit)のサンプルプログラムを使ってBigQueryのデータを分析・可視化し、ときにはBigQuery MLでモデル構築まで行う、頼もしい「データサイエンスエージェント」を改修してきました。このエージェントは、手元のデータに関しては非常に優秀な分析官です。


しかし、実際のデータ分析業務では、データベース内の情報だけでなく、外部のWebサイトにある最新のニュース記事、競合の情報、市場のトレンドといったリアルタイムの情報と組み合わせて分析したい場面が頻繁にあります。例えば、「最新の経済指標のウェブページを読み込んで、自社の売上データと関連付けて分析して」といった高度な要求に応えることは、これまでのエージェントにはできませんでした。


そこで今回は、このデータサイエンスエージェントに外部のウェブページを読み込む能力を与える、MCP(Model Context Protocol)のfetchツールを実装します。この機能拡張により、エージェントは閉じたデータベースの世界から、広大なインターネットの情報へとアクセスできるようになり、分析能力が飛躍的に向上します!

前提条件

MCP (Model Context Protocol) とは?

ここで、今回の機能拡張の鍵となるMCP(Model Context Protocol)について解説します。MCPは、AIエージェントが外部のツールやサービスと安全かつ標準化された方法で通信するためのプロトコル(通信規約)です。

エージェントは、それ自体が持つ知識だけでは、リアルタイムの情報を収集したり、ローカルファイルを操作したりすることはできません。MCPは、エージェントと、そうした外部機能を提供するツールサーバーとの間の「共通言語」として機能します。これにより、エージェントは以下のような、自身の能力を超えたタスクを安全に実行できるようになります。

  • ウェブページの取得 (fetch): 指定されたURLのコンテンツをリアルタイムに読み込み、分析のためのテキスト情報として取得します。
  • ファイルの操作: ローカルファイルの読み書きや、ユーザーがアップロードしたCSVファイルなどのデータを処理します。
  • 外部コマンドの実行: 安全なサンドボックス環境で、任意のシェルコマンドを実行し、その結果を分析に利用します。

今回はこのMCP上で動作するfetchツールを利用します。これにより、データサイエンスエージェントは、これまでアクセスできなかったインターネット上の最新情報を収集し、それを手元のデータと組み合わせて分析するという、より高度で実践的なタスクを実行できるようになるのです。

アーキテクチャの進化:MCPツールの統合

既存のアーキテクチャでは、司令塔であるroot_agentが、データベース担当のdb_agentやPython分析担当のds_agentといった専門家たちを呼び出してタスクを処理していました。

今回の改修では、このroot_agentが直接利用できる新しい武器として、MCPのfetchツールを追加します。これにより、root_agentはユーザーの質問にURLが含まれていることを検知すると、他のサブエージェントを呼び出す前に、まずMCPツールを使ってウェブページの内容を把握し、その情報を後続の分析タスクのインプットとして渡すことができるようになります。

実装手順

それでは、データサイエンスエージェントにMCPツールを組み込んでいきましょう!

1. MCPツールを呼び出すためのツール定義の追加

まず、司令塔であるroot_agentがMCPのfetch機能を呼び出すための窓口となるツールを定義します。python/agents/data-science/data_science/tools.pyに、以下のcall_mcp_tool関数を追加します。

# python/agents/data-science/data_science/tools.py に追加

from google.adk.tools.mcp_tool import StdioConnectionParams
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset
from mcp import StdioServerParameters

# ... 既存の関数の下に以下を追加 ...

def call_mcp_tool():
"""
Tool to call the MCP toolset for fetching web content.
"""
return MCPToolset(
connection_params=StdioConnectionParams(
server_params=StdioServerParameters(
command='uvx',
args=[
"mcp-server-fetch",
],
),
timeout=20,
),
)

このコードは、ADKに対して「uvx mcp-server-fetchというコマンドで起動するMCPサーバーと通信するためのツールセットを用意してください」と指示しています。これにより、エージェントはfetchのようなMCPが提供する様々な機能を呼び出せるようになります。

2. Root AgentへのMCPツールセットの登録

次に、作成したツールをroot_agentが使えるように登録します。python/agents/data-science/data_science/agent.pyを修正し、root_agenttoolsリストに先ほど定義したcall_mcp_toolを追加します。

# python/agents/data-science/data_science/agent.py の修正

# ... (既存のimport文) ...
from .tools import call_db_agent, call_ds_agent, call_insight_agent, call_mcp_tool # call_mcp_tool をインポート

# ... (setup_before_agent_call はそのまま) ...

root_agent = Agent(
# ... (既存のパラメータ) ...
tools=[
call_db_agent,
call_ds_agent,
call_insight_agent,
load_artifacts,
call_mcp_tool(), # この行を追加
],
# ... (既存のパラメータ) ...
)

3. Root Agentへの指示(プロンプト)の更新

最後に、root_agentに新しいツールの使い方を教えます。ユーザーの質問にURLが含まれていたら、分析を始める前にまずそのURLの内容を取得するように指示します。python/agents/data-science/data_science/prompts.pyreturn_instructions_root関数を修正します。

具体的には、# **Workflow:**セクションの先頭に、URLを処理するための新しいステップを追加します。

# python/agents/data-science/data_science/prompts.py の修正

def return_instructions_root() -> str:

instruction_prompt_root_v2 = """
(前半は省略)
# **Workflow:**

# 1. **Analyze User's Query for URLs:**
# - If the user's query contains one or more URLs, you MUST use the `fetch` tool from the MCP toolset to retrieve the content of each webpage.
# - Use the fetched content as the primary source of information for the subsequent steps.

# 2. **Understand Intent**
(以降、既存のステップ番号を1つずつずらす)
# 3. **Retrieve Data TOOL (`call_db_agent` - if applicable):** ...
# 4. **Analyze Data TOOL (`call_ds_agent` - if applicable):** ...
# 5. **Generate Insight TOOL (`call_insight_agent` - if applicable):** ...
# 6. **BigQuery ML Tool (`call_bqml_agent` - if applicable):** ...
# 7. **Respond:** ...
(以降省略)
"""
return instruction_prompt_root_v2

これで実装は完了です!エージェントはウェブを閲覧する能力を手に入れました。

動作確認

それでは、新機能が正しく動作するか確認しましょう。ADKのWeb UIを起動(poetry run adk web)し、データサイエンスエージェントに以下のようなプロンプトを入力します。

この記事(https://sight-r.sts-inc.co.jp/blog/ai-datascience-agentengine-deploy/)の内容を要約して、データサイエンスエージェントをデプロイする際の重要なポイントを3つ挙げてください。

このプロンプトを受け取ったエージェントは、まずプロンプトの指示に従い、MCPのfetchツールを呼び出して指定されたURLのコンテンツを取得します。その後、取得したテキストデータを分析し、要約と重要ポイントの抽出を行います。

エージェントから以下のような応答が返ってくれば、実装は成功です!

まとめ

今回は、データサイエンスエージェントにMCPのfetchツールを統合し、外部のウェブサイトからリアルタイムに情報を取得する能力を付与しました。これにより、エージェントは単に手元のデータを分析するだけでなく、インターネット上の膨大な情報を活用して、より文脈に沿った、付加価値の高い分析を行うことが可能になりました。

ぜひ皆さんもMCPを活用して、AIエージェントをより広い範囲で活用できるようにしていきましょう!

2025年10月1日 データサイエンスエージェントにMCP機能を実装してみた!

Category Google Cloud

ご意見・ご相談・料金のお見積もりなど、
お気軽にお問い合わせください。

お問い合わせはこちら