概要
このリリースでは、AI エージェントが x402 プロトコルを使用したマイクロトランザクション決済を処理できる AgentCore Payments モジュールが追加されました。また、Strands ConversationTurn でマルチターンの会話履歴が正しく保持されないバグが修正されています。
リリース: v1.9.0
新機能
AgentCore Payments モジュール (#457)
この機能でできること:
- AI エージェントが有料 API、MCP サーバー、プレミアムコンテンツにアクセスするためのマイクロトランザクション決済を処理
- x402 Payment Required プロトコルに対応し、HTTP 402 レスポンスを自動的に処理して暗号通貨トランザクションを完了
主要コンポーネント:
| コンポーネント | 用途 |
|---|---|
PaymentClient | コントロールプレーン - Payment Manager や Connector の作成・管理 |
PaymentManager | データプレーン - 決済処理、x402 ヘッダー生成、セッション管理 |
AgentCorePaymentsPlugin | Strands フレームワーク統合 - HTTP 402 の自動インターセプトとリトライ |
使用例:
import os
from bedrock_agentcore.payments import PaymentManager
# PaymentManager の初期化
manager = PaymentManager(
payment_manager_arn=os.environ["PAYMENT_MANAGER_ARN"],
region_name="us-east-1",
)
# 決済インストルメント(埋め込み暗号ウォレット)の作成
instrument = manager.create_payment_instrument(
payment_connector_id=os.environ["PAYMENT_CONNECTOR_ID"],
payment_instrument_type="EMBEDDED_CRYPTO_WALLET",
payment_instrument_details={
"embeddedCryptoWallet": {
"network": "ETHEREUM", # または "SOLANA"
"linkedAccounts": [
{"email": {"emailAddress": "user@example.com"}}
],
}
},
user_id="user-123",
)
# 支出制限付きの決済セッションの作成
session = manager.create_payment_session(
expiry_time_in_minutes=60,
user_id="user-123",
limits={"maxSpendAmount": {"value": "100.00", "currency": "USD"}},
)
# インストルメントの残高確認
balance = manager.get_payment_instrument_balance(
payment_connector_id=os.environ["PAYMENT_CONNECTOR_ID"],
payment_instrument_id=instrument["paymentInstrumentId"],
chain="BASE_SEPOLIA", # BASE, SOLANA_DEVNET, SOLANA_MAINNET なども対応
token="USDC",
user_id="user-123",
)
print(f"Balance: {balance}")
Payment Manager と Connector のセットアップ:
from bedrock_agentcore.payments.client import PaymentClient
payment_client = PaymentClient(region_name="us-east-1")
# Coinbase CDP プロバイダーを使用した Payment Manager の作成
response = payment_client.create_payment_manager_with_connector(
payment_manager_name="AgentCorePaymentManager",
payment_manager_description="Payment Manager for Agent Core",
authorizer_type="AWS_IAM",
role_arn="arn:aws:iam::123456789012:role/BedrockAgentCoreFullAccess",
payment_connector_config={
"name": "agent-core-connector",
"description": "Payment Connector for Agent Core",
"payment_credential_provider_config": {
"name": "agent-core-provider",
"credential_provider_vendor": "CoinbaseCDP", # または "StripePrivy"
"credentials": {
"api_key_id": os.environ["COINBASE_API_KEY_ID"],
"api_key_secret": os.environ["COINBASE_API_KEY_SECRET"],
"wallet_secret": os.environ["COINBASE_WALLET_SECRET"],
},
},
},
wait_for_ready=True, # すべてのリソースが READY になるまで待機
max_wait=300,
poll_interval=5,
)
payment_manager_arn = response["paymentManager"]["paymentManagerArn"]
payment_connector_id = response["paymentConnector"]["paymentConnectorId"]
ポイント:
- 対応プロバイダー: Coinbase CDP、Stripe Privy
- 対応ブロックチェーン: Ethereum(BASE、BASE_SEPOLIA など)、Solana(SOLANA_MAINNET、SOLANA_DEVNET)
- 認証方式: AWS IAM(デフォルト)または Custom JWT(Bearer Token)
wait_for_ready=Trueを指定すると、リソース作成完了まで待機し、失敗時は自動ロールバック
バグ修正
Strands ConversationTurn のマルチターン履歴保持 (#454)
問題:
StrandsEventParser.extract_conversation_turnがマルチターンの会話履歴を正しく保持していなかった- 複数の
gen_ai.user.messageイベントがある場合、最後のメッセージのみが保持され、それ以前のユーザーターンが失われていた gen_ai.assistant.message(履歴)とgen_ai.choice(現在のターンの出力)が同じリストに混在していた
修正内容:
ConversationTurnに新しいフィールドを追加:user_messages: List[str]- すべてのユーザーターンを順序どおりに保持history_messages: List[Dict]- 以前のアシスタントターンを現在のターン出力と分離して保持
- 既存の
user_messageプロパティは後方互換性のために維持(最新のエントリを返し、複数ターンを切り捨てる場合はDeprecationWarningを発行)
修正後の正しい使い方:
# 新しいフィールドを使用(推奨)
conversation_turn = parser.extract_conversation_turn(span)
all_user_messages = conversation_turn.user_messages # すべてのユーザーメッセージ
history = conversation_turn.history_messages # 以前のアシスタントターン
current_output = conversation_turn.assistant_messages # 現在のターンの出力のみ
# 後方互換性のあるアクセス(非推奨)
latest_user_message = conversation_turn.user_message # 最新のユーザーメッセージのみ
ポイント:
assistant_messagesは現在のターンのgen_ai.choice出力のみを含むように変更- 以前のアシスタントターンは
history_messagesから取得 - ADOT ワイヤーフォーマットの形状は維持(
input.messagesにより多くのエントリが含まれる)
まとめ
このリリースでは、AI エージェントの決済機能を実現する AgentCore Payments モジュールが追加され、x402 プロトコルによるマイクロトランザクション処理が可能になりました。また、Strands のマルチターン会話履歴が正しく保持されるようになり、Observability やオンライン評価の精度が向上しています。