Skip to content

Pythonストランドエージェント

AIエージェントをツール付きで構築するためのPython Strands Agentを生成し、オプションでAmazon Bedrock AgentCore Runtimeにデプロイします。

Strandsは、AIエージェントを構築するための軽量で本番環境対応のPythonフレームワークです。主な特徴:

  • 軽量でカスタマイズ可能:シンプルなエージェントループで邪魔になりません
  • 本番環境対応:フルオブザーバビリティ、トレーシング、スケール対応のデプロイオプション
  • モデル/プロバイダー非依存:様々なプロバイダーのモデルをサポート
  • コミュニティ提供ツール:強力なコミュニティ製ツールセット
  • マルチエージェント対応:エージェントチームや自律エージェントなどの高度な手法
  • 柔軟なインタラクションモード:会話型、ストリーミング、非ストリーミング対応

2つの方法でPython Strandsエージェントを生成できます:

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - py#strands-agent
  5. 必須パラメータを入力
    • クリック Generate
    パラメータ デフォルト 説明
    project 必須 string - Strands Agentを追加するプロジェクト
    computeType string BedrockAgentCoreRuntime Strands Agentをホストするコンピュートのタイプ
    name string - Strands Agentの名前(デフォルト: agent)
    auth string IAM Strands Agentとの認証に使用する方法。IAM(デフォルト)またはCognitoから選択します。
    iacProvider string Inherit 優先するIaCプロバイダー。デフォルトでは初期選択から継承されます。

    既存のPythonプロジェクトに以下のファイルが追加されます:

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

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

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

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

    Strandsエージェントのデプロイ用に以下のファイルが生成されます:

    • Directorypackages/common/constructs/src
      • Directoryapp
        • Directoryagents
          • Directory<project-name>
            • <project-name>.ts エージェントデプロイ用CDKコンストラクト
            • Dockerfile CDKコンストラクトで使用されるDockerfile

    ツールはAIエージェントがアクションを実行するために呼び出す関数です。Strandsフレームワークはデコレータベースのシンプルなアプローチを採用しています。

    agent.pyファイルに新しいツールを追加できます:

    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フレームワークが自動的に処理する機能:

    • 関数の型ヒントに基づく型検証
    • ツール呼び出し用JSONスキーマ生成
    • エラーハンドリングとレスポンスフォーマット

    strands-toolsパッケージで提供されるプリビルドツール:

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

    デフォルトでは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)

    StrandsエージェントにMCPサーバーのツールを追加できます。

    py#mcp-serverts#mcp-serverジェネレーターで作成したMCPサーバーを利用する場合、connectionジェネレーターを使用できます。

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

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

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

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

      ジェネレーターはFastAPIを使用してStrandsエージェント用のHTTPサーバーを作成します。FastAPIは、自動APIドキュメント生成と型検証を備えた、PythonでAPIを構築するためのモダンで高速なWebフレームワークを提供します。

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

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

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

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

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

      デフォルトのInvokeInputモデルはプロンプトとセッションIDを受け取ります。

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

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

      ストリーミングレスポンスの場合、ジェネレーターは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の詳細はドキュメントを参照してください。

      ジェネレーターは<your-agent-name>-serveという名前のターゲットを設定し、開発とテストのためにStrandsエージェントをローカルで起動します。

      Terminal window
      pnpm nx agent-serve your-project

      このコマンドはuv runを使用してBedrock AgentCore Python SDKでStrandsエージェントを実行します。

      Bedrock AgentCore Runtimeへのデプロイ

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

      computeTypeBedrockAgentCoreRuntimeを選択した場合、関連するCDKまたはTerraformインフラストラクチャが生成され、Strands 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) {
      // Add the agent to your stack
      const agent = new MyProjectAgent(this, 'MyProjectAgent');
      // Grant permissions to invoke the relevant models in bedrock
      agent.agentCoreRuntime.addToRolePolicy(
      new PolicyStatement({
      actions: [
      'bedrock:InvokeModel',
      'bedrock:InvokeModelWithResponseStream',
      ],
      // You can scope the below down to the specific models you use
      resources: [
      'arn:aws:bedrock:*:*:foundation-model/*',
      'arn:aws:bedrock:*:*:inference-profile/*',
      ],
      }),
      );
      }
      }

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

      デフォルトでは、Strands 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#react-website#authジェネレーターを使用して生成するか、独自のCDK UserPoolUserPoolClientを作成できます。

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

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

      Strandsエージェント固有のdockerターゲットも追加されます:

      • AgentCore runtime契約に従ってエージェントを実行するDockerfileからDockerイメージをビルド

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

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

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

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

      Terminal window
      curl -N -X POST http://localhost:8081/invocations \
      -d '{"prompt": "what is 3 + 5?", "session_id": "abcdefghijklmnopqrstuvwxyz0123456789"}' \
      -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?", "session_id": "abcdefghijklmnopqrstuvwxyz0123456789"}' \
      -H 'Content-Type: application/json'
      上記のacurlコマンドの設定詳細についてはこちらをクリック

      Cognito認証の場合、AuthorizationヘッダーにCognitoアクセストークンを渡します:

      Terminal window
      curl -N -X POST 'https://bedrock
      -agentcore.<region>.amazonaws.com/runtimes/<url-encoded-arn>/invocations' \
      -d '{"prompt": "what is 3 + 5?", "session_id": "abcdefghijklmnopqrstuvwxyz0123456789"}' \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer <access-token>"

      AWS CLIのcognito-idp admin-initiate-authコマンドを使用してアクセストークンを取得できます。例:

      Terminal window
      aws cognito-idp admin-initiate-auth \
      --user-pool-id <user-pool-id> \
      --client-id <user-pool-client-id> \
      --auth-flow ADMIN_NO_SRP_AUTH \
      --auth-parameters USERNAME=<username>,PASSWORD=<password> \
      --region <region> \
      --query 'AuthenticationResult.AccessToken' \
      --output text