Intervention humaine pour LangChain
L’intervention humaine pour les agents LangChain, sur téléphone.
Ajoutez un appel dans votre outil LangChain sensible : il attendra l’approbation de votre utilisateur sur son téléphone.
Ce que propose LangChain
Un middleware qui interrompt avant un outil
LangChain 1.0 gère les approbations dans un middleware. Vous listez les outils qui exigent une approbation ; l’agent interrompt avant ces appels avec une demande que votre code approuve, modifie ou rejette. Le mécanisme utilise interrupt de LangGraph.
agent = create_agent(
model=model,
tools=[issue_refund],
middleware=[
HumanInTheLoopMiddleware(
interrupt_on={"issue_refund": True},
),
],
checkpointer=checkpointer,
)Le point de blocage
- Il exige un checkpointer : vous exécutez donc le moteur de graphe, que vous le souhaitiez ou non.
- L’interruption arrive à votre code, pas à une personne. À vous de la transmettre à quelqu’un.
- Rien n’est consigné. Aucun historique ne recense ce que le middleware a arrêté.
La solution
Pushary recueille la réponse de votre utilisateur.
Le middleware arrête l’outil et transmet une demande en attente à votre code. decisions.ask() envoie la question sur le téléphone de votre utilisateur, attend une approbation ou un refus et enregistre la réponse.
L’outil ask_human appelle decisions.ask(), qui envoie la question sur le téléphone de votre utilisateur et attend sa réponse jusqu’à 55 secondes. Il renvoie approved uniquement après un oui explicite. Utilisez pushary en Python ou @pushary/server en TypeScript ; aucun wrapper n’est à installer.
pip install pusharyimport os
from langchain_core.tools import tool
from pushary import PusharyServer
px = PusharyServer(api_key=os.environ["PUSHARY_API_KEY"])
# Once per user: show them this link to connect their phone.
link = px.enroll("user_123")["universalLink"]
@tool
def ask_human(question: str) -> str:
"""Ask a real person to approve before acting."""
d = px.decisions.ask(question=question, external_id="user_123", type="confirm")
return "approved" if d["approved"] else f"not approved ({d['status']})"
# agent = create_agent(model, tools=[ask_human])Fonctionnement
De l’installation à la première réponse
Connectez votre utilisateur une seule fois. Exigez son approbation à l’étape sensible. Pushary envoie la question, attend la réponse et l’enregistre.
- 01
Installez le SDK
Exécutez pip install pushary pour Python, ou npm i @pushary/server pour TypeScript. Placez votre clé API dans PUSHARY_API_KEY.
- 02
Connectez votre utilisateur une seule fois
Un appel SDK par utilisateur renvoie un lien de connexion. Votre utilisateur l’ouvre une fois sur son téléphone avec l’application Pushary gratuite. Sans compte ni paiement.
- 03
Encapsulez decisions.ask dans un @tool
Définissez un @tool dont le corps appelle px.decisions.ask(), puis ajoutez-le aux outils de votre agent. La docstring indique au modèle quand l’utiliser.
- 04
Agissez selon la réponse
L’outil renvoie approved uniquement après un oui explicite. Un non, une demande expirée ou l’absence de réponse signifie que l’agent n’effectue pas l’action.
Une question peut demander un oui ou un non, un choix dans une liste ou une réponse écrite. Chaque réponse est enregistrée.
Avant la mise en production
Les pièges à éviter avec LangChain
- Un outil que le modèle peut ignorer ne bloque rien
- ask_human est un outil que le modèle choisit d’appeler : il reste facultatif. Une consigne « demander d’abord » ne bloque pas un remboursement. Appelez decisions.ask() dans l’outil de remboursement lui-même, ou protégez-le avec interrupt_on du middleware.
- Sans checkpointer, aucune interruption
- Sans checkpointer, le middleware ne peut rien faire d’utile, car aucun état ne peut être conservé pour la pause. Les outils s’exécutent sans s’arrêter, comme si la configuration était ignorée.
- La modification permet à une personne de réécrire les arguments
- Approuver est simple. Modifier signifie qu’une personne change les arguments avant l’exécution de l’outil : c’est une entrée directe dans l’outil via du texte saisi. Vérifiez ces arguments comme vous vérifiez la sortie du modèle.
- Les clés des noms d’outils sont des chaînes exactes
- interrupt_on utilise le nom de l’outil comme clé. Renommez l’outil : le contrôle cesse silencieusement de s’appliquer, sans erreur ni avertissement. Écrivez un test qui vérifie que l’outil protégé interrompt réellement l’exécution.
L’offre Partner
Votre agent interroge vos utilisateurs, pas seulement vous
Proposez votre agent à vos utilisateurs. Chacun approuve ses actions sensibles depuis son téléphone, sous votre marque.
Vos utilisateurs ne créent jamais de compte Pushary et ne nous paient rien.
Vos utilisateurs répondent sur leur propre téléphone
Connectez chaque utilisateur une seule fois avec un lien. Il installe l’application Pushary gratuite et répond depuis l’écran verrouillé, sans créer de compte.
Sans réponse, c’est non
Exécutez l’action uniquement après une approbation explicite. Une demande en attente, expirée ou annulée ne vaut jamais un oui. Pushary conserve chaque demande : votre code peut la reprendre après un redémarrage.
Joignez-les sur leur téléphone
L’application passe en premier, car elle seule affiche Approuver et Refuser sur l’écran verrouillé. Les notifications du navigateur viennent ensuite. Vous n’avez aucun système d’envoi à construire.
Chaque réponse est enregistrée
Chaque réponse est enregistrée avec son auteur et sa date. Vous pouvez effectuer des recherches et exporter les réponses. Avec une URL de rappel, chaque réponse est aussi envoyée à votre serveur par webhook signé.
FAQ
Les réponses à vos questions
Ai-je besoin d’un package spécial pour LangChain ?
Cela fonctionne-t-il avec create_agent et les anciens moteurs d’agents ?
Que se passe-t-il si personne ne répond ?
Mes utilisateurs finaux peuvent-ils répondre à ma place ?
Existe-t-il une option TypeScript ?
Comment cela se compare-t-il au middleware d’intervention humaine de LangChain ?
Laissez votre agent LangChain demander avant d’agir.
Connectez un utilisateur une seule fois, posez une question en un appel et exécutez l’action uniquement après un oui. Chaque réponse est enregistrée.
Start freeOffre Partner, $99 par mois. Vos utilisateurs ne créent jamais de compte Pushary et ne nous paient rien.