Przewodniki
Dokumentacja konfiguracji
Każde pole oloproof.yaml i release.yaml, z typem, wartością domyślną, akceptowanymi wartościami i przykładem, wzięte z modeli, które czytają te pliki. Używaj jej, aby sprawdzić pole; aby poznać przebieg pracy, przeczytaj strony szybki start i bramkowanie.
Oba pliki są walidowane, zanim cokolwiek się uruchomi. Nieznane pole, błędnie zapisane pole lub wartość złego typu to błąd konfiguracji, a polecenie kończy się kodem 2 bez wykonania żadnego przypadku. Oba pliki mają schematy JSON Schema, z których edytor czytający JSON Schema może korzystać do podpowiedzi. Zainstalowany pakiet zapisuje je, razem ze schematami wyników, do schemas/v1/ w bieżącym katalogu: python -m oloproof_core.models.schema_export (te dwa to project_config.schema.json i release_policy.schema.json).
W tabelach poniżej "wymagane" oznacza, że plik bez tego pola jest odrzucany; każde inne pole pokazuje wartość używaną, gdy zostanie pominięte.
oloproof.yaml w skrócie
Mały, kompletny projekt. Uruchamia lokalnie funkcję w Pythonie, nie potrzebuje sieci ani kluczy i ma kształt, który tworzy oloproof init.
# 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: labelPola najwyższego poziomu
| Pole | Typ | Domyślnie | Czym jest |
|---|---|---|---|
| version | 1 | 1 | Wersja formatu pliku. Istnieje tylko 1. |
| project | napis | wymagane | Nazwa projektu, pokazywana w raportach i używana przy wypychaniu. |
| dataset | ścieżka | wymagane | Plik zestawu, JSONL, względem projektu. Jego wiersze opisują Zestawy. |
| system | mapowanie | wymagane | Testowany system. Zob. niżej. |
| concurrency | mapowanie | system: 8, judge: 4 | Ile wywołań systemu i sędziów działa jednocześnie. |
| evaluators | lista | wymagane, co najmniej jeden | Co jest mierzone dla każdego przypadku. Każdy wpis ma type. |
| metrics | lista | puste | Dodatkowe metryki ponad tę, którą już jest każde kryterium ewaluatora. |
| predictive | mapowanie | brak | Gdzie są etykieta, wynik liczbowy i prawda klasyfikatora. Zob. Modele predykcyjne. |
| slices | lista napisów | puste | Wycinki eksploracyjne: metadata.<key>, relevant_position lub context_truncated. Nigdy nie docierają do bramki. Zob. Wycinki. |
| min_slice_support | liczba całkowita, co najmniej 1 | 30 | Poniżej tylu kwalifikujących się przypadków wycinek pokazuje estymatę, ale nie przedział. |
| replicates | liczba całkowita, co najmniej 1 | 1 | Mierz każdy przypadek tyle razy. Jednostką pozostaje przypadek: replikacje są agregowane w jego obrębie, zanim zostanie policzony jakikolwiek przedział. |
| pricing | lista | puste | Ile płacisz za milion tokenów, według modelu. Bez tego koszt jest raportowany w tokenach, a nigdy w dolarach. |
| egress | lista napisów | puste | Którą surową treść oloproof push może wysłać do hostowanego obszaru roboczego. Zob. Wyniki i wykonanie. |
concurrency
| Pole | Typ | Domyślnie |
|---|---|---|
| system | liczba całkowita, co najmniej 1 | 8 |
| judge | liczba całkowita, co najmniej 1 | 4 |
Wpisy pricing
Oloproof nie dostarcza tabeli cen. Każdy wpis nazywa model dokładnie tak, jak nazywa go model: ewaluatora.
| Pole | Typ | Domyślnie |
|---|---|---|
| model | napis | wymagane |
| input_per_mtok | liczba, 0 lub więcej | wymagane |
| output_per_mtok | liczba, 0 lub więcej | wymagane |
# 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
System potrzebuje dokładnie jednego z callable, http lub rag.
| Pole | Typ | Domyślnie | Czym jest |
|---|---|---|---|
| name | napis | wymagane | Nazwa systemu. Część tożsamości jego wersji. |
| version | napis | brak | Twoja etykieta dla tej wersji. Wymagana dla systemu HTTP. Część tożsamości, więc jej zmiana unieważnia wykonania z cache. |
| callable | module:attribute | brak | Funkcja w Pythonie, synchroniczna lub asynchroniczna. Otrzymuje input przypadku i zwraca wynik. |
| http | mapowanie | brak | Punkt końcowy wywoływany raz na przypadek. Zob. niżej. |
| rag | mapowanie | brak | Etapowa klasa RAG zadeklarowana przez @rag_system. Zob. niżej. |
| config | mapowanie | puste | Dowolne ustawienia zapisywane z wersją systemu. Ich zmiana zmienia wersję. |
| code_paths | lista wzorców glob | puste | Pliki źródłowe, których zawartość wchodzi do wersji systemu z funkcją wywoływalną. Bez tego hashowany jest tylko własny moduł funkcji. |
| timeout_s | liczba powyżej 0 | 120 | Limit czasu na wywołanie dla systemu z funkcją wywoływalną. System HTTP używa zamiast tego http.timeout_s. |
| records | lista rodzajów artefaktów | puste | Rodzaje artefaktów, które zapisuje system z funkcją wywoływalną, takie jak retrieval/v1. Odrzucane w systemie HTTP lub RAG. |
system.http
| Pole | Typ | Domyślnie | Czym jest |
|---|---|---|---|
| url | napis | wymagane | Dokąd jest wysyłany każdy przypadek. |
| method | GET, POST lub PUT | POST | Metoda HTTP. |
| output_path | ścieżka z kropkami | brak | Które pole odpowiedzi JSON jest wynikiem, na przykład result.answer. Brak oznacza całą treść. |
| artifacts | mapowanie rodzaju na ścieżkę z kropkami | puste | Pola odpowiedzi zapisywane jako artefakty, na przykład retrieval/v1: debug.retrieval. |
| version | napis | brak | Używana jako wersja systemu, gdy brak system.version. System HTTP potrzebuje jednej z tych dwóch. |
| timeout_s | liczba powyżej 0 | 30 | Limit czasu na żądanie. |
# 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: 5Kontrakt żądania i odpowiedzi oraz to, co dzieje się przy przekroczeniach limitu czasu i błędach HTTP, opisują Wyniki i wykonanie.
system.rag
| Pole | Typ | Domyślnie | Czym jest |
|---|---|---|---|
| object | module:attribute | wymagane | Klasa zadeklarowana przez @rag_system lub jej instancja. |
| depth | liczba całkowita, co najmniej 1 | z klasy | Ile fragmentów zwraca wyszukiwanie. |
| top_k | liczba całkowita, co najmniej 1 | z klasy | Ile z nich trafia do generowania. |
| token_budget | liczba całkowita, co najmniej 1 | z klasy | Limit tokenów kontekstu. Wymaga count_tokens(passage) klasy. |
| index_version | napis | z klasy | Część tożsamości wyszukiwania. Zmieniaj ją przy każdej przebudowie indeksu. |
Ustawienia podane tutaj nadpisują te, które deklaruje klasa. System etapowy sam zapisuje swoje artefakty retrieval/v1, context/v1 i citations/v1, więc records obok niego jest odrzucane. Zob. RAG.
evaluators
Każdy wpis przyjmuje type i te dwa wspólne pola:
| Pole | Typ | Domyślnie | Czym jest |
|---|---|---|---|
| criterion | napis | wymagane, chyba że typ ma wartość domyślną | Nazwa tego, co jest mierzone. Każde kryterium jest metryką, a metric: reguły je nazywa. |
| on_execution_error | missing lub fail | missing | Jak dla tego kryterium liczy się przypadek, którego wywołanie systemu się nie powiodło. missing zostawia go w mianowniku jako niezaobserwowany; fail liczy go jako niepowodzenie. |
fail dotyczy tylko ewaluatorów pass/fail; ewaluator wyniku liczbowego z nim to błąd konfiguracji. on_execution_error to pole YAML; klasy ewaluatorów w SDK nie przyjmują takiego argumentu, a przypadek z błędem liczy się jako brakujący.
Typy ewaluatorów
"Czyta" wymienia to, od czego zależy werdykt ewaluatora, a zarazem to, czym kluczowana jest jego ocena w cache. "SDK" podaje klasę w oloproof.evaluators.
| type w YAML | Czyta | SDK | Wymaga sieci lub klucza |
|---|---|---|---|
| exact_match | output, expected | ExactMatch | nie |
| contains | output, expected | Contains | nie |
| regex | output | Regex | nie |
| json_schema | output | JsonSchema | nie |
| rubric_judge | input, output, expected | RubricJudge | tak, dostawcy modelu |
| model_classifier | output (lub pole wskazane przez text), opcjonalnie premise | tylko YAML | tak, serwera zgodnego z TEI |
| probability_judge | przypadek i wynik | tylko YAML | tak, dostawcy zgodnego z OpenAI zwracającego logarytmy prawdopodobieństw |
| cascade | jak jego dwa etapy | tylko YAML | tak |
| hit_rate, recall, mrr, ndcg | artifacts.retrieval, expected | HitRate, Recall, MRR, NDCG | nie |
| citation_validity | artifacts.citations, artifacts.context | CitationValidity | nie |
| groundedness_judge | input, output, artifacts.context | Groundedness | tak |
| citation_support_judge | input, output, artifacts.context, artifacts.citations | CitationSupport | tak |
| agent_max_steps | artifacts.agent_trajectory | AgentMaxSteps | nie |
| agent_tool_called | artifacts.agent_trajectory | AgentToolCalled | nie |
| agent_no_tool_loop | artifacts.agent_trajectory | AgentNoToolLoop | nie |
| agent_tool_sequence | artifacts.agent_trajectory, expected | AgentToolSequence | nie |
| agent_no_undeclared_tool | artifacts.agent_trajectory, expected | AgentNoUndeclaredTool | nie |
| agent_constraints_satisfied | artifacts.agent_trajectory | AgentConstraintsSatisfied | nie |
| agent_route | artifacts.agent_trajectory | AgentRoute | nie |
| agent_tool_permissions | artifacts.agent_trajectory | AgentToolPermissions | nie |
| agent_max_handoffs | artifacts.agent_trajectory | AgentMaxHandoffs | nie |
| predictive_correct | pole etykiety w output i expected | PredictiveCorrect | nie |
| predictive_recall | jak wyżej | PredictiveRecall | nie |
| predictive_precision | jak wyżej | PredictivePrecision | nie |
| predictive_absolute_error | jak wyżej, liczbowe | AbsoluteError | nie |
| predictive_brier | pole wyniku liczbowego w output, etykieta w expected | Brier | nie |
| predictive_log_loss | jak wyżej | LogLoss | nie |
| predictive_ranking | jak wyżej | PredictiveRanking | nie |
| brak typu YAML | artifacts.conversation | ConversationCompleted (tylko SDK) | nie |
| brak typu YAML | expected, artifacts.conversation | ConversationJudge (tylko SDK) | tak |
| brak typu YAML | to, co zadeklarujesz | @evaluator i CustomEvaluator (tylko SDK) | zależy od Ciebie |
Sędzia, który wywołuje hostowany model, wysyła treść przypadków do tego dostawcy i jest przez niego rozliczany. Klucze są czytane ze zmiennej środowiskowej wskazanej w api_key_env; Oloproof nigdy nie przechowuje ich w tych plikach.
Ewaluatory deterministyczne
| Typ | Pole | Typ | Domyślnie |
|---|---|---|---|
| exact_match | field | ścieżka z kropkami w wyniku | brak: cały wynik |
| exact_match | expected_field | ścieżka z kropkami w expected | brak: tak samo jak field |
| exact_match | strip | wartość logiczna | true |
| exact_match | casefold | wartość logiczna | false |
| contains | field, expected_field | jak exact_match | brak |
| regex | pattern | wyrażenie regularne | wymagane |
| regex | field | ścieżka z kropkami | brak |
| regex | pass_if | match lub no_match | match |
| json_schema | schema | JSON Schema w treści albo ścieżka do pliku JSON względem projektu | wymagane |
| json_schema | field | ścieżka z kropkami | brak |
Sędziowie-modele
rubric_judge, groundedness_judge i citation_support_judge mają wspólne te pola. rubric_judge wymaga dokładnie jednego z rubric_file lub rubric_text; dwaj sędziowie RAG przyjmują co najwyżej jedno, a w przeciwnym razie używają wbudowanej rubryki. Ich criterion domyślnie to groundedness i citation_support.
| Pole | Typ | Domyślnie |
|---|---|---|
| provider | anthropic, openai lub openai_compatible | wymagane |
| model | napis | wymagane |
| rubric_file | ścieżka | brak |
| rubric_text | napis | brak |
| api_key_env | nazwa zmiennej środowiskowej | ANTHROPIC_API_KEY lub OPENAI_API_KEY |
| base_url | URL | dostawcy |
| temperature | liczba | 0 |
| max_tokens | liczba całkowita, co najmniej 1 | 512 |
| timeout_s | liczba powyżej 0 | 60 |
probability_judge zadaje typowane pytanie i czyta prawdopodobieństwa modelu:
| Pole | Typ | Domyślnie |
|---|---|---|
| provider | openai lub openai_compatible | wymagane |
| model | napis | wymagane |
| question | napis | wymagane |
| form | yes_no, choice lub score | wymagane |
| min_probability | liczba w (0, 1] | wymagane |
| options | mapowanie odpowiedzi na opis | dla choice |
| pass_options | lista odpowiedzi | dla choice |
| levels | mapowanie poziomu na opis, od najniższego | dla score |
| pass_at_least | poziom | dla score |
| calibration | slope (powyżej 0), intercept, from_version | brak |
| api_key_env, base_url | jak wyżej | brak |
| timeout_s | liczba powyżej 0 | 60 |
cascade uruchamia najpierw taniego sędziego i eskaluje niepewne przypadki:
| Pole | Typ | Domyślnie |
|---|---|---|
| first | wpis probability_judge | wymagane |
| then | wpis rubric_judge lub probability_judge | wymagane |
| escalate_between | dwa prawdopodobieństwa | wymagane |
Etapy oceniają własne criterion kaskady; etap, który nazywa inne, jest odrzucany.
model_classifier ocenia tekst wytrenowanym modelem na serwerze zgodnym z TEI:
| Pole | Typ | Domyślnie |
|---|---|---|
| model | napis | wymagane |
| base_url | URL | wymagane |
| label | etykieta klasyfikatora do odczytania | wymagane |
| min_score lub max_score | liczba w [0, 1], dokładnie jedno | wymagane |
| text | które pole jest klasyfikowane | output |
| premise | drugi tekst, dla klasyfikatorów par | brak |
| api_key_env | nazwa zmiennej środowiskowej | brak |
| timeout_s | liczba powyżej 0 | 30 |
Ewaluatory RAG
| Typ | Pole | Typ | Domyślnie |
|---|---|---|---|
| hit_rate, recall, mrr, ndcg | k | liczba całkowita, co najmniej 1 | 5 dla hit_rate i recall, 10 dla mrr i ndcg |
| hit_rate, recall, mrr, ndcg | relevance_unit | doc lub chunk | doc |
| hit_rate, recall, mrr, ndcg | criterion | napis | <type>_at_<k>, na przykład hit_rate_at_5 |
| citation_validity | require_citations | wartość logiczna | false |
| citation_validity | criterion | napis | citations_valid |
Ewaluatory agentów
| Typ | Pole | Typ | Domyślnie |
|---|---|---|---|
| agent_max_steps | max_steps | liczba całkowita, co najmniej 1 | wymagane |
| agent_tool_called | tool_name | napis | wymagane |
| agent_tool_called | min_calls | liczba całkowita, co najmniej 1 | 1 |
| agent_no_tool_loop | max_repeats | liczba całkowita, co najmniej 1 | 2 |
| agent_tool_sequence | ordered | wartość logiczna | true |
| agent_constraints_satisfied | constraints | lista nazw ograniczeń | puste |
| agent_tool_permissions | permissions | mapowanie agenta na dozwolone narzędzia | wymagane |
| agent_max_handoffs | max_handoffs | liczba całkowita, 0 lub więcej | wymagane |
Każdy typ agenta ma domyślne criterion, więc można je pominąć: własna nazwa typu albo nazwa zbudowana z jego ustawienia (agent_steps_le_8, agent_tool_lookup_called, agent_handoffs_le_2). Zob. Agenci.
Ewaluatory predykcyjne
| Typ | Pole | Typ | Domyślnie |
|---|---|---|---|
| predictive_correct, predictive_recall, predictive_precision | positive | dowolna wartość JSON | true lub z bloku predictive: |
| to samo | field | pole wyniku | label lub predictive.label_field |
| to samo | expected_field | pole oczekiwane | label lub predictive.expected_field |
| predictive_absolute_error | target_range | dwie liczby | wymagane |
| predictive_absolute_error | field, expected_field | jak wyżej | label |
| predictive_brier, predictive_log_loss, predictive_ranking | positive | dowolna wartość JSON | true lub z bloku |
| to samo | field | pole wyniku | score lub predictive.score_field |
| to samo | expected_field | pole oczekiwane | label lub z bloku |
| predictive_log_loss | clip | liczba w (0, 0.5) | wymagane |
Ewaluator predykcyjny, który nie zapisuje positive, field ani expected_field, bierze je z bloku predictive:; wartość, którą zapisuje, zostaje zachowana.
predictive
| Pole | Typ | Domyślnie |
|---|---|---|
| label_field | napis | label |
| score_field | napis | score |
| expected_field | napis | label |
| positive | dowolna wartość JSON | true |
| calibration_bins | liczba całkowita, co najmniej 1 | 10 |
| thresholds | lista liczb | puste |
| average | macro lub micro | brak: bez agregatu |
metrics
Każde kryterium ewaluatora już jest metryką. Wpis metrics: dodaje jeszcze jedną, rozróżnianą przez type.
| type | Pola | Czym jest |
|---|---|---|
| quantile | id, source, quantile w (0, 1) | Kwantyl latency_ms, input_tokens, output_tokens, cost_usd, agent_steps lub agent_tool_calls. |
| ranking | id, criterion, statistic: roc_auc lub average_precision | Statystyka po kolejności wyników liczbowych kryterium rankingowego. |
| human_score, human_preference | id | Odrzucane: żadna przyjęta metoda nie czyta jeszcze tych etykiet. |
| cost_per_accepted | id, criterion, cost_ceiling_usd, cost_ceiling_source | Odrzucane, dopóki jego podłączenie nie zostanie przyjęte po audycie. |
# 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
Polityka wydań: które reguły rozstrzygają i które decyzje blokują. Pominięte ustawienia zachowują wartości domyślne, więc polityka, która nazywa tylko swoje reguły, nadal blokuje na FAIL, INSUFFICIENT_EVIDENCE i MANUAL_REVIEW.
# release.yaml
version: 1
rules:
- id: label_accuracy
metric: correct_label
min: 0.8| Pole | Typ | Domyślnie | Czym jest |
|---|---|---|---|
| version | 1 | 1 | Wersja formatu pliku. |
| confidence_level | prawdopodobieństwo | 0.95 | Poziom każdego przedziału, który czyta reguła. |
| block_on | lista stanów decyzji | FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEW | Stany, przy których bramka blokuje i ustawia kod wyjścia. |
| warn_on | lista stanów decyzji | puste | Stany, które ostrzegają bez blokowania. Nie mogą pokrywać się z block_on. |
| block_on_partial_run | wartość logiczna | true | Czy przebieg, który się nie zakończył, blokuje z kodem 5. |
| require_validated_evaluators | wartość logiczna | true | Czy reguła na sędzi-modelu wstrzymuje decyzję, dopóki sędzia nie zostanie zwalidowany względem ludzkich etykiet. Ewaluatory deterministyczne są zwolnione. |
| minimum_evaluator_agreement | liczba w [0, 1] | brak | Zgodność z ludzkimi etykietami, którą sędzia musi osiągnąć dolną granicą, zanim będzie mógł zostać zwalidowany. |
| maximum_evaluator_bias | liczba w (0, 1] | brak | Jak daleko odsetek zaliczeń sędziego może leżeć od odsetka ludzi, zanim będzie mógł zostać zwalidowany. |
| allow_approximate_methods | wartość logiczna | false | Czy reguła może rozstrzygać na przedziale, który silnik oznacza jako przybliżony (klastrowany przedział binarny). W przeciwnym razie pokazuje MANUAL_REVIEW. |
| min_clusters | liczba całkowita, co najmniej 10 | 20 | Przy mniejszej liczbie klastrów reguła klastrowana pokazuje INSUFFICIENT_EVIDENCE. |
| difference_method | bounded_paired_difference@1 lub conditional_exact_paired_difference@1 | brak: pierwsza | Która przyjęta metoda ogranicza sparowaną różnicę odsetków binarnych. |
| early_stopping | wartość logiczna | false | Uruchamiaj przypadki partiami i zatrzymaj się, gdy każda reguła zostanie rozstrzygnięta. Zob. Bramkowanie. |
| early_stopping_seed | liczba całkowita, 0 lub więcej | brak | Ziarno kolejności przypadków. |
| early_stopping_batch_size | liczba całkowita, co najmniej 1 | 25 | Przypadki na partię. |
| rules | lista | wymagane, co najmniej jedna | Reguły. Zob. niżej. |
| families | lista | puste | Reguły, których fałszywe FAIL są kontrolowane łącznie. |
| review_rule | mapowanie | brak | Odrzucane: podłączenie nie zostało jeszcze przyjęte. |
rules
Jedna lista zawiera oba rodzaje. Reguła przebiegu przyjmuje dokładnie jedno z min, max lub max_failures. Reguła porównania nazywa swój kind i rozstrzyga różnicę między dwoma przebiegami; zob. Reguły porównań.
| Pole | Typ | Domyślnie | Dotyczy |
|---|---|---|---|
| id | napis | wymagane | wszystkich |
| metric | identyfikator metryki lub kryterium | wymagane | wszystkich |
| kind | interval_threshold, observed_count, superiority, non_inferiority, equivalence | wywnioskowane dla reguł przebiegu | wszystkich |
| min | liczba | brak | reguł przebiegu: PASS, gdy dolna granica przedziału jest co najmniej taka |
| max | liczba | brak | reguł przebiegu: PASS, gdy górna granica przedziału jest co najwyżej taka |
| max_failures | liczba całkowita, 0 lub więcej | brak | observed_count: liczność na wykonanym zestawie, bez przedziału |
| margin | liczba powyżej 0, w jednostkach metryki | brak | non_inferiority i equivalence; odrzucane przy superiority |
| direction | min lub max | min | tylko non_inferiority: czy lepsza jest wyższa, czy niższa wartość |
| max_missing_fraction | liczba w [0, 1] | brak | reguł przedziałowych i porównania |
| requires_manual_review | wartość logiczna | false | wszystkich: reguła zawsze pokazuje MANUAL_REVIEW |
| scope | global lub wycinek | global | reguł przedziałowych i porównania |
| min_support | liczba całkowita, co najmniej 1 | brak | reguł porównania na wycinku |
families
| Pole | Typ | Domyślnie |
|---|---|---|
| id | napis | wymagane |
| correction | holm | holm |
| rules | lista identyfikatorów reguł | wymagane, co najmniej jeden |
# 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.02Rodzaje artefaktów
Artefakt to typowany rekord, który system zapisuje obok swojego wyniku, na przykład to, co wyszukał. Rodzaj to nazwa małymi literami z opcjonalną wersją, pasująca do ^[a-z][a-z0-9_]*(/v[1-9][0-9]*)?$. Ewaluatory, które potrzebują artefaktu, go nazywają, a przebieg, którego system nie deklaruje wymaganego rodzaju, jest odrzucany przed startem, zamiast liczyć każdy przypadek jako brakujący.
| Rodzaj | Zapisywany przez | Wymagany przez |
|---|---|---|
| retrieval/v1 | current_case().retrieval(...), @rag_system lub http.artifacts | hit_rate, recall, mrr, ndcg |
| context/v1 | current_case().context(...) lub @rag_system | citation_validity, groundedness_judge, citation_support_judge |
| citations/v1 | current_case().citations(...) lub @rag_system | citation_validity, citation_support_judge |
| agent_trajectory/v1 | current_case().agent_trajectory(...) | każdy ewaluator agent_* oraz źródła agent_steps i agent_tool_calls |
| conversation/v1 | current_case().artifact(CONVERSATION, ...) | ConversationCompleted, ConversationJudge |
| stage_timings/v1 | @rag_system | żaden; pokazywany obok opóźnienia |
System z funkcją wywoływalną deklaruje zapisywane rodzaje w records: (lub @system(records=...)); system HTTP w http.artifacts; etapowy system RAG zapisuje własne.
Wersje, klucze cache i unieważnianie
Oloproof ponownie używa pracy, której wejścia się nie zmieniły, a o tym, co znaczy "bez zmian", decyduje na podstawie skrótów treści. Każdy jest liczony przez silnik i zapisywany z przebiegiem.
| Rekord | Używany ponownie, gdy te są identyczne |
|---|---|
| Wersja systemu | name, version, config i skrót kodu: kod źródłowy modułu funkcji wywoływalnej (lub każdy plik dopasowany przez code_paths), a dla systemu HTTP jego url, method, output_path i artifacts |
| Wykonanie | wersja systemu, input przypadku i indeks replikacji. Ponownie używane są tylko udane wykonania. |
| Ocena | wersja ewaluatora (jego typ i każde ustawienie) oraz skrót każdego pola, które czyta, jak wymienia tabela ewaluatorów |
| Analiza | plan analizy, metryka, poziom ufności, skrót zestawu i każde wejście, które policzyła |
| Bramka | każda analiza, skrót polityki, to, czy przebieg się zakończył, oraz efektywny status każdego ewaluatora, na który powołują się decyzje |
To, czego Oloproof nie widzi, musisz zadeklarować sam:
- Zachowanie systemu HTTP żyje na serwerze. Zmieniaj system.version za każdym razem, gdy zmienia się to, co jest pod URL, w przeciwnym razie stary wynik z cache będzie reprezentował nowy system.
- Moduły pomocnicze funkcji wywoływalnej są hashowane tylko wtedy, gdy dopasowuje je code_paths. Bez tego edycja modułu pomocniczego nie zmienia wersji.
- Metoda lub obiekt wywoływalny muszą zadeklarować wersję, a wersja musi się zmienić, gdy zmienia się stan obiektu.
- Indeks RAG jest identyfikowany przez index_version; zmieniaj go przy przebudowie indeksu.
- Tożsamością sędziego-modelu są jego ustawienia, a nie wagi dostawcy. Aktualizacji modelu przez dostawcę pod tą samą nazwą cache nie wykrywa.
- Własny @evaluator hashuje plik modułu, który go definiuje, a jego oceny są ponownie używane między przebiegami tylko wtedy, gdy deklaruje cacheable=True. Wbudowani sędziowie z rubryką są cache'owalni; ewaluatory deterministyczne są liczone od nowa, co jest tanie.
Praca z cache żyje w lokalnym magazynie projektu, .oloproof/store.sqlite obok oloproof.yaml (lub pod OLOPROOF_HOME). Usunięcie magazynu odrzuca każdy cache i każdy przebieg. W hostowanym obszarze roboczym silnik nie używa ponownie wykonań, ocen ani analiz z cache, ponieważ push może je zapisywać; liczy od nowa.