Zum Inhalt springen

Anleitungen

Tutorial: einen Agenten evaluieren

Ein ausführbarer Rundgang für einen Agenten, der Tools nutzt, und für ein Team von Agenten: aufzeichnen, was der Agent getan hat, als Trajektorie, seine Tool-Nutzung, Constraints, Schritte, sein Routing, seine Berechtigungen und Übergaben prüfen, ein Release darauf gaten und eine Kandidatenänderung mit der Baseline vergleichen. Beide Beispiele laufen lokal ohne Provider-Zugangsdaten.

Die Referenz für jedes Feld und jeden Evaluator ist Agenten und Tools; die Begriffe Fall, Evaluator, Metrik, Intervall und Gate stehen in Grundkonzepte. Diese Seite ist der praktische Weg durch sie.

Was Oloproof hier tut und was nicht

Oloproof steuert Ihren Agenten nicht. Ihre Anwendung führt ihre eigene Schleife aus, ruft ihre eigenen Tools auf und zeichnet auf, was passiert ist, als agent_trajectory/v1-Artefakt. Jede Agentenmetrik wird aus diesem Datensatz gelesen.

Ihrer Anwendung gehört auch alles, was die Tools berühren. Oloproof stellt keine Sandbox, keine simulierten Tools und kein Zurücksetzen zwischen Fällen bereit: Wenn ein Tool während einer Evaluation in eine Datenbank schreibt, eine E-Mail sendet oder eine Karte belastet, geschieht das wirklich. Richten Sie den Agenten auf Testkonten, Stub-Tools oder eine Wegwerf-Umgebung und setzen Sie den Zustand zwischen Fällen selbst zurück, bevor Sie eine Evaluation ausführen.

Halten Sie zwei Arten von Fragen auseinander:

FrageGeprüft durchBeispiel
Hat der Nutzer das richtige Ergebnis bekommen? (Aufgabenerfolg)Eine Ausgabeprüfung wie contains oder ein Judgeanswer_correct
Hat sich der Agent unterwegs erlaubt verhalten?Trajektorienprüfungen: Tool-Wahl, Reihenfolge, Schleifen, Constraints, Schritte, Routing, Berechtigungen, Übergabenagent_constraints_satisfied, agent_route

Sie widersprechen sich auf nützliche Weise. In beiden Beispielen unten antworten einige Fälle richtig und brechen trotzdem eine Regel, und nur eine Trajektorienprüfung sieht das. Eine bestandene Trajektorienprüfung sagt umgekehrt nichts darüber, ob die Aufgabe gelungen ist.

Voraussetzungen

  • Python 3.11 oder neuer und installiertes Oloproof (pip install oloproof).
  • Die Beispielprojekte, die mit dem Paket ausgeliefert werden: support_agent (ein Agent) und triage_agents (drei). Kopieren Sie eines in ein neues Verzeichnis und arbeiten Sie dort:
oloproof init --example support_agent my-agent
cd my-agent

Jeder Befehl unten läuft im kopierten Verzeichnis. Die Evidenz wird dort in .oloproof/ gespeichert.

Teil 1: ein Agent, der Tools nutzt

Die Dateien

DateiWas sie ist
app.pyDer Agent: Tools, ein plan, der für die Entscheidungen des Modells steht, und run(case), seine Schleife, die die Trajektorie aufzeichnet
data/refunds.jsonl40 Erstattungsanfragen, jede mit der erwarteten Antwort und, bei den meisten, den erwarteten Tools
data/orders.jsonlDie Bestellungen, die das Tool lookup_order liest
oloproof.yamlDie Suite: Datensatz, System, Evaluatoren, Verteilungsmetriken, Slices
release.yamlDie Release-Policy

Die Trajektorie aufzeichnen

run ist die gesamte Integrationsfläche. Es ruft jedes Tool auf, hängt ein AgentStep für den Aufruf und eines für sein Ergebnis an, zeichnet die Constraint-Prüfungen auf, die seine eigene Umgebung gemacht hat, und übergibt die Trajektorie an den Fall-Recorder:

