Skip to main content
Failproof AI Observability kann jeden abgeschlossenen Agenten-Lauf automatisch auf Qualität bewerten: Sie stellen einen kleinen Scoring-Dienst bereit, und Observability erledigt den Rest. Nutzen Sie es, um die Dimensionen zu verfolgen, die Ihnen wichtig sind (Hilfsbereitschaft, Tool-Effizienz, Faktentreue, Sicherheit – Sie entscheiden), Regressionen frühzeitig zu erkennen und Agenten oder Umgebungen auf einen Blick zu vergleichen. Scoring ist optional: Die Pipeline tut nichts, bis Sie EVALUATOR_ENDPOINT auf dem Server setzen.
Hinweis: Sie definieren die Score-Dimensionen. Ihr Evaluator kann beliebige numerische Schlüssel zurückgeben; Observability speichert, verfolgt und zeigt alles an, was Sie zurücksenden.

Auf einen Blick

  1. Schreiben Sie einen Scorer. Starten Sie einen kleinen HTTP-Dienst, der ein Sitzungsprotokoll liest und Scores zurückgibt. Observability liefert ein funktionsfähiges Referenzbeispiel, das Sie kopieren können. Siehe Evaluator mit dem SDK schreiben.
  2. Richten Sie Observability darauf aus. Setzen Sie EVALUATOR_ENDPOINT (und ein gemeinsames EVALUATOR_TOKEN) auf dem Serverprozess.
  3. Beobachten Sie die eingehenden Scores. Jede abgeschlossene Sitzung wird automatisch bewertet; die Ergebnisse erscheinen auf der Sitzungsdetailseite, im Sitzungsraster und in gespeicherten Dashboards.
Eine Sitzungsdetailansicht mit der Bewertungszusammenfassung, Scores pro Dimension als Balken und Begründungstext in der rechten Spalte Sobald ein Evaluator konfiguriert ist, wird jeder abgeschlossene Lauf bewertet, und die Ergebnisse erscheinen in der rechten Spalte der Sitzung: oben die Zusammenfassung, dann Score-Balken pro Dimension mit Begründung.

Funktionsweise

