【ITニュース解説】Building AI Agents with Google Search Grounding and ADK (Part 1/5)
2025年10月02日に「Dev.to」が公開したITニュース「Building AI Agents with Google Search Grounding and ADK (Part 1/5)」について初心者にもわかりやすく解説しています。
ITニュース概要
AIエージェントにリアルタイムのウェブ検索能力(Search Grounding)を持たせる方法を解説する。Google ADKと「Agent-as-Tool」パターンを用いることで、AIの知識カットオフ問題を解決し、常に最新で正確な情報を情報源付きで提供できる。具体的な開発手順や注意点も学ぶ。
ITニュース解説
AI(人工知能)エージェントの開発は、現在IT業界で非常に注目されている分野である。しかし、AIエージェントを実際に使える形で構築するには、いくつか大きな課題がある。その一つが「知識のカットオフ」問題だ。
ほとんどのAIモデルは、特定の時点までのデータで学習されているため、その学習データの「カットオフ日」以降に発生した出来事や最新の情報については知らない。例えば、昨週のニュースや今日の株価を尋ねても、AIは「知らない」と答えたり、間違った情報を提示したりすることがある。このような問題を抱えたAIは、ビジネスの現場や日常生活で本当に役立つ情報を提供することはできない。
この「知識のカットオフ」問題を解決し、AIエージェントが常に最新かつ正確な情報に基づいて応答できるようにする技術が「検索グラウンディング」である。検索グラウンディングとは、AIエージェントがユーザーからの質問に対し、リアルタイムでウェブ検索を実行し、その検索結果を根拠(グラウンディング)として応答を生成する能力を指す。これにより、AIは次のようなことができるようになる。ウェブを検索して最新の情報を取得する、情報源をリンク付きで提示する、事実に基づいた回答を提供する、そしてモデルを再学習することなく常に情報を更新し続ける。
Google Cloudのドキュメントによれば、このグラウンディング技術は、ニュースや最新イベント、金融データ、技術トラブルシューティング、研究など、多岐にわたる分野で極めて重要である。例えば、「今週のAI業界の動向は?」「今日のテスラの株価は?」「最新のReactの変更点は?」といったリアルタイム性や最新情報が求められる質問に、AIが的確に答えられるようになるのだ。
この検索グラウンディングをAIエージェントに組み込むためには、Googleが提供するAgent Development Kit(ADK)というツールキットが非常に有効である。ADKを使うと、Python言語でAIエージェントを効率的に構築できる。しかし、ADKで検索グラウンディングを実装する際には、一つ重要な注意点がある。それは「Agent-as-Toolパターン」という特定の設計パターンを用いる必要があることだ。
開発者が最初に陥りやすい問題として、Google Search groundingツールを、自分で作成したカスタム関数ツールなど、他の関数ツールと直接混ぜて使おうとすると、「Function search is not found」というエラーが発生することがある。これは、Google Search groundingが独自の実行コンテキストで動作するため、他のツールと直接混在させると、ADKが検索関数の呼び出しを正しく解決できなくなるために起こる問題である。
この問題を回避し、スムーズに検索グラウンディングを実現するための解決策が「Agent-as-Toolパターン」である。このパターンでは、まずGoogle Search Toolだけを持つ専用の「検索エージェント」を作成する。そして、その検索エージェント全体を、メインとなるAIエージェントの「ツール」として組み込むのである。
具体的には、次のように二段階でエージェントを構築する。
- 検索エージェントの作成:
LlmAgentというクラスを使って、GoogleSearchToolのみをツールとして持つ独立したエージェント(例:SearchAgent)を作成する。このエージェントには、「あなたはGoogle検索グラウンディングのスペシャリストである」といった明確な指示を与える。 - メインエージェントの作成: 別の
LlmAgentクラスを使って、ユーザーからの問い合わせを処理するメインのエージェント(例:MainAgent)を作成する。このメインエージェントのツールリストには、先ほど作成したSearchAgentをAgentToolという形でラップして組み込む。さらに、もし必要であれば、現在時刻を返すカスタム関数など、他の独自のツールもここに加えることができる。
このパターンが機能する理由は、「分離」と「委譲」という二つの原則にある。
- 分離: 各エージェントは自身の実行コンテキストを持つため、検索エージェントは検索機能だけに集中し、他のツールとの競合がなくなる。
- 委譲: メインエージェントが最新情報が必要だと判断した場合、自ら検索するのではなく、検索エージェントに処理を委譲する。検索エージェントがウェブ検索を実行し、その結果をメインエージェントに返すと、メインエージェントはその結果を取り込んで最終的な応答を生成する。
この設計は、GoogleのADKドキュメントでも推奨されている正しいアプローチであり、将来的により多くの専門的なエージェント(例えば、Google Maps専用のエージェントなど)を追加する際にも、柔軟に対応できる利点がある。
実際にこのエージェントを構築するには、Python 3.12以降のバージョンと、Google AI Studioで取得したAPIキー、そしてPythonや非同期プログラミングの基本的な知識が必要となる。プロジェクトのセットアップは、Pythonの仮想環境を作成し、google-adk、google-genai、python-dotenvといった必要なライブラリをインストールすることから始まる。APIキーは.envファイルに設定し、Git管理から除外することでセキュリティを確保する。
エージェントが完成したら、様々なクエリを使って動作をテストする。「今週のAIの最新動向は?」「今日のトップテクノロジーニュースは?」といったリアルタイム情報が必要な質問には、検索エージェントがウェブを検索し、その結果に基づいて応答が生成されることが期待される。また、「現在の時刻は?」といった質問には、カスタムツールが使用される。
検索グラウンディングの強力な機能の一つに「グラウンディングメタデータ」の取得がある。AIの応答には、実際に実行された検索クエリ、使用されたウェブソースのURLとタイトル、そして応答内のどの部分がどのソースに基づいているか、さらにその情報の信頼度といった詳細な情報が含まれる。これにより、AIの応答がどのように生成されたかを透明に確認でき、ユーザーは提示された情報に対する信頼度を高めることができる。
AIエージェントの実行プロセスは、ユーザーの質問がメインエージェントに届き、メインエージェントが必要に応じて検索エージェントに処理を委譲し、検索エージェントがGoogle Search APIを通じてウェブ検索を実行し、結果をメインエージェントに戻し、最終的な応答がユーザーに返されるという流れである。このようなエージェントの分離は、実行コンテキストの独立性、機能の明確な分担、スケーラビリティの向上、そしてデバッグの容易さといった多くの利点をもたらす。
開発中にはいくつかの一般的な問題に直面する可能性がある。「Function search is not found」エラーはAgent-as-Toolパターンで解決する。エージェントが検索を使用しない場合は、メインエージェントの指示文に、どのような場合に検索機能を使うべきかを明確かつ具体的に記述することが重要である。APIキーが見つからない場合は、.envファイルの記述形式や読み込みを確認する。また、応答が遅いと感じることがあるかもしれないが、ウェブ検索とAIの推論には通常数秒かかるため、これは正常な動作である。
実際に本番環境でAIエージェントを運用するためには、さらに強化が必要となる。例えば、詳細なロギングを実装してエージェントの動作を追跡したり、エラーハンドリングを追加して予期せぬ問題に適切に対処したり、APIの利用頻度を制限するレートリミット機能を追加して過負荷を防いだりすることが考えられる。
この技術はAIエージェントが持つ「知識のカットオフ」という根本的な課題を克服し、常に最新で正確な情報を提供できる、実用的なAIシステムを構築するための第一歩である。GoogleのADKとAgent-as-Toolパターンを理解することで、システムエンジニアを目指す開発者も、リアルタイム情報を活用する次世代のAIアプリケーション開発に挑戦できるだろう。