Skip to main content
Beobachten Sie genau, was Ihre KI-Agenten in der Produktion getan haben: jeden Agentenlauf, Tool-Aufruf, Modellanfrage, Hook und menschlichen Eingriff. Das Failproof AI Observability Python SDK zeichnet diesen Verlauf direkt aus Ihrem Agenten-Code auf, damit Sie debuggen, prüfen und nachvollziehen können, was passiert ist. Verwenden Sie es immer dann, wenn Failproof AI Observability Ihre Agenten beobachten soll. Im Hintergrund schreibt das SDK strukturierte Events in lokale JSONL-Dateien; der Collector-Daemon liest diese ein und übermittelt sie automatisch an die Plattform. Sie müssen diese Dateien nicht selbst verwalten.
Tipp: Neu bei Failproof AI Observability? Diese Seite ist die vollständige SDK-Event-Referenz.

Installation

Das SDK wird Kunden als privates Wheel und nicht über einen öffentlichen Paketindex bereitgestellt. Ihr Onboarding erklärt, wie Sie es beziehen, installieren und versionieren — sprechen Sie Ihren Failproof AI-Ansprechpartner an, wenn Sie Zugang benötigen. Sobald es installiert ist, überprüfen Sie die Installation:
Möchten Sie die gesamte Integration lieber von einem Coding-Agenten erledigen lassen? Der Python SDK Agent Skill kennt den Installationspfad, plant die Instrumentierungspunkte, schreibt sie und verifiziert, dass die Events ankommen.

Schnellstart

Einen echten Aufruf instrumentieren

In der Praxis wrappen Sie Ihren bestehenden Agenten-Code. Umschließen Sie einen Modellaufruf mit model_request davor und model_response danach, sodass die beiden Events die eigentliche Anfrage umspannen und Failproof AI Observability sie einander zuordnen kann:
Wrappen Sie Tool-Aufrufe auf dieselbe Weise mit tool_use und tool_result, wobei Sie eine tool_call_id für das jeweilige Paar wiederverwenden. So sehen diese Events aus, sobald sie das Dashboard erreichen — farblich nach Typ kodiert und nach Umgebung, Agent und Session filterbar: Der Live-Events-Stream, farblich nach Event-Typ kodiert und nach Umgebung, Agent und Session filterbar

configure()

Einmal vor dem ersten event.*-Aufruf aufrufen. Kann weggelassen werden; die Standardwerte funktionieren sofort. Alle Argumente sind Keyword-only; übergeben Sie sie wie oben gezeigt mit Namen. Wenn base_dir None ist (Standard), liest das SDK $AGENTEYE_HOME, falls gesetzt, und fällt andernfalls auf ~/.agenteye zurück. Dies entspricht der eigenen Auflösungslogik des Collectors, sodass eine einzelne AGENTEYE_HOME-Umgebungsvariable den gemeinsamen Event-Spool für das SDK und den Collector konfiguriert.

Umgebung

Versehen Sie jedes Event mit einem Deployment-Environment-Label (production, staging, qa, canary usw.). Einmal setzen; das SDK hängt es automatisch an jedes Event an. Option 1: über configure():
Option 2: über Umgebungsvariable:
Priorität: configure(environment=...) hat Vorrang vor der Umgebungsvariable. Wenn keines von beidem gesetzt ist, wird standardmäßig "dev" verwendet. Der Environment-Wert erscheint als erstklassiger Filter im Dashboard und wird für schnelle Abfragen auf dem Server gespeichert.
Warnung: Environment-Werte dürfen kein wörtliches ,-Komma enthalten. Die Dashboard-Filter verwenden kommagetrennte Mehrfachauswahl in der URL (?environment=prod,staging), sodass ein Environment namens prod,blue in zwei Werte aufgeteilt würde. Events mit Komma-enthaltenden Environments werden beim Ingest abgelehnt.

Daten und Datenschutz

Das SDK zeichnet nur die Felder auf, die Sie explizit übergeben. Prompts, Nachrichten, Tool-Eingaben und -Ausgaben sowie Modellinhalt werden ausschließlich erfasst, weil Sie sie einem event.*-Aufruf übergeben. Es wird nichts aus Ihrem Prozess gelesen oder implizit erfasst. Jedes Feld, das Sie weglassen, wird vollständig aus dem Event ausgelassen; es wird nicht auf die Festplatte geschrieben. Das macht die Schwärzung zu Ihrer Wahl und Verantwortung. Wenn ein Prompt oder ein Tool-Payload personenbezogene Daten oder Geheimnisse enthält, die Sie lieber nicht speichern möchten, entfernen oder maskieren Sie diese, bevor Sie sie an die Event-Methode übergeben.

Event-Referenz

Die meisten Events kommen in Start/End-Paaren, die eine Korrelations-ID teilen: tool_use und tool_result teilen eine tool_call_id, hook_triggered und hook_completed teilen eine hook_id, und human_wait und human_input teilen eine input_id. Senden Sie das Start-Event, führen Sie die Arbeit aus und senden Sie dann das End-Event mit derselben ID. Failproof AI Observability ordnet das Paar zu und berechnet duration_ms für Sie — Sie übergeben duration_ms daher nie selbst. Ein git-ähnlicher Ausführungsgraph einer Session neben ihrer Event-Zeitleiste, rekonstruiert aus den gepaarten Events, mit dem Tool/Model/Hook-Aufschlüsselungspanel Alle Event-Methoden erfordern diese beiden Felder: Alle Methoden akzeptieren auch beliebige **kwargs für benutzerdefinierte Metadaten (siehe Benutzerdefinierte Felder).

