Amazon Web Services ブログ

Amazon Bedrock AgentCore のご紹介: AI エージェントをあらゆる規模で安全にデプロイおよび運用する (プレビュー)

わずか数年で、基盤モデル (FM) は、ユーザーのプロンプトに応じてコンテンツを直接作成するために使用されるものから、現在では AI エージェントを強化するものへと進化しました。AI エージェントは、限定的な人間による監視を使用しながら、ユーザーが定義した目標の達成を目指して、FM を使用して推論、計画、実行、学習、適応する新しいクラスのソフトウェアアプリケーションです。エージェンティック AI のこの新しい波は、エージェントが他のツールやシステムと接続する方法を簡素化する、Model Context Protocol (MCP)Agent2Agent (A2A) などの標準化されたプロトコルの登場によって可能となりました。

実際、複雑なタスクを確実に実行できる AI エージェントの構築は、CrewAILangGraphStrands Agents などのオープンソースフレームワークのおかげで、ますます容易になっています。しかし、有望な概念実証から、数千のユーザーに合わせてスケールできる本番対応のエージェントへと移行するには、大きな課題があります。

デベロッパーや AI エンジニアは、エージェントの中核的な機能に注力する代わりに、セッション管理、ID コントロール、メモリシステム、オブザーバビリティのために基盤インフラストラクチャの構築に数か月間を費やし、同時にセキュリティとコンプライアンスをサポートしなければなりません。

7 月 16 日、Amazon Bedrock AgentCore のプレビューを発表しました。これは、デベロッパーが Amazon Bedrock または他の場所でホストされているあらゆるフレームワークとモデルを使用して、AI エージェントを大規模、迅速、安全にデプロイおよび運用するのに役立つ、包括的な一連のエンタープライズグレードのサービスです。

より具体的に、7 月 16 日に発表した内容を次に示します:

AgentCore Runtime – セッション分離を備え、サンドボックス化された低レイテンシーのサーバーレス環境を提供し、人気のオープンソースフレームワーク、ツール、モデルを含むあらゆるエージェントフレームワークをサポートし、マルチモーダルワークロードと長時間実行エージェントを処理します。

AgentCore Memory – セッションと長期メモリを管理し、エージェントが過去のインタラクションから学習するのをサポートしつつ、モデルに関連コンテキストを提供します。

AgentCore Observability – メタデータのタグ付け、カスタムスコアリング、軌跡の検査、トラブルシューティング/デバッグフィルターを使用して、エージェント実行のステップバイステップのビジュアライゼーションを提供します。

AgentCore Identity – AI エージェントが、ユーザーに代わって、または事前に認可されたユーザーの同意を得てエージェント自身によって、AWS サービス、および GitHub、Salesforce、Slack などのサードパーティーツールやサービスに安全にアクセスできるようにします。

AgentCore Gateway – 既存の API と AWS Lambda 関数をエージェント対応ツールに変換し、MCP などのプロトコルやランタイム検出にわたる統合アクセスを提供します。

AgentCore Browser – エージェントのウェブオートメーションワークフローをスケールするためのマネージドウェブブラウザインスタンスを提供します。

AgentCore Code Interpreter – エージェントが生成したコードを実行するための独立した環境を提供します。

これらのサービスは個別に使用でき、連携するように最適化されているため、デベロッパーはコンポーネントをつなぎ合わせるために時間を費やす必要がありません。AgentCore はオープンソースまたはカスタム AI エージェントフレームワークと連携できるため、チームはエンタープライズレベルの機能を利用しながら、好みのツールを維持する柔軟性を得ることができます。これらのサービスを既存のコードに統合するために、デベロッパーは AgentCore SDK を使用できます。

AgentCore Runtime を使用して、AWS Marketplace から事前構築済みのエージェントとエージェントツールを検索、購入、実行できるようになりました。わずか数行のコードで、エージェントは AgentCore Gateway を使用して AWS Marketplace で入手できる API ベースのエージェントやツールに安全に接続できるため、コンプライアンスとコントロールを維持しながら、複雑なワークフローを実行するのに役立ちます。

AgentCore は煩雑なインフラストラクチャ作業と運用上の複雑さを排除するため、開発チームは画期的なエージェントソリューションをより迅速に市場に投入できます。

これが実際にどのように機能するのかを見てみましょう。サービスについては、使用していく中でさらに情報を共有します。