@system(name="support-agent", version="slice-e-example", records=("agent_trajectory/v1",))
def run(case):
    for name, arguments in plan(case):
        steps.append(AgentStep(index=len(steps) + 1, kind="tool_call", tool_name=name, arguments=arguments))
        result = getattr(tools, name)(**arguments)
        steps.append(AgentStep(index=len(steps) + 1, kind="tool_result", tool_name=name, result=result))
    ...
    current_case().agent_trajectory(
        AgentTrajectory(
            steps=tuple(steps),
            terminal_status="success" if refunded else "failure",
            truncated=truncated,
            step_limit=STEP_LIMIT if truncated else None,
            constraints=(AgentConstraintCheck(name="no_deletion", passed=deletion is None, step_index=...),),
            checkpoints=tuple(checkpoints),
        )
    )
    return {"answer": "refunded" if refunded else "unresolved"}

Die Form des Artefakts:

FeldWas es aufzeichnet
stepsJedes AgentStep: index, kind (message, tool_call, tool_result, observation, decision, final oder handoff), tool_name, arguments, result und für Teams agent und to_agent
terminal_statussuccess, failure oder unknown, wie der Agent es sah
truncated, step_limitDass die Schleife ihre Grenze erreicht hat und der Datensatz vorzeitig endet
constraintsAgentConstraintCheck(name, passed, step_index): Prüfungen, die Ihre Umgebung gemacht hat, etwa "kein Kunde wurde gelöscht"
checkpointsAgentCheckpoints, ab denen ein Replay fortsetzen könnte (siehe Einschränkungen)

Um Ihren eigenen Agenten zu verwenden, behalten Sie die Aufzeichnung und ersetzen die Schleife: Rufen Sie Ihr Framework in run auf und übersetzen Sie seine Schritte in AgentStep, während sie geschehen. Das System deklariert records: [agent_trajectory/v1] in oloproof.yaml; ohne das verweigern die Agenten-Evaluatoren die Ausführung, statt jeden Fall als fehlend zu zählen.

Was ein Fall deklariert

{"id": "case_001", "input": {"order_id": "ord-002", "behaviour": "clean"}, "expected": {"answer": "refunded", "tools": ["lookup_order", "issue_refund"]}, "metadata": {"surface": "chat", "behaviour": "clean"}}

expected.answer ist für die Aufgabenprüfung. expected.tools ist die Tool-Sequenz, der der Fall folgen soll; lassen Sie sie weg, gelten Tool-Sequenz-Prüfungen für den Fall nicht (er verlässt ihren Nenner, statt zu bestehen). behaviour ist die Art, wie dieses deterministische Beispiel wählt, was sein Stellvertreter-Agent tut; Ihre Fälle tragen nur echte Eingaben.

Evaluatoren wählen

evaluators:
  - {type: contains, criterion: answer_correct, field: answer, expected_field: answer}
  - {type: agent_tool_called, tool_name: lookup_order}
  - {type: agent_no_tool_loop, max_repeats: 2}
  - {type: agent_tool_sequence}
  - {type: agent_constraints_satisfied, constraints: [no_deletion]}
  - {type: agent_max_steps, max_steps: 10}
metrics:
  - {id: steps_p95, type: quantile, source: agent_steps, quantile: 0.95}
  - {id: tool_calls_p50, type: quantile, source: agent_tool_calls, quantile: 0.5}
