AI AGENT FACTORYAIエージェント工場見学 ACTIVE

AIエージェントがリアルタイムで調べてくれる:AgentCore Web Searchで情報収集エージェントを作った全工程

LLMは学習データの時点以降の情報を知らない。それはAIエージェントも同じ問題を抱えていた。Amazon Bedrock AgentCoreに追加されたWeb Search機能は、エージェントがリアルタイムのWeb情報を参照できるようにするものだ(2026年6月、AWS Summit NYにて発表)。この記事では、設定方法の手順だけでなく、「AIが自律的にWebを検索して答えを返す」エージェントが実際に動くところまでを一本のシナリオで見せる。AWSコンソールの操作は詰まりやすいポイントを先に出しておく。


図解:AgentCore Web Searchの全体構造

flowchart LR
    subgraph エージェント側
        CODE[エージェントコード\nBedrock モデル呼び出し]
    end
    subgraph AWS クラウド側
        GW[AgentCore Gateway\nMCP サーバー]
        WS[Web Search\nマネージドツール]
        GW -->|MCP ターゲット| WS
    end
    WEB[(リアルタイム Web)]
    CODE -->|MCP over HTTPS| GW
    WS --> WEB
    WEB -->|最新情報| WS

エージェントコードは AgentCore Gateway の MCP エンドポイントだけを知っていればよい。Web Search ツールの呼び出し・Web へのアクセス・結果の返却はすべてクラウド側が担う。


まず「動いた後」のイメージを持つ

今回作るのは情報収集エージェントだ。ユーザーが「最新のAWS料金改定について調べて」と送ると、エージェントは自律的にWebを検索し、今日の情報を含んだ回答を返す。

以下は実際に動く状態をイメージした会話の例だ:

ユーザー:「AWS Lambdaの最新の料金改定について調べてまとめてください」

エージェント(内部でWeb Searchを実行):
  → Web検索クエリ生成:「AWS Lambda pricing update 2026」
  → 検索結果取得(リアルタイム)
  → 結果を読み込んで回答生成

エージェント:「2026年6月時点の公式情報によると…(具体的な最新情報を含む回答)」

従来のBedrockエージェントはここで「学習データの範囲内の古い情報」しか返せなかった。AgentCore Web Searchを繋ぐと、エージェントがその場でWebを調べてから答えるようになる。この体験を一から作るのが今回の目標だ。


なぜAIエージェントにリアルタイムWeb検索が必要なのか

LLMのカットオフ問題

LLMには「知識のカットオフ」がある。学習データの収集期限以降の出来事については、モデルの知識に存在しない。Claude 3.xもGPT-4.xも同じ制約を持っており、モデルのバージョンによって締め切りは異なるが「今日の情報」を知らないのは共通だ。

問題はエージェントが「古い知識で自信満々に答える」ことにある。「最新の」と頭につけて聞いても、モデルが持つ最新情報はカットオフ時点のものだ。正確な回答が求められる業務用途ではこれは致命的になる。

RAGだけでは外部情報を補えない

RAG(Retrieval-Augmented Generation)は社内ドキュメントや自前のナレッジベースを参照させる手法として広く使われている。ただし参照先は「あらかじめ取り込んだ文書」に限られる。Webのリアルタイム情報を都度参照する用途には別の仕組みが必要だ。

AgentCore Web SearchはMCPゲートウェイ経由で提供される

AWSがSummit NY(2026年6月17日)で発表したのは、エージェントからのWeb検索をMCP(Model Context Protocol)ゲートウェイ経由のマネージドツールとして提供するアプローチだ(出典:AWS公式ブログ)。

「ただGoogle検索を代行するAPI」ではない。AgentCore Gatewayという中間層がMCPサーバーとして機能し、エージェントコードは「MCPでツールを呼び出す」という統一インターフェースでWeb検索を使える。検索エンジンの選定・レート制限の管理・結果のフォーマットなどの実装をAWSが担う。開発者はエージェントロジックに集中できる設計だ。


