アマゾン・ベッドロック

Amazon Bedrock は、AWS を介して基盤モデルのマネージド推論を提供します。 Agent Framework では、Bedrock IChatClientをラップするか、標準のエージェント、セッション、ミドルウェア、およびツール API を維持しながら、Python BedrockChatClientを使用できます。

Important

Amazon Bedrock はサードパーティのシステムです。 アプリケーション データを送信する前に、AWS サービスの用語、データ処理、リージョンの可用性、モデル アクセス、および使用コストを確認します。

パッケージをインストールする

dotnet add package AWSSDK.Extensions.Bedrock.MEAI
dotnet add package Microsoft.Agents.AI --prerelease

Configuration

AWS_REGION="us-east-1"
BEDROCK_MODEL_ID="anthropic.claude-3-5-sonnet-20241022-v2:0"

認証では、環境変数、共有プロファイル、ワークロード ID、IAM ロールなど、標準の AWS 資格情報チェーンが使用されます。

AWS Bedrock ランタイム クライアントを作成し、 IChatClientに変換してから、Agent Framework エージェントを作成します。

var awsRegion = Environment.GetEnvironmentVariable("AWS_REGION") ?? "us-east-1";
var modelId = Environment.GetEnvironmentVariable("BEDROCK_MODEL_ID") ?? "anthropic.claude-3-5-sonnet-20241022-v2:0";
// Create the Bedrock runtime client.
var bedrockRuntime = new AmazonBedrockRuntimeClient(RegionEndpoint.GetBySystemName(awsRegion));
IChatClient chatClient = bedrockRuntime.AsIChatClient(modelId);
AIAgent agent = chatClient.AsAIAgent(
    instructions: "You are a helpful assistant.",
    name: "BedrockAgent");

AWS 認証情報は、標準の AWS 認証情報チェーンに従います。 アプリケーションに必要な Bedrock モデルアクションのみを付与します。

パッケージをインストールする

pip install agent-framework-bedrock --pre

Configuration

BEDROCK_REGION="us-east-1"
BEDROCK_CHAT_MODEL="anthropic.claude-3-5-sonnet-20241022-v2:0"
AWS_ACCESS_KEY_ID="<access-key>"
AWS_SECRET_ACCESS_KEY="<secret-key>"
# Optional temporary credentials:
AWS_SESSION_TOKEN="<session-token>"
# Optional shared profile:
AWS_PROFILE="<profile>"

BedrockChatClient は、設定または明示的なコンストラクター値からモデル、リージョン、および AWS の資格情報を読み取ります。

クライアントが boto3_sessionからランタイム クライアントを作成する場合、リージョンの優先順位は明示的な region 引数、解決された BEDROCK_REGION 設定、boto3_session.region_name、そして最後に us-east-1です。 事前構築済みの clientを指定した場合、セッションは使用されず、そのリージョンは報告されるリージョンに影響しません。

async def main() -> None:
    """Run a Bedrock-backed agent with one tool call."""
    # 1. Create an agent with Bedrock chat client and one tool.
    agent = Agent(
        client=BedrockChatClient(),
        instructions="You are a concise travel assistant.",
        name="BedrockWeatherAgent",
        tools=[get_weather],
        default_options=BedrockChatOptions(tool_choice="auto"),
    )

    # 2. Run a query that uses the weather tool.
    query = "Use the weather tool to check the forecast for New York."
    print(f"User: {query}")
    response = await agent.run(query)
    print(f"Assistant: {response.text}")

Bedrock 固有のリクエスト オプションには BedrockChatOptions を使用し、デプロイで Bedrock ガードレールを使用する場合は BedrockGuardrailConfig を使用します。 Python クライアントは、additionalModelRequestFields、guardrailConfig、performanceConfig、requestMetadata、promptVariablesを設定するときに Bedrock Converse API に転送します。

ストリーミング以外の要求の場合、クライアントは guardrailConfig.streamProcessingMode を省略します。これは、そのフィールドが ConverseStreamに対してのみ有効であるためです。 モデル ID が Prompt Management ARN の場合は、マネージド プロンプトで推論、システム、ツール、および追加のモデル要求フィールドを定義します。 Bedrock はランタイム要求のこれらのフィールドを拒否するため、クライアントはそれらを省略します。 promptVariables は引き続き使用できます。

画像入力を送信する

BedrockChatClient 選択したモデルが画像入力をサポートしている場合、Bedrock Converse API を介してユーザー メッセージからデータに基づくイメージを送信します。 Content.from_data()または base64 データ URI を使用してイメージ コンテンツを作成します。

Bedrock は GIF、JPEG、PNG、WebP の画像を受け入れます。 クライアントは、外部の画像 URL、アシスタント メッセージ履歴からの画像、またはツールの結果の豊富な画像コンテンツを送信しません。 外部イメージをダウンロードし、モデルに送信する必要があるときにそのバイトを渡します。

埋め込みの生成

BedrockEmbeddingClient は、Amazon Titan 埋め込みモデルを使用して埋め込みを生成します。 BEDROCK_EMBEDDING_MODELとBEDROCK_REGIONを構成し、BedrockChatClientと同じ AWS 資格情報チェーンを使用します。

現在、このクライアントに対して実行可能な Agent Framework 埋め込みサンプルは発行されません。

Note

現在、Amazon Bedrock 統合は Agent Framework Go では使用できません。 最新の状態については、 Agent Framework Go リポジトリ を参照してください。

Tools

Bedrock はローカルで呼び出された Agent Framework ツールをサポートしますが、プロバイダーホスト型ツール ファクトリは公開しません。

ツール C# Python 注記
関数ツール ✅ ✅ モデルのサポートは、選択した Bedrock モデルによって異なります。
ツールの承認 ✅ ✅ Agent Framework 関数呼び出しループによって適用されます。
コード インタープリター ❌ ❌ Bedrock でホストされるコード インタープリターの統合はありません。
ファイル検索 ❌ ❌ Bedrock でホストされるファイル検索の統合はありません。
Web 検索 ❌ ❌ Bedrock でホストされる Web 検索の統合はありません。
ホストされている MCP ツール ❌ ❌ Bedrock でホストされた MCP 統合はありません。
ローカル MCP ツール ✅ ✅ アプリケーション プロセスで実行されます。

次のステップ