Amazon Bedrock AgentCore を使用して本番対応のカスタマーサポートアシスタントをデプロイする (プレビュー)
顧客から E メールで問い合わせがあった場合、返信には時間がかかります。カスタマーサポートは、E メールの正当性を確認し、顧客関係管理 (CRM) システムで実際の顧客を特定して、注文を確認し、製品固有のナレッジベースを使用して回答の準備に必要な情報を見つける必要があります。

AI エージェントは、内部システムに接続し、セマンティックデータソースを使用してコンテキスト情報を取得して、サポートチームのために返信案を作成することで、これらの作業を簡素化できます。このユースケースでは、Strands Agents を使用してシンプルなプロトタイプを構築しました。簡潔さのため、およびシナリオを検証するため、内部ツールは Python 関数を使用してシミュレーションされています。

デベロッパーと話をすると、多くの企業で、さまざまなユースケースをカバーする同様のプロトタイプが構築されていることがわかります。これらのプロトタイプを企業のリーダーシップにデモンストレーションし、進めることについて確認してもらった後、開発チームは本番への移行方法を定義し、セキュリティ、パフォーマンス、可用性、スケーラビリティに関する一般的な要件を満たす必要があります。ここで AgentCore が役立ちます。

ステップ 1 – AgentCore Runtime を使用してクラウドにデプロイする

AgentCore Runtime は、AI エージェントを安全にデプロイ、実行、スケールするための新しいサービスです。各ユーザーセッションが独自の保護された環境で実行されるように分離を提供することで、データ漏えいを防止するのに役立ちます。これは、機密データを扱うアプリケーションにとって重要な要件です。

さまざまなセキュリティ体制に対応するために、エージェントはさまざまなネットワーク構成を使用できます:

サンドボックス – 許可リストに登録された AWS サービスとのみ通信するため。

パブリック – マネージドインターネットアクセスを使用して実行するため。

VPC のみ (近日リリース予定) – このオプションでは、お客様の VPC でホストされているリソース、または AWS PrivateLink エンドポイント経由で接続されているリソースにアクセスできます。

エージェントをクラウドにデプロイし、AgentCore Runtime を使用して安全なサーバーレスエンドポイントを取得するために、AgentCore SDK を使用してプロトタイプに数行のコードを追加し、次を実行します:

  • AgentCore SDK をインポートする。
  • AgentCore アプリケーションを作成する。
  • エージェントを呼び出すエントリポイントとなる関数を指定する。

別のエージェントフレームワークまたはカスタムエージェントフレームワークを使用する場合は、エントリポイント関数内のエージェント呼び出しを置き換えます。

プロトタイプのコードを次に示します。AgentCore Runtime を使用するために追加した 3 行は、先頭にコメントが付いているものです。

from strands import Agent, tool
from strands_tools import calculator, current_time

# Genesis SDK をインポートします
from bedrock_agentcore.runtime import BedrockAgentCoreApp

WELCOME_MESSAGE = """
Welcome to the Customer Support Assistant! How can I help you today?
"""

SYSTEM_PROMPT = """
You are an helpful customer support assistant.
When provided with a customer email, gather all necessary info and prepare the response email.
When asked about an order, look for it and tell the full description and date of the order to the customer.
Don't mention the customer ID in your reply.
"""

@tool
def get_customer_id(email_address: str):
    if email_address == "me@example.net":
        return { "customer_id": 123 }
    else:
        return { "message": "customer not found" }

@tool
def get_orders(customer_id: int):
    if customer_id == 123:
        return [{
            "order_id": 1234,
            "items": [ "smartphone", "smartphone USB-C charger", "smartphone black cover"],
            "date": "20250607"
        }]
    else:
        return { "message": "no order found" }

@tool
def get_knowledge_base_info(topic: str):
    kb_info = []
    if "smartphone" in topic:
        if "cover" in topic:
            kb_info.append("To put on the cover, insert the bottom first, then push from the back up to the top.")
            kb_info.append("To remove the cover, push the top and bottom of the cover at the same time.")
        if "charger" in topic:
            kb_info.append("Input: 100-240V AC, 50/60Hz")
            kb_info.append("Includes US/UK/EU plug adapters")
    if len(kb_info) > 0:
        return kb_info
    else:
        return { "message": "no info found" }

# AgentCore アプリケーションを作成します
app = BedrockAgentCoreApp()

agent = Agent(
    system_prompt=SYSTEM_PROMPT,
    tools=[calculator, current_time, get_customer_id, get_orders, get_knowledge_base_info]
)

# エージェントを呼び出すエントリポイント関数を指定します
@app.entrypoint
def invoke(payload, context: RequestContext):
    """Handler for agent invocation"""
    user_message = payload.get(
        "prompt", "No prompt found in input, please guide customer to create a json payload with prompt key"
    )
    result = agent(user_message)
    return {"result": result.message}