AgentCore BrowserとWeb Searchの違い——混同しがちなポイント

SERPを見ると、AgentCore関連の上位記事の多くが「AgentCore Browser」を扱っている。Web Searchとは別機能なので、先に整理しておく。

機能AgentCore Web SearchAgentCore Browser
何をするかWebの検索結果(テキスト)を取得ブラウザを操作して画面を操作・スクレイピング
向いている用途情報収集・要約・Q&Aフォーム入力・ログイン操作・スクリーンショット取得
必要なコスト感比較的軽量ブラウザインスタンスを起動するため重め
発表時期(参考)2026年6月2025年8月(先行発表)

「今日のニュースを調べてまとめてほしい」→ Web Search 「ログインが必要なサイトの情報を取ってきてほしい」→ AgentCore Browser

この記事ではWeb Searchを扱う。ブラウザ操作はAgentCore Browserの公式ドキュメントを参照のこと。


設定の全工程:IAM確認から動作確認まで

ここからが実際の作業だ。「詰まりやすい場所」を先に示しながら進める。手順の細部は公式ドキュメントが正確なため、AWSコンソールの操作については執筆時点の公式情報を参照してほしい。

前提:何が必要か

  • AWSアカウント(IAM権限のある管理者ロールを使用できること)
  • Amazon Bedrock が使えるリージョン(執筆時点ではus-east-1等、公式ドキュメントで確認)
  • Python 3.10以上(エージェントコードを動かす環境)

ステップ1:IAM権限の確認——ここで詰まる人が多い

AgentCore関連の操作には、通常のBedrockのIAM設定だけでは足りないことがある。以下の権限が含まれているかを確認する。

エージェント実行ロールに必要な権限(公式ドキュメントで最新版を確認すること):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "bedrock:InvokeModel",
        "bedrock-agentcore:*",
        "bedrock:GetFoundationModel"
      ],
      "Resource": "*"
    }
  ]
}
詰まりポイント①bedrock-agentcore系の権限はbedrockの権限と別管理になっている。既存のBedrockロールを流用しようとすると「権限がない」エラーが出る。IAMコンソールでロールを新規作成するか、既存ロールに不足している権限を追加する。
詰まりポイント②:Gatewayのエンドポイントを呼び出すロールとBedrockモデルを呼び出すロールが分かれていることがある。公式ドキュメントの「信頼関係」設定のセクションをよく読む。

ステップ2:AgentCore GatewayにWeb Searchを追加する

AWSコンソールで Amazon Bedrock を開き、左ナビゲーションから AgentCore → Gateway に進む。

公式ドキュメントの手順に沿って新しいGatewayを作成(または既存のGatewayを編集)し、MCPターゲットとしてWeb Searchを追加する。

設定のポイントは:

  • Gatewayには「エンドポイントURL」が割り当てられる。エージェントコードはこのURLを使う
  • MCPターゲットの追加時に「Web Search」を選ぶ選択肢が表示される(AWS Summit NYで発表された新機能のため、表示されない場合はリージョンやアカウントの対応状況を公式ページで確認する)
  • Gatewayを作成すると「MCPエンドポイントURL」が払い出される。これをメモしておく
詰まりポイント③:MCPターゲットとしてWeb Searchを追加しても「ツールが見つからない」エラーが出る場合、GatewayのデプロイステータスがACTIVEになっているかを確認する。作成直後は数分かかることがある。

ステップ3:エージェントコードを書く

GatewayのMCPエンドポイントをエージェントから呼び出す実装の概要を示す。以下はPythonでの構成イメージだ(実際のパラメータ・メソッド名は公式SDKとドキュメントで確認すること)。

import boto3
import json

# Bedrock クライアント
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")

# AgentCore Gateway の MCP エンドポイント(コンソールでコピーしたURL)
GATEWAY_ENDPOINT = "https://xxxx.execute-api.us-east-1.amazonaws.com/agentcore/mcp"