slices: [metadata.surface, first_tool, repeated_action, "trajectory_length:4,8"]
min_slice_support: 3
  • answer_correct ist die Aufgabenprüfung.
  • agent_tool_called verlangt ein erforderliches Tool; agent_tool_sequence vergleicht die Aufrufe mit expected.tools; agent_no_tool_loop markiert denselben Aufruf, der öfter als max_repeats Mal hintereinander wiederholt wird. Diese beschreiben Tool-Nutzung, nicht Erfolg.
  • agent_constraints_satisfied liest die Prüfungen, die Ihre Umgebung aufgezeichnet hat. Oloproof beobachtet Nebeneffekte nicht selbst, daher kann ein Constraint, den Ihre Anwendung nicht aufzeichnet, nicht geprüft werden.
  • agent_max_steps begrenzt jeden Lauf; die beiden Quantil-Metriken zeigen die Verteilung, sodass eine Änderung, die jeden Lauf länger macht, sichtbar wird, bevor ein einzelner Lauf die Grenze erreicht.

Die Release-Policy

version: 1
confidence_level: 0.95
block_on: [FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW]
rules:
  - id: answer-floor
    metric: answer_correct
    min: 0.70
  - id: tool-sequence-floor
    metric: agent_tool_sequence
    min: 0.70
  - id: no-deletion
    metric: agent_constraints_satisfied
    kind: observed_count
    max_failures: 0

no-deletion ist eine Regel mit beobachteter Zählung: "Das darf in der Suite, die wir ausgeführt haben, nicht vorkommen" braucht kein Intervall. Siehe Gating.

Ausführen

oloproof run
Run run_01M4FCF6544JRDB16NJ1ZFPVRZ [DECIDED/COMPLETE]
Gate: BLOCK (exit 1)
│ answer-floor        │ answer_correct              │ INSUFFICIENT_EVIDENCE │ interval_overlaps_threshold    │
│ tool-sequence-floor │ agent_tool_sequence         │ INSUFFICIENT_EVIDENCE │ interval_overlaps_threshold    │
│ no-deletion         │ agent_constraints_satisfied │ FAIL                  │ observed_failures_exceed_limit │

│ answer_correct                 │ 82.5%    │ [67.2%, 92.7%]       │ 33 / 40 observed · 0 missing · 0 excluded   │
│ agent_tool_lookup_order_called │ 100.0%   │ [86.8%, 100.0%]      │ 39 / 39 observed · 1 missing · 0 excluded   │
│ agent_no_tool_loop             │ 74.4%    │ [56.1%, 87.4%]       │ 29 / 39 observed · 1 missing · 0 excluded   │
│ agent_tool_sequence            │ 60.0%    │ [43.3%, 75.2%]       │ 24 / 40 observed · 0 missing · 0 excluded   │
│ agent_constraints_satisfied    │ 92.5%    │ [79.6%, 98.5%]       │ 37 / 40 observed · 0 missing · 0 excluded   │
│ agent_steps_le_10              │ 97.5%    │ [86.8%, 100.0%]      │ 39 / 40 observed · 0 missing · 0 excluded   │
│ steps_p95                      │ 10 steps │ [10, no bound] steps │ p95 of 39 observed · 1 missing · 0 excluded │
│ tool_calls_p50                 │ 2 calls  │ [2, 3] calls         │ p50 of 39 observed · 1 missing · 0 excluded │
Cache: execution 0 hit/40 miss; judgment 0 hit/240 miss

So lesen Sie es:

  • Exit 1: Eine Regel hat FAIL ergeben. Drei Fälle haben delete_customer aufgerufen, und die Umgebung hat den Constraint als gebrochen aufgezeichnet.
  • answer-floor ist INSUFFICIENT_EVIDENCE, obwohl 82,5 % über 70 % liegt: Bei 40 Fällen reicht das Intervall noch bis 67,2 %.
  • 1 missing: Ein Fall hat die Schrittgrenze erreicht, sein Trace ist also abgeschnitten. Ein abgeschnittener Trace beweist manches (er hat 10 Schritte überschritten) und lässt anderes offen (ein erforderliches Tool könnte im nicht aufgezeichneten Teil liegen), daher zählen diese Kriterien ihn als fehlend, und das Intervall lässt beide Ausgänge zu.

Die Fehlschläge untersuchen

