LangChain Blog更新于

能够支付的智能体:使用 Stripe 的 Link 和 Managed Deep Agents 构建 Restock

LangChain介绍示例代理Restock:在Slack的Managed Deep Agents上运行,经Zinc的MPP接口搜索商品并下单,用Stripe Link钱包支付,凭据不进入模型,用户在Slack和Link双重审批且支出受预算上限约束。文中用示例价格演示完整下单与退款流程,并开源代码;目前仅支持美国配送和美元。

Restock payment flow from the Slack request to the confirmed order, with approvals in Slack and in Link
配图来源 · LangChain Blog

要点

  • Restock 是一个可以为真实购买付款的示例智能体。 它在 Slack 中通过 Managed Deep Agents 运行,查找商品、构建购物车,并通过一个支持 机器支付协议 (MPP)的 API 完成结账。
  • 支付保持安全且不超出预算。 支付由 Stripe 的消费者钱包 Link 处理,因此智能体永远看不到卡号。用户批准一笔不超过设定金额的消费请求,智能体无法超出该额度消费。
  • 构建你自己的能够支付的智能体。 从 Restock 的示例代码开始,并告诉我们你构建了什么。

智能体已经很擅长查找要购买的东西。支付则更难:它涉及真实的资金流动,需要模型绝不应看到的凭证,而且难以撤销。

为了展示如何构建一个能够支付的智能体,我们构建了 Restock,这是一个在 Slack 中通过 Managed Deep Agents运行的办公用品示例智能体。它搜索真实商品、构建购物车,并通过 Link(Stripe 的消费者钱包,为智能体提供最安全的支付方式)完成付款。

本文将跟踪一个请求从第一条消息到订单确认的全过程:

我们的笔快用完了。你能帮办公室找一款蓝色墨水笔的 12 支装吗,总共不超过 25 美元?

Restock 以 22.18 美元(含费用)订购了这些笔。本文中的价格仅为示意。

选择支付方式

智能体可以通过在浏览器中操作零售商的结账流程来付款,但这很脆弱。页面会变化,网站会阻止自动结账,而且支付信息必须在不暴露给模型的情况下输入。

支持 机器支付协议 (MPP)的 API 避免了这些问题:它准确告知智能体应付金额,并直接接收付款。代价是覆盖范围,因为智能体只能通过支持 MPP 的 API 购买。这一名单正在扩大,工具聚合商如 Apify 和 Mercator,以及垂直领域的 Zinc (面向零售)都已加入。Restock 使用 Zinc,但该模式并不依赖它。

各组件如何协同

Restock 由四个部分构建而成:

  • Link 保存用户的支付方式,并要求他们批准付款。
  • MPP, 这 机器支付协议,定义了通过 HTTP 进行的支付交换。商家回应以 402 Payment Required 以及付款说明,然后客户端使用付款凭证进行重试。
  • 锌 通过其搜索产品并向零售商下单 MPP 订单 API.
  • 托管式深度智能体 (MDA) 托管该代理,并处理 Slack、人工审核、凭据和保存的状态。
Restock payment flow from the Slack request to the confirmed order, with approvals in Slack and in Link
笔的请求从询问到确认订单。用户批准两次:在 Slack 中批准购买,在 Link 中批准付款。

搜索和购物车

我们写道 自定义工具 用于 Zinc 搜索、购物车和支付,以及塑造对话的指令。MDA 处理其余部分,包括保存对话和订单,这样用户可以在几天后回来询问同一批钢笔的情况。以下是布局和一个精简的代理定义:

restock-agent/
├── agent.py            # the agent: model + tools
├── instructions.md     # how Restock talks and when it uses each tool
├── tools/restock.py    # the tools the model can call
├── restock/            # Zinc, Link wallet, cart and order storage
└── sandbox/setup.sh    # installs the Link CLI in the sandbox

agent = define_deep_agent(
    name="restock",
    model=ChatOpenAI(model=os.environ.get("OPENAI_MODEL", "gpt-5.6-sol")),
    tools=[
        search_restock_products,     # Zinc search
        prepare_restock_order,       # save the cart
        set_restock_payment_amount,  # upfront amount, within the budget
        request_restock_payment,     # Slack review, then Link approval
        wait_for_restock_approval,
        check_restock_order,         # order status from Zinc
    ],
)

对于笔的请求,Restock 使用 Zinc API 密钥和一个已充值的搜索账户(搜索不通过 Link 付费)来搜索 Zinc。用户选择一个 12 支装,Restock 保存购物车但不填支付金额。