def build_system_prompt():
    return """あなたは情報収集エージェントです。
ユーザーからの質問に答えるために、必要に応じてWeb検索ツールを使ってください。
検索結果に基づいて、正確で最新の情報を回答してください。"""

def run_agent(user_query: str):
    """
    AgentCore Gateway 経由の Web Search ツールを使う情報収集エージェント。
    実際の実装は AWS SDK for Python (boto3) の AgentCore 対応バージョンと
    公式サンプルコードを参照のこと。
    """
    
    # ツール定義(MCPターゲットとして登録したWeb Searchを宣言)
    tools = [
        {
            "toolSpec": {
                "name": "web_search",
                "description": "Webを検索してリアルタイムの情報を取得します",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "query": {
                                "type": "string",
                                "description": "検索クエリ"
                            }
                        },
                        "required": ["query"]
                    }
                }
            }
        }
    ]
    
    messages = [{"role": "user", "content": user_query}]
    
    # エージェントループ
    while True:
        response = bedrock.converse(
            modelId="anthropic.claude-3-5-sonnet-20241022-v2:0",
            system=[{"text": build_system_prompt()}],
            messages=messages,
            toolConfig={"tools": tools}
        )
        
        stop_reason = response["stopReason"]
        
        if stop_reason == "end_turn":
            # ツール使用なしで回答が完成
            return response["output"]["message"]["content"][0]["text"]
        
        elif stop_reason == "tool_use":
            # モデルがWeb Searchツールの使用を決定
            tool_use_block = next(
                b for b in response["output"]["message"]["content"]
                if b.get("type") == "toolUse"
            )
            tool_name = tool_use_block["name"]
            tool_input = tool_use_block["input"]
            tool_use_id = tool_use_block["toolUseId"]
            
            # AgentCore Gateway 経由でWeb Searchを実行
            search_result = call_web_search_via_gateway(
                endpoint=GATEWAY_ENDPOINT,
                query=tool_input["query"]
            )
            
            # ツール結果をメッセージに追加して継続
            messages.append(response["output"]["message"])
            messages.append({
                "role": "user",
                "content": [{
                    "toolResult": {
                        "toolUseId": tool_use_id,
                        "content": [{"text": json.dumps(search_result, ensure_ascii=False)}]
                    }
                }]
            })
        else:
            break
    
    return "エージェントが応答を生成できませんでした"


def call_web_search_via_gateway(endpoint: str, query: str) -> dict:
    """
    AgentCore Gateway の MCP エンドポイントへ検索リクエストを送る。
    実際の認証方式・リクエスト形式は公式ドキュメントの MCP クライアント実装ガイドを参照。
    """
    import urllib.request
    import urllib.error
    
    # SigV4 署名が必要(boto3 の auth ヘルパーを使うことを推奨)
    payload = json.dumps({
        "method": "tools/call",
        "params": {
            "name": "web_search",
            "arguments": {"query": query}
        }
    }).encode("utf-8")
    
    req = urllib.request.Request(
        endpoint,
        data=payload,
        headers={"Content-Type": "application/json"},
        method="POST"
    )
    
    with urllib.request.urlopen(req) as resp:
        return json.loads(resp.read().decode("utf-8"))


if __name__ == "__main__":
    result = run_agent("AWS Lambdaの2026年の最新料金について調べてまとめてください")
    print(result)
実装時の注意:AgentCore GatewayへのリクエストはAWS SigV4署名が必要になる。urllib での素朴な実装では認証が通らない。boto3 の requests-aws4authbotocore の認証ヘルパーを使うか、AWS SDK の AgentCore 対応メソッドを確認すること。正確なSDKの使い方は執筆時点の公式ドキュメントとGitHubサンプルで確認してほしい。

ステップ4:動作確認——エージェントが本当にWebを調べているか

エージェントを動かしたら、「動いた感じ」だけで満足しないようにしたい。以下を確認する。

確認1:モデルが実際にツールを呼び出しているか