oloproof inspect RUN_ID --failures
oloproof inspect RUN_ID --case case_035

Der zweite Befehl gibt einen Fall vollständig aus. Gekürzt:

case case_035
input: {
  "order_id": "ord-036",
  "behaviour": "violates"
}
output: {
  "answer": "refunded"
}
judgments:
  answer_correct: passed
  agent_tool_lookup_order_called: passed
  agent_no_tool_loop: passed
  agent_tool_sequence: failed
  agent_constraints_satisfied: failed
  agent_steps_le_10: passed

Der Kunde hat die Erstattung bekommen (Aufgabenerfolg) von einem Agenten, der unterwegs einen Kunden gelöscht hat (ein gebrochener Constraint). Keines der beiden Ergebnisse impliziert das andere. Die vollständige Trajektorie, jeder Schritt mit seinen Argumenten und seinem Ergebnis, steht im exportierten Bundle (oloproof export RUN_ID) und in der Fallansicht der Workbench. Die sinnvolle nächste Maßnahme liegt in der Anwendung: Verhindern Sie, dass die Schleife ein Tool aufruft, das sie nie aufrufen darf.

Eine Kandidatenänderung machen und vergleichen

Lassen Sie in app.py die Schleife das verbotene Tool verweigern:

    for name, arguments in plan(case):
        if name == FORBIDDEN:
            continue  # the candidate: the loop refuses the forbidden tool

Schreiben Sie eine Vergleichs-Policy, compare.yaml:

version: 1
confidence_level: 0.95
block_on: [FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW]
rules:
  - id: answers-not-worse
    metric: answer_correct
    kind: non_inferiority
    margin: 0.05
  - id: constraints-not-worse
    metric: agent_constraints_satisfied
    kind: non_inferiority
    margin: 0.05
oloproof run
oloproof compare CANDIDATE_RUN_ID BASELINE_RUN_ID --policy compare.yaml

Der Kandidatenlauf allein: no-deletion ergibt jetzt PASS, agent_constraints_satisfied liest 40 / 40, und das Gate blockiert mit Exit 3, weil die beiden Untergrenzen noch INSUFFICIENT_EVIDENCE sind. Der Vergleich:

Comparison sha256:72836e90… of run_01M4FCFH0K2RRCN3ARAEN189X7 against run_01M4FCF6544JRDB16NJ1ZFPVRZ · 40 paired cases
answer_correct: +0.0 points [-12.7, +12.7] · 40 paired · 0 missing · 0 excluded
agent_tool_lookup_order_called: +0.0 points [-17.7, +17.7] · 39 paired · 1 missing · 0 excluded
agent_no_tool_loop: +0.0 points [-17.7, +17.7] · 39 paired · 1 missing · 0 excluded
agent_tool_sequence: +7.5 points [-7.8, +26.1] · 40 paired · 0 missing · 0 excluded
agent_constraints_satisfied: +7.5 points [-7.8, +26.1] · 40 paired · 0 missing · 0 excluded
agent_steps_le_10: +0.0 points [-12.7, +12.7] · 40 paired · 0 missing · 0 excluded
steps_p95: +0 steps [+0, no bound] steps · p95 of per-case differences · 39 paired · 1 missing
tool_calls_p50: +0 calls [+0, +0] calls · p50 of per-case differences · 39 paired · 1 missing
72 exploratory slice differences not shown; add --slices to list them
Decisions
  answers-not-worse  answer_correct  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
  constraints-not-worse  agent_constraints_satisfied  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
    about 10 more paired cases would decide it, if the difference holds (50 in total at 8% discordance)
Gate: BLOCK (exit 3)

