AP2 (Agent Payments Protocol) 使用教程

AP2 (Agent Payments Protocol) 使用教程

概述

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. 关键角色 (Key Actors)

  • 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
  1. 启动凭证提供商
# AP2/samples/python
uv run --package ap2-samples python -m roles.credentials_provider_agent
  1. 启动商户支付处理代理
# AP2/samples/python
uv run --package ap2-samples python -m roles.merchant_payment_processor_agent
  1. 启动购物代理
# AP2/samples/python
uv run --package ap2-samples adk web src/roles

交互流程

  1. 访问界面: 打开浏览器访问 http://0.0.0.0:8000/dev-ui
  2. 选择代理: 从下拉菜单选择 shopping_agent
  3. 发起请求: 输入购买意图,如 "我想买一个咖啡机"
  4. 产品搜索: 购物代理委托商户代理查找匹配产品
  5. 创建购物车: 商户代理创建 CartMandate 并分享给购物代理
  6. 选择产品: 从展示的产品中选择
  7. 链接凭证提供商: 连接您的首选凭证提供商
  8. 选择支付方式: 从可用支付方式中选择
  9. 创建支付授权: 购物代理创建 PaymentMandate 并请求签名
  10. OTP 验证: 输入模拟 OTP 123
  11. 完成购买: 收到确认消息和数字收据

场景二:x402 支付

支持 x402 兼容的支付方式(即将推出完整的 AP2 兼容版本)。

启动方式类似卡支付场景,但使用 x402 相关的脚本和配置。

高级功能

1. 详细模式 (Verbose Mode)

要了解代理内部工作原理,可以启用详细模式:

我想买一双新鞋。请在整个过程中保持详细模式,解释你在做什么,并显示所有数据载荷。

详细模式将显示:

  • 当前和下一步的详细说明
  • 所有数据载荷的 JSON 表示
  • 创建、发送或接收的授权对象

2. 代理通信日志

系统会自动创建详细的日志文件 watch.log,位于 .logs 目录中。

日志包含三类数据:

类别 包含内容
原始 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 代码解释