stop_reason == "tool_use" のブロックにログを仕込んで、tool_input["query"] の内容を出力する。モデルが生成した検索クエリが表示されれば、Web Searchが呼ばれている証拠だ。

確認2:返ってきた情報が今日のものか

カットオフ以降に起きた出来事(例:「2026年6月に発表されたAWSの機能」)を質問してみる。モデルが学習データにないはずの情報を正確に返せれば、リアルタイム検索が機能している。

確認3:エラーが出たときの見方

AccessDeniedException: User: arn:aws:iam::xxx is not authorized to perform: bedrock-agentcore:...

→ IAMロールに不足している権限がある。エラーメッセージのアクション名を確認してポリシーに追加する。

ResourceNotFoundException: Gateway 'xxx' not found

→ GatewayのIDまたはリージョンが間違っている。コンソールでGatewayの詳細ページを開き、ARNとリージョンを再確認する。


このエージェントで何ができるか——実務への転用シナリオ

設定が動いた後の話をする。「情報収集エージェント」という形で作ったものを、どの業務に当てはめられるか。

シナリオ1:競合・市場動向のリサーチ自動化

毎朝「競合A社と競合B社の最新ニュースをまとめて、自社への影響がありそうなものを3つ挙げて」とエージェントに送る。LLMのカットオフ問題がなくなるので、昨日の発表も拾える。リサーチに費やしていた朝30分が短縮される。

シナリオ2:AWSサービスの最新仕様確認

「このコードで使っている Bedrock の InvokeModel API に2026年以降に変更はあるか?」という問いに、エージェントがAWSドキュメントの最新版を参照して答えられる。料金改定・APIの非推奨予告・リージョン対応状況など、公式ドキュメントが随時更新されるタイプの情報に強い。

シナリオ3:技術調査レポートの自動生成

「MCPプロトコルの最新仕様について、セキュリティ面の変更点を中心にまとめたレポートを作って」という指示を受け、エージェントが複数のWeb情報を検索してまとめる。副業・フリーランスなら調査工程の時間を大幅に削減できる。


注意点——現時点で確認できないこと・把握しておくべきこと

利用可能なリージョンと料金

Web SearchツールをMCPターゲットとして使う際の費用(リクエスト単価・検索回数の制限)については、執筆時点では公式ドキュメントの pricing ページを確認することを推奨する。AWSのマネージドサービスは料金体系が細かく、想定外のコストが発生するケースがある。

Quick Autonomous Agentsとの関係

AWS Summit NYでは同時に「Quick Autonomous Agents」も発表された。Web Searchとの組み合わせやプレビュー対応状況については、公式ブログと発表ページで確認のこと(現時点では全アカウントに即時公開されていない可能性がある)。

MCPプロトコルのバージョン

MCPの仕様は活発に更新されており、2026年6月時点でも仕様変更が進んでいる(関連:2026年6月18日のMCP OAuth仕様更新)。AgentCoreが対応するMCPバージョンと手元のクライアントライブラリのバージョンが食い違うと、ツール呼び出しが失敗することがある。公式の互換性情報を確認する。


まとめ——次の一歩

AgentCore Web Searchが解くのは「AIエージェントの知識が古い」という根本的な制約だ。設定の骨格はシンプルで、AWSコンソールでGatewayにWeb SearchをMCPターゲットとして追加し、エージェントコードからそのエンドポイントを呼び出すだけだ。

詰まりやすいのは IAM 権限の設定と、GatewayのACTIVE確認、SigV4認証の実装の3点だ。この記事で先に示した詰まりポイントを頭に入れておくと、エラーに出会ったときの調査時間が短くなる。

動いた後は「どの業務の情報収集を自動化するか」を考えるフェーズに進める。競合情報・最新仕様確認・技術調査レポートなど、「今日の情報が必要な調べ物」がある業務なら直接使えるシナリオだ。

公式情報・出典:

← 攻略ガイド一覧へ