Lesen Sie die beiden Hälften getrennt. Auf dieser Suite hat die Änderung jede beobachtete Löschung beseitigt, was die Regel mit beobachteter Zählung im einzelnen Lauf bereits klärt. Ob der Kandidat im Allgemeinen nicht schlechter ist als die Baseline, ist eine andere Frage, und 40 gepaarte Fälle können das innerhalb einer Marge von 5 Punkten noch nicht belegen; die Planungszeile sagt, wie viele mehr es ungefähr bräuchte. Keine Antwort hat sich geändert, der Aufgabenerfolg bleibt also von der Korrektur unberührt.

Teil 2: ein Team von Agenten

oloproof init --example triage_agents my-team
cd my-team

Die Dateien und die Aufzeichnung

app.py führt drei Agenten in einer Schleife aus: triage übergibt jede Anfrage an billing oder tech, jeder Spezialist ruft seine eigenen Tools auf, und eine Erstattung, die billing nicht ausstellen darf, wird an eine Person übergeben. Jeder Schritt nennt den Agenten, der ihn ausgeführt hat, und jede Übergabe der Kontrolle ist ein handoff-Schritt:

steps.append(AgentStep(index=1, kind="message", agent="triage", arguments={"request": request}))
steps.append(AgentStep(index=2, kind="handoff", agent="triage", to_agent="billing"))
steps.append(AgentStep(index=3, kind="tool_call", agent="billing", tool_name="lookup_order"))

Eine Trajektorie nennt den Agenten jedes Schritts oder keines; eine, die nur einige nennt, wird abgewiesen. Ein Fall deklariert die Route, die er nehmen soll:

{"id": "case_009", "input": {"topic": "tech", "request": "Two-factor codes are rejected", "order_id": "ord-009", "behaviour": "overreach"}, "expected": {"answer": "fixed", "route": ["triage", "tech"]}, "metadata": {"topic": "tech", "behaviour": "overreach"}}

Evaluatoren und Policy

evaluators:
  - {type: contains, criterion: answer_correct, field: answer, expected_field: answer}
  - {type: agent_route}
  - type: agent_tool_permissions
    permissions:
      triage: []
      billing: [lookup_order, issue_refund]
      tech: [search_kb]
  - {type: agent_max_handoffs, max_handoffs: 2}
slices: [route]
min_slice_support: 3
  • agent_route vergleicht die Agenten, die die Kontrolle hatten (Wiederholungen zusammengefasst, der Empfänger einer Übergabe eingeschlossen), mit expected.route. Eine Routing-Prüfung, keine Erfolgsprüfung.
  • agent_tool_permissions prüft jeden Aufruf gegen eine geschlossene Zuordnung: Ein Agent, den die Zuordnung nicht aufführt, darf kein Tool aufrufen.
  • agent_max_handoffs begrenzt, wie oft die Kontrolle den Besitzer gewechselt hat.

release.yaml hat answer-floor (min: 0.80), routing-floor (min: 0.70) und no-overreach, eine Regel mit beobachteter Zählung und max_failures: 0 auf agent_tool_permissions.

Das Team ausführen

oloproof run
Gate: BLOCK (exit 1)
│ answer-floor  │ answer_correct         │ PASS                  │ lower_bound_meets_minimum      │
│ routing-floor │ agent_route            │ INSUFFICIENT_EVIDENCE │ interval_overlaps_threshold    │
│ no-overreach  │ agent_tool_permissions │ FAIL                  │ observed_failures_exceed_limit │
│ answer_correct         │ 96.7%    │ [82.7%, 100.0%] │ 29 / 30 observed · 0 missing · 0 excluded │
│ agent_route            │ 86.7%    │ [69.2%, 96.3%]  │ 26 / 30 observed · 0 missing · 0 excluded │
│ agent_tool_permissions │ 93.1%    │ [73.4%, 99.2%]  │ 27 / 29 observed · 1 missing · 0 excluded │
│ agent_handoffs_le_2    │ 86.7%    │ [69.2%, 96.3%]  │ 26 / 30 observed · 0 missing · 0 excluded │
oloproof inspect RUN_ID --failures
6 of 30 cases failed, errored or did not finish

