Podręcznik uczestnika z objaśnieniami, przykładami i ćwiczeniami do samodzielnej nauki do Modułu 6

4. R3. Ranking i metryki wyszukiwania

4.2. Ręczna ocena fragmentów i kontekstu

ENHANCER+ · Moduł 6 · Ewaluacja RAG · Podrozdział

Metryka oparta na identyfikatorach jest szybka, ale nie rozumie treści. Ręczna ocena odpowiada na pytanie, dlaczego dany fragment pomaga albo przeszkadza. Przeczytaj wszystkie pozycje top-k, także odrzucone przez próg. Inaczej nie ustalisz, czy filtr usunął szum, czy ważny dowód.

Pięć klas przydatności

KlasaJak rozpoznaćPrzykład dla pytania o nieudane uruchomienie
relevantZawiera wymagany faktPrzywrócenie zatwierdzonej kopii i zgłoszenie administratorowi
supportingUzupełnia temat, lecz nie jest wymaganym dowodemDodatkowa informacja diagnostyczna, jeśli kontrakt jej nie wymaga
topical_insufficientTen sam temat, brak potrzebnego krokuZwykły restart bez postępowania po niepowodzeniu
irrelevantNie wnosi informacji do zadaniaTekst kontrolny polskich znaków
conflicting_or_outdatedJest sprzeczny lub dotyczy innej obowiązującej wersjiNieaktualna procedura przecząca aktualnej instrukcji

Ostatni przykład opisuje klasę, a nie dodatkowy dokument w dostarczonym korpusie. Nie wymyślaj nieaktualnego źródła w wynikach. Jeżeli budujesz kontrolowany przykład sprzeczności, nadaj mu osobną etykietę demonstracyjną.

Zapis klasyfikacji może mieć postać dodatkowego pliku chunk_reviews.jsonl: result_id, pozycja, chunk_id, klasa i uzasadnienie. Ten plik uzupełnia ocenę całego kontekstu. Uzasadnienie powinno wymieniać konkretny obecny albo brakujący fakt, np. „brak instrukcji przywrócenia kopii”, zamiast „fragment słaby”.

Rubryka kontekstu

Kryterium012
trafnoscWiększość poza zadaniemWynik mieszanyFragmenty odpowiadają na pytanie
pokrycieBrak kluczowych faktówCzęść faktówWszystkie fakty wymagane kontraktem
wystarczalnoscKonieczne istotne domysłyDrobne brakiOdpowiedź możliwa wprost ze źródeł
niski_szumDominują zbędne treściCzęść treści zbędnaPrawie cały kontekst użyteczny
spojnoscSprzeczne fragmentyNiejasne wersje lub warunkiBrak sprzeczności
identyfikowalnoscBrak identyfikatorówMetadane częścioweŹródła i lokalizacje można odtworzyć

Każde kryterium opisuje inny aspekt. Kontekst może mieć pełne metadane i niskie pokrycie. W przykładzie T004 można uzasadnić profil 1, 0, 0, 1, 2, 2: część treści jest tematycznie związana, kluczowej procedury brak, występuje szum, ale nie ma jawnej sprzeczności i źródła są identyfikowalne. Jest to propozycja kalibracji, nie automatyczny wynik programu.

N/D oraz ocena jeszcze niewypełniona

W tekście używamy N/D, w JSON "ND". Wartość null w formularzu oznacza, że człowiek jeszcze nie wystawił oceny. Nie jest synonimem N/D ani zera. O tym, które kryterium dotyczy testu, decyduje kontrakt w applicable_criteria.context, a nie wygoda oceniającego po zobaczeniu wyniku.

W pakiecie przypadki bez oczekiwanych źródeł mają pustą listę właściwych kryteriów kontekstu. Możesz mimo tego zapisać klasyfikację fragmentów i obserwację o pozornej podstawie odpowiedzi. Jeśli chcesz nadać im liczbową rubrykę, zdefiniuj taką regułę przed pomiarem i nadaj nową wersję kontraktu.

Utwórz formularz, a potem go uzupełnij

Notebook warsztatu · przykład wywołania

chosen = [r for r in retrieval_results
          if r['test_id'] in ('M6-T001', 'M6-T004', 'M6-T020')]
context_drafts = [
    ref.review_template(r, contracts[(r['test_id'], r['turn_id'])], 'context')
    for r in chosen
]
draft_path = E / 'retrieval_reviews_draft.json'
if not draft_path.exists():
    ref.save_json(draft_path, context_drafts)
else:
    saved_ids = {v['result_id'] for v in ref.read_json(draft_path)}
    assert saved_ids == {r['result_id'] for r in chosen}, (
        'Formularz dotyczy innego przebiegu. Zachowaj go i wybierz właściwe wyniki.')
# Otwórz plik i uzupełnij oceny, autora, uzasadnienia oraz decyzję.
SAVE_CONTEXT_REVIEWS = False
if SAVE_CONTEXT_REVIEWS:
    by_id = {r['result_id']: r for r in retrieval_results}
    for review in ref.read_json(E / 'retrieval_reviews_draft.json'):
        r = by_id[review['result_id']]
        ref.save_review(E / 'retrieval_reviews.jsonl', review, r,
                        contracts[(r['test_id'], r['turn_id'])])

Ponowne wykonanie komórki nie nadpisuje istniejącego formularza. Jeśli uruchomisz nową serię R3, identyfikatory się zmienią: zachowaj poprzednią pracę i użyj nowego katalogu albo wróć do wyników właściwego przebiegu.

Szablon nie wpisuje sam ocen 2. Wybierz minimum trzy różne konteksty, np. T001, T004 i T020. Dla każdego oceń wszystkie właściwe kryteria, uzasadnij N/D, sprawdź warunki krytyczne i nadaj verdict. Nie oznaczaj jako ukończonego formularza, który nadal zawiera null lub pusty komentarz.

Funkcja pakietowa save_review kontroluje spójność formularza. W R4 zbudujesz własną dodatkową kontrolę rodzaju wyniku. Wyniki i recenzje połączysz przez result_id oraz zgodny contract_hash. Plik retrieval_results.jsonl jest odtwarzalnym widokiem tego połączenia. Surowe retrieval_runs.jsonl pozostają bez zmian.

Małe zadanie kalibracyjne

Oceń dwa konteksty: pierwszy zawiera tylko wymaganą procedurę, drugi tę samą procedurę i trzy długie fragmenty poboczne. Wyjaśnij, dlaczego pokrycie może pozostać równe 2, a niski szum spaść. Następnie porównaj oceny z drugą osobą. Różnicę rozstrzygnij przez wskazanie konkretnych zdań, a nie przez uśrednienie dwóch liczb bez dyskusji.

Lokalne chatboty, agenci i systemy RAG z własną bazą wiedzy · Moduł 6 · Wydanie 29.09.2026