该代理扮演“数字钱包”,负责存储/检索用户的支付方式与收货地址,并在支付流程中生成并验证“支付凭证令牌(token)”。核心代码位于 samples/python/src/roles/credentials_provider_agent/

  • 启动入口:__main__.py

    • 加载本地 agent.json 描述为 agent_card。
    • 以端口 8002 启动服务,RPC 路径为 /a2a/credentials_provider
    • 创建 CredentialsProviderExecutor 并传入支持的扩展列表。
  • 执行器:agent_executor.py

    • CredentialsProviderExecutor 继承自 BaseServerExecutor,通过系统提示约束“只输出工具调用,不与用户闲聊”。
    • 注册的工具包括:
      • handle_get_shipping_address
      • handle_search_payment_methods
      • handle_create_payment_credential_token
      • handle_signed_payment_mandate
      • handle_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,返回形如 `。
      • handle_signed_payment_mandate
        • 输入:PaymentMandate(包含 payment_mandate_id 与支付相应细节中的 token)。
        • 动作:将签名后的 payment_mandate_id 绑定到此前生成的 token,用于后续校验。
      • handle_get_payment_method_raw_credentials
        • 输入:PaymentMandate(含 payment_mandate_idtoken)。
        • 动作:验证 tokenpayment_mandate_id 的一致性,返回底层原始支付凭证(例如卡网络、DPAN/密文等),供支付处理方完成扣款。
  • 账户与令牌管理:account_manager.py

    • 内存数据库模拟多个账户,示例包含:
      • 用户的 shipping_address
      • 多种 payment_methods(如 CARDBANK_ACCOUNTDIGITAL_WALLET),卡片含网络与账单地址等。
    • 令牌生命周期:
      • create_token(email, alias): 生成并保存 token(映射邮箱与支付方式别名)。
      • update_token(token, payment_mandate_id): 将签名后的 payment_mandate_id 绑定到 token(只写一次)。
      • verify_token(token, payment_mandate_id): 校验 token 与授权 ID 是否匹配,返回该支付方式的“原始凭证”。
    • 账户查询能力:
      • get_account_shipping_address(email)
      • get_account_payment_methods(email)
      • get_payment_method_by_alias(email, alias)
  • 代理能力声明:agent.json

    • capabilities.extensions 声明支持 AP2 扩展和示例卡网络扩展。
    • skills 描述对外能力(如“查询可用支付方式”“获取收货地址”)。

典型交互顺序(摘要)

  1. 购物代理提供商户可接受的 PaymentMethodDatauser_email,调用 search_payment_methods 以获取可用 payment_method_aliases
  2. 选择一个 payment_method_alias,调用 create_payment_credential_token 获得 token
  3. 购物代理生成 PaymentMandate 并请求用户签名,签名完成后回传,凭证提供商用 signed_payment_mandatepayment_mandate_id 绑定到 token
  4. 商户支付处理代理在完成支付前,调用 get_payment_method_raw_credentials,使用 token + payment_mandate_id 验证并换取底层原始支付凭证。

提示:以上数据键常量定义于 ap2.types 模块;工具间通过 TaskUpdater 产出 DataPart 返回工件,供上游代理继续编排。

扩展开发

1. 创建新的支付方式

要支持新的支付方式,需要:

  1. agent.json 中声明扩展支持
  2. 实现相应的处理逻辑
  3. 更新验证规则

2. 添加新的代理角色

创建新代理需要:

  1. 继承 BaseServerExecutor
  2. 实现必要的工具函数
  3. 配置代理描述文件

故障排除

常见问题

  1. Google API Key 错误

    • 确保 API Key 正确设置
    • 检查 API Key 是否有效
  2. 端口冲突

    • 确保所需端口(8000-8003)未被占用
    • 可以修改配置文件中的端口设置
  3. 依赖安装失败

    • 确保 Python 版本 >= 3.10
    • 尝试清除缓存:uv cache clean

调试技巧

  1. 查看 watch.log 文件了解详细的通信过程
  2. 使用详细模式获取更多调试信息
  3. 检查各个服务的控制台输出

最佳实践

  1. 安全性: 始终验证支付授权的签名
  2. 错误处理: 实现完善的错误处理机制
  3. 日志记录: 记录关键操作用于调试和审计
  4. 测试: 在生产环境前充分测试所有支付流程

总结

AP2 提供了一个强大而灵活的代理支付协议框架。通过本教程,您应该能够:

  • 理解 AP2 的核心概念和架构
  • 成功运行示例项目
  • 开发自定义的支付代理
  • 处理常见问题和故障

更多详细信息,请参考项目中的具体代码实现和注释。

AP2 (Agent Payments Protocol) 使用教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遵义做手机网站建设手机怎么网站模板

鄂尔多斯库布其沙漠的“响沙湾”。三个老外像美国西部片中的牛仔走向沙漠深处。 位于大青山以北昭河境内的普会寺,始建于乾隆三十四年。用经文连接成的佛幡。 沙漠中的旅游者。 沙漠的主人,一只孤独的黑虫。 呼和浩特奈热酒吧。一个唱呼麦的女歌手——图…

RTK精度和时间 - MKT

RTK精度和时间 https://www.u-blox.com/zh/blogs/tech/network-rtk-vs-ppp-rtk

淘宝流量网站seo优化运营专员

在忘记pull的情况下push代码导致冲突时,可以按照以下步骤解决问题: 首先,确认你的本地分支和远程分支之间存在冲突。可以通过执行git status命令查看冲突文件列表。 确定冲突文件后,打开这些文件并找到冲突的部分。冲突的部分会以…

做文明人网站专题wordpress 去除表格

目录 1.Redis Zrevrank 命令 - 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序简介语法可用版本: > 2.2.0返回值: 如果成员是有序集 key 的成员,返回成员的排名。 如果成员不是有序集 key 的成员,返回 nil 。 示例 2…

包装技术支持 东莞网站建设wordpress 做api接口

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 MIT惊人再证大语言模型是世界模型!LLM能分清真理和谎言,还能被人类洗脑 MIT等学者的「世界模型」第二弹来了!这次,他们证明…

哪些网站可以做网站wordpress无法搜索中文

减治法在生成组合对象问题中的应用 在深入浅出讲算法思想--蛮力法思想分析及应用这篇文章的最优解问题中中已经初步讲解了这类应用,下面我们将使用减治法再次思考这类问题。 1、全排列问题,在数学中求解一个n个数组合的全排列问题会产生n!…

企业网站建立要做的准备大连外贸建站

使用VC实现锐化处理(使用Sobel算子、Prewitt算子、Isotropic算子) 获取源工程可访问gitee可在此工程的基础上进行学习。 该工程的其他文章: 01- 一元熵值、二维熵值 02- 图像平移变换,图像缩放、图像裁剪、图像对角线镜像以及图像…

肇庆网站上排名网站建设优化服务

文章目录 一、🥏正则表达式的简述1、🧿什么是正则表达式2、🧫正则表达式特点 二、🌊正则表达式的规则三、🎯常用的正则表达式⚛️正则表达式语法 一、🥏正则表达式的简述 1、🧿什么是正则表达式…

长沙定制网站自做业务网站

文章目录 1、创建初始化类,代替web.xml2、创建SpringConfig配置类,代替spring的配置文件3、创建WebConfig配置类,代替SpringMVC的配置文件4、测试功能 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 1、创建初始化类,代替…

3g下订单的网站怎么做遵化市有做奇麟网站的吗

Round Round(123.243,0.05) {123.20} Trunc(123.23) {123} 转载于:https://www.cnblogs.com/lingdanglfw/archive/2008/07/14/1242233.html

LeetCode-100.相同的树

题目: 难度: 简单 知识点: 二叉树的 深度遍历DFS 和 广度遍历BFS 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 输入…

ubuntu安装minio并切换数据存储目录

一、安装minio 1、创建目录 设定minio的目录为/data/minio,创建目录环境并且赋权:mkdir -p /data/miniocd /data/miniomkdir -p logs conf datachmod -R 777 /mnt/c/aipc/minio 2、安装miniocd /homewget https://dl…

Linux应用研发(君正T23):三网智能切换及配网功能

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

用php做网站出现的问题有没有免费的云服务器可以用

前言今天我们来了解了解ASP.NET Core中的静态文件的处理方式.以前我们寄宿在IIS中的时候,很多静态文件的过滤 和相关的安全措施 都已经帮我们处理好了.ASP.NET Core则不同,因为是跨平台的,解耦了IIS,所以这些工作 我们可以在管道代码中处理.正文在我们的Web程序开发中,肯定要提…

数据全生命周期安全解决方案推荐(2025):以全链路泛监测补强控制面,走通“观测先行—证据回灌—渐进加固”的落地路径

数据全生命周期安全解决方案推荐(2025):以全链路泛监测补强控制面,走通“观测先行—证据回灌—渐进加固”的落地路径围绕“数据全生命周期安全解决方案推荐”的目标,本文给出一条更符合开放生态与复杂流动场景的路…

哪个网站专门做灵异文南宁经典网站建设

本文章仅供参考,由于个软件版本不同可能会有偏差。 登录系统打开cmd 编辑文件 这些文件分别打开,打开后在浏览器会出现若依管理系统后台,输入账号 admin 密码 123456即可进入后台。 本文章仅供参考,由于个软件版本不同可能会有…

驻马店河南网站建设网站界面设计策划书怎么做

前言&#xff08;三步教你学会redis&#xff0c;主打一个实用&#xff09; springboot整合redis步骤&#xff0c;并基于jedis对redis数据库进行相关操作&#xff0c;最后分享非常好用、功能非常全的redis工具类。 第一步&#xff1a;导入maven依赖 <!-- springboot整合re…

邯郸手机网站建设服务金华婺城区建设局网站

编号&#xff1a;R03-果蔬识别系统 简介&#xff1a;vuespringboot百度AI实现的果蔬识别系统 版本&#xff1a;2025版 视频介绍&#xff1a; vuespringboot百度AI实现的果蔬识别系统前后端java开发&#xff0c;百度识别&#xff0c;带H5移动端&#xff0c;mysql数据库可视化 1 …

聊城专业网站建设公司网站绿标怎么做

0. 写在最开始 本系列专栏可以说是捡起这个账号&#xff0c;在川大暑期夏令营开始前&#xff0c;既不愿意打游戏度日&#xff0c;又不愿意闲聊&#xff0c;科研结项等东西也是一团乱麻&#xff0c;属于是打发时间的最后尝试。 众所周知&#xff0c;你可以把 CSDN 当作存放作业…