AWS Strands Agentsをクロスリージョン推論で利用する

Page content

AWS Strands Agentsをクロスリージョン推論で利用する

先日、AWSからOSSとしてStrands Agentsがリリースされました。Strands Agentsは、AIエージェントを簡単に作成できるフレームワークです。以下のブログでMCP Serverを利用するためのデモが紹介されています。今回、Strands AgentsをAmazon Bedrockのクロスリージョン推論を利用して、東京リージョンで利用する方法を確認してみました。

前提条件

  • Strands Agents: 0.1.2

まずはデモとおり動かしてみる

事前準備として、必要なモジュールをインストールします。

pip install strands-agents strands-agents-tools

Agentのコードは以下のとおりです。ブログで紹介されているものと同じ内容です。

  • agent.py
from strands import Agent
from strands.tools.mcp import MCPClient
from strands_tools import http_request
from mcp import stdio_client, StdioServerParameters

# 命名にフォーカスしたシステムプロンプトの定義
NAMING_SYSTEM_PROMPT = """
あなたはオープンソースプロジェクトの命名を支援するアシスタントです。

オープンソースのプロジェクト名を提案する際は、必ずプロジェクトに使用できる
ドメイン名と GitHub の組織名を 1 つ以上提供してください。

提案する前に、ドメイン名がすでに登録されていないか、GitHub の組織名が
すでに使用されていないか、ツールを使って確認してください。
"""

# ドメイン名が利用可能かを判定する MCP サーバーを読み込む
domain_name_tools = MCPClient(lambda: stdio_client(
    StdioServerParameters(command="uvx", args=["fastdomaincheck-mcp-server"])
))

# GitHub の組織名が利用可能かを判定するためのリクエストを
# GitHub に送る Strands Agents の事前構築済みツール
github_tools = [http_request]

with domain_name_tools:
    # ツールとシステムプロンプトと共に命名エージェントを定義
    tools = domain_name_tools.list_tools_sync() + github_tools
    naming_agent = Agent(
        system_prompt=NAMING_SYSTEM_PROMPT,
        tools=tools
    )

    # エンドユーザーのプロンプトと共に命名エージェントを実行
    naming_agent("AI エージェント構築のためのオープンソースプロジェクトの名前を考えてください。")

あとは実行するだけですが、ブログの内容ではバージニア北部(us-east-1)で実行することを前提としているため、そのままでは動きません。このため、以下のように実行時のリージョンをus-east-1に指定する必要があります。

AWS_REGION=us-east-1 python -u agent.py

uvxがないと動かない

MCP Serverを実行するためにuvxが必要です。このため、uvを事前にインストールしておく必要があります。uvのインストールは公式サイトを参考にしてください。

デフォルトモデルは何を使用しているのか

ブログの内容では使用するLLMを指定していません。この場合Strands Agentsのデフォルトモデルが使用されます。Strands Agentsのデフォルトモデルは以下が使用されるようです(Version 0.1.2時点)。

  • us.anthropic.claude-3-7-sonnet-20250219-v1:0

クロスリージョン推論を利用する

今度は、Bedrockのクロスリージョン推論を利用して東京リージョンで動かしてみます。クロスリージョン推論を利用するためにはModelIDを指定する必用があります。このため、BedrockModelを明示的に指定するようにします。

  • agent-ap-northeast-1.py
from strands import Agent
from strands.tools.mcp import MCPClient
from strands_tools import http_request
from mcp import stdio_client, StdioServerParameters
from strands.models import BedrockModel

# 命名にフォーカスしたシステムプロンプトの定義
NAMING_SYSTEM_PROMPT = """
あなたはオープンソースプロジェクトの命名を支援するアシスタントです。

オープンソースのプロジェクト名を提案する際は、必ずプロジェクトに使用できる
ドメイン名と GitHub の組織名を 1 つ以上提供してください。

提案する前に、ドメイン名がすでに登録されていないか、GitHub の組織名が
すでに使用されていないか、ツールを使って確認してください。
"""

# ドメイン名が利用可能かを判定する MCP サーバーを読み込む
domain_name_tools = MCPClient(
    lambda: stdio_client(
        StdioServerParameters(command="uvx", args=["fastdomaincheck-mcp-server"])
    )
)

# GitHub の組織名が利用可能かを判定するためのリクエストを
# GitHub に送る Strands Agents の事前構築済みツール
github_tools = [http_request]

# クロスリージョン推論を利用するためのモデルを指定です。
# 使用するModelIDの先頭に、apac.を付ける必要があります。
bedrock_model = BedrockModel(
    model_id="apac.anthropic.claude-3-7-sonnet-20250219-v1:0", temperature=0.3
)

with domain_name_tools:
    # ツールとシステムプロンプトと共に命名エージェントを定義
    tools = domain_name_tools.list_tools_sync() + github_tools
    # model=bedrock_modelを指定することで、クロスリージョン推論を利用します。
    naming_agent = Agent(
        system_prompt=NAMING_SYSTEM_PROMPT, tools=tools, model=bedrock_model
    )

    # エンドユーザーのプロンプトと共に命名エージェントを実行
    naming_agent(
        "AI エージェント構築のためのオープンソースプロジェクトの名前を考えてください。"
    )

以下のようにAWS_REGIONを指定せずに実行することができます(実行環境のデフォルトリージョンがap-northeast-1である前提です)。

python -u agent-ap-northeast-1.py

クロスリージョン推論を利用する場合はModel catalogのModel IDにプレフィクスを追加する

クロスリージョン推論を利用する場合は、Model catalogのModel IDに呼び出したいリージョンに応じたプレフィクス指定を追加する必要があります。東京リージョン(ap-northeast-1)で利用する場合の例は以下のとおりです。勿論、クロスリージョン推論に対応しているモデルである必要があります。

  • 元のModel ID: anthropic.claude-3-7-sonnet-20250219-v1:0
  • 東京リージョンのプレフィクス: apac.
  • クロスリージョンを利用する場合のModel ID: apac.anthropic.claude-3-7-sonnet-20250219-v1:0

参考文献