跳到正文
LangChain Blog·· 5 小时前精选AI 评分64

LangChain 用 Stripe Link 与 Managed Deep Agents 构建可付款智能体 Restock

Agents that can pay: building Restock with Stripe's Link and Managed Deep Agents

AI 导读

LangChain 发布示例项目 Restock,一个运行在 Slack 上的办公用品采购智能体,通过 Stripe 的 Link 钱包和 Machine Payments Protocol(MPP)完成真实付款。

推荐理由

LangChain 官方给出可复用的支付型智能体架构,读者可据此了解如何把支付凭证与审批隔离在模型之外。

正文 · AI 翻译

智能体已经擅长寻找可购买的商品。付款则更难:它涉及真实资金,需要模型永远不应看到的凭证,而且难以撤销。

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

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

我们的笔快用完了。你能为办公室找一盒 12 支装的蓝色墨水笔吗,总价低于 25 美元?

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

选择支付方式

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

支持 Machine Payments Protocol(MPP)的 API 避免了这一点:它明确告诉智能体需要支付什么,并直接接受付款。代价是覆盖范围,因为智能体只能通过支持 MPP 的 API 购买。这个列表正在增长,像 Apify 和 Mercator 这样的工具聚合器,以及像 Zinc 这样的零售垂直服务都在加入。Restock 使用 Zinc,但这一模式并不依赖它。

各部分如何组合

Restock 由四部分组成:

  • Link 保存用户的支付方式,并请求他们批准付款。
  • MPP,即 Machine Payments Protocol,定义了通过 HTTP 进行的支付交换。商家以 402 Payment Required 和支付指令作为响应,客户端则使用支付凭证重试。
  • Zinc 通过其 MPP 订单 API 搜索商品并下零售商订单。
  • Managed Deep Agents (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 密钥和已充值的搜索账户在 Zinc 中搜索(搜索不通过 Link 付费)。用户选择一盒 12 支装,Restock 保存购物车,但不包含支付金额。

设置预付款金额

Restock 将 25 美元的预算视为上限,而非要收取的金额。税费和运费无法从商品列表中得知,总额只有在零售商订单下达后才会确定。因此,Restock 会询问用户预付款金额,最高不超过 25 美元。Zinc 在下单时收取该金额,从中支付给零售商,并退还剩余部分。

对于这些笔,用户选择 23 美元。Zinc 保留 1 美元的基础费用,剩下 22 美元的零售商额度用于商品、税费和运费。可选费用(如 Zinc 的邮件订单更新)可能会进一步减少这一额度,因此在审核之前,Restock 会在不付款的情况下请求订单,并从 Zinc 的 402 Payment Required 挑战中读取实际费用。

让凭证远离模型

模型从不接触用于支付订单的机密信息。Link 会话存放在用户自有的 MDA Connection 中,因此每个人的钱包始终归自己所有。配送地址、通知邮箱和 Zinc API 密钥存放在 agent 自有的 Connection 中。Link CLI 在 MDA 的托管沙箱内运行登录流程。一个小型辅助程序将保存的会话保留在用户的 Connection 中,仅在命令运行时才将其放入沙箱。连接 Link 并不会批准购买,后续对话会复用该会话。

在 Slack 中审核购买

在支付任何费用之前,用户会在 Slack 中审核购物车、办公室标签、费用和预付金额。配送地址保持私密。Restock 会为此次审核触发一个中断,因此运行会保持暂停,直到用户在 Slack 中点击 Approve 或 Reject。模型写入工具调用的任何内容都无法批准它。

通过 MPP 使用 Link 支付

接下来,Restock 会在 Slack 线程中发布一个 Link 批准链接,金额恰好等于 Zinc 挑战中的金额,即同样的 $23。用户在 Link 网站上批准它,这就是钱包自身对支付的同意。

一旦 Link 批准,Restock 就会使用 Link 共享支付令牌作为凭据,将已支付的请求发送给 Zinc,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 是一个示例:它仅支持美国配送和美元,每个部署一个办公室,并且从请求者自己的钱包付款。

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

  1. 排练(rehearsal):虚构产品和模拟批准。需要 OpenAI API 密钥以及具有 Managed Deep Agents 访问权限的 LangSmith 工作区。
  2. Link 测试批准(link-test):真实的 Zinc 搜索和真实的 Link 批准,但不进行购买。需要添加 Link 钱包、Zinc API 密钥、已充值的 Zinc 搜索账户以及配送详情。
  3. 实时购买(live):真实付款和真实的零售商订单。

这一模式适用于任何花钱的 agent。让 agent 搜索并构建购物车,将支出限额和批准保留在模型无法触及的代码中,并且只有当商家确认时才将订单视为已下单。

试试 Restock 吧。告诉我们你的想法,并分享你在此基础上构建的内容!

来源:LangChain Blog · langchain.com