Anleitungen
Konfigurationsreferenz
Jedes Feld von oloproof.yaml und release.yaml, mit seinem Typ, seinem Standardwert, den akzeptierten Werten und einem Beispiel, entnommen den Modellen, die die Dateien lesen. Schlagen Sie hier ein Feld nach; den Ablauf lernen Sie auf den Seiten Schnellstart und Gating.
Beide Dateien werden validiert, bevor etwas läuft. Ein unbekanntes Feld, ein falsch geschriebenes Feld oder ein Wert vom falschen Typ ist ein Konfigurationsfehler, und der Befehl endet mit 2, ohne einen Fall auszuführen. Beide Dateien haben JSON-Schemas, die ein Editor, der JSON Schema liest, zur Vervollständigung nutzen kann. Das installierte Paket schreibt sie zusammen mit den Ergebnis-Schemas in schemas/v1/ unter dem aktuellen Verzeichnis: python -m oloproof_core.models.schema_export (die beiden heißen project_config.schema.json und release_policy.schema.json).
In den Tabellen unten bedeutet "erforderlich", dass die Datei ohne das Feld abgewiesen wird; jedes andere Feld zeigt den Wert, der verwendet wird, wenn es fehlt.
oloproof.yaml auf einen Blick
Ein kleines, vollständiges Projekt. Es führt eine Python-Funktion lokal aus, braucht weder Netzwerk noch Schlüssel und hat die Form, die oloproof init anlegt.
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
name: support-bot
callable: app.bot:answer
evaluators:
- type: exact_match
criterion: correct_label
field: labelFelder der obersten Ebene
| Feld | Typ | Standard | Was es ist |
|---|---|---|---|
| version | 1 | 1 | Version des Dateiformats. Es gibt nur 1. |
| project | String | erforderlich | Der Name des Projekts, angezeigt in Berichten und beim Pushen verwendet. |
| dataset | Pfad | erforderlich | Die Suite-Datei, JSONL, relativ zum Projekt. Ihre Zeilen beschreibt Suites. |
| system | Mapping | erforderlich | Das getestete System. Siehe unten. |
| concurrency | Mapping | system: 8, judge: 4 | Wie viele System- und Judge-Aufrufe gleichzeitig laufen. |
| evaluators | Liste | erforderlich, mindestens einer | Was an jedem Fall gemessen wird. Jeder Eintrag hat einen type. |
| metrics | Liste | leer | Zusätzliche Metriken über die hinaus, die jedes Evaluator-Kriterium bereits ist. |
| predictive | Mapping | fehlt | Wo Label, Score und Wahrheit eines Klassifikators liegen. Siehe Prädiktive Modelle. |
| slices | Liste von Strings | leer | Explorative Slices: metadata.<key>, relevant_position oder context_truncated. Sie erreichen das Gate nie. Siehe Slices. |
| min_slice_support | Ganzzahl, mindestens 1 | 30 | Unter so vielen zulässigen Fällen zeigt ein Slice seine Schätzung, aber kein Intervall. |
| replicates | Ganzzahl, mindestens 1 | 1 | Jeden Fall so oft messen. Der Fall bleibt die Einheit: Replikate werden innerhalb des Falls aggregiert, bevor ein Intervall berechnet wird. |
| pricing | Liste | leer | Was Sie pro Million Tokens zahlen, nach Modell. Ohne sie werden Kosten in Tokens gemeldet, nie in Dollar. |
| egress | Liste von Strings | leer | Welcher rohe Inhalt oloproof push an einen gehosteten Workspace senden darf. Siehe Ergebnisse und Ausführung. |
concurrency
| Feld | Typ | Standard |
|---|---|---|
| system | Ganzzahl, mindestens 1 | 8 |
| judge | Ganzzahl, mindestens 1 | 4 |
Einträge in pricing
Oloproof liefert keine Preistabelle mit. Jeder Eintrag benennt ein Modell genau so, wie es das model: eines Evaluators benennt.
| Feld | Typ | Standard |
|---|---|---|
| model | String | erforderlich |
| input_per_mtok | Zahl, 0 oder mehr | erforderlich |
| output_per_mtok | Zahl, 0 oder mehr | erforderlich |
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
name: support-bot
callable: app.bot:answer
evaluators:
- type: exact_match
criterion: correct_label
field: label
pricing:
- model: my-judge-model
input_per_mtok: 0.15
output_per_mtok: 0.6
egress: [raw_outputs]system
Ein System braucht genau eines von callable, http oder rag.
| Feld | Typ | Standard | Was es ist |
|---|---|---|---|
| name | String | erforderlich | Der Name des Systems. Teil seiner Versionsidentität. |
| version | String | fehlt | Ihre Bezeichnung für diese Version. Erforderlich für ein HTTP-System. Teil seiner Identität, eine Änderung macht also gecachte Ausführungen ungültig. |
| callable | module:attribute | fehlt | Eine Python-Funktion, synchron oder asynchron. Sie erhält den input des Falls und gibt die Ausgabe zurück. |
| http | Mapping | fehlt | Ein Endpunkt, der einmal pro Fall aufgerufen wird. Siehe unten. |
| rag | Mapping | fehlt | Eine gestufte RAG-Klasse, deklariert mit @rag_system. Siehe unten. |
| config | Mapping | leer | Freie Einstellungen, die mit der Systemversion aufgezeichnet werden. Eine Änderung ändert die Version. |
| code_paths | Liste von Glob-Mustern | leer | Quelldateien, deren Inhalt in die Version eines Callable-Systems eingeht. Ohne sie wird nur das eigene Modul des Callables gehasht. |
| timeout_s | Zahl über 0 | 120 | Zeitlimit pro Aufruf für ein Callable-System. Ein HTTP-System verwendet stattdessen http.timeout_s. |
| records | Liste von Artefaktarten | leer | Artefaktarten, die ein Callable-System aufzeichnet, etwa retrieval/v1. Bei einem HTTP- oder RAG-System abgewiesen. |
system.http
| Feld | Typ | Standard | Was es ist |
|---|---|---|---|
| url | String | erforderlich | Wohin jeder Fall gesendet wird. |
| method | GET, POST oder PUT | POST | Die HTTP-Methode. |
| output_path | Punktpfad | fehlt | Welches Feld der JSON-Antwort die Ausgabe ist, etwa result.answer. Fehlt es, ist es der ganze Body. |
| artifacts | Mapping von Art auf Punktpfad | leer | Antwortfelder, die als Artefakte aufgezeichnet werden, etwa retrieval/v1: debug.retrieval. |
| version | String | fehlt | Wird als Version des Systems verwendet, wenn system.version fehlt. Ein HTTP-System braucht eines der beiden. |
| timeout_s | Zahl über 0 | 30 | Zeitlimit pro Anfrage. |
# oloproof.yaml
version: 1
project: support-api
dataset: datasets/support.jsonl
system:
name: support-api
version: "2026-10-08"
http:
url: http://localhost:8000/answer
output_path: answer
artifacts:
retrieval/v1: debug.retrieval
evaluators:
- type: hit_rate
k: 5Der Vertrag für Anfrage und Antwort und was bei Timeouts und HTTP-Fehlern geschieht, stehen in Ergebnisse und Ausführung.
system.rag
| Feld | Typ | Standard | Was es ist |
|---|---|---|---|
| object | module:attribute | erforderlich | Die mit @rag_system deklarierte Klasse oder eine Instanz davon. |
| depth | Ganzzahl, mindestens 1 | der der Klasse | Wie viele Passagen das Retrieval zurückgibt. |
| top_k | Ganzzahl, mindestens 1 | der der Klasse | Wie viele davon die Generierung erreichen. |
| token_budget | Ganzzahl, mindestens 1 | der der Klasse | Ein Token-Limit für den Kontext. Braucht count_tokens(passage) der Klasse. |
| index_version | String | der der Klasse | Teil der Retrieval-Identität. Ändern Sie es, wann immer der Index neu gebaut wird. |
Hier angegebene Einstellungen überschreiben die, die die Klasse deklariert. Ein gestuftes System zeichnet seine eigenen Artefakte retrieval/v1, context/v1 und citations/v1 auf, daher wird records daneben abgewiesen. Siehe RAG.
evaluators
Jeder Eintrag nimmt einen type und diese beiden gemeinsamen Felder:
| Feld | Typ | Standard | Was es ist |
|---|---|---|---|
| criterion | String | erforderlich, außer der Typ hat einen Standard | Der Name dessen, was gemessen wird. Jedes Kriterium ist eine Metrik, und das metric: einer Regel benennt es. |
| on_execution_error | missing oder fail | missing | Als was ein Fall, dessen Systemaufruf fehlschlug, für dieses Kriterium zählt. missing behält ihn als unbeobachtet im Nenner; fail zählt ihn als Fehlschlag. |
fail gilt nur für Bestanden/Nicht-bestanden-Evaluatoren; ein Score-Evaluator damit ist ein Konfigurationsfehler. on_execution_error ist ein YAML-Feld; die SDK-Evaluatorklassen nehmen kein solches Argument, und ein fehlerhafter Fall zählt als fehlend.
Evaluatortypen
"Liest" führt auf, wovon das Urteil des Evaluators abhängt, und damit auch, worauf sein gecachtes Urteil verschlüsselt ist. "SDK" benennt die Klasse in oloproof.evaluators.
| YAML-type | Liest | SDK | Braucht Netzwerk oder einen Schlüssel |
|---|---|---|---|
| exact_match | output, expected | ExactMatch | nein |
| contains | output, expected | Contains | nein |
| regex | output | Regex | nein |
| json_schema | output | JsonSchema | nein |
| rubric_judge | input, output, expected | RubricJudge | ja, einen Modell-Provider |
| model_classifier | output (oder das von text benannte Feld), optional premise | nur YAML | ja, einen TEI-kompatiblen Server |
| probability_judge | den Fall und die Ausgabe | nur YAML | ja, einen OpenAI-kompatiblen Provider, der Log-Wahrscheinlichkeiten liefert |
| cascade | wie seine zwei Stufen | nur YAML | ja |
| hit_rate, recall, mrr, ndcg | artifacts.retrieval, expected | HitRate, Recall, MRR, NDCG | nein |
| citation_validity | artifacts.citations, artifacts.context | CitationValidity | nein |
| groundedness_judge | input, output, artifacts.context | Groundedness | ja |
| citation_support_judge | input, output, artifacts.context, artifacts.citations | CitationSupport | ja |
| agent_max_steps | artifacts.agent_trajectory | AgentMaxSteps | nein |
| agent_tool_called | artifacts.agent_trajectory | AgentToolCalled | nein |
| agent_no_tool_loop | artifacts.agent_trajectory | AgentNoToolLoop | nein |
| agent_tool_sequence | artifacts.agent_trajectory, expected | AgentToolSequence | nein |
| agent_no_undeclared_tool | artifacts.agent_trajectory, expected | AgentNoUndeclaredTool | nein |
| agent_constraints_satisfied | artifacts.agent_trajectory | AgentConstraintsSatisfied | nein |
| agent_route | artifacts.agent_trajectory | AgentRoute | nein |
| agent_tool_permissions | artifacts.agent_trajectory | AgentToolPermissions | nein |
| agent_max_handoffs | artifacts.agent_trajectory | AgentMaxHandoffs | nein |
| predictive_correct | das Label-Feld von output und expected | PredictiveCorrect | nein |
| predictive_recall | wie oben | PredictiveRecall | nein |
| predictive_precision | wie oben | PredictivePrecision | nein |
| predictive_absolute_error | wie oben, numerisch | AbsoluteError | nein |
| predictive_brier | das Score-Feld von output, das Label von expected | Brier | nein |
| predictive_log_loss | wie oben | LogLoss | nein |
| predictive_ranking | wie oben | PredictiveRanking | nein |
| kein YAML-Typ | artifacts.conversation | ConversationCompleted (nur SDK) | nein |
| kein YAML-Typ | expected, artifacts.conversation | ConversationJudge (nur SDK) | ja |
| kein YAML-Typ | was Sie deklarieren | @evaluator und CustomEvaluator (nur SDK) | Ihre Sache |
Ein Judge, der ein gehostetes Modell aufruft, sendet Fallinhalt an diesen Provider und wird von ihm abgerechnet. Schlüssel werden aus der in api_key_env benannten Umgebungsvariable gelesen; Oloproof speichert sie nie in diesen Dateien.
Deterministische Evaluatoren
| Typ | Feld | Typ | Standard |
|---|---|---|---|
| exact_match | field | Punktpfad in der Ausgabe | fehlt: die ganze Ausgabe |
| exact_match | expected_field | Punktpfad in expected | fehlt: wie field |
| exact_match | strip | Boolean | true |
| exact_match | casefold | Boolean | false |
| contains | field, expected_field | wie exact_match | fehlt |
| regex | pattern | regulärer Ausdruck | erforderlich |
| regex | field | Punktpfad | fehlt |
| regex | pass_if | match oder no_match | match |
| json_schema | schema | ein JSON Schema inline oder ein Pfad zu einer JSON-Datei relativ zum Projekt | erforderlich |
| json_schema | field | Punktpfad | fehlt |
Modell-Judges
rubric_judge, groundedness_judge und citation_support_judge teilen diese Felder. Genau eines von rubric_file oder rubric_text verlangt rubric_judge; die beiden RAG-Judges nehmen höchstens eines und verwenden sonst eine eingebaute Rubrik. Ihr criterion ist standardmäßig groundedness und citation_support.
| Feld | Typ | Standard |
|---|---|---|
| provider | anthropic, openai oder openai_compatible | erforderlich |
| model | String | erforderlich |
| rubric_file | Pfad | fehlt |
| rubric_text | String | fehlt |
| api_key_env | Name einer Umgebungsvariable | ANTHROPIC_API_KEY oder OPENAI_API_KEY |
| base_url | URL | die des Providers |
| temperature | Zahl | 0 |
| max_tokens | Ganzzahl, mindestens 1 | 512 |
| timeout_s | Zahl über 0 | 60 |
probability_judge stellt eine typisierte Frage und liest die Wahrscheinlichkeiten des Modells:
| Feld | Typ | Standard |
|---|---|---|
| provider | openai oder openai_compatible | erforderlich |
| model | String | erforderlich |
| question | String | erforderlich |
| form | yes_no, choice oder score | erforderlich |
| min_probability | Zahl in (0, 1] | erforderlich |
| options | Mapping von Antwort auf Beschreibung | für choice |
| pass_options | Liste von Antworten | für choice |
| levels | Mapping von Stufe auf Beschreibung, niedrigste zuerst | für score |
| pass_at_least | eine Stufe | für score |
| calibration | slope (über 0), intercept, from_version | fehlt |
| api_key_env, base_url | wie oben | fehlt |
| timeout_s | Zahl über 0 | 60 |
cascade führt zuerst einen günstigen Judge aus und eskaliert die unsicheren Fälle:
| Feld | Typ | Standard |
|---|---|---|
| first | ein probability_judge-Eintrag | erforderlich |
| then | ein rubric_judge- oder probability_judge-Eintrag | erforderlich |
| escalate_between | zwei Wahrscheinlichkeiten | erforderlich |
Die Stufen beurteilen das eigene criterion der Kaskade; eine Stufe, die ein anderes benennt, wird abgewiesen.
model_classifier bewertet Text mit einem trainierten Modell auf einem TEI-kompatiblen Server:
| Feld | Typ | Standard |
|---|---|---|
| model | String | erforderlich |
| base_url | URL | erforderlich |
| label | das zu lesende Label des Klassifikators | erforderlich |
| min_score oder max_score | Zahl in [0, 1], genau eines | erforderlich |
| text | welches Feld klassifiziert wird | output |
| premise | ein zweiter Text, für Paar-Klassifikatoren | fehlt |
| api_key_env | Name einer Umgebungsvariable | fehlt |
| timeout_s | Zahl über 0 | 30 |
RAG-Evaluatoren
| Typ | Feld | Typ | Standard |
|---|---|---|---|
| hit_rate, recall, mrr, ndcg | k | Ganzzahl, mindestens 1 | 5 für hit_rate und recall, 10 für mrr und ndcg |
| hit_rate, recall, mrr, ndcg | relevance_unit | doc oder chunk | doc |
| hit_rate, recall, mrr, ndcg | criterion | String | <type>_at_<k>, etwa hit_rate_at_5 |
| citation_validity | require_citations | Boolean | false |
| citation_validity | criterion | String | citations_valid |
Agenten-Evaluatoren
| Typ | Feld | Typ | Standard |
|---|---|---|---|
| agent_max_steps | max_steps | Ganzzahl, mindestens 1 | erforderlich |
| agent_tool_called | tool_name | String | erforderlich |
| agent_tool_called | min_calls | Ganzzahl, mindestens 1 | 1 |
| agent_no_tool_loop | max_repeats | Ganzzahl, mindestens 1 | 2 |
| agent_tool_sequence | ordered | Boolean | true |
| agent_constraints_satisfied | constraints | Liste von Constraint-Namen | leer |
| agent_tool_permissions | permissions | Mapping von Agent auf erlaubte Tools | erforderlich |
| agent_max_handoffs | max_handoffs | Ganzzahl, 0 oder mehr | erforderlich |
Jeder Agententyp hat ein Standard-criterion, es darf also fehlen: sein eigener Typname oder einer, der aus seiner Einstellung gebildet wird (agent_steps_le_8, agent_tool_lookup_called, agent_handoffs_le_2). Siehe Agenten.
Prädiktive Evaluatoren
| Typ | Feld | Typ | Standard |
|---|---|---|---|
| predictive_correct, predictive_recall, predictive_precision | positive | beliebiger JSON-Wert | true, oder der des predictive:-Blocks |
| dieselben | field | Ausgabefeld | label, oder predictive.label_field |
| dieselben | expected_field | erwartetes Feld | label, oder predictive.expected_field |
| predictive_absolute_error | target_range | zwei Zahlen | erforderlich |
| predictive_absolute_error | field, expected_field | wie oben | label |
| predictive_brier, predictive_log_loss, predictive_ranking | positive | beliebiger JSON-Wert | true, oder der des Blocks |
| dieselben | field | Ausgabefeld | score, oder predictive.score_field |
| dieselben | expected_field | erwartetes Feld | label, oder der des Blocks |
| predictive_log_loss | clip | Zahl in (0, 0.5) | erforderlich |
Ein prädiktiver Evaluator, der positive, field oder expected_field nicht angibt, übernimmt sie aus dem predictive:-Block; ein Wert, den er angibt, bleibt erhalten.
predictive
| Feld | Typ | Standard |
|---|---|---|
| label_field | String | label |
| score_field | String | score |
| expected_field | String | label |
| positive | beliebiger JSON-Wert | true |
| calibration_bins | Ganzzahl, mindestens 1 | 10 |
| thresholds | Liste von Zahlen | leer |
| average | macro oder micro | fehlt: kein Aggregat |
metrics
Jedes Evaluator-Kriterium ist bereits eine Metrik. Ein metrics:-Eintrag fügt eine weitere hinzu, unterschieden durch type.
| type | Felder | Was es ist |
|---|---|---|
| quantile | id, source, quantile in (0, 1) | Ein Quantil von latency_ms, input_tokens, output_tokens, cost_usd, agent_steps oder agent_tool_calls. |
| ranking | id, criterion, statistic: roc_auc oder average_precision | Eine Statistik über die Reihenfolge der Scores eines Ranking-Kriteriums. |
| human_score, human_preference | id | Abgewiesen: Noch liest keine zugelassene Methode diese Labels. |
| cost_per_accepted | id, criterion, cost_ceiling_usd, cost_ceiling_source | Abgewiesen, bis ihre Anbindung durch ein Audit zugelassen ist. |
# oloproof.yaml
version: 1
project: support-bot
dataset: datasets/support.jsonl
system:
name: support-bot
callable: app.bot:answer
evaluators:
- type: exact_match
criterion: correct_label
field: label
metrics:
- id: latency_p95
type: quantile
source: latency_ms
quantile: 0.95release.yaml
Die Release-Policy: welche Regeln entscheiden und welche Entscheidungen blockieren. Weggelassene Einstellungen behalten ihre Standardwerte, sodass eine Policy, die nur ihre Regeln nennt, weiterhin auf FAIL, INSUFFICIENT_EVIDENCE und MANUAL_REVIEW blockiert.
# release.yaml
version: 1
rules:
- id: label_accuracy
metric: correct_label
min: 0.8| Feld | Typ | Standard | Was es ist |
|---|---|---|---|
| version | 1 | 1 | Version des Dateiformats. |
| confidence_level | Wahrscheinlichkeit | 0.95 | Das Niveau jedes Intervalls, das eine Regel liest. |
| block_on | Liste von Entscheidungszuständen | FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW | Zustände, die das Gate blockieren lassen und den Exit-Code setzen. |
| warn_on | Liste von Entscheidungszuständen | leer | Zustände, die warnen, ohne zu blockieren. Darf sich nicht mit block_on überschneiden. |
| block_on_partial_run | Boolean | true | Ob ein nicht abgeschlossener Lauf blockiert, mit Exit 5. |
| require_validated_evaluators | Boolean | true | Ob eine Regel über einem Modell-Judge ihre Entscheidung zurückhält, bis der Judge gegen menschliche Labels validiert ist. Deterministische Evaluatoren sind ausgenommen. |
| minimum_evaluator_agreement | Zahl in [0, 1] | fehlt | Die Übereinstimmung mit menschlichen Labels, die ein Judge mit seiner unteren Schranke erreichen muss, bevor er validiert werden darf. |
| maximum_evaluator_bias | Zahl in (0, 1] | fehlt | Wie weit die Bestehensrate eines Judges von der der Menschen entfernt liegen darf, bevor er validiert werden darf. |
| allow_approximate_methods | Boolean | false | Ob eine Regel auf einem Intervall entscheiden darf, das die Engine als approximativ markiert (das geclusterte binäre Intervall). Sonst liest sie MANUAL_REVIEW. |
| min_clusters | Ganzzahl, mindestens 10 | 20 | Bei weniger Clustern liest eine geclusterte Regel INSUFFICIENT_EVIDENCE. |
| difference_method | bounded_paired_difference@1 oder conditional_exact_paired_difference@1 | fehlt: die erste | Welche zugelassene Methode eine gepaarte Differenz binärer Raten begrenzt. |
| early_stopping | Boolean | false | Fälle in Batches ausführen und stoppen, sobald jede Regel entschieden ist. Siehe Gating. |
| early_stopping_seed | Ganzzahl, 0 oder mehr | fehlt | Der Seed der Fallreihenfolge. |
| early_stopping_batch_size | Ganzzahl, mindestens 1 | 25 | Fälle pro Batch. |
| rules | Liste | erforderlich, mindestens eine | Die Regeln. Siehe unten. |
| families | Liste | leer | Regeln, deren falsche FAILs gemeinsam kontrolliert werden. |
| review_rule | Mapping | fehlt | Abgewiesen: Die Anbindung ist noch nicht zugelassen. |
rules
Eine Liste enthält beide Arten. Eine Laufregel nimmt genau eines von min, max oder max_failures. Eine Vergleichsregel nennt ihre kind und entscheidet eine Differenz zwischen zwei Läufen; siehe Vergleichsregeln.
| Feld | Typ | Standard | Gilt für |
|---|---|---|---|
| id | String | erforderlich | alle |
| metric | eine Metrik-ID oder ein Kriterium | erforderlich | alle |
| kind | interval_threshold, observed_count, superiority, non_inferiority, equivalence | für Laufregeln abgeleitet | alle |
| min | Zahl | fehlt | Laufregeln: PASS, wenn die untere Schranke des Intervalls mindestens diesen Wert hat |
| max | Zahl | fehlt | Laufregeln: PASS, wenn die obere Schranke des Intervalls höchstens diesen Wert hat |
| max_failures | Ganzzahl, 0 oder mehr | fehlt | observed_count: eine Zählung über die ausgeführte Suite, kein Intervall |
| margin | Zahl über 0, in den Einheiten der Metrik | fehlt | non_inferiority und equivalence; bei superiority abgewiesen |
| direction | min oder max | min | nur non_inferiority: ob höher oder niedriger besser ist |
| max_missing_fraction | Zahl in [0, 1] | fehlt | Intervall- und Vergleichsregeln |
| requires_manual_review | Boolean | false | alle: Die Regel liest immer MANUAL_REVIEW |
| scope | global oder ein Slice | global | Intervall- und Vergleichsregeln |
| min_support | Ganzzahl, mindestens 1 | fehlt | Vergleichsregeln auf einem Slice |
families
| Feld | Typ | Standard |
|---|---|---|
| id | String | erforderlich |
| correction | holm | holm |
| rules | Liste von Regel-IDs | erforderlich, mindestens eine |
# release.yaml
version: 1
warn_on: [INSUFFICIENT_EVIDENCE]
block_on: [FAIL, MANUAL_REVIEW]
rules:
- id: label_accuracy
metric: correct_label
min: 0.8
max_missing_fraction: 0.05
- id: no_regression
metric: correct_label
kind: non_inferiority
margin: 0.02Artefaktarten
Ein Artefakt ist ein typisierter Datensatz, den ein System neben seine Ausgabe schreibt, etwa was es abgerufen hat. Eine Art ist ein kleingeschriebener Name mit optionaler Version, passend zu ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$. Evaluatoren, die ein Artefakt brauchen, benennen es, und ein Lauf, dessen System eine erforderliche Art nicht deklariert, wird vor dem Start abgewiesen, statt jeden Fall als fehlend zu zählen.
| Art | Geschrieben von | Verlangt von |
|---|---|---|
| retrieval/v1 | current_case().retrieval(...), einem @rag_system oder http.artifacts | hit_rate, recall, mrr, ndcg |
| context/v1 | current_case().context(...) oder einem @rag_system | citation_validity, groundedness_judge, citation_support_judge |
| citations/v1 | current_case().citations(...) oder einem @rag_system | citation_validity, citation_support_judge |
| agent_trajectory/v1 | current_case().agent_trajectory(...) | jedem agent_*-Evaluator und den Quellen agent_steps und agent_tool_calls |
| conversation/v1 | current_case().artifact(CONVERSATION, ...) | ConversationCompleted, ConversationJudge |
| stage_timings/v1 | einem @rag_system | keinem; neben der Latenz angezeigt |
Ein Callable-System deklariert die Arten, die es aufzeichnet, in records: (oder @system(records=...)); ein HTTP-System in http.artifacts; ein gestuftes RAG-System zeichnet seine eigenen auf.
Versionen, Cache-Schlüssel und Invalidierung
Oloproof verwendet Arbeit wieder, deren Eingaben sich nicht geändert haben, und entscheidet anhand von Inhalts-Digests, was "unverändert" bedeutet. Jeder wird von der Engine berechnet und mit dem Lauf aufgezeichnet.
| Datensatz | Wiederverwendet, wenn diese identisch sind |
|---|---|
| Systemversion | name, version, config und ein Code-Digest: der Modulquelltext eines Callables (oder jede von code_paths erfasste Datei), bei einem HTTP-System url, method, output_path und artifacts |
| Ausführung | die Systemversion, der input des Falls und der Replikat-Index. Nur erfolgreiche Ausführungen werden wiederverwendet. |
| Urteil | die Evaluatorversion (ihr Typ und jede Einstellung) und ein Digest jedes Feldes, das er liest, wie in der Evaluator-Tabelle aufgeführt |
| Analyse | der Analyseplan, die Metrik, das Konfidenzniveau, der Suite-Digest und jede Eingabe, die sie gezählt hat |
| Gate | jede Analyse, der Policy-Digest, ob der Lauf abgeschlossen wurde, und der wirksame Status jedes Evaluators, den die Entscheidungen anführen |
Was Oloproof nicht sehen kann, müssen Sie deklarieren:
- Das Verhalten eines HTTP-Systems liegt auf dem Server. Ändern Sie system.version, wann immer sich ändert, was hinter der URL steht, sonst steht eine alte gecachte Ausgabe für das neue System.
- Die Hilfsmodule eines Callables werden nur gehasht, wenn code_paths sie erfasst. Ohne das ändert das Bearbeiten eines Hilfsmoduls die Version nicht.
- Eine Methode oder ein aufrufbares Objekt muss eine Version deklarieren, und die Version muss sich ändern, wenn sich der Zustand des Objekts ändert.
- Ein RAG-Index wird durch index_version identifiziert; ändern Sie sie, wenn der Index neu gebaut wird.
- Die Identität eines Modell-Judges sind seine Einstellungen, nicht die Gewichte des Providers. Wenn ein Provider das Modell hinter demselben Namen aktualisiert, erkennt der Cache das nicht.
- Ein eigener @evaluator hasht die Moduldatei, die ihn definiert, und seine Urteile werden über Läufe hinweg nur wiederverwendet, wenn er cacheable=True deklariert. Eingebaute Rubrik-Judges sind cachebar; deterministische Evaluatoren werden neu berechnet, was günstig ist.
Gecachte Arbeit liegt im lokalen Store des Projekts, .oloproof/store.sqlite neben oloproof.yaml (oder unter OLOPROOF_HOME). Das Löschen des Stores verwirft jeden Cache und jeden Lauf. In einem gehosteten Workspace verwendet die Engine gecachte Ausführungen, Urteile oder Analysen nicht wieder, weil ein Push sie schreiben kann; sie berechnet neu.