event.agent_start()

Wird ausgelöst, wenn ein Agent mit der Arbeit beginnt.

event.agent_end()

Wird ausgelöst, wenn ein Agent die Arbeit beendet.

event.tool_use()

Wird ausgelöst, wenn ein Agent ein Tool aufruft. In Kombination mit tool_result verwendet; das SDK berechnet duration_ms automatisch.

event.tool_result()

Wird ausgelöst, wenn ein Tool eine Antwort zurückgibt. Korreliert mit tool_use über tool_call_id.

event.model_request()

Wird unmittelbar vor dem Senden eines Prompts an ein LLM ausgelöst.
messages-Einträge akzeptieren entweder einen einfachen String als content oder Anthropic-Stil Listen von Content-Blöcken als content. Sampling-Parameter (temperature, max_tokens usw.) können als zusätzliche kwargs übergeben werden.

event.model_response()

Wird ausgelöst, wenn das LLM eine Antwort zurückgibt.
content akzeptiert entweder einen einfachen String (generische Provider) oder eine Liste von Anthropic-Stil Content-Blöcken. Tool-Aufrufe befinden sich innerhalb von content als {"type": "tool_use", ...}-Blöcke, ohne ein separates tool_calls-Feld.

event.hook_triggered()

Wird ausgelöst, wenn ein Hook feuert. In Kombination mit hook_completed verwendet; das SDK berechnet duration_ms automatisch.

event.hook_completed()

Wird ausgelöst, wenn ein Hook abgeschlossen ist. Korreliert mit hook_triggered über hook_id.

event.error()

Wird ausgelöst, wenn ein unbehandelter Fehler auftritt.

Human-in-the-Loop-Events

Human-in-the-Loop-Events geben Ihnen Einblick in die Momente, in denen eine Person in die Ausführung des Agenten eingreift (warten auf Genehmigung, Eingaben bereitstellen, pausieren oder den Agenten stoppen). Sie ermöglichen es Ihnen zu messen, wie lange Menschen für eine Antwort benötigen (das SDK berechnet duration_ms bei gepaarten Events automatisch), zu prüfen, wer einen Agenten pausiert oder unterbrochen hat, und Genehmigungs- und Überwachungs-Workflows zu erstellen, die im Dashboard angezeigt werden.

event.human_wait()

Wird ausgelöst, wenn der Agent die Ausführung unterbricht, um auf eine menschliche Eingabe zu warten. In Kombination mit human_input verwendet; das SDK berechnet duration_ms (wie lange der Mensch für eine Antwort benötigte) automatisch.

event.human_input()

Wird ausgelöst, wenn ein Mensch eine Eingabe bereitstellt und der Agent die Ausführung fortsetzt. Korreliert mit human_wait über input_id. duration_ms wird automatisch berechnet und darf nicht vom Aufrufer übergeben werden.

event.human_pause()

Wird ausgelöst, wenn ein Mensch den Agenten aktiv pausiert (z. B. über eine Dashboard-Steuerung). Der Agent wird angehalten, aber nicht beendet.

event.human_interrupt()

Wird ausgelöst, wenn ein Mensch den Agenten mitten in der Ausführung aktiv stoppt. Im Gegensatz zu human_pause wird die Arbeit des Agenten beendet und nicht nur ausgesetzt.

Benutzerdefinierte Felder

Alle zusätzlichen Keyword-Argumente werden nach den Standardfeldern an das Event angehängt:
timestamp, type und environment sind reserviert und lösen einen ValueError aus (Reserved field names cannot be used as custom fields: [...]), wenn sie als benutzerdefinierte Felder übergeben werden. session_id und agent_id sind Pflichtparameter bei jeder Event-Methode und können nicht ein zweites Mal übergeben werden; Python löst in diesem Fall einen TypeError aus. Setzen Sie die Umgebung stattdessen mit configure(environment=...) (oder der AGENTEYE_ENVIRONMENT-Variable). Halten Sie Payloads als strukturiertes JSON, wenn Sie deren Felder abfragen möchten. Werte, die JSON nicht nativ unterstützt — wie Datetimes, UUIDs, Decimals, Sets, Bytes oder Modell-Objekte — werden in Strings konvertiert, damit die Aufzeichnung sicher fortgesetzt werden kann.

Wie Events geschrieben werden

Events werden prozessintern gepuffert und alle flush_interval Sekunden (Standard: 500 ms) auf die Festplatte geschrieben. Jeder Flush schreibt eine JSONL-Datei:
Der Collector überwacht dieses Verzeichnis und lädt Dateien automatisch hoch. Sie müssen diese Dateien nicht direkt verwalten. Jede Datei wird atomar geschrieben: Das SDK schreibt in eine temporäre Datei und benennt sie dann an den endgültigen Ort um, sodass der Collector nie eine halbfertige Datei sieht. Ein abschließender Flush wird auch beim Beenden Ihres Prozesses ausgeführt, sodass im letzten Intervall gepufferte Events nicht verloren gehen. Wenn der Collector offline ist, sammeln sich Events einfach als Dateien auf der Festplatte an und werden übermittelt, sobald er wieder verfügbar ist.

Nächste Schritte

  • Event-Stream: Beobachten Sie, wie diese Events live ankommen, farblich kodiert und nach Umgebung, Agent und Session filterbar.
  • Sessions: Sehen Sie, wie die gepaarten Events jeden Agentenlauf als Ausführungsgraph und Zeitleiste rekonstruieren.