Agentic Evaluations¶
Evaluieren Sie autonome Agenten end-to-end: Tasks, Trajectories, Trace-basierte Criteria und aggregierte Agent-Metriken.
Agentic Evaluations erweitern elluminate über einzelne LLM-Outputs hinaus auf Agenten, die planen, Tools aufrufen und über viele Schritte an einer Aufgabe arbeiten. elluminate ist runtime-agnostisch: Sie führen den Agenten dort aus, wo er ohnehin läuft — in eigenem Code, einem Framework wie LangChain, CrewAI oder AutoGen oder einem Harness wie Harbor — übersetzen seinen Output in das ATIF-Trajectory-Format und laden die Trial-Ergebnisse inklusive der vollständigen Trajectories zu elluminate hoch. elluminate bewertet anschließend jedes Criterion gegen die Trajectory, und die UI zeigt Trace, Ratings pro Criterion und aggregierte Metriken.
Was Agentic Evaluation ist¶
Wann Agentic Evaluations verwenden¶
Verwenden Sie diesen Workflow, wenn:
- Ihr System mehrere LLM-Aufrufe pro Task macht (Tool-Use, Plan/Act-Loops, Sub-Agents).
- Die Evaluation anschauen muss, was der Agent gemacht hat, nicht nur seine finale Nachricht.
- Sie bereits einen externen Runner einsetzen (oder einsetzen möchten), z.B. Harbor, LangChain, CrewAI, AutoGen oder eigenen Code.
Für einzelne Outputs oder Tool-Calling-Patterns, bei denen elluminate die Responses selbst generiert, siehe stattdessen das Guide Tool Calling.
elluminate führt Ihren Agenten nicht aus
Agentic Evaluations decken das Hochladen und Bewerten externer Agent-Runs ab. Sie führen den Agenten selbst aus — in eigenem Code, einem Framework oder einem Harness wie Harbor — und elluminate speichert die Trial-Ergebnisse, rendert den Agent Trace und bewertet optional jedes Criterion gegen die Trajectory.
Kernkonzepte¶
- Task — eine Arbeitseinheit für Ihren Agenten, identifiziert durch einen eindeutigen Task-Namen.
- Collection — Ihre Task-Menge: eine Zeile pro Task, mit einer
task-Column (Name) und einer optionaleninstruction-Column (Input). - Trajectory (Trace) — die vollständige Schritt-für-Schritt-Aufzeichnung eines Agent-Runs: jede Message, jeder Tool Call und jede Observation, im ATIF-Format.
- Criterion — eine binäre YES/NO-Qualitätsfrage. elluminates LLM-Judge beantwortet jedes Criterion gegen die Trajectory — dieselbe Bewertung wie bei einem Standard-Experiment.
- Experiment — ein Evaluation-Run: verbindet eine Collection und ein Criterion Set und hält die hochgeladenen Trajectories mit ihren Ratings und aggregierten Metriken.
Das Trajectory-Format¶
elluminate konsumiert genau einen Input von Ihrem Runner: eine Agent-Trajectory im ATIF-Format (Agent Trajectory Interchange Format), einer offenen Spezifikation, definiert von Harbor. Egal welchen Runner Sie nutzen, Sie übersetzen seinen Output nach ATIF und laden ihn hoch — entweder im Browser oder per SDK. Es gibt bislang keinen nativen Importer für LangChain, CrewAI, AutoGen oder andere Frameworks. Das vollständige Schema und ein minimales Beispiel finden Sie im Abschnitt ATIF-Trajectory-Format.
UI-Walkthrough¶
- Agentic Collection erstellen. Unter Collections → New collection den Typ Agentic wählen. Sie ist mit zwei Columns vorkonfiguriert; diese konventionellen Namen sollten beibehalten werden:
task— ein kurzer, eindeutiger Name pro Task (eine Zeile pro Task) — undinstruction— der Input, den der Agent für diesen Task erhalten hat (bei einem Chat-Agenten die erste User-Nachricht).instructionist optional: Wenn Sie eine außerhalb von elluminate erzeugte Trajectory hochladen, ist der Input bereits Teil der Trajectory, die Column kann also leer bleiben. Kein Prompt Template nötig, und Agentic Experimente generieren nie automatisch Responses. - Criterion Set erstellen. Unter Criteria Library → New Criterion Set einen Namen vergeben, dann das Set öffnen und über Add New Criterion binäre YES/NO-Fragen hinzufügen, die elluminate gegen die Trajectory beantwortet (z.B. "Hat der Agent die richtige Datei bearbeitet?"). Um ein Criterion an die Ground-Truth-Daten einer Collection zu binden, wählen Sie im Set Use variables from \<Ihre Collection> und fügen dann über das Dropdown Add Variable einen
{{column_name}}-Platzhalter für eine beliebige Column dieser Collection ein (z.B.{{expected_legal_area}}) — das Criterion wird dann gegen den Wert dieser Column geprüft. - Agentic Experiment erstellen. Auf Experiments → New den Typ Agentic wählen, dann Collection und Criterion Set auswählen. Ein Prompt Template wird nicht benötigt — der Wizard überspringt diesen Schritt für Agentic Experimente. Der Experiment-Name wird aus der Collection vorausgefüllt — beliebig umbenennbar.
- Agent extern ausführen (eigener Code, ein Framework oder ein Harness wie Harbor) und ein Ergebnis pro Task einsammeln, inklusive einer ATIF-Trajectory.
- Ergebnisse hochladen — entweder direkt im Browser oder per SDK. Wenn Trajectories vorhanden sind, bewertet elluminate automatisch jedes Criterion gegen die Trajectory.
- Ergebnisse ansehen in der UI (siehe unten).
Ergebnisse in der UI ansehen¶
Die Experiment-Seite hat drei Tabs:
- Overview — aggregierte Metriken (Overall Score; sowie Cost pro Task, durchschnittliche Dauer und Tokens, sofern Ihr hochgeladener Run sie enthält), ein Criteria Performance-Chart (Pass-Rate pro Criterion) und eine KI-generierte Experiment Summary (Executive Summary, plus Abschnitte wie Strengths, Weaknesses, Recommendations und Notable Samples — jeweils nur dann, wenn die Summary dazu Inhalt hat). Die Summary wird erst erzeugt, nachdem jede Trace annotiert wurde — sie kann also einige Minuten brauchen.
- Sample Navigator — Detail pro Sample: die Phasen-Timeline (Gantt-artige Ansicht der Agent-Schritte) und der Agent Trace (jede Message, jeder Tool Call, jede Observation), zusammen mit den YES/NO-Ratings pro Criterion samt Reasoning. Delegiert ein Run an Sub-Agents, wird jede Sub-Agent-Trajectory verschachtelt und ein-/ausklappbar unter dem auslösenden Schritt gerendert, sodass Multi-Agent-Runs vollständig inspizierbar bleiben.
- Responses Overview — alle Responses auf einen Blick.
Ergebnisse in der UI hochladen¶
Sobald Ihre Agentic Collection (die Task-Zeilen) und Ihr Agentic Experiment existieren, können Sie die Ergebnisse direkt im Browser hochladen — ganz ohne SDK. Öffnen Sie das Experiment und klicken Sie auf Upload results (wird auch im Empty State angeboten, solange noch keine Ergebnisse vorliegen).
Im Dialog:
- Ergebnisdatei ablegen — eine
.json-Datei mit einem Array von Trial-Ergebnis-Objekten oder eine.jsonl-Datei mit einem Objekt pro Zeile. - Task-Name-Column wählen — die Collection-Column, gegen deren Werte der
task_namejedes Trials abgeglichen wird (üblicherweisetask). - "Evaluate after upload" umschalten (standardmäßig an) — wenn aktiv, bewertet elluminate nach dem Upload jedes Criterion gegen die hochgeladene Trajectory.
- Epoch setzen (Standard
1) — erhöhen, um einen weiteren Lauf derselben Tasks in dasselbe Experiment zu laden.
Format der Upload-Datei¶
Jedes Objekt in der Datei spiegelt das SDK-AgentTrialResult:
task_name(Pflicht) — muss exakt einem Wert in der Task-Name-Column der Collection entsprechen.trajectory— der ATIF-Trajectory-Dict (schema_versionmussATIF-v1.xentsprechen, plusagent,stepsundfinal_metrics).- optional:
reward,cost_usd,steps,messages,criterion_ratings.
Eine minimale .json-Datei mit einem einzelnen Trial (ein Array mit einem Objekt):
[
{
"task_name": "write-hello-world",
"reward": 1.0,
"cost_usd": 0.0042,
"trajectory": {
"schema_version": "ATIF-v1.0",
"session_id": "run-001/write-hello-world",
"agent": {
"name": "demo-agent",
"version": "0.1.0",
"model_name": "claude-sonnet-4-6"
},
"steps": [
{
"step_id": 1,
"source": "user",
"message": "Write a Python hello world script to hello.py"
},
{
"step_id": 2,
"source": "agent",
"message": "Writing hello.py.",
"tool_calls": [
{
"tool_call_id": "tc_1",
"function_name": "write_file",
"arguments": {"path": "hello.py", "content": "print('Hello, World!')"}
}
],
"observation": {
"results": [{"source_call_id": "tc_1", "content": "wrote 22 bytes"}]
},
"metrics": {"prompt_tokens": 420, "completion_tokens": 61, "cost_usd": 0.0042}
}
],
"final_metrics": {
"total_steps": 2,
"total_cost_usd": 0.0042,
"total_prompt_tokens": 420,
"total_completion_tokens": 61
}
}
}
]
Für eine .jsonl-Datei schreiben Sie dieselben Objekte eines pro Zeile (kein umschließendes Array, keine Kommas).
Partieller Erfolg und asynchrone Auswertung
Trials werden unabhängig verarbeitet: Eine fehlerhafte Trajectory wird nur für das betroffene Trial verworfen, und der Upload meldet Fehler pro Trial, sodass die übrigen trotzdem durchlaufen. Ist Evaluate after upload aktiv, läuft die Bewertung asynchron — die Ergebnisse erscheinen auf der Experiment-Seite, sobald sie fertig sind.
SDK-Walkthrough¶
Das folgende Script deckt den kompletten End-to-End-Flow ab: eine Agentic Collection, ein Agentic Experiment, Konvertierung des Runner-Outputs und Upload mit eingereihter Auswertung durch elluminate. Das Script ist idempotent — Collections, Criterion Sets und Experimente werden über Läufe hinweg wiederverwendet, und Uploads werden übersprungen, wenn ein Experiment bereits Responses enthält.
Das Beispiel ausführen¶
Hinterlegen Sie Ihren API-Key (in der elluminate UI unter Project → Keys anlegen) entweder als Environment Variable oder in einer .env-Datei neben dem Script; das Beispiel ruft load_dotenv() auf:
# Variante 1: Shell
export ELLUMINATE_API_KEY=<your-key>
# optional, falls elluminate auf einem Non-Default-Host läuft:
# export ELLUMINATE_BASE_URL=https://your-instance.example.com
# Variante 2: .env in elluminate_sdk/examples/
echo "ELLUMINATE_API_KEY=<your-key>" > elluminate_sdk/examples/.env
# Ausführen
uv run --directory elluminate_sdk python examples/example_harbor_agentic_upload.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 | |
- SDK-Client initialisieren (nutzt
ELLUMINATE_API_KEY) und einenLLMConfigfürs Experiment auswählen (nur Metadaten; Agentic Experimente rufen ihn nie auf). - Stand-in für den On-Disk-Output Ihres Runners. Ersetzen Sie das durch Code, der Harbors
task_result.json+trajectory.jsonpro Task einliest. - Einen Runner-Output in ein
AgentTrialResultübersetzen. Das ist der einzige integrationsspezifische Code, den Sie brauchen;task_namemuss exakt dem Wert in der Task-Column der Collection entsprechen. - Eine Agentic Collection mit einer einzelnen
task-Column (RAW_INPUT) anlegen, eine Zeile pro Task. Kein Prompt Template erforderlich. - Das Criterion Set erstellen, das Erfolg definiert. Labels sind explizite Identifier für jedes Criterion.
- Idempotenter Helper, der ein Agentic Experiment zurückgibt und meldet, ob es bereits hochgeladene Responses enthält.
- Das Hauptexperiment per Get-or-Create holen.
evaluation_mode="AGENTIC"deaktiviert die Auto-Generation; Responses werden per Upload geliefert. - Jeden Runner-Output in ein
AgentTrialResultkonvertieren. - Upload mit
evaluate=True, damit elluminate jedes Criterion gegen die Trajectory bewertet. Wird übersprungen, wenn das Experiment bei einem erneuten Lauf bereits Responses hat. - Das Experiment erneut laden und prüfen, dass die Trajectories über das SDK abrufbar sind.
AgentTrialResult-Felder¶
Jedes Trial, das Ihr Runner produziert, wird auf ein AgentTrialResult abgebildet. Pflicht- und optionale Felder:
| Field | Required | Beschreibung |
|---|---|---|
task_name |
yes | Muss exakt einem Wert in der Collection-Spalte entsprechen, die als task_name_column angegeben ist. |
messages |
no | Finale Messages im OpenAI-Format (wird auf der Response-Seite angezeigt). |
reward |
no | Primärer Reward-Score (0.0–1.0). |
steps |
no | Anzahl der Agent-Steps / LLM-Aufrufe. |
cost_usd |
no | Gesamtkosten in USD für das Trial. |
duration_seconds |
no | Wall-Clock-Dauer. |
input_tokens |
no | Aggregierte Input-Tokens. |
output_tokens |
no | Aggregierte Output-Tokens. |
cached_tokens |
no | Aggregierte Cached-Input-Tokens. |
error |
no | Fehlermeldung, falls das Trial fehlgeschlagen ist. |
metadata |
no | Freier Dict, wird auf der Response-Seite angezeigt. |
trajectory |
no | Rohe ATIF-Trajectory (wird vom Backend validiert; siehe ATIF-Format). |
ATIF-Trajectory-Format¶
Trajectories verwenden das Agent Trajectory Interchange Format (ATIF), eine offene Trajectory-Spezifikation, definiert von Harbor.
Eine minimale ATIF-v1-Trajectory:
{
"schema_version": "ATIF-v1.0",
"session_id": "harbor-run-001/write-hello-world",
"agent": {
"name": "harbor-demo-agent",
"version": "0.1.0",
"model_name": "claude-sonnet-4-6"
},
"steps": [
{
"step_id": 1,
"source": "user",
"message": "Write a Python hello world script to hello.py"
},
{
"step_id": 2,
"source": "agent",
"message": "Writing hello.py.",
"tool_calls": [
{
"tool_call_id": "tc_1",
"function_name": "write_file",
"arguments": {"path": "hello.py", "content": "print('Hello, World!')"}
}
],
"observation": {
"results": [{"source_call_id": "tc_1", "content": "wrote 22 bytes"}]
},
"metrics": {"prompt_tokens": 420, "completion_tokens": 61, "cost_usd": 0.0042}
}
],
"final_metrics": {
"total_steps": 2,
"total_cost_usd": 0.0042,
"total_prompt_tokens": 420,
"total_completion_tokens": 61
}
}