设置预付金额

Restock 将 25 美元的预算视为上限,而非实际收取的金额。税费和运费在商品列表页上并不确定,只有当零售商订单下达后总额才会最终确定。因此 Restock 会询问用户预先支付多少,最高不超过 25 美元。订单提交时 Zinc 会收取该金额,用其中的资金向零售商付款,并将剩余部分退还给用户。

对于钢笔,用户选择23美元。Zinc保留1美元的基础费用,这就为商品、税费和运费留下了22美元的零售商额度。可选费用,比如Zinc的电子邮件订单更新,可能会进一步缩减这一额度,因此在评估之前,Restock会先在不付款的情况下请求订单,并从Zinc的 402 Payment Required 挑战。

将凭据排除在模型之外

模型永远不会接触用于支付订单的机密信息。Link 会话存在于一个 用户自有 MDA 连接,因此每个人的钱包始终归其本人所有。配送地址、通知邮箱和 Zinc API 密钥存放在 agent 自有的 Connections 中。Link CLI 在 MDA 的 受管沙箱。一个小助手将保存的会话保留在用户的连接中,并且只在命令运行期间将其放入沙箱。Connecting Link 不会批准购买,后续对话会重用该会话。

在 Slack 中审查采购

在任何款项支付之前,用户会在 Slack 中审查购物车、办公室标签、费用和预付金额。送货地址保持私密。Restock 提出了一个 中断 对于本次审查而言,运行会保持暂停状态,直到用户在 Slack 中点击 Approve 或 Reject。模型写入工具调用中的任何内容都无法批准它。

使用 Link 而非 MPP 进行支付

接下来,Restock 在 Slack 会话中发布一个 Link 批准链接,金额正是 Zinc 挑战中的数额,即同样的 23。用户在 Link 网站上批准该链接,这就是该钱包自身同意付款的意思表示。

一旦 Link 批准,Restock 就会向 Zinc 发送已付款请求,并附带一个 Link 共享支付令牌 作为凭证,Zinc 通过 Stripe 处理该支付。 pympp 负责处理 MPP 格式化。

支付工具从一个私有的沙箱文件中读取令牌,使用后将其删除,并且只向模型返回公开的摘要。该令牌本身并不强制执行购物车细节,因此工具还会将订单与用户审阅的内容进行核对,并确认批准仍然有效。

确认订单

零售商订单金额为 21.18 美元(14.99 美元的钢笔、1.20 美元的税费、4.99 美元的运费),在 22 美元的额度之内。用户支付 22.18 美元(含 Zinc 的费用),Zinc 退回其余的 0.82 美元。

Budget breakdown for the pens order: $25 budget, $23 approved, $22.18 paid, $0.82 refunded
钢笔订单的资金去向,价格为示意性价格。用户在 Link 中针对 25 美元的预算批准了 23 美元,支付 22.18 美元,并获得 0.82 美元退款。

一旦 Zinc 报告 order_placed,Restock 就会在 Slack 中确认,并在零售商发货后分享物流跟踪信息。除了示意性价格之外,我们还在一个托管部署上对 Restock 进行了端到端运行:一笔真实订单达到了 order_placed,预期的退款也已到账。

开始使用

代码位于 langchain-samples/restock-agent,其 README 逐步讲解安装和部署流程。MDA 的 Slack 设置指南 介绍了如何连接 Slack 应用。

Restock 只是一个示例:它仅支持美国境内配送和美元(USD)付款,每次部署只支持一个办公室,且付款来自请求者自己的钱包。

Restock 有三种模式。设置 RESTOCK_MODE 来选择一种,并按顺序尝试:

  1. Rehearsal (rehearsal):虚构的商品和模拟的审批。需要一个 OpenAI API 密钥以及一个具有 Managed Deep Agents 访问权限的 LangSmith 工作区。
  2. Link test approval (link-test):真实的 Zinc 搜索和真实的 Link 审批,但不进行实际购买。需要添加一个 Link 钱包、一个 Zinc API 密钥、一个已充值的 Zinc 搜索账户以及配送信息。
  3. Live purchase (live):真实付款和真实的零售商订单。

这一模式适用于任何会花钱的智能体。让智能体进行搜索并构建购物车,将消费限额和审批保留在模型无法触及的代码中,并且只有在商家确认后才算作已下单。

快来试用 Restock。告诉我们你的想法,并分享你基于它构建的作品!

原始出处

LangChain Blog

内容说明

原始发布及相关权利归来源方。

机器翻译 · 请以原文为准