
概要
AP2 (Agent Payments Protocol) は、人間在席と人間不在席の商取引フローをサポートするエージェント決済プロトコルです。このチュートリアルでは、AP2 Python サンプルプロジェクトの使用方法について詳しく説明します。
プロジェクト構造
samples/python/
├── src/ap2/ # AP2 コアコード
├── scenarios/ # 使用シナリオ例
│ └── a2a/human-present/ # 人間在席決済シナリオ
│ ├── cards/ # カード決済例
│ └── x402/ # x402 決済例
├── pyproject.toml # プロジェクト設定
└── README.md # プロジェクト説明
環境要件
- Python 3.10+
uvパッケージマネージャー- Google API Key(AI機能用)
インストール手順
1. uv パッケージマネージャーのインストール
uv をまだインストールしていない場合は、uv インストールガイドにアクセスしてインストールしてください。
2. プロジェクトのクローンと依存関係のインストール
# プロジェクトのクローン
git clone https://github.com/google-agentic-commerce/AP2.git
# プロジェクトディレクトリに移動
cd AP2/samples/python
# 依存関係のインストール
uv sync
3. Google API Key の設定
Google AI Studio から API キーを取得し、以下のいずれかの方法で設定してください:
環境変数
export GOOGLE_API_KEY=your_api_key_here
コア概念
1. 主要アクター
- Shopping Agent(ショッピングエージェント): メインコーディネーターで、ユーザーのショッピングリクエストを処理し、専門エージェントに委任
- Merchant Agent(マーチャントエージェント): ショッピングエージェントからの商品クエリを処理
- Merchant Payment Processor Agent(マーチャント決済処理エージェント): マーチャントに代わって決済を処理
- Credentials Provider Agent(認証情報プロバイダーエージェント): ユーザーの決済認証情報を管理
2. コアデータ構造
- IntentMandate: 購入意図情報を含む意図認証
- CartMandate: マーチャントが署名した見積もりの正確性を保証するショッピングカート認証
- PaymentMandate: 取引情報とユーザー署名を含む決済認証
使用シナリオ
シナリオ1: 人間在席カード決済
これは最も一般的な決済シナリオで、ユーザーが在席して購入詳細と決済方法を確認します。
ステップバイステップ起動
各サービスを異なるターミナルで実行したい場合:
- マーチャントエージェントの起動
# AP2/samples/python
uv run --package ap2-samples python -m roles.merchant_agent
- 認証情報プロバイダーの起動
# AP2/samples/python
uv run --package ap2-samples python -m roles.credentials_provider_agent
- マーチャント決済処理エージェントの起動
# AP2/samples/python
uv run --package ap2-samples python -m roles.merchant_payment_processor_agent
- ショッピングエージェントの起動
# AP2/samples/python
uv run --package ap2-samples adk web src/roles
インタラクションフロー
- インターフェースへのアクセス: ブラウザで
http://0.0.0.0:8000/dev-uiにアクセス - エージェントの選択: ドロップダウンメニューから
shopping_agentを選択 - リクエストの開始: 「コーヒーマシンを買いたい」などの購入意図を入力
- 商品検索: ショッピングエージェントがマーチャントエージェントに委任してマッチング商品を検索
- カートの作成: マーチャントエージェントが CartMandate を作成してショッピングエージェントと共有
- 商品の選択: 表示された商品から選択
- 認証情報プロバイダーとの連携: 希望する認証情報プロバイダーに接続
- 決済方法の選択: 利用可能な決済方法から選択
- 決済認証の作成: ショッピングエージェントが PaymentMandate を作成して署名を要求
- OTP 認証: シミュレートされた OTP
123を入力 - 購入完了: 確認メッセージとデジタルレシートを受信
シナリオ2: x402 決済
x402 互換の決済方法をサポート(完全な AP2 互換バージョンは近日公開予定)。
起動方法はカード決済シナリオと同様ですが、x402 関連のスクリプトと設定を使用します。
高度な機能
1. 詳細モード(Verbose Mode)
エージェントの内部動作を理解するために、詳細モードを有効にできます:
新しい靴を買いたいです。プロセス全体を通して詳細モードを維持し、何をしているかを説明し、すべてのデータペイロードを表示してください。
詳細モードでは以下が表示されます:
- 現在と次のステップの詳細説明
- すべてのデータペイロードの JSON 表現
- 作成、送信、または受信されるマンデートオブジェクト
2. エージェント通信ログ
システムは .logs ディレクトリに詳細なログファイル watch.log を自動作成します。
ログには3つのカテゴリのデータが含まれます:
| カテゴリ | 内容 |
|---|---|
| 生 HTTP データ | HTTP メソッド、URL、JSON リクエストボディとレスポンスボディ |
| A2A メッセージデータ | A2A メッセージの TextPart から抽出されたリクエスト指示と DataParts のデータ |
| AP2 プロトコルデータ | メッセージ DataParts で識別されたマンデートオブジェクト |
コードアーキテクチャ
1. メッセージビルダー
A2aMessageBuilder クラスは A2A メッセージの構築に使用されます:
builder = A2aMessageBuilder()
message = builder.add_text("Hello").add_data("key", data).build()
2. ベースサーバーエグゼキューター
BaseServerExecutor はエージェントの基本機能を提供します:
- リクエストとレスポンスの処理
- 拡張機能の管理
- ツールの解析と実行
3. 決済検証
システムには取引セキュリティを確保するための決済マンデート検証ロジックが含まれています:
def validate_payment_mandate_signature(payment_mandate: PaymentMandate) -> None:
if payment_mandate.user_authorization is None:
raise ValueError("User authorization not found in PaymentMandate.")
4. Credentials Provider Agent コード解説
このエージェントは「デジタルウォレット」として機能し、ユーザーの決済方法と配送先住所の保存/取得、および決済プロセス中の「決済認証トークン」の生成と検証を担当します。コアコードは samples/python/src/roles/credentials_provider_agent/ にあります:
-
エントリーポイント:
__main__.py- ローカルの
agent.json記述を agent_card として読み込み。 - ポート
8002でサービスを開始、RPC パスは/a2a/credentials_provider。 CredentialsProviderExecutorを作成し、サポートされる拡張機能リストを渡す。
- ローカルの
-
エグゼキューター:
agent_executor.pyCredentialsProviderExecutorはBaseServerExecutorを継承し、システムプロンプトにより「ツール呼び出しのみ出力、ユーザーとの雑談なし」に制約。- 登録されたツールには以下が含まれます:
handle_get_shipping_addresshandle_search_payment_methodshandle_create_payment_credential_tokenhandle_signed_payment_mandatehandle_get_payment_method_raw_credentials
-
ツールセット:
tools.py- 共通データキー:
- 配送先住所キー:
CONTACT_ADDRESS_DATA_KEY - 決済マンデートキー:
PAYMENT_MANDATE_DATA_KEY - マーチャント受入可能決済方法データキー:
PAYMENT_METHOD_DATA_DATA_KEY
- 配送先住所キー:
- 主要処理関数:
handle_get_shipping_address- 入力:
user_email - アクション: アカウントマネージャーから対応する配送先住所を照会、
CONTACT_ADDRESS_DATA_KEYに出力。
- 入力:
handle_search_payment_methods- 入力:
user_emailとPaymentMethodDataのセット(カードネットワークなどのマーチャント受入可能条件)。 - アクション: 内部マッチングロジック(
_payment_method_is_eligible)を呼び出してマーチャント条件を満たすユーザーアカウントの決済方法をフィルタリング、{"payment_method_aliases": [...]}を返す。
- 入力:
handle_create_payment_credential_token- 入力:
user_email,payment_method_alias。 - アクション: 選択された決済方法用のワンタイム「決済認証トークン」を生成、
{"token": "fake_payment_credential_token_x"}のような形式で返す。
- 入力:
handle_signed_payment_mandate- 入力:
PaymentMandate(payment_mandate_idと決済詳細のtokenを含む)。 - アクション: 署名された
payment_mandate_idを以前に生成されたtokenにバインド、後続の検証用。
- 入力:
handle_get_payment_method_raw_credentials- 入力:
PaymentMandate(payment_mandate_idとtokenを含む)。 - アクション:
tokenとpayment_mandate_idの一貫性を検証、基盤となる生の決済認証情報(例:カードネットワーク、DPAN/暗号化データなど)を返し、決済処理業者が課金を完了できるようにする。
- 入力:
- 共通データキー:
-
アカウントとトークン管理:
account_manager.py- 複数のアカウントをシミュレートするインメモリデータベース、例には以下が含まれます:
- ユーザーの
shipping_address - 複数の
payment_methods(CARD、BANK_ACCOUNT、DIGITAL_WALLETなど)、カードにはネットワークと請求先住所などが含まれる。
- ユーザーの
- トークンライフサイクル:
create_token(email, alias): トークンを生成・保存(メールと決済方法エイリアスをマッピング)。update_token(token, payment_mandate_id): 署名されたpayment_mandate_idをトークンにバインド(一度のみ書き込み)。verify_token(token, payment_mandate_id): トークンと認証IDが一致するかを検証、その決済方法の「生認証情報」を返す。
- アカウント照会機能:
get_account_shipping_address(email)get_account_payment_methods(email)get_payment_method_by_alias(email, alias)
- 複数のアカウントをシミュレートするインメモリデータベース、例には以下が含まれます:
-
エージェント機能宣言:
agent.jsoncapabilities.extensionsは AP2 拡張機能とサンプルカードネットワーク拡張機能のサポートを宣言。skillsは外部機能(「利用可能決済方法の照会」「配送先住所の取得」など)を記述。
典型的なインタラクションシーケンス(要約)
- ショッピングエージェントがマーチャント受入可能な
PaymentMethodDataとuser_emailを提供、search_payment_methodsを呼び出して利用可能なpayment_method_aliasesを取得。 payment_method_aliasを選択、create_payment_credential_tokenを呼び出してtokenを取得。- ショッピングエージェントが
PaymentMandateを生成してユーザー署名を要求、署名完了後に返送、認証情報プロバイダーがsigned_payment_mandateを使用してpayment_mandate_idをtokenにバインド。 - マーチャント決済処理エージェントが決済完了前に
get_payment_method_raw_credentialsを呼び出し、token + payment_mandate_idを使用して検証し、基盤となる生の決済認証情報と交換。
注:上記のデータキー定数は ap2.types モジュールで定義されています;ツール間では TaskUpdater を通じて DataPart アーティファクトを出力し、上流エージェントが継続してオーケストレーションできるようにします。
拡張機能開発
1. 新しい決済方法の作成
新しい決済方法をサポートするには:
agent.jsonで拡張機能サポートを宣言- 対応する処理ロジックを実装
- 検証ルールを更新
2. 新しいエージェントロールの追加
新しいエージェントの作成には:
BaseServerExecutorを継承- 必要なツール関数を実装
- エージェント記述ファイルを設定
トラブルシューティング
よくある問題
-
Google API Key エラー
- API Key が正しく設定されていることを確認
- API Key が有効かどうかを確認
-
ポート競合
- 必要なポート(8000-8003)が占有されていないことを確認
- 設定ファイルでポート設定を変更可能
-
依存関係インストール失敗
- Python バージョンが >= 3.10 であることを確認
- キャッシュクリアを試行:
uv cache clean
デバッグのヒント
watch.logファイルを確認して詳細な通信プロセスを理解- 詳細モードを使用してより多くのデバッグ情報を取得
- 各サービスのコンソール出力を確認
ベストプラクティス
- セキュリティ: 決済マンデートの署名を常に検証
- エラーハンドリング: 包括的なエラーハンドリングメカニズムを実装
- ログ記録: デバッグと監査のために重要な操作を記録
- テスト: 本番環境前にすべての決済フローを十分にテスト
まとめ
AP2 は強力で柔軟なエージェント決済プロトコルフレームワークを提供します。このチュートリアルを通じて、以下ができるようになるはずです:
- AP2 のコア概念とアーキテクチャを理解
- サンプルプロジェクトの正常な実行
- カスタム決済エージェントの開発
- 一般的な問題とトラブルシューティングの処理
詳細については、プロジェクト内の具体的なコード実装とコメントを参照してください。
Related Articles
Explore more content related to this topic
Building an A2A Currency Agent with LangGraph
This guide provides a detailed explanation of how to build an A2A-compliant agent using LangGraph and the Google Gemini model. We'll walk through the Currency Agent example from the A2A Python SDK, explaining each component, the flow of data, and how the A2A protocol facilitates agent interactions.
A2A Protocol Specification (Python)
Comprehensive guide to the A2A protocol Python implementation specification, covering agent cards, message passing, task management, security authentication, and other core functionalities' data structures and object relationships, providing developers with a complete protocol implementation guide.
A2A Python Sample: Github Agent
How to use a2a-python to Create and Connect Github Agent with Google's Agent2Agent (A2A) Protocol
A2A Sample: Travel Planner OpenRouter
A2A implementation of Travel Planner with OpenRouter and Python a2a-sdk
A2A MCP Integration
Step-by-step guide to A2A and MCP integration using Python SDK. Build AI agents with OpenRouter, featuring server-client communication and tool discovery.