if __name__ == "__main__":
    app.run()

AgentCore SDK とスターターツールキットを Python 仮想環境にインストールします:

pip install bedrock-agentcore bedrock-agentcore-starter-toolkit

仮想環境をアクティブ化すると、スターターツールキットによって提供される AgentCore コマンドラインインターフェイス (CLI) にアクセスできるようになります。

まず、agentcore configure --entrypoint my_agent.py -er <IAM_ROLE_ARN> を使用してエージェントを設定し、エージェントが引き受ける AWS Identity and Access Management (IAM) ロールを渡します。この場合、エージェントは、モデルを呼び出すために Amazon Bedrock にアクセスできる必要があります。このロールは、Amazon Simple Storage Service (Amazon S3) バケットや Amazon DynamoDB テーブルなど、エージェントが使用する他の AWS リソースへのアクセスを付与できます。

agentcore launch --local を使用してエージェントをローカルで起動します。ローカルで実行している場合は、agentcore invoke --local <PAYLOAD> を使用してエージェントとインタラクションできます。ペイロードはエントリポイント関数に渡されます。呼び出しの JSON 構文はエントリポイント関数で定義されていることにご留意ください。この場合、JSON ペイロードで prompt を検索しますが、ユースケースに応じて異なる構文を使用することもできます。

ローカルテストで問題がなければ、genesis launch を使用してクラウドにデプロイします。

デプロイが成功し、エンドポイントが作成されたら、agentcore status を使用してエンドポイントのステータスを確認し、agentcore invoke <PAYLOAD> を使用してエンドポイントを呼び出します。例えば、呼び出しでカスタマーサポートリクエストを渡します:

agentcore invoke '{"prompt": "From: me@example.net – Hi, I bought a smartphone from your store.I am traveling to Europe next week, will I be able to use the charger? Also, I struggle to remove the cover.Thanks, Danilo"}'

ステップ 2 – コンテキストのメモリを有効にする

エージェントが AgentCore Runtime にデプロイされた後、新しい呼び出しで使用できるようにコンテキストを永続化する必要があります。AgentCore Memory を追加し、その短期メモリ機能を使用してセッションコンテキストを維持します。

まず、会話用のメモリクライアントとメモリストアを作成します:

from bedrock_agentcore.memory import MemoryClient

memory_client = MemoryClient(region_name="us-east-1")

memory = memory_client.create_memory_and_wait(
    name="CustomerSupport",
    description="Customer support conversations"
)

これで、create_event を使用して、エージェントのインタラクションを短期メモリに保存できるようになりました:

memory_client.create_event(
    memory_id=memory.get("id"), # メモリストアを識別します
    actor_id="user-123",        # ユーザーを識別します
    session_id="session-456",   # セッションを識別します
    messages=[
        ("Hi, ...", "USER"),
        ("I'm sorry to hear that...", "ASSISTANT"),
        ("get_orders(customer_id='123')", "TOOL"),
        . . .
    ]
)

list_events を使用して、会話の最新のターンを短期メモリからロードできます:

conversations = memory_client.list_events(
    memory_id=memory.get("id"), # メモリストアを識別します
    actor_id="user-123",        # ユーザーを識別します 
    session_id="session-456",   # セッションを識別します
    max_results=5               # 取得する最新のターンの数
)

この機能により、エージェントは長時間のセッションでもコンテキストを維持できます。ただし、ユーザーが新しいセッションで戻ってくると、会話は空白の状態から始まります。エージェントは、長期メモリを使用して、複数のインタラクションにわたるインサイトを保持することで、ユーザーエクスペリエンスをパーソナライズできます。

会話からメモリを抽出するために、ユーザーの好み、要約、セマンティックメモリ (事実を取得するため) 用の組み込み AgentCore Memory ポリシーを使用するか、または特殊なニーズに合わせてカスタムポリシーを作成できます。データは、データセグメンテーション用の名前空間ベースのストレージを使用して暗号化された上で保存されます。

以前のメモリストア作成コードを変更し、セマンティックメモリ戦略を渡すことで長期保存機能を含めます。なお、既存のメモリストアを更新して戦略を追加することができます。その場合、新しい戦略はより新しいイベントに適用されます。

memory = memory_client.create_memory_and_wait(
    name="CustomerSupport",
    description="Customer support conversations",
    strategies=[{
        "semanticMemoryStrategy": {
            "name": "semanticFacts",
            "namespaces": ["/facts/{actorId}"]
        }
    }]
)

