
概要
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 のコア概念とアーキテクチャを理解
- サンプルプロジェクトの正常な実行
- カスタム決済エージェントの開発
- 一般的な問題とトラブルシューティングの処理
詳細については、プロジェクト内の具体的なコード実装とコメントを参照してください。