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
- 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.
- Richten Sie Observability darauf aus. Setzen Sie
EVALUATOR_ENDPOINT(und ein gemeinsamesEVALUATOR_TOKEN) auf dem Serverprozess. - Beobachten Sie die eingehenden Scores. Jede abgeschlossene Sitzung wird automatisch bewertet; die Ergebnisse erscheinen auf der Sitzungsdetailseite, im Sitzungsraster und in gespeicherten Dashboards.

Funktionsweise
Wenn das Observability SDK einagent_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.reasoningundsummarysind optional. -
Verzögert mit
{"status":"pending", "job_id":"abc-123"}. Observability ruft dannGET {EVALUATOR_ENDPOINT}/evaluate/abc-123auf, bis Ihr Evaluator{"status":"done", ...}oder{"status":"error", "error":"..."}zurückgibt. Der Abfrageintervall ist pro Job konfigurierbar: Einepending-Antwort kannnext_poll_secsenthalten, um den Standardwert zu überschreiben; andernfalls verwendet Observability den Wertdefault_poll_interval_secsausGET /config; ansonsten fällt der Server aufEVALUATOR_POLLING_INTERVAL_SECSzurück (Standard: 10 s). Alle Werte werden auf [1 s, 1 h] begrenzt.
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-evaluatorSDK liestEVALUATOR_TOKENgemäß Konvention)
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:
error für die Sitzung.
Evaluator mit dem SDK schreiben
Sie müssen den HTTP-Vertrag nicht manuell implementieren. Das Python-Paketagenteye-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:
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 Beispieluvicorn 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:
/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üsselevaluations:triggerhat, erscheint neben der Export-Schaltfläche eine Neubewerten-Schaltfläche, nützlich für Sitzungen, die niemalsagent_endausgelö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).

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.
GET /evaluations/aggregate), sodass die Zahlen exakt und nicht gesampelt sind.

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, dassEVALUATOR_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:readundevaluations:trigger. - Audits: Die andere automatisierte Qualitätsfunktion von Observability für richtlinienbasierte Überprüfungen.