メモリストアのために長期メモリが設定された後、create_event を呼び出すと、それらの戦略が自動的に適用され、会話から情報が抽出されます。その後、セマンティッククエリを使用して、会話から抽出されたメモリを取得できます:

memories = memory_client.retrieve_memories(
    memory_id=memory.get("id"),
    namespace="/facts/user-123",
    query="smartphone model"
)

このように、エージェントが CRM の範囲外にある顧客の好みや事実を記憶し、この情報を使用して返信を改善するようにすることで、ユーザーエクスペリエンスを迅速に改善できます。

ステップ 3 – ID およびアクセスコントロールを追加する

適切な ID コントロールがない場合、エージェントから内部ツールへのアクセスは常に同じアクセスレベルを使用します。セキュリティ要件を満たすために、AgentCore Identity を統合し、ユーザーまたはエージェントの ID コンテキストにスコープ設定されたアクセスコントロールをエージェントが使用できるようにします。

ID クライアントをセットアップし、ワークロード ID を作成します。これは、AgentCore Identity システム内でエージェントを表す一意の識別子です:

from bedrock_agentcore.services.identity import IdentityClient

identity_client = IdentityClient("us-east-1")
workload_identity = identity_client.create_workload_identity(name="my-agent")

その後、認証情報プロバイダーを設定します。例:

google_provider = identity_client.create_oauth2_credential_provider(
    {
        "name": "google-workspace",
        "credentialProviderVendor": "GoogleOauth2",
        "oauth2ProviderConfigInput": {
            "googleOauth2ProviderConfig": {
                "clientId": "your-google-client-id",
                "clientSecret": "your-google-client-secret",
            }
        },
    }
)

perplexity_provider = identity_client.create_api_key_credential_provider(
    {
        "name": "perplexity-ai",
        "apiKey": "perplexity-api-key"
    }
)

アクティビティを実行するためにアクセストークンを必要とする関数に対して、@requires_access_token Python デコレーターを追加できます (プロバイダー名、スコープなどを渡します)。

このアプローチを使用することで、エージェントは、会社の既存の ID インフラストラクチャを通じて ID を検証し、個別の認証済み ID として動作するとともに、スコープ設定された許可を使用して動作して、複数の ID プロバイダー (Amazon CognitoOktaMicrosoft Entra ID など) や、AWS およびサードパーティーのツールやサービス (Slack、GitHub、Salesforce など) を含むサービス境界を統合できます。

エンドユーザーおよびエージェントビルダーエクスペリエンスを合理化しながら、堅牢かつ安全なアクセスコントロールを提供するために、AgentCore Identity は、ユーザーのトークンを保存し、エージェントが安全に取得できるようにする安全なトークンボールトを実装します。

OAuth 2.0 互換のツールおよびサービスでは、まず、エージェントがユーザーに代わってアクションを実行するための同意をユーザーが付与すると、AgentCore Identity はツールによって発行されたユーザーのトークンを収集してボールトに保存し、エージェントの OAuth クライアント認証情報も安全に保管します。エージェントは独自の ID で動作し、ユーザーによって呼び出されると、必要に応じてこれらのトークンにアクセスできるため、ユーザーの同意を頻繁に得る必要性が軽減されます。

ユーザートークンが失効すると、AgentCore Identity はユーザーに対して新しい認可プロンプトをトリガーし、更新されたユーザートークンをエージェントが取得できるようにします。API キーを使用するツールでも、AgentCore Identity はこれらのキーを安全に保管し、必要に応じてそれらのキーを取得するための制御されたアクセスをエージェントに付与します。この安全な保管により、堅牢なアクセスコントロールを維持しながら、ユーザーエクスペリエンスを効率化できるため、エージェントはさまざまなツールやサービスで効率的に動作できます。

ステップ 4 – AgentCore Gateway を使用してエージェント機能を拡張する

これまで、すべての内部ツールはコード内でシミュレートされていました。Strands Agents を含む多くのエージェントフレームワークは、リモートツールに接続するため MCP をネイティブにサポートしています。MCP インターフェイスを介して内部システム (CRM や注文管理など) にアクセスするために、私は AgentCore Gateway を使用します。

AgentCore Gateway を使用すると、エージェントは、Smithy モデル、Lambda 関数、内部 API、および OpenAPI 仕様を使用するサードパーティープロバイダーを使用して AWS サービスにアクセスできます。同サービスは、着信リクエストとターゲットリソースに対する発信接続の両方のために安全なアクセスコントロールを実現することを目的として、二重認証モデルを採用しています。Lambda 関数は、外部システム (特に標準 API がないアプリケーションや、情報を取得するために複数のステップを実行する必要があるアプリケーション) を統合するために使用できます。