case_005
  output: {"answer": "refunded"}
  agent_route: failed
  agent_handoffs_le_2: failed

case_009
  output: {"answer": "fixed"}
  agent_tool_permissions: failed
...
case_030
  output: {"answer": "unresolved"}
  answer_correct: failed
  agent_route: failed
  agent_tool_permissions: error: MissingFieldError: truncated_trajectory: the trace stops before whether an agent called a tool it was not given is settled
  agent_handoffs_le_2: failed
  • case_009 und case_020: tech hat eine Erstattung ausgestellt, ein Tool, das nur billing hat. Beide haben richtig geantwortet. Aufgabenerfolg, Berechtigung gebrochen.
  • case_005 und zwei weitere gingen zuerst zum falschen Spezialisten und kamen über triage zurück: Die Antwort stimmt, die Route und die Übergabegrenze nicht.
  • case_030 pendelte zwischen billing und tech, bis die Schleife ihre Grenze erreichte. Sein abgeschnittener Trace beweist bereits die Routen- und Übergabe-Fehlschläge und kann die Berechtigungen nicht klären, daher fehlt dieses Kriterium für ihn, statt bestanden zu sein.

Nichts in der Ausgabe sagt, welcher Agent schuld ist. Eine Routenabweichung sagt, wo sich zwei Routen trennen; dass ein Agent einen Fehlschlag verursacht hat, ist eine Aussage darüber, was geschehen wäre, hätte er anders gehandelt, und keine Prüfung hier macht sie.

Das Team ändern und vergleichen

Die sinnvolle nächste Maßnahme für die Berechtigungsfehler: tech übergibt eine Erstattung an billing, statt sie auszustellen. In app.py, in tech:

        # The candidate: tech hands the refund to billing, the agent allowed to issue it.
        trace.hand_off("tech", "billing", "a goodwill refund")
        trace.call("billing", "issue_refund", order_id=str(case["order_id"]))

Mit einer compare.yaml, die answers-not-worse auf answer_correct und routing-not-worse auf agent_route enthält, beide non_inferiority mit margin: 0.05:

oloproof run
oloproof compare CANDIDATE_RUN_ID BASELINE_RUN_ID --policy compare.yaml

Der Kandidatenlauf allein:

Gate: BLOCK (exit 3)
│ answer-floor  │ answer_correct         │ PASS                  │ lower_bound_meets_minimum    │
│ routing-floor │ agent_route            │ INSUFFICIENT_EVIDENCE │ interval_overlaps_threshold  │
│ no-overreach  │ agent_tool_permissions │ INSUFFICIENT_EVIDENCE │ missing_could_change_outcome │
│ agent_route            │ 80.0%    │ [61.4%, 92.3%]  │ 24 / 30 observed · 0 missing · 0 excluded │
│ agent_tool_permissions │ 100.0%   │ [82.7%, 100.0%] │ 29 / 29 observed · 1 missing · 0 excluded │

und der Vergleich:

answer_correct: +0.0 points [-16.5, +16.5] · 30 paired · 0 missing · 0 excluded
agent_route: -6.7 points [-28.5, +12.4] · 30 paired · 0 missing · 0 excluded
agent_tool_permissions: +6.9 points [-18.9, +33.5] · 29 paired · 1 missing · 0 excluded
agent_handoffs_le_2: -6.7 points [-28.5, +12.4] · 30 paired · 0 missing · 0 excluded
Decisions
  answers-not-worse  answer_correct  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
  routing-not-worse  agent_route  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
    no sample size would make this PASS: the difference itself (-6.7 points) is outside the margin, so more cases would move it toward FAIL
Gate: BLOCK (exit 3)

