Przewodniki
Od zera do werdyktu o twojej własnej aplikacji
Masz funkcję w Pythonie, która odpowiada na pytania, i chcesz wiedzieć, czy jest wystarczająco dobra, by ją wydać. Trzy polecenia prowadzą od tej funkcji do decyzji o wydaniu, bez ręcznie pisanego YAML: oloproof init --system tworzy projekt wokół twojej funkcji, oloproof check mówi, czy zadziała, zanim cokolwiek zostanie wydane, a oloproof run decyduje. Wszystko działa na twojej maszynie, bez konta i bez wywołań modeli.
Każdy wynik poniżej pochodzi z uruchomienia tych poleceń na pokazanej funkcji.
1. Twoja funkcja
Dowolna funkcja, która przyjmuje jeden przypadek i zwraca odpowiedź. Ta to bot.py, z modułem pomocniczym, który importuje:
from prompts import GREETING
def answer(question):
text = question.lower()
if "refund" in text:
reply = "Refunds are available within 30 days of purchase."
elif "ship" in text:
reply = "We ship to the US and Canada."
else:
reply = "A support agent will follow up within one business day."
return {"reply": f"{GREETING} {reply}", "topic": "support"}2. Utwórz projekt wokół niej
Z katalogu, w którym leży bot.py:
oloproof init --system bot:answerInitialized Oloproof project in . around bot:answer
Each case's input is a string, read from the function's first parameter.
Fill in before a run means anything:
data/cases.jsonl 3 placeholder cases: give each a real input and, as its expected
phrase, words a right answer contains. Add more: see below.
oloproof.yaml the check reads the whole answer; if your function returns an
object, add `field:` naming the key that holds the text.
release.yaml a placeholder bar of 0.80; set the one your release needs.
What this suite can decide, if every case is measured:
mentions-floor (mentions_expected at least 0.8, 3 cases):
1 or more pass: INSUFFICIENT_EVIDENCE (not established yet); 0: FAIL
(ruled out). With 50 cases, PASS from 46; with 100, from 89.
Next: oloproof check, then oloproof runOdwołanie jest najpierw importowane i nic nie zostaje zapisane, dopóki nie wskaże funkcji; błąd w twoim module zatrzymuje wszystko tutaj, z plikiem i wierszem. Funkcja nie jest wywoływana. Pojawiają się trzy pliki: oloproof.yaml (twoja funkcja i jedno sprawdzenie), data/cases.jsonl (trzy przypadki zastępcze) i release.yaml (próg). Wejście przypadku jest napisem, bo pierwszy parametr nazywa się question; parametr o nazwie case, inputs lub row albo z adnotacją dict dostaje zamiast tego obiekt.
Sprawdzenie to contains: przypadek przechodzi, gdy odpowiedź zawiera oczekiwaną frazę przypadku. To sprawdzenie deterministyczne, więc nie musi być mierzone względem ludzi, zanim będzie mogło decydować. Przewodnik po zestawach wymienia każde inne sprawdzenie i sędziego.
3. Uzupełnij przypadki
Zastąp przypadki zastępcze prawdziwymi pytaniami i słowami, które zawiera poprawna odpowiedź, jeden przypadek na wiersz:
{"id": "refund_01", "input": "Can I get a refund?", "expected": {"phrase": "30 days"}}
{"id": "ship_01", "input": "Do you ship to Canada?", "expected": {"phrase": "US and Canada"}}
{"id": "other_01", "input": "My order is late", "expected": {"phrase": "follow up"}}Trzy przypadki nie mogą przejść progu 0,80, jak mówi tabela powyżej: przy trzech najlepszą odpowiedzią jest INSUFFICIENT_EVIDENCE. Uruchomienie poniżej używa 30 takich przypadków, po dziesięć na temat, gdzie wystarczy 29 zaliczonych.
4. Sprawdź, zanim uruchomisz
oloproof checkZanim pole zostało ustawione, mówiło:
ok System: callable bot:answer imports.
ok Called on case refund_01: it answered {"reply": "Thanks for writing in. Refunds are available within 30 days of purchase.", "topic": "support"}
Evaluators on that answer (one case, not a result):
ok mentions_expected (contains) can read the answer; it passed this case.
note It reads the whole answer object; `field:` can name one of reply, topic.Dodaj więc field: reply pod sprawdzeniem w oloproof.yaml i sprawdź ponownie:
ok System: callable bot:answer imports.
ok Called on case refund_01: it answered {"reply": "Thanks for writing in. Refunds are available within 30 days of purchase.", "topic": "support"}
Evaluators on that answer (one case, not a result):
ok mentions_expected (contains) can read the answer; it passed this case.
Code: the system's version hashes bot.py, prompts.py. Edit one and the next run calls the system again.
What this suite can decide, if every case is measured:
mentions-floor (mentions_expected at least 0.8, 30 cases):
29 or 30 pass: PASS (established); 19 to 28: INSUFFICIENT_EVIDENCE (not
established yet); 18 or fewer: FAIL (ruled out). With 50 cases, PASS from
46; with 100, from 89.
CI: no model key is needed for the evaluators. Keys your own function reads are not checked here.
Ready. Next: oloproof runCo oznacza każda część:
- Importuje się i odpowiada: System jest budowany dokładnie tak, jak buduje go oloproof run, i wywoływany na pierwszym przypadku (--case ID wybiera inny, --no-call pomija wywołanie). Jeśli zgłosi wyjątek, wiersz podaje błąd oraz plik i wiersz w twoim kodzie.
- Ewaluatory: Każde sprawdzenie, które nie potrzebuje modelu, jest uruchamiane na tej jednej odpowiedzi. Pole, którego nie może znaleźć, jest wymieniane razem z polami, które odpowiedź ma. Zaliczenie lub niezaliczenie tutaj to jeden przypadek, nie wynik. Sędzia modelowy nigdy nie jest wywoływany przez check; mówi o tym, a wywołuje go uruchomienie.
- Kod: Pliki, których treść stanowi wersję systemu: jego moduł i moduły projektu, które importuje, plus ewentualne system.code_paths. Plik projektu wczytany podczas importowania lub wywoływania systemu, który do nich nie należy (na przykład moduł importowany po nazwie w czasie działania), jest wymieniany jako niehaszowany: dodaj go do code_paths, inaczej zmiana w nim ponownie użyje nieaktualnych odpowiedzi.
- Co może rozstrzygnąć: Ta sama tabela co w oloproof plan. Bez release.yaml mówi, że uruchomienie odpowiada zwykłymi słowami i niczego nie rozstrzyga.
- CI: Każdy model, który projekt wywołuje, i sekret, którego potrzebuje do niego zadanie CI, ANTHROPIC_API_KEY lub OPENAI_API_KEY, chyba że api_key_env wskazuje inny, i żaden dla serwera na tej maszynie.
check niczego nie zapisuje. Kończy się kodem 2, gdy coś trzeba naprawić, a w przeciwnym razie kodem 0, a oloproof check --json wypisuje te same ustalenia jako jeden dokument.
5. Uruchom
oloproof runGate: ALLOW (exit 0)
mentions-floor:
100.0%, range 88.4% to 100.0% (exact binomial interval); 30 of 30 casesRaport z uruchomienia jest dłuższy; to jego werdykt i wiersz reguły. Wszystkie 30 przypadków przeszło, a zakres, w którym utrzymywany jest wskaźnik, zaczyna się od 88,4%, powyżej progu 0,80, więc reguła mówi PASS, a bramka dopuszcza wydanie. oloproof inspect latest odczytuje go ponownie.
Dalej
- Dodaj bramkę do pull requestów: oloproof init --ci github zapisuje workflow obok tego projektu (przewodnik po CI).
- Zamień sprawdzenie na sędziego, gdy fraza nie potrafi powiedzieć, czym jest poprawna odpowiedź (przewodnik po sędziach); oloproof check wskaże wtedy klucz, którego potrzebuje CI.
- Masz już odpowiedzi w pliku zamiast w funkcji? oloproof eval answers.jsonl sprawdza je bez żadnego projektu.