Skip to main content
Tout ce que font chaque paramètre, méthode et champ. Si vous instrumentez pour la première fois, commencez par le guide — cette page sert de référence.

Guide des agents personnalisés

Installation, instrumentation, méthodes d’événements, exemple complet et problèmes courants.

Vous utilisez un framework ?

LangChain, CrewAI, LlamaIndex et Pydantic AI s’instrumentent automatiquement en un seul appel.
Python 3.10 ou supérieur. Aucune dépendance d’exécution.

Installation

Le package s’installe sous le nom failproofai-sdk et s’importe en Python sous failproofai_sdk. Les extras de framework tels que failproofai-sdk[langgraph] installent le framework lui-même ; les adaptateurs sont toujours inclus dans la roue de base.

Connecter le démon Failproof

  1. Allez dans Admin → Clés et créez une clé avec events:add.
  2. Connectez le démon Failproof au Cloud sur la machine de l’agent.
  3. Lancez une session instrumentée, puis trouvez son identifiant exact dans Observer → Événements.
  4. Allez dans Observer → Sessions, sélectionnez le même environnement et ouvrez la trace reconstruite. Session d'un agent Python personnalisé reconstruite sous forme de graphe d'exécution et de trace d'événements ordonnée.

Configuration

Définition par variable d’environnement :
Pas de virgules dans environment. L’ingest découpe ce champ sur les virgules pour construire ses filtres, et ignore tout événement dont le libellé en contient une — toute une exécution disparaît silencieusement. Écrivez prod-eu, et non prod,eu.configure(environment="prod,eu") lève une exception immédiatement. AGENTEYE_ENVIRONMENT ne peut pas lever d’exception — personne ne vous appelle — il émet donc un avertissement une seule fois et revient à dev.
Les événements sont mis en file d’attente en mémoire et écrits en arrière-plan toutes les flush_interval secondes, avec un vidage final à la sortie de l’interpréteur. Un processus tué brutalement perd ce qui n’avait pas encore été écrit.

Identité

Chaque événement appartient à une session et un agent. Les contextes renseignent les deux, vous n’avez donc rarement besoin de les passer explicitement :
Passer session_id ou agent_id explicitement fonctionne toujours et a la priorité. Si ni l’un ni l’autre n’est lié ou passé, l’appel lève TypeError plutôt que d’émettre un événement que Cloud ignorerait silencieusement.
L’identité repose sur des variables de contexte. Elle suit les tâches asyncio automatiquement, mais pas les nouveaux threads — encapsulez un worker dans failproofai_sdk.propagate() ou ses événements seront non rattachés.

Catalogue d’événements

Quinze méthodes. La plupart viennent par paires — vous appelez l’ouvrante, puis la fermante, et le SDK mesure l’écart. Trois sont autonomes : error, human_pause, human_interrupt.
Chaque méthode accepte également session_id et agent_id, que les contextes renseignent pour vous. Tout ce qui est laissé à None est abandonné plutôt qu’envoyé comme null JSON, et chaque méthode retourne None.
Pour marquer une exécution comme échouée, outcome doit être l’une des valeurs suivantes : failed, error, timeout ou rejected. Toute autre valeur — y compris la proche variante "failure" — est comptée comme un succès.

Appariement et durée

Une seule règle : donnez à l’événement de fermeture le même identifiant que son ouvreur. C’est ce qui les apparie et ce qui permet au SDK de mesurer l’écart. Ne passez pas duration_ms vous-même. Le SDK le mesure, et le passer lève une ValueError. La seule exception est model_response, où seul vous connaissez la vraie latence du fournisseur. Passez un nombre entier de millisecondes — un float lève une exception, car la colonne est un entier 32 bits et resterait sinon vide.
  • Les identifiants doivent seulement être uniques par type et par session. Un appel d’outil et un hook peuvent partager le même ; deux sessions simultanées peuvent réutiliser les mêmes identifiants sans collision.
  • Ils ne sont pas limités à un agent. Une paire ouverte sous un agent et fermée sous un autre est quand même appariée — ce qui est le cas normal dans le code multi-agents.
  • request_id est optionnel mais recommandé. Sans lui, les événements de modèle sont appariés dans l’ordre d’arrivée, ce qui peut mener à des erreurs d’appariement entre deux appels simultanés dans le même agent.
  • Une paire répartie sur plusieurs processus est quand même appariée dans Cloud, mais le SDK ne peut pas la chronométrer — aucun des processus n’a vu les deux moitiés.
  • Au maximum 10 000 ouvreurs peuvent attendre un fermant simultanément. Au-delà, le plus ancien est supprimé, ce qui empêche une fuite de croître indéfiniment.

Vos propres champs

Tout mot-clé supplémentaire que vous passez est stocké avec l’événement :
Préférez les types JSON si vous souhaitez les interroger ultérieurement. Tout le reste — un UUID, un datetime, un Decimal, un set, des bytes, un objet modèle — est stocké sous forme de chaîne.
Préfixez vos noms de champs. Les extras sont appliqués en dernier, donc un champ nommé model, tool_name ou outcome écrasera silencieusement le vrai champ. Les adaptateurs de framework utilisent fw_ ; faites de même et aucune collision ne sera possible.C’est également pourquoi un champ optionnel mal orthographié ne génère jamais d’erreur — il devient simplement un nouveau champ personnalisé. Si un champ standard est absent dans Cloud, vérifiez d’abord l’orthographe.
Ces cinq noms sont réservés et systématiquement rejetés : timestamp, session_id, agent_id, type, environment.

Livraison et vérification

Dans Observer → Événements, vérifiez que agent_start existe en premier et agent_end en dernier. Ensuite, ouvrez Observer → Sessions et confirmez que les événements de modèle, d’outil, humains, de hook et d’erreur apparaissent dans l’ordre prévu. Utilisez l’identifiant de session comme clé principale de dépannage.
Si Cloud est vide, inspectez $FAILPROOFAI_HOME/custom-agents/events, sinon ~/.failproofai/custom-agents/events. Les fichiers JSONL prouvent l’émission par le SDK ; un spool qui grossit indique un problème de configuration du démon ou de livraison, tandis qu’un spool vide pointe vers l’instrumentation ou la durée de vie du processus.
N’inspectez le spool que lorsque le démon est arrêté. Pendant son fonctionnement, il collecte et supprime chaque lot en quelques millisecondes, de sorte qu’un listage du répertoire sera en compétition avec le collecteur et affichera bien moins d’événements que ceux émis.

Prévenir les défaillances dans un runtime personnalisé

Utilisez les résultats d’audit et les traces liées pour définir l’action non sécurisée, les preuves requises et la réponse attendue. Une intégration d’application des politiques personnalisée doit exposer l’action avant son exécution, transmettre son entrée structurée au moteur de politique, et appliquer la décision allow, instruct ou deny qui en résulte. Contactez Failproof AI et nous vous aiderons à mapper les frontières de modèle, d’outil et de cycle de vie de votre runtime aux hooks de politique, puis à valider l’intégration avec vous.