LangChain发布示例代理Restock:在Slack里下单并用Stripe Link付款
LangChain博客介绍了一个名为Restock的办公用品代理示例:运行在Slack与Managed Deep Agents上,通过机器支付协议(MPP)经Stripe旗下消费者钱包Link完成支付。示例演示了一次从Slack指令到零售商订单确认的全流程,订单金额 22.18 美元,含 0.82 美元退款,但价格被作者标注为示意性质。
LangChain在一篇博客中发布了示例代理Restock,用来演示如何构建一个真正付钱的代理。它运行在Slack上,由Managed Deep Agents(MDA)托管,通过Stripe的消费者钱包Link和机器支付协议(MPP)完成支付。
博客以一条真实请求为例:“办公室蓝墨水的笔快用完了,能不能找一盒 12 支装、总价低于 25 美元?”最终订单为 22.18 美元(含费用),作者注明文中价格为示意价格。
为什么不用浏览器结账
博客对比了两种让代理付钱的方式。让代理在浏览器里操作零售商结账流程很脆弱:页面会变、网站会拦截自动化结账,而且输入支付信息时不能让它暴露给模型。
支持机器支付协议(MPP)的API可以绕开这些问题——它直接告诉代理该付多少,并接受支付;代价是覆盖范围,代理只能通过支持MPP的API购买。作者称这个列表在增长,Apify、Mercator等工具聚合方以及Zinc这类垂直方都在加入。Restock使用Zinc,但作者说这套模式不依赖Zinc。
四个组成部分与权限边界
Restock由四部分组成:Link保管用户的支付方式并要求用户批准支付;MPP定义基于HTTP的支付交换;Zinc通过其MPP订单API搜索商品并下单;Managed Deep Agents托管代理并处理Slack、人工审核、凭据与保存的状态。
博客强调模型不接触支付密钥。Link会话存放在用户自己拥有的MDA Connection中,每个人的钱包归各人所有;收货地址、通知邮箱和Zinc API密钥放在代理侧的Connection里。Link CLI在MDA托管沙箱内执行登录,一个小助手把保存的会话留在用户Connection中,只在命令运行时放进沙箱。连接Link不等于批准购买,后续对话会复用该会话。
下单与两次批准
Restock用Zinc API密钥和一个有余额的搜索账户搜索商品(搜索不通过Link付费)。用户选中 12 支装后,Restock保存购物车但不带支付金额。
博客写道,Restock把 25 美元预算当上限而非扣款额,因为商品页面显示不出税费和运费,总额要到零售商订单下达后才结算。于是它询问用户愿意预付多少,最高 25 美元。示例中用户选 23 美元:Zinc保留 1 美元基础费,剩 22 美元用于商品、税费和运费;Zinc的邮件订单更新等可选费用还会进一步压缩这一额度。因此在审核前,Restock先发起不带支付的订单,从Zinc的 402 Payment Required应答中读取实际费用。
支付前,用户在Slack里审核购物车、办公室标签、费用和预付金额,收货地址不公开。Restock为此触发一次中断,流程暂停直到用户点击Approve或Reject;模型写进工具调用的任何内容都不能批准。
随后Restock在Slack线程里发布一条金额与Zinc要求完全一致的Link批准链接(示例中同为 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 美元。Zinc报告order_placed后,Restock在Slack中确认,并在零售商发货后分享物流。
博客称,除了示意价格,团队还在托管部署上把Restock全程跑通:一笔真实订单到达order_placed状态,预期退款也已到账。
Restock被定位为示例,仅支持美国配送和美元,每个部署一个办公室,且只能从请求者本人的钱包支付。它有三种模式,通过RESTOCK_MODE选择:rehearsal使用虚构商品和模拟批准,需要OpenAI API密钥和具备Managed Deep Agents访问权限的LangSmith工作区;link-test使用真实的Zinc搜索和真实的Link批准但不购买,另需Link钱包、Zinc API密钥、有余额的Zinc搜索账户和配送信息;live则是真实支付与真实零售商订单。代码位于langchain-samples/restock-agent,README提供部署步骤,MDA的Slack设置指南介绍如何连接Slack应用。