LangChain BlogMis à jour le

Des agents qui peuvent payer : construire Restock avec Link et Managed Deep Agents de Stripe

Points clés Restock est un agent d'exemple qui paie de vrais achats. Il fonctionne dans Slack sur Managed Deep Agents, trouve des produits, construit un panier et finalise l'achat via une API qui pren

Restock payment flow from the Slack request to the confirmed order, with approvals in Slack and in Link
Source de l’image · LangChain Blog

Points clés

  • Restock est un agent d'exemple qui paie de vrais achats. Il fonctionne dans Slack sur Managed Deep Agents, trouve des produits, construit un panier et finalise l'achat via une API qui prend en charge le Machine Payments Protocol (MPP).
  • Les paiements restent sûrs et dans le budget. Link, le portefeuille grand public de Stripe, traite le paiement, si bien que l'agent ne voit jamais de numéro de carte. L'utilisateur approuve une demande de dépense jusqu'à un montant défini, et l'agent ne peut pas dépenser au-delà.
  • Créez votre propre agent capable de payer. Partez du code d'exemple de Restock, et dites-nous ce que vous construisez.

Les agents sont déjà doués pour trouver des choses à acheter. Payer est plus difficile : cela déplace de l'argent réel, cela exige des identifiants que le modèle ne devrait jamais voir, et c'est difficile à annuler.

Pour montrer comment construire un agent qui paie, nous avons créé Restock, un agent d'exemple dédié aux fournitures de bureau qui fonctionne dans Slack sur Managed Deep Agents. Il recherche de vrais produits, construit un panier et paie via Link, le portefeuille grand public de Stripe, qui offre aux agents le moyen de paiement le plus sûr.

Cet article suit une seule demande, du premier message à la commande confirmée :

Nous manquons de stylos. Peux-tu trouver un lot de 12 stylos à encre bleue pour le bureau, pour un total inférieur à 25 $ ?

Restock commande les stylos pour 22.18 $, frais compris. Les prix dans cet article sont illustratifs.

Choisir comment payer

Un agent peut payer en pilotant le processus de paiement du détaillant dans un navigateur, mais c'est fragile. Les pages changent, les sites bloquent les achats automatisés, et les informations de paiement doivent être saisies sans les exposer au modèle.

Une API qui prend en charge le Machine Payments Protocol (MPP) évite cela : elle indique exactement à l'agent quoi payer et accepte le paiement directement. L'inconvénient est la couverture, car l'agent ne peut acheter que via des APIs compatibles MPP. Cette liste s'allonge, avec des agrégateurs d'outils comme Apify et Mercator qui rejoignent des solutions verticales comme Zinc pour le commerce de détail. Restock utilise Zinc, mais le modèle n'en dépend pas.

Comment les pièces s'assemblent

Restock est construit à partir de quatre éléments :

  • Link contient les moyens de paiement de l'utilisateur et lui demande d'approuver les paiements.
  • MPP, le Machine Payments Protocol, définit l'échange de paiement sur HTTP. Le marchand répond avec 402 Payment Required et des instructions de paiement, et le client réessaie avec une information d'identification de paiement.
  • Zinc recherche des produits et passe des commandes auprès des détaillants via son MPP order API.
  • Managed Deep Agents (MDA) héberge l'agent et gère Slack, la revue humaine, les identifiants et l'état sauvegardé.
Restock payment flow from the Slack request to the confirmed order, with approvals in Slack and in Link
La demande de stylos passe de ask à confirmed order. L'utilisateur approuve deux fois : l'achat dans Slack et le paiement dans Link.

Recherche et panier

Nous avons écrit des outils personnalisés pour la recherche Zinc, le panier et le paiement, ainsi que les instructions qui façonnent la conversation. MDA gère le reste, y compris la sauvegarde des conversations et des commandes, afin que quelqu'un puisse revenir des jours plus tard et s'enquérir des mêmes stylos. Voici la structure et une définition d'agent raccourcie :

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
    ],
)