Wenn das Observability SDK ein agent_end-Ereignis für eine Sitzung auslöst, plant der Server eine Bewertung. Er sendet dann per POST das vollständige Ereignisprotokoll an Ihren Evaluator-Dienst, der entweder:
  • Das Ergebnis direkt zurückgibt mit {"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}. Das Ergebnis wird an die Bewertungs-Timeline der Sitzung angehängt. reasoning und summary sind optional.
  • Verzögert mit {"status":"pending", "job_id":"abc-123"}. Observability ruft dann GET {EVALUATOR_ENDPOINT}/evaluate/abc-123 auf, bis Ihr Evaluator {"status":"done", ...} oder {"status":"error", "error":"..."} zurückgibt. Der Abfrageintervall ist pro Job konfigurierbar: Eine pending-Antwort kann next_poll_secs enthalten, um den Standardwert zu überschreiben; andernfalls verwendet Observability den Wert default_poll_interval_secs aus GET /config; ansonsten fällt der Server auf EVALUATOR_POLLING_INTERVAL_SECS zurück (Standard: 10 s). Alle Werte werden auf [1 s, 1 h] begrenzt.
Sitzungen, die niemals agent_end auslösen (zum Beispiel ein abgestürzter Agentenprozess), können ebenfalls erfasst werden: Das GET /config des Evaluators kann {"inactivity_timeout_secs": 1800} zurückgeben, und Observability bewertet jede Sitzung, die so lange inaktiv war. Setzen Sie das Feld auf null oder lassen Sie es weg, um diesen Fallback zu deaktivieren. Die Pipeline ist vollständig inaktiv, wenn EVALUATOR_ENDPOINT nicht gesetzt ist. Eine Sitzung kann mehrere abschließende Bewertungen im Laufe der Zeit ansammeln: Jedes agent_end-Ereignis (und jede manuelle Neubewertung über das Dashboard) fügt eine neue Bewertungszeile hinzu. Dies ist die unterstützte Methode zur Bewertung eines wiederaufgenommenen Gesprächs: Ein Benutzer beendet einen Agenten, kommt später zurück, sendet weitere Ereignisse, beendet den Agenten erneut, und eine zweite Bewertung läuft gegen das vollständig aktualisierte Protokoll. Das Dashboard zeigt die aktuellste Bewertung als Hauptanzeige und die früheren Bewertungen als aufklappbare Timeline. Während eine Bewertung für eine Sitzung läuft, werden weitere agent_end-Ereignisse für diese Sitzung ignoriert; das nächste nach Abschluss der laufenden Bewertung stellt wie gewohnt eine neue Bewertung in die Warteschlange. Der Inaktivitäts-Fallback greift auch bei wiederaufgenommenen Sitzungen: Wenn nach einer vorherigen abschließenden Bewertung neue Ereignisse eintreffen und die Sitzung dann länger als inactivity_timeout_secs inaktiv bleibt, wird eine neue Bewertung in die Warteschlange gestellt. Vorübergehende Fehler (5xx, 429, Timeouts, Netzwerkfehler) werden mit exponentiellem Backoff bis zu EVALUATOR_MAX_ATTEMPTS wiederholt; 4xx-Antworten sind endgültig. Observability kann sicher mit mehreren horizontal skalierten Serverinstanzen betrieben werden; die Arbeit wird so aufgeteilt, dass dieselbe Sitzung nie gleichzeitig zweimal verteilt wird.

HTTP-Vertrag

Alle authentifizierten Routen verwenden Bearer-Token-Authentifizierung. Derselbe Wert muss auf beiden Seiten konfiguriert sein:
  • Observability-Server: Umgebungsvariable EVALUATOR_TOKEN
  • Evaluator-Dienst: auf dieselbe Weise konfiguriert (das agenteye-evaluator SDK liest EVALUATOR_TOKEN gemäß Konvention)
Wenn EVALUATOR_TOKEN nicht gesetzt ist, sendet der Server keinen Authorization-Header; der Evaluator kann dann anonyme Anfragen akzeptieren, was für ein rein internes Netzwerk in Ordnung ist, im öffentlichen Internet jedoch nicht empfohlen wird.

Routen, die der Evaluator bereitstellen muss

EvalRequest-Body, der vom Server gesendet wird

Antwortformate

Synchron (done):
reasoning (eine Begründungszuordnung pro Score) und summary (eine zusammenfassende Gesamterzählung) sind beide optional. Schlüssel in reasoning sollten die Schlüssel in scores widerspiegeln; das Dashboard rendert jeden Eintrag direkt unter seinem Score-Balken. Ältere Evaluatoren, die nur scores zurückgeben, funktionieren weiterhin unverändert; reasoning und summary werden einfach als null gelesen, und die entsprechenden UI-Elemente werden weggelassen. Asynchron (deferred):
next_poll_secs ist optional; wenn weggelassen, fällt der Server auf den default_poll_interval_secs-Wert des Evaluators aus /config zurück, dann auf seine eigene Umgebungsvariable EVALUATOR_POLLING_INTERVAL_SECS. Endgültiger evaluatorseitiger Fehler:
Der Server behandelt jeden anderen 2xx-Body als Protokollfehler und protokolliert einen endgültigen error für die Sitzung.

Evaluator mit dem SDK schreiben

Sie müssen den HTTP-Vertrag nicht manuell implementieren. Das Python-Paket agenteye-evaluator bietet Ihnen einen typisierten FastAPI-Wrapper, der Authentifizierung, Routing und die Anfrage-/Antwortformate für Sie übernimmt. Failproof AI Observability liefert auch einen funktionsfähigen Referenz-Evaluator, der helpfulness, tool_efficiency und factuality anhand der Struktur des Protokolls bewertet. Kopieren Sie ihn als Ausgangspunkt und tauschen Sie Ihre eigene Logik ein: ein LLM-Richter, eine Regelmaschine – was auch immer Ihrem Qualitätsstandard entspricht. Minimal funktionsfähiger Evaluator:
Die app-Instanz läuft unter jedem ASGI-Server, sodass uvicorn module:app sie startet. Für Evaluatoren, die aufwändige Arbeit verzögern müssen, geben Sie stattdessen JobPending zurück und registrieren Sie einen @app.job_lookup-Handler; der Observability-Server fragt GET /evaluate/{job_id} ab, bis Sie einen endgültigen Status zurückgeben oder die Obergrenze EVALUATOR_MAX_POLL_DURATION_SECS (Standard: 1 h) erreicht wird. Die vollständige API-Referenz, das asynchrone Muster und das Ereignisschema sind in der README des agenteye-evaluator SDK dokumentiert.

Ihren Evaluator betreiben

Der Evaluator ist Ihr Dienst – Failproof AI Observability liefert keinen Standard-Evaluator, daher erstellen und betreiben Sie ihn dort, wo Sie Ihre eigenen Dienste betreiben. Er läuft unter jedem ASGI-Server (zum Beispiel uvicorn my_evaluator:app); stellen Sie die Routen /health, /config und /evaluate gemäß dem HTTP-Vertrag bereit, und verweisen Sie den Server darauf (siehe Server konfigurieren). Sobald der Evaluator erreichbar ist, gibt GET /health {"status":"ok"} zurück. Nachdem ein Agent vollständig durchgelaufen ist, gibt GET /evaluations auf dem Server eine Zeile mit status: "done" und den von Ihrem Evaluator erzeugten Scores zurück.

Server konfigurieren

Auf dem Serverprozess setzen: Um automatisches Scoring zu aktivieren, setzen Sie sowohl EVALUATOR_ENDPOINT als auch EVALUATOR_TOKEN auf dem Server und starten Sie ihn dann neu, damit die Änderungen wirksam werden. Ohne gesetztes EVALUATOR_ENDPOINT bleibt die Pipeline inaktiv. Die obigen Feinabstimmungsoptionen sind optional; setzen Sie die entsprechenden Umgebungsvariablen auf dem Server nur, wenn Sie die Standardwerte überschreiben müssen.

API-Referenz

Nach Score-Bereich filtern: score_filters

GET /evaluations akzeptiert einen optionalen score_filters-Parameter, der Ergebnisse nach numerischen Werten im scores-Objekt einschränkt. Der Parameter ist eine kommagetrennte Liste von key:min..max-Einträgen; jede Grenze kann weggelassen werden. Mehrere Einträge werden mit logischem UND kombiniert. Zeilen, bei denen der genannte Schlüssel fehlt oder nicht numerisch ist, werden ausgeschlossen. Eine Anfrage darf höchstens 20 Filtereinträge enthalten; bei Überschreitung wird HTTP 400 zurückgegeben. Beispiele:
Jedes /evaluations-Antwortobjekt hat folgende Felder:

Berechtigungen

Der Bootstrap-Administrator (ADMIN_KEY, ADMIN_EMAIL) erhält diese automatisch.

Ergebnisse anzeigen

  • /sessions/<id>: Ereignis-Timeline + eine rechte Spalte mit den Scores der Sitzung und etwaigen Fehlern aus dem Verteilungsversuch. Wenn Ihr Schlüssel evaluations:trigger hat, erscheint neben der Export-Schaltfläche eine Neubewerten-Schaltfläche, nützlich für Sitzungen, die niemals agent_end ausgelöst haben, oder zum Aktualisieren von Scores nach der Bereitstellung eines neuen Evaluators. Das Dashboard fragt das neue Ergebnis ab und aktualisiert die rechte Spalte, wenn es eintrifft.
  • /sessions: filterbares Sitzungsraster; die Score-Spalte zeigt den Bewertungsstatus und die Scores jeder Sitzung auf einen Blick.
  • /dashboards: gespeicherte Bewertungsqualitätsansichten (siehe Dashboards unten).
Das Sitzungsraster mit Bewertungsstatuspillen pro Sitzung und farbcodierten Score-Abzeichen (helpfulness, factuality, tool_efficiency, safety, coherence) Das Sitzungsraster zeigt den Bewertungsstatus und die Scores jedes Laufs auf einen Blick; rote/gelbe/grüne Abzeichen lassen niedrige Scores sofort auffallen.

Dashboards

Die Dashboards-Seite (/dashboards) ermöglicht es Ihnen, eine Kombination von Bewertungsfiltern als benannte, wiederverwendbare Ansicht zu speichern und zu beobachten, wie sich dieses Segment von Bewertungen entwickelt. Dashboards werden organisationsweit geteilt; jeder mit dashboards:read sieht denselben Satz. Jedes Dashboard fixiert:
  • Filter: dieselben Steuerelemente wie die Sitzungsseite: Umgebung, Status, Agent, ein rollierendes Zeitfenster und Score-Bereichsfilter (key:min..max).
  • Eine Anzeigekonfiguration: welche Score-Schlüssel hervorgehoben werden, die grünen/gelben/roten Qualitätsschwellen, welche Panels angezeigt werden und ob auf die neueste Bewertung pro Sitzung reduziert werden soll.
Jede Karte zeigt die Anzahl übereinstimmender Sitzungen, eine done/error/timeout-Aufschlüsselung, den Durchschnitt jedes hervorgehobenen Scores und eine kleine Trend-Sparkline. Das Öffnen eines Dashboards zeigt die vollständigen Panels; „In Sitzungen öffnen” führt Sie zur Sitzungsseite, die genau auf dieses Segment vorge filtert ist. Metriken werden serverseitig über den gesamten übereinstimmenden Datensatz berechnet (über GET /evaluations/aggregate), sodass die Zahlen exakt und nicht gesampelt sind. Ein Bewertungsqualitäts-Dashboard mit durchschnittlichen Score-Balken pro Evaluatordimension, einer Tool-ok-vs-error-Aufschlüsselung, Top-Tools und einem Ereignisse-pro-Stunde-Trend Berechtigungen: Anzeigen erfordert sowohl dashboards:read als auch evaluations:read; Erstellen und Bearbeiten erfordert dashboards:write; Löschen erfordert dashboards:delete. Der Bootstrap-Administrator erhält all diese automatisch.

Fehlerbehebung

Sitzungen sind vorhanden, aber es werden keine Bewertungen erstellt. Bestätigen Sie, dass EVALUATOR_ENDPOINT auf dem Serverprozess gesetzt ist, dass Server und Evaluator denselben EVALUATOR_TOKEN-Wert verwenden, und dass der /health-Endpunkt des Evaluators vom Server aus erreichbar ist. Ohne gesetztes EVALUATOR_ENDPOINT ist die Pipeline inaktiv. Laufende Bewertungen stauen sich auf. Fragen Sie GET /evaluation-jobs ab, um die laufende Warteschlange zu sehen. Überprüfen Sie attempt_count, next_attempt_at und last_error in jeder Zeile. Häufige Ursachen: Evaluator-Dienst nicht erreichbar oder gibt 5xx zurück (wird mit Backoff wiederholt), falsches EVALUATOR_TOKEN (401 ist endgültig), oder ein asynchroner Evaluator, der dauerhaft pending zurückgibt (siehe unten). Sitzungen abgeschlossen, aber keine endgültige Bewertung. Fragen Sie GET /evaluation-jobs?status=polling ab; das Ergebnis kann noch in Bearbeitung sein. Wenn ein Job in pending feststeckt, hat der Server Probleme, den Evaluator zu erreichen; prüfen Sie, ob der Evaluator läuft und ob EVALUATOR_TOKEN übereinstimmt. HTTP 401 from evaluator: invalid bearer token. Das EVALUATOR_TOKEN auf dem Server stimmt nicht mit dem Wert überein, mit dem der Evaluator-Dienst konfiguriert ist. Sie müssen identisch sein. Asynchroner Evaluator gibt dauerhaft pending zurück. Der Server fragt GET /evaluate/{job_id} ab, bis der Evaluator done oder error zurückgibt, oder bis EVALUATOR_MAX_POLL_DURATION_SECS (Standard: 1 h) abläuft. Nach Erreichen der Obergrenze wird die Bewertung als timeout aufgezeichnet und aus der laufenden Warteschlange entfernt. Erhöhen Sie EVALUATOR_MAX_POLL_DURATION_SECS, wenn Ihr Evaluator legitimerweise länger als den Standard benötigt.

Nächste Schritte

  • Evaluator-Agenten-Skill: Lassen Sie einen Coding-Agenten Ihre Dimensionen anhand echter Sitzungen entwerfen und diesen Dienst für Sie erstellen.
  • Python SDK: Die agent_end-Ereignisse auslösen, die das Scoring anstoßen.
  • API-Schlüssel: Die Berechtigungen evaluations:read und evaluations:trigger.
  • Audits: Die andere automatisierte Qualitätsfunktion von Observability für richtlinienbasierte Überprüfungen.