Skip to content

Python Agent

Filter this guidePick generator option values to hide sections that don't apply.

ツールを使用してエージェントを構築するためのPython AIエージェントを生成し、オプションでAmazon Bedrock AgentCore Runtimeにデプロイします。frameworkオプションでエージェントフレームワークを選択できます:Strands(デフォルト)またはLangChainLangGraph上に構築)。

ジェネレーターはサーバーprotocolを介してエージェントを公開します。両方のフレームワークはHTTP(デフォルト)、他のA2A互換エージェントとの相互運用性のためのAgent-to-Agent (A2A)プロトコル、およびCopilotKitを介した直接的なフロントエンド統合のためのAG-UIプロトコルをサポートしています。

2つの方法でPython Agentを生成できます:

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - py#agent
  5. 必須パラメータを入力
    • クリック Generate
    パラメータデフォルト説明
    project 必須string-Agentを追加するプロジェクト
    framework strands | langchainstrands使用するエージェントSDK。
    name string-Agentの名前(デフォルト: agent)
    auth iam | cognitoiamエージェントとの認証に使用する方法。infraが設定されている場合にのみ適用されます(infraがnoneの場合は無視されます)。
    protocol http | a2a | ag-uihttpAgentのサーバープロトコル。HTTPはFastAPI HTTPサーバーを公開します。A2AはAgent-to-Agentプロトコルサーバーを公開します。AG-UIは直接フロントエンド統合のためのAgent-User Interactionプロトコルサーバーを公開します。
    iac inherit | cdk | terraforminherit優先するIaCプロバイダー。デフォルトでは、初期選択から継承されます。
    infra agentcore | noneagentcoreエージェントをホストするインフラストラクチャのタイプ。
    preferInstallDependencies booleantrueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

    既存のPythonプロジェクトに以下のファイルが追加されます。生成されるファイルは選択したprotocolによって異なります:

    protocol = http
    • Directoryyour-project/
      • Directoryyour_module/
        • Directoryagent/(指定した場合はカスタム名)
          • __init__.py Pythonパッケージ初期化ファイル
          • init.py CORSとエラーハンドリングミドルウェアを備えたFastAPIアプリケーション設定
          • agent.py サンプルツール付きメインエージェント定義
          • main.py Bedrock AgentCore Runtime用FastAPIエントリーポイント
          • Dockerfile エージェントホスティング用Dockerfile(infraNoneの場合は生成されない)
      • pyproject.toml Strands依存関係が追加された設定ファイル
      • project.json エージェントサーブターゲットが追加された設定ファイル
    protocol = a2a

    エントリーポイントはA2Aプロトコル経由でエージェントを公開します(StrandsはStrands A2A Serverを使用し、LangChainはグラフをa2a-sdkエグゼキューターでラップします)。FastAPIアプリにマウントされます:

    • Directoryyour-project/
      • Directoryyour_module/
        • Directoryagent/(指定した場合はカスタム名)
          • __init__.py Pythonパッケージ初期化ファイル
          • agent.py サンプルツール付きメインエージェント定義
          • main.py A2Aサーバーエントリーポイント
          • Dockerfile エージェントホスティング用Dockerfile(infraNoneの場合は生成されない)
      • pyproject.toml フレームワークとA2A依存関係が追加された設定ファイル
      • project.json エージェントサーブターゲットが追加された設定ファイル
    protocol = ag-ui

    エントリーポイントはCopilotKitとの直接的なフロントエンド統合のためにAG-UIプロトコル経由でエージェントを公開します。Strandsエージェントはag-ui-strands統合を使用し、LangChainエージェントはag-ui-langgraphを使用します:

    • Directoryyour-project/
      • Directoryyour_module/
        • Directoryagent/(指定した場合はカスタム名)
          • __init__.py Pythonパッケージ初期化ファイル
          • agent.py サンプルツール付きメインエージェント定義
          • main.py AG-UIサーバーエントリーポイント
          • Dockerfile エージェントホスティング用Dockerfile(infraNoneの場合は生成されない)
      • pyproject.toml フレームワークとAG-UI依存関係が追加された設定ファイル
      • project.json エージェントサーブターゲットが追加された設定ファイル
    infra = agentcore

    このジェネレータは選択した iac に基づいてInfrastructure as Codeを生成するため、packages/common に関連するCDKコンストラクトまたはTerraformモジュールを含むプロジェクトを作成します。

    共通のInfrastructure as Codeプロジェクトは以下の構造を持ちます:

    • Directorypackages/common/constructs
      • Directorysrc
        • Directoryapp/ プロジェクト/ジェネレータ固有のインフラストラクチャ用コンストラクト
        • Directorycore/ app 内のコンストラクトで再利用される汎用コンストラクト
        • index.ts app からコンストラクトをエクスポートするエントリーポイント
      • project.json プロジェクトのビルドターゲットと設定

    Agentのデプロイ用に以下のファイルが生成されます:

    • Directorypackages/common/constructs/src
      • Directoryapp
        • Directoryagents
          • Directory<project-name>
            • <project-name>.ts エージェントデプロイ用CDKコンストラクト
    infra = none

    infranoneを選択した場合、CDKコンストラクトやTerraformモジュールは生成されません。Agentはローカルでのみ実行できます。このモードでは、認証するホストされたエンドポイントが存在しないため、authオプションは無視されます。

    Bedrock AgentCore Runtimeにデプロイすると、エージェントはコンテナイメージにビルドされ、Amazon ECRにプッシュされ、AgentCore Runtimeで実行されます。クライアントはAgentCore Runtimeのデータプレーンエンドポイントを呼び出し、リクエストがエージェントに転送されます。エージェントはモデル推論のためにAmazon Bedrockを呼び出し、ツール、MCPサーバー、またはダウンストリームAPIを呼び出すこともあります。

    ClientECRAgent(AgentCore Runtime)Bedrock(Model Inference)CloudWatch(Logs, Metrics) Containerimage InvokeModel

    agent.pyを編集してツールの追加、モデルの設定、システムプロンプトのカスタマイズができます。APIは選択したフレームワークによって異なります。

    ツールはAIエージェントがアクションを実行するために呼び出す関数です。両方のフレームワークはツールを定義するためにデコレータベースのアプローチを使用し、関数名とdocstringからツール名と説明を導出し、型ヒントから入力スキーマを生成します。

    from strands import Agent, tool
    @tool
    def calculate_sum(numbers: list[int]) -> int:
    """数値リストの合計を計算"""
    return sum(numbers)
    @tool
    def get_weather(city: str) -> str:
    """都市の天気情報を取得"""
    # 天気API連携をここに実装
    return f"{city}の天気:晴れ、25°C"
    # エージェントにツールを追加
    agent = Agent(
    system_prompt="様々なツールにアクセスできる便利なアシスタントです。",
    tools=[calculate_sum, get_weather],
    )

    Strandsはstrands-toolsパッケージを通じてプリビルドツールのコレクションを提供します:

    from strands_tools import current_time, http_request, file_read
    agent = Agent(
    system_prompt="便利なアシスタントです。",
    tools=[current_time, http_request, file_read],
    )

    デフォルトではStrandsエージェントはClaude 4 Sonnetを使用しますが、モデルプロバイダーをカスタマイズできます。設定オプションについてはStrandsドキュメントのモデルプロバイダーを参照してください:

    from strands import Agent
    from strands.models import BedrockModel
    # BedrockModelの作成
    bedrock_model = BedrockModel(
    model_id="anthropic.claude-sonnet-4-20250514-v1:0",
    region_name="us-west-2",
    temperature=0.3,
    )
    agent = Agent(model=bedrock_model)

    py#mcp-serverts#mcp-serverジェネレーターで作成したMCPサーバーを利用する場合、connectionジェネレーターを使用できます。これにより、両方のフレームワークでMCPサーバーのツールがエージェントに接続されます。

    1. インストール Nx Console VSCode Plugin まだインストールしていない場合
    2. VSCodeでNxコンソールを開く
    3. クリック Generate (UI) "Common Nx Commands"セクションで
    4. 検索 @aws/nx-plugin - connection
    5. 必須パラメータを入力
      • クリック Generate

      接続の設定方法の詳細については、connectionジェネレーターガイドを参照してください。

      その他のMCPサーバーについては、StrandsまたはLangChainのMCPドキュメントを参照してください。

      エージェントの詳細な作成方法については、StrandsまたはLangChainのドキュメントを参照してください。

      エージェントのサーバープロトコルは通信方法を決定します。すべてのオプションはFastAPIで提供されますが、エントリーポイントが異なります:

      • HTTP(デフォルト):カスタム/invocationsエンドポイント、CORS、ストリーミングを備えた標準的なFastAPIサーバー。カスタムクライアント統合に最適です。
      • A2A:FastAPIアプリにマウントされたAgent-to-Agentサーバー(StrandsはStrands A2A Serverを使用し、LangChainはフレームワーク非依存のa2a-sdkを使用します)。エージェントが他のA2A互換エージェントから検出・呼び出し可能である必要がある場合に最適です。
      • AG-UI:SSE経由のAG-UIプロトコル(Strandsはag-ui-strandsを使用し、LangChainはag-ui-langgraphを使用します)。ReactウェブサイトでのCopilotKitとの直接的なフロントエンド統合に最適です。

      サーバーエントリーポイントはフレームワークによって異なります(Strandsはコンテキスト管理されたAgentを生成し、LangChainはコンパイルされたcreate_agentグラフを駆動します)が、各プロトコルの外部契約は同じです。

      すべてのプロトコルは、AgentCoreランタイムのヘルスチェック契約用に/pingを公開します。A2Aエージェントはポート9000でリッスンします。HTTPとAG-UIエージェントはポート8080でリッスンします。生成されるDockerfileとインフラストラクチャは自動的に設定されます。

      protocol = http

      FastAPIサーバー(HTTPプロトコル)

      Section titled “FastAPIサーバー(HTTPプロトコル)”

      生成されるHTTPサーバーには以下が含まれます:

      • CORSミドルウェア付きFastAPIアプリケーション設定
      • エラーハンドリングミドルウェア
      • OpenAPIスキーマ生成
      • ヘルスチェックエンドポイント(/ping
      • エージェント呼び出しエンドポイント(/invocations

      Pydanticによる呼び出し入出力のカスタマイズ

      Section titled “Pydanticによる呼び出し入出力のカスタマイズ”

      エージェントの呼び出しエンドポイントはPydanticモデルを使用してリクエストとレスポンスのスキーマを定義・検証します。main.pyでこれらのモデルをカスタマイズしてエージェントの要件に合わせることができます。

      デフォルトのInvokeInputモデルはプロンプトを受け取ります。

      from pydantic import BaseModel
      class InvokeInput(BaseModel):
      prompt: str

      このモデルを拡張して、エージェントに必要な追加フィールドを含めることができます。

      セッションIDはx-amzn-bedrock-agentcore-runtime-session-id HTTPヘッダーから抽出されます。これはBedrock AgentCore Runtimeセッション契約に準拠しています。ヘッダーが提供されない場合は、フォールバックとしてランダムなUUIDが生成されます。

      ストリーミングレスポンスの場合、ジェネレーターはJsonStreamingResponseを提供し、PydanticモデルをJSON Lines形式(application/jsonl)に自動的にシリアライズします。この形式はOpenAPI 3.2のストリーミング仕様と互換性があり、生成されたTypeScriptクライアントとシームレスに連携します。

      デフォルトでは、エージェントはエージェントのレスポンステキストを含むStreamChunkオブジェクトを生成します:

      class StreamChunk(BaseModel):
      content: str

      ニーズに合わせてStreamChunkモデルをカスタマイズできます:

      from pydantic import BaseModel
      class StreamChunk(BaseModel):
      content: str
      timestamp: str
      token_count: int

      FastAPIでのネイティブサポートのための機能リクエストが公開されています。

      ジェネレーターにはPingStatus定数用にBedrock AgentCore Python SDKへの依存関係が含まれています。必要に応じて、FastAPIの代わりにBedrockAgentCoreAppを使用することも簡単ですが、型安全性が失われることに注意してください。

      SDKの詳細はドキュメントを参照してください。

      protocol = a2a

      生成されるmain.pyは、FastAPIアプリにA2Aサーバーをマウントし、/pingも公開します。StrandsエージェントはA2AServerを使用し、LangChainエージェントはコンパイルされたグラフをa2a-sdkAgentExecutorでラップします。AgentCoreにデプロイされると、エントリーポイントはAppConfigからランタイムのパブリックARNを解決し、エージェントカードで通知します。

      ほとんどのユーザーはこのファイルを変更する必要はありません。ツールやシステムプロンプトを変更するにはagent.pyを編集してください。A2Aサーバーは、エージェントのnamedescriptionからエージェントカード(/.well-known/agent-card.json)を生成します。

      protocol = ag-ui

      AG-UIサーバー(AG-UIプロトコル)

      Section titled “AG-UIサーバー(AG-UIプロトコル)”

      生成されるmain.pyは、Server-Sent Events(SSE)経由でAG-UIイベントをストリーミングする単一のPOSTエンドポイント、およびAgentCoreランタイムのヘルスチェック用の/pingを公開します。配線はフレームワークによって異なります:

      • StrandsAgentag_ui_strands.StrandsAgentでラップし、create_strands_app()を介してFastAPIアプリを作成します。
      • LangChain:コンパイルされたグラフをag_ui_langgraph.LangGraphAgentでラップし、手作りのFastAPI /invocationsループから提供します。

      ほとんどのユーザーはこのファイルを変更する必要はありません。ツールやシステムプロンプトを変更するにはagent.pyを編集してください。

      Agent(およびそれに接続されているすべてのもの)をローカルで実行するには、プロジェクトのdevターゲットを使用します:

      Terminal window
      pnpm nx dev your-project

      プロジェクトに複数のコンポーネント(エージェント、MCPサーバーなど)を追加している場合、これによりすべてが起動されます。このエージェントだけを実行するには、その<your-agent-name>-devターゲットを指定します:

      Terminal window
      pnpm nx agent-dev your-project

      これはuv runを使用してBedrock AgentCore Python SDKでAgentを実行します。

      ジェネレーターは、エージェントとのインタラクティブなターミナルチャットに入る<your-agent-name>-chat Nxターゲットを設定します。

      チャットターゲットは単独で実行されます。デフォルトではローカルで実行中のエージェントに接続するため、まず(別のターミナルで)エージェントの<your-agent-name>-devターゲットを起動してください:

      Terminal window
      pnpm nx agent-dev your-project

      次に、別のターミナルでチャットを開始します:

      Terminal window
      pnpm nx run your-project:agent-chat

      ジェネレーターは、すべてのプロトコルに対してscripts/<your-agent-name>/chat.tsを生成します。デフォルトではローカルエージェントに接続し、RUNTIME_CONFIG_APP_IDが設定されている場合はデプロイされたエージェントに接続します(以下のデプロイされたエージェントとのチャットを参照)。

      HTTPエージェントの場合、チャットスクリプトはエージェントのOpenAPI仕様から生成された型安全なTypeScriptクライアントを使用します。ジェネレーターは以下も生成します:

      • scripts/<your-agent-name>_openapi.py — エージェントのOpenAPI仕様をエクスポートする小さなスクリプト
      • <your-agent-name>-openapi Nxターゲット(これを実行)
      • <your-agent-name>-generate-client Nxターゲット(scripts/<your-agent-name>/generated/に型安全なTypeScriptクライアントを生成)

      エージェントの入力形状をカスタマイズする場合(例:InvokeInputに新しいフィールドを追加)、エージェント呼び出し時に新しいフィールドを渡すようにchat.tsを更新すると、残りは自動的に機能します。

      infra = agentcore

      デプロイされたエージェントとのチャット

      Section titled “デプロイされたエージェントとのチャット”

      Bedrock AgentCoreにデプロイされたエージェントとチャットするには、RUNTIME_CONFIG_APP_ID環境変数をデプロイのAppConfigアプリケーションID(デプロイされたスタックからRuntimeConfigApplicationIdとして出力される)に設定します。チャットスクリプトはランタイム設定からエージェントのランタイムARNを解決し、デプロイされたエンドポイントに接続します:

      IAM認証エージェントの場合、リクエストはデフォルトのAWS認証情報を使用してSigV4で署名されます。環境にランタイムを呼び出す権限を持つAWS認証情報があることを確認してください:

      Terminal window
      RUNTIME_CONFIG_APP_ID=<app-id> pnpm nx run your-project:agent-chat
      infra = agentcore

      Bedrock AgentCore Runtimeへのデプロイ

      Section titled “Bedrock AgentCore Runtimeへのデプロイ”

      infraagentcoreを選択した場合、関連するCDKまたはTerraformインフラストラクチャが生成され、AgentをAmazon Bedrock AgentCore Runtimeにデプロイするために使用できます。

      エージェント用のCDKコンストラクトが生成されます。名前はジェネレーター実行時に選択したnameに基づくか、デフォルトでは<ProjectName>Agentになります。

      このCDKコンストラクトをCDKアプリケーションで使用できます:

      import { MyProjectAgent } from ':my-scope/common-constructs';
      export class ExampleStack extends Stack {
      constructor(scope: Construct, id: string) {
      new MyProjectAgent(this, 'MyProjectAgent');
      }
      }

      ジェネレーターは、Agentの認証を設定するためのauthオプションを提供します。エージェントを生成する際に、IAM(デフォルト)またはCognito認証を選択できます。

      デフォルトでは、AgentはIAM認証を使用して保護されます。引数なしで単純にデプロイしてください:

      import { MyProjectAgent } from '@my-scope/common-constructs';
      export class ExampleStack extends Stack {
      constructor(scope: Construct, id: string) {
      new MyProjectAgent(this, 'MyProjectAgent');
      }
      }

      grantInvokeAccessメソッドを使用して、Bedrock AgentCore Runtime上でエージェントを呼び出すアクセス権を付与できます。例:

      import { MyProjectAgent } from '@my-scope/common-constructs';
      export class ExampleStack extends Stack {
      constructor(scope: Construct, id: string) {
      const agent = new MyProjectAgent(this, 'MyProjectAgent');
      const lambdaFunction = new Function(this, ...);
      agent.grantInvokeAccess(lambdaFunction);
      }
      }

      Cognito認証を選択すると、ジェネレーターはCognito認証を使用するようにエージェントを設定します。

      生成されたコンストラクトは、Cognito認証を設定するidentityプロパティを受け入れます:

      import { MyProjectAgent, UserIdentity } from '@my-scope/common-constructs';
      export class ExampleStack extends Stack {
      constructor(scope: Construct, id: string) {
      const identity = new UserIdentity(this, 'Identity');
      new MyProjectAgent(this, 'MyProjectAgent', {
      identity,
      });
      }
      }

      UserIdentityコンストラクトは、ts#website#authジェネレーターを使用して生成するか、独自のCDK UserPoolUserPoolClientを作成できます。

      Bedrock AgentCore Runtime向けにAgentをビルドするため、プロジェクトにbundleターゲットが追加されます:

      • uv exportでPython依存関係をrequirements.txtファイルにエクスポート
      • uv pip installでターゲットプラットフォーム(aarch64-manylinux_2_28)向け依存関係をインストール

      Strandsエージェント固有のdockerターゲットも追加され、DockerfileとバンドルされたアーティファクトをDockerコンテキストディレクトリにコピーします。これによりDockerfileがビルド出力と同じ場所に配置され、CDKがAgentRuntimeArtifact.fromAssetを使用してDockerイメージを直接ビルドできるようになります。

      このプロジェクト用にビルドされたDockerイメージは、Trivyを使用して脆弱性をスキャンできます。TrivyはECRホスト版Trivyイメージから実行されます。

      trivyターゲットがプロジェクトに追加され、ビルドされたイメージをスキャンし、HIGHまたはCRITICALの深刻度の脆弱性が見つかった場合、非ゼロで終了します。生成されたDockerfileは、生成時点でこれらの深刻度の既知の修正可能な脆弱性がないベースイメージを使用し、バンドルされたツール(npmなど)をアップグレードしてその状態を維持します。

      スキャンはイメージビルドと同じコンテナエンジン(dockerまたはfinch)を使用するため、追加のツールは必要ありません。スキャンはイメージが変更されたときにのみ再実行されるため、変更されていないイメージは再スキャンされません。提供されているtrivyルートスクリプトはワークスペース内のすべてのイメージをスキャンします:

      Terminal window
      pnpm trivy

      特定の脆弱性を抑制したい場合があります。例えば、まだ修正が利用できず、リスクを許容可能と評価した場合などです。

      プロジェクトのルート(つまりproject.jsonの隣)にある.trivyignoreファイルに脆弱性ID(1行に1つ)を追加してください:

      .trivyignore
      # node-tar arbitrary file write - not exploitable in our usage
      CVE-2024-XXXXX

      検出結果のフィルタリングの詳細については、Trivyフィルタリングドキュメントを参照してください。

      エージェントはDockerfileで自動計装を設定することで、AWS Distro for Open Telemetry(ADOT)を使用したオブザーバビリティが自動的に設定されます。

      トレースはCloudWatch AWSコンソールのメニューから「GenAI Observability」を選択して確認できます。トレースが表示されるにはTransaction Searchを有効にする必要があります。

      詳細はAgentCoreオブザーバビリティドキュメントを参照してください。

      protocol = http

      <your-agent-name>-serveターゲット経由でローカル実行中のエージェントを呼び出すには、ローカルエージェントが実行されているポートの/invocationsに単純なPOSTリクエストを送信できます。例えば、curlを使用:

      Terminal window
      curl -N -X POST http://localhost:8081/invocations \
      -d '{"prompt": "what is 3 + 5?"}' \
      -H "Content-Type: application/json"

      デプロイされたエージェントの呼び出し

      Section titled “デプロイされたエージェントの呼び出し”

      Bedrock AgentCore Runtimeにデプロイされたエージェントを呼び出すには、URLエンコードされたランタイムARNを使用して、Bedrock AgentCore RuntimeデータプレーンエンドポイントにPOSTリクエストを送信します。

      ランタイムARNは、以下のようにインフラストラクチャから取得できます:

      import { CfnOutput } from 'aws-cdk-lib';
      import { MyProjectAgent } from '@my-scope/common-constructs';
      export class ExampleStack extends Stack {
      constructor(scope: Construct, id: string) {
      const agent = new MyProjectAgent(this, 'MyProjectAgent');
      new CfnOutput(this, 'AgentArn', {
      value: agent.agentCoreRuntime.agentRuntimeArn,
      });
      }
      }

      ARNは次の形式になります: arn:aws:bedrock-agentcore:<region>:<account>:runtime/<agent-runtime-id>

      次に、:%3Aに、/%2Fに置き換えることで、ARNをURLエンコードできます。

      エージェントを呼び出すためのBedrock AgentCore RuntimeデータプレーンURLは次のとおりです:

      https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations

      このURLを呼び出す正確な方法は、使用する認証方法によって異なります。

      IAM認証の場合、リクエストはAWS Signature Version 4(SigV4)を使用して署名する必要があります。

      Terminal window
      acurl <region> bedrock-agentcore -N -X POST \
      'https://bedrock-agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations' \
      -d '{"prompt": "what is 3 + 5?"}' \
      -H 'Content-Type: application/json'
      上記のacurlコマンドの設定詳細についてはこちらをクリック

      ReactウェブサイトからAgentを呼び出す場合、connectionジェネレーターを使用できます。これにより、正しい認証(IAMまたはCognito)を備えたクライアントが自動的にセットアップされます。

      1. インストール Nx Console VSCode Plugin まだインストールしていない場合
      2. VSCodeでNxコンソールを開く
      3. クリック Generate (UI) "Common Nx Commands"セクションで
      4. 検索 @aws/nx-plugin - connection
      5. 必須パラメータを入力
        • クリック Generate

        接続の設定方法の詳細については、connectionジェネレーターガイドを参照してください。

        protocol = a2a

        A2Aエージェントをツールとして呼び出す

        Section titled “A2Aエージェントをツールとして呼び出す”

        このエージェントからリモートA2Aエージェント(TypeScriptまたはPython)に作業を委譲するには、connectionジェネレーターを使用します。これにより、ターゲットエージェント用のSigV4認証クライアントが提供され、このエージェントのagent.pyをAST変換してリモートA2Aエージェントを@toolデコレートされたデリゲートとして登録します。

        1. インストール Nx Console VSCode Plugin まだインストールしていない場合
        2. VSCodeでNxコンソールを開く
        3. クリック Generate (UI) "Common Nx Commands"セクションで
        4. 検索 @aws/nx-plugin - connection
        5. 必須パラメータを入力
          • クリック Generate

          接続の設定方法の詳細については、connectionジェネレーターガイドを参照してください。

          protocol = ag-ui

          ReactウェブサイトからAG-UIエージェントを呼び出すには、connectionジェネレーターを使用します。これにより、正しい認証(IAMまたはCognito)を備えたデプロイ済みエージェント用に設定されたCopilotKitクライアントが接続されます。

          1. インストール Nx Console VSCode Plugin まだインストールしていない場合
          2. VSCodeでNxコンソールを開く
          3. クリック Generate (UI) "Common Nx Commands"セクションで
          4. 検索 @aws/nx-plugin - connection
          5. 必須パラメータを入力
            • クリック Generate

            接続の設定方法の詳細については、connectionジェネレーターガイドを参照してください。

            エージェントのセキュリティ保護

            Section titled “エージェントのセキュリティ保護”

            エージェントは信頼できない入力に対して動作し、ツールを通じて実際のアクションを実行できるため、最初からセキュリティを考慮する価値があります。以下のプラクティスは、生成されたエージェントに適用されます。

            モデルの入力と出力を信頼できないものとして扱う

            Section titled “モデルの入力と出力を信頼できないものとして扱う”

            プロンプトには敵対的な指示(プロンプトインジェクション)が含まれる可能性があり、モデルの出力は非決定的です。どちらもセキュリティに敏感なロジックで信頼すべきではありません:

            • 生成されたサンプルツールのように、ツールに対して厳密な入力スキーマを定義します。自由形式の文字列を受け入れるのではなく、ツールが実際に必要とするもの(列挙型、長さ制限、数値範囲)に値を制約します。
            • 検証やエンコーディングなしに、モデルの出力をシェルコマンド、SQLクエリ、コード評価、またはレンダリングされたHTMLに直接渡さないでください。
            • ツールと下流サービスで認可チェックを適用してください。モデルがアクセス権を持つツールを誤用するのを防ぐために、システムプロンプトに依存しないでください。

            Strandsのプロンプトエンジニアリング責任あるAIのガイドでは、堅牢で安全性を意識したシステムプロンプトの書き方を説明しています。

            ツールの権限を厳密にスコープする

            Section titled “ツールの権限を厳密にスコープする”

            エージェントのIAMロールには、そのツールが必要とする権限のみを付与します。提供されるCDKコンストラクトとTerraformモジュールは、この目的のためにgrant*メソッドとスコープ化されたポリシーを公開しています。たとえば、広範なマネージドポリシーをアタッチするのではなく、特定のAPIを呼び出すアクセス権をエージェントに付与します。ツールがユーザーの代わりに動作する場合は、エージェント自身の環境権限よりも、呼び出し元ユーザーのアイデンティティ(リクエストコンテキストを通じて渡される)を使用してアクションを認可することを優先してください。

            モデルの動作は予期しない方法で変化する可能性があるため、コード変更なしでモデルを迅速に無効化または交換できるように計画してください:

            • モデルIDを設定から読み取ります(たとえばMODEL_ID環境変数)。これにより、オペレーターは設定を更新することで別のモデルに切り替えたりロールバックしたりできます。
            • エージェントをフィーチャーフラグの背後に配置して、AI機能を完全に無効化できるようにします。無効化された場合は、エラーではなく汎用メッセージを返し、アプリケーションの残りの部分が適切に劣化することを確認してください。

            運用ランブックに、これらのコントロールを切り替える方法を文書化してください。

            • ユーザーデータが含まれる可能性があるため、プロンプトと補完のログ記録を避けてください。生成されたエージェントのモデルエラーログフックは、会話内容ではなくエラーメタデータのみをログに記録します。独自のログを追加する際は、このプロパティを維持してください。
            • ユーザーには汎用エラーメッセージを返し、詳細なエラーはサーバー側でログに記録します。
            • ユーザーとセッション間で会話状態を分離し、永続化されたセッションデータへのアクセスを認可します。
            • プロンプトと出力から個人を特定できる情報(PII)を編集します。Bedrock Guardrailの機密情報フィルター(以下)、またはStrandsエージェントの場合はPII Redactionガイドのアプローチを使用してください。

            Amazon Bedrock Guardrailsは、モデルの入力と出力で評価される、設定可能なコンテンツフィルター、拒否トピック、機密情報(PII)フィルターを提供します。生成されたエージェントが使用するモデルにガードレールをアタッチできます:

            agent.py
            import os
            from strands import Agent
            from strands.models import BedrockModel
            model = BedrockModel(
            model_id=os.environ.get("MODEL_ID"),
            guardrail_id=os.environ["GUARDRAIL_ID"],
            guardrail_version=os.environ.get("GUARDRAIL_VERSION", "DRAFT"),
            )
            agent = Agent(model=model)

            詳細については、StrandsのGuardrailsガイドを参照してください。

            connectionジェネレータを使用して、このプロジェクトをワークスペース内の他のプロジェクトと統合できます。このプロジェクトに関連する接続は以下の通りです:

            Strands AgentsPython
            React to Python AgentReactウェブサイトからPython Agentを呼び出す
            CopilotKit
            React to AG-UI AgentCopilotKit経由でAG-UIプロトコルを公開するAgentをReactウェブサイトから呼び出す
            Strands AgentsPythonModel Context Protocol
            Python Agent to MCPPython AgentをMCPサーバーに接続する
            Strands AgentsPythonAgent2Agent
            Python Agent to A2A AgentPython Agentをリモート A2A エージェントに接続する
            Strands AgentsTypeScriptAgent2Agent
            TypeScript Agent to A2A AgentTypeScript Agentをリモート A2A エージェントに接続する
            Strands AgentsPythonAmazon DynamoDBPython
            Python Agent to Python DynamoDBPython AgentをDynamoDBテーブルに接続する
            Strands AgentsPythonAmazon Bedrock AgentCore Gateway
            Python Agent to AgentCore GatewayPython AgentをAgentCore Gatewayに接続する