AgentCore Gateway は、認証、認可、スロットリング、カスタムリクエスト/レスポンス変換 (基盤となる API 形式に合わせるため)、マルチテナンシー、ツール選択など、同サービスがなければほとんどのお客様が独自に構築しなければならないであろう分野横断的な機能を簡単に使用できるようにします。

ツール選択機能は、特定のエージェントのタスクに最も適したツールを見つけるのに役立ちます。AgentCore Gateway は、これらすべてのツールにわたって統一された MCP インターフェイスを提供し、AgentCore Identity を使用して、AWS サービスのように OAuth を標準でサポートしていないツールに OAuth インターフェイスを提供します。

ステップ 5 – AgentCore Code Interpreter および Browser ツールを使用して機能を追加する

顧客のリクエストに回答するために、カスタマーサポートエージェントは、計算を実行する必要があります。これを簡素化するために、AgentCode SDK を使用して AgentCore Code Interpreter に対するアクセスを追加します。

同様に、エージェントによって必要とされる一部の統合は、プログラムで呼び出せる API を実装しておらず、ウェブインターフェイスを通じてアクセスする必要があります。エージェントがこれらのウェブサイトを自律的にナビゲートできるように、AgentCore Browser に対するアクセスを付与します。

ステップ 6 – オブザーバビリティを使用して可視性を得る

エージェントが本番に移行したので、そのアクティビティとパフォーマンスについての可視性が必要です。AgentCore は、デベロッパーが本番でエージェントのパフォーマンスを効果的にデバッグ、監査、モニタリングするのに役立つよう、強化されたオブザーバビリティを提供します。セッション数、レイテンシー、期間、トークン使用量、エラー率、コンポーネントレベルのレイテンシーとエラーの内訳など、重要な運用メトリクスを追跡するためのダッシュボードが組み込まれています。また、AgentCore は、エンドツーエンドのトレースだけでなく、ツールの呼び出し、メモリなど、エージェントワークフローの各ステップをキャプチャする「スパン」もキャプチャして視覚化することで、エージェントの動作を可視化します。

このサービスが提供する組み込みダッシュボードは、パフォーマンスのボトルネックを明らかにし、特定のインタラクションが失敗し得る理由を特定するのに役立ちます。これにより、継続的な改善が可能になり、問題が発生した場合の平均検出時間 (MTTD) と平均是正時間 (MTTR) を短縮できます。

AgentCore は、エージェントのテレメトリデータを、Amazon CloudWatchDatadogLangSmithLangfuse などの既存のオブザーバビリティプラットフォームと統合するのに役立つよう、OpenTelemetry をサポートしています。

ステップ 7 – まとめ

このジャーニーを通じて、ローカルプロトタイプを本番対応システムに変革しました。AgentCore のモジュール型アプローチを採用することで、既存のエージェントコードを維持しながら、基本的なデプロイから、高度なメモリ、ID 管理、ツール統合まで、エンタープライズ要件を段階的に実装できました。

知っておくべきこと
Amazon Bedrock AgentCore は、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (シドニー)、および欧州 (フランクフルト) において、プレビューでご利用いただけます。AgentCore サービスは、AWS マネジメントコンソールAWS コマンドラインインターフェイス (AWS CLI)AWS SDK を通じて、または AgentCore SDK を介してご利用いただけます。

AgentCore サービスは、2025 年 9 月 16 日まで無料でお試しいただけます。AgentCore の使用の一環として使用される追加の AWS サービスには、標準の AWS 料金が適用されます (例えば、AgentCore Observability については CloudWatch の料金が適用されます)。2025 年 9 月 17 日より、AWS は AgentCore サービスの使用料金をこのページに基づいて請求します。

構築しようとしているのが、カスタマーサポートエージェント、ワークフローオートメーション、AI を使用した革新的なエクスペリエンスのいずれであっても、AgentCore は、プロトタイプから本番に自信をもって移行するために必要な基盤を提供します。

詳細を確認し、本番対応エージェントのデプロイを開始するには、AgentCore ドキュメントにアクセスしてください。コード例と統合ガイドについては、AgentCore サンプル GitHub リポジトリをご覧ください。

フィードバックを提供したり、ユースケースについて議論したりするために、AgentCore Preview Discord サーバーにぜひご参加ください。皆様からのご意見をお待ちしております!

Danilo

原文はこちらです。