Pour la demande de stylos, Restock interroge Zinc avec une clé API Zinc et un compte de recherche approvisionné (la recherche n'est pas payée via Link). L'utilisateur choisit un paquet de 12, et Restock enregistre le panier sans montant de paiement.

Définir le montant initial

Restock considère le budget de 25 $ comme un plafond, pas comme un montant à facturer. Les taxes et les frais de livraison ne sont pas connus à partir d'une fiche produit, et le total n'est réglé qu'une fois la commande du détaillant passée. Restock demande donc à l'utilisateur combien payer d'avance, jusqu'à 25 $. Zinc prélève ce montant au moment de la commande, paie le détaillant sur ce montant et rembourse le reste.

Pour les stylos, l'utilisateur choisit 23 $. Zinc conserve des frais de base de 1 $, ce qui laisse une marge détaillant de 22 $ pour l'article, les taxes et la livraison. Des frais optionnels, comme les mises à jour de commande par e-mail de Zinc, peuvent la réduire davantage ; ainsi, avant la validation, Restock demande la commande sans paiement et lit les frais réels depuis le 402 Payment Required challenge de Zinc.

Garder les identifiants hors du modèle

Le modèle ne manipule jamais les secrets qui paient la commande. La session Link vit dans une connexion détenue par l'utilisateur MDA Connection, donc le portefeuille de chaque personne lui reste propre. L'adresse de livraison, l'e-mail de notification et la clé API Zinc se trouvent dans des connexions détenues par l'agent. La CLI Link exécute la connexion dans le bac à sable géréde MDA. Un petit assistant conserve la session enregistrée dans la connexion de l'utilisateur et la place dans le bac à sable uniquement pendant l'exécution d'une commande. Connecter Link n'approuve aucun achat, et les conversations ultérieures réutilisent la session.

Valider l'achat dans Slack

Avant tout paiement, l'utilisateur examine le panier, l'étiquette du bureau, les frais et le montant initial dans Slack. L'adresse de livraison reste privée. Restock déclenche une interruption pour cette validation, de sorte que l'exécution reste en pause jusqu'à ce que l'utilisateur clique sur Approve ou Reject dans Slack. Rien de ce que le modèle écrit dans un appel d'outil ne peut l'approuver.

Payer avec Link via MPP

Ensuite, Restock publie un lien d'approbation Link dans le fil Slack pour exactement le montant du challenge de Zinc, les mêmes 23 $. L'utilisateur l'approuve sur le site Web de Link, ce qui constitue le consentement de paiement du portefeuille.

Une fois que Link approuve, Restock envoie la requête payée à Zinc avec un jeton de paiement partagé Link comme identifiant, et Zinc traite le paiement via Stripe. pympp gère le formatage MPP.

L'outil de paiement lit le jeton depuis un fichier privé du bac à sable, le supprime après usage et ne renvoie qu'un résumé public au modèle. Le jeton n'applique pas les détails du panier par lui-même, l'outil vérifie donc aussi la commande par rapport à ce que l'utilisateur a examiné et confirme que l'approbation est encore récente.

Confirmer la commande

La commande détaillant s'élève à 21,18 $ (14,99 $ pour les stylos, 1,20 $ de taxes, 4,99 $ de livraison), dans la marge de 22 $. L'utilisateur paie 22,18 $ frais Zinc inclus, et Zinc rembourse les 0,82 $ restants.

Budget breakdown for the pens order: $25 budget, $23 approved, $22.18 paid, $0.82 refunded
Où va l'argent pour la commande de stylos, avec des prix illustratifs. L'utilisateur approuve 23 $ dans Link sur un budget de 25 $, paie 22,18 $ et récupère 0,82 $.

Restock confirme dans Slack dès que Zinc fait son rapport order_placed, et partage le suivi lorsque le détaillant expédie. Au-delà des prix illustratifs, nous avons exécuté Restock de bout en bout sur un déploiement hébergé : une commande réelle est arrivée order_placed, et le remboursement attendu a été effectué.

Pour commencer

Le code se trouve dans langchain-samples/restock-agent, et son README présente l'installation et le déploiement étape par étape. Le guide de configuration Slack de MDA couvre la connexion de l'application Slack.

Restock est un exemple : il prend en charge la livraison aux États-Unis et uniquement en USD, un seul bureau par déploiement, et le paiement depuis le portefeuille du demandeur lui-même.

Restock propose trois modes. Définissez RESTOCK_MODE pour en choisir un, et essayez-les dans l'ordre :

  1. Rehearsal (rehearsal) : produits fictifs et approbation simulée. Nécessite une clé API OpenAI et un espace de travail LangSmith avec accès à Managed Deep Agents.
  2. Link test approval (link-test) : recherche Zinc réelle et approbation Link réelle, sans achat. Ajoute un portefeuille Link, une clé API Zinc, un compte de recherche Zinc financé et des détails de livraison.
  3. Live purchase (live) : un paiement réel et une commande réelle chez le détaillant.

Ce modèle s'applique à tout agent qui dépense de l'argent. Laissez l'agent rechercher et constituer le panier, gardez la limite de dépenses et les approbations dans du code que le modèle ne peut pas modifier, et considérez une commande comme passée uniquement lorsque le marchand le confirme.

Essayez Restock. Dites-nous ce que vous en pensez et partagez ce que vous construisez par-dessus !

Source originale

LangChain Blog

À propos du contenu

La publication originale et les droits appartiennent à la source.

Traduction automatique · Consultez l’original