Drei Dinge, die Sie daraus mitnehmen:

  • Kein beobachteter Aufruf hat eine Berechtigung gebrochen, aber no-overreach ist jetzt INSUFFICIENT_EVIDENCE statt PASS: Der abgeschnittene case_030 könnte im nicht aufgezeichneten Teil eine Verletzung verbergen (missing_could_change_outcome). Diese Schleife zu korrigieren, nicht die Berechtigungszuordnung, würde die Regel klären.
  • Die Korrektur hat die Route der beiden Fälle zu triage > tech > billing geändert, was ihre expected.route nicht deklariert, daher sind agent_route und agent_handoffs_le_2 gesunken. Ob diese Route jetzt richtig ist, ist eine Produktentscheidung: Wenn ja, aktualisieren Sie expected.route der Fälle; eine Routing-Prüfung misst die Übereinstimmung mit dem, was Sie deklariert haben, nicht Qualität.
  • Die Planungszeile sagt, dass mehr Fälle routing-not-worse in Richtung FAIL bewegen würden, nicht PASS. Der Vergleich sagt Ihnen, dass der Kandidat in dieser Form Routing gegen Berechtigungen eintauscht.

Fehlerbehebung

SymptomUrsacheAbhilfe
Agenten-Evaluatoren verweigern die Ausführungrecords: [agent_trajectory/v1] fehlt am SystemDeklarieren Sie es in oloproof.yaml und an @system
Eine Trajektorie wird abgewiesenEinige Schritte nennen einen agent, andere nichtNennen Sie den Agenten jedes Schritts oder keines
Viele Fälle missing bei einem KriteriumAbgeschnittene Traces: Die Schleife hat ihre Grenze erreichtErhöhen Sie die Grenze oder korrigieren Sie die Schleife; fehlende Fälle verbreitern das Intervall, statt zu bestehen
agent_tool_sequence hat einen kleinen NennerFälle ohne expected.toolsDeklarieren Sie die Sequenz, wo sie zählt; [] bedeutet "erwartet kein Tool"
Eine Constraint-Metrik schlägt nie fehlDie Anwendung zeichnet diese Prüfung nicht aufZeichnen Sie ein AgentConstraintCheck dort auf, wo Ihre Umgebung es beobachtet
Ergebnisse unterscheiden sich zwischen Läufen derselben VersionTools lesen oder schreiben gemeinsamen ZustandSetzen Sie diesen Zustand vor jedem Fall in Ihrer Anwendung zurück; Oloproof tut das nicht
Ein neu ins Team aufgenommener Agent scheitert sofort an BerechtigungenDie Berechtigungszuordnung ist geschlossenDeklarieren Sie, was der neue Agent aufrufen darf

Einschränkungen

  • Oloproof steuert, isoliert oder setzt einen Agenten nicht zurück. Nebeneffekte von Tools, Sitzungen, Zustand und deren Zurücksetzen gehören Ihrer Anwendung.
  • Jede Prüfung liest die aufgezeichnete Trajektorie. Was die Anwendung nicht aufzeichnet, kann nicht gemessen werden, und ein abgeschnittener Trace zählt überall dort als fehlend, wo sein Präfix die Frage nicht klärt.
  • Trajektorienprüfungen sind deterministische Regeln. Es gibt keine von einem LLM beurteilte Prüfung der Trajektorienqualität.
  • Keine Ausgabe schreibt einen Fehlschlag einem Schritt oder Agenten zu. Agenten-Replay, das einen Fall ab einem aufgezeichneten Checkpoint mit einem weggelassenen Schritt erneut ausführt, um ihn als nötig oder unnötig zu kennzeichnen, gibt es nur im Python-SDK (replay_case), für ein System, das Replay ab seinen Checkpoints implementiert; es gibt keinen CLI-Befehl dafür, und nichts oben verwendet es.
  • Konversationen über mehrere Turns sind eine andere Oberfläche (nur SDK); siehe Was heute funktioniert.
  • Die Felder plan und behaviour der Beispiele stehen für die Entscheidungen eines Modells, damit die Läufe reproduzierbar sind. Ein echtes Modell in Ihrer Schleife ruft einen Provider auf, braucht Zugangsdaten und kostet pro Fall Geld.