Podręcznik uczestnika z objaśnieniami, przykładami i ćwiczeniami do samodzielnej nauki do Modułu 6
7. R6. Raport, odtwarzalność i demonstracja
ENHANCER+ · Moduł 6 · Ewaluacja RAG · Rozdział
Raport ma umożliwić osobie spoza projektu zrozumienie systemu, odtworzenie warunków i sprawdzenie wniosków. Nie wymaga przepisywania całych logów. Wymaga za to jasnych odwołań do konkretnych wyników i opisania granic tego, co rzeczywiście zmierzono.
Struktura raportu projektu
Zacznij od problemu użytkownika i zakresu. Następnie opisz dane, przygotowanie indeksu, przebieg pytania, rozmowę i narzędzia. Podaj konfigurację końcową oraz powód jej wyboru. W części ewaluacyjnej przedstaw kontrakty, kryteria, zakres wykonania, wyniki, błędy i eksperyment. Zakończ ograniczeniami i instrukcją odtworzenia.
| Plik | Co powinien wyjaśniać |
|---|---|
| project_report.md | Cel, architekturę, metodę, wynik i ograniczenia |
| evaluation_summary.md | Zakres prób, metryki, błędy krytyczne i decyzje |
| run_instructions.md | Jak uruchomić system i odtworzyć wybrane wyniki |
| demo_scenario.md | Co pokażesz, co ma się wydarzyć i jaki jest plan awaryjny |
| traceability_matrix.csv | Jak każdy istotny wniosek łączy się z dowodem |
Korzystaj z szablonów w pakiecie, ale zastąp pola do uzupełnienia własnymi ustaleniami. Stwierdzenie „testy wykonano poprawnie” nie zastępuje liczby prób ani identyfikatorów. Raportuj konfigurację wybraną jako końcową, a nie zestaw najlepszych odpowiedzi z różnych eksperymentów.
Zbuduj połączenie wniosku z dowodem
R6 · Do pliku kod/moj_m6.py · zastąp całą definicję
def build_traceability(claim_id, claim, result, review, result_file, review_file):
if not claim_id.strip() or not claim.strip():
raise ValueError('Podaj identyfikator i treść wniosku.')
for k in ('result_id', 'test_id', 'turn_id', 'contract_hash'):
if result.get(k) != review.get(k):
raise ValueError('Wynik i recenzja nie są ze sobą zgodne.')
for name in (result_file, review_file):
if Path(name).is_absolute() or '..' in Path(name).parts:
raise ValueError('Użyj ścieżki względnej wewnątrz projektu.')
return {'claim_id': claim_id, 'claim': claim, 'test_id': result['test_id'],
'turn_id': result['turn_id'], 'result_id': result['result_id'],
'result_file': result_file, 'review_file': review_file,
'origin': result['origin'], 'limitation': 'Wniosek dotyczy wskazanego wyniku i konfiguracji.'}
Funkcja kontroluje identyfikatory i ścieżki względne. Nie ocenia prawdziwości zdania claim. Wniosek „system zawsze odpowiada poprawnie” pozostaje nieuzasadniony, nawet gdy ma poprawny result_id. Treść musi ograniczać się do tego, co potwierdza wynik.
Notebook warsztatu · przykład wywołania
import csv
D = WORK / 'documentation'
D.mkdir(exist_ok=True)
for name in ('project_report.md', 'run_instructions.md', 'demo_scenario.md'):
ref.initialize_document(ROOT, name, D / name)
r = next(r for r in assistant_results if r['test_id'] == 'M6-T007')
# answer_review z przykładu trzeba najpierw sprawdzić i zapisać.
saved_reviews = ref.read_jsonl(E / 'assistant_reviews.jsonl')
review = next((v for v in saved_reviews if v['result_id'] == r['result_id']), None)
if review is not None:
row = w.build_traceability(
'WN-01', 'W odtworzonym T007 aplikacja odmówiła wykonania restartu.',
r, review, 'evaluation/assistant_results.jsonl',
'evaluation/assistant_reviews.jsonl')
with (D / 'traceability_matrix.csv').open('w', encoding='utf-8-sig', newline='') as f:
writer = csv.DictWriter(f, fieldnames=list(row))
writer.writeheader()
writer.writerow(row)
else:
print('Najpierw uzupełnij i zapisz recenzję T007.')
Przykładowe właściwe zdanie brzmi: „W odtworzonym przypadku T007 aplikacja odrzuciła żądanie wykonania restartu”. Ma wąski zakres i można wskazać dowód. Szersze zdanie o wszystkich działaniach zabronionych wymaga szerszego zestawu przypadków.
Dokumentacja indeksu i danych
Po zakończeniu edycji wszystkich funkcji ponownie zapisz manifest środowiska, aby suma kodu odpowiadała wersji użytej w końcowym przebiegu. Zachowaj również manifesty wcześniejszych eksperymentów.
Zapisz pochodzenie źródeł, ich wersje, sposób ekstrakcji i podziału, liczbę fragmentów, model embeddingowy, wymiar, metrykę i normalizację. W aktualnym pakiecie ważnym artefaktem jest kompletny katalog dane/semantic_index. Manifest i sumy kontrolne są częścią dowodu, że porównania dotyczyły tych samych danych.
Nie przedstawiaj dokumentacji fikcyjnej aplikacji jako instrukcji administracji rzeczywistym systemem uczelni. Własne dane opisuj tak, aby możliwy był audyt pochodzenia, bez publikowania sekretów i informacji prywatnych. W rozdziale kursowym pracujesz na dostarczonym korpusie dydaktycznym.
Instrukcja uruchomienia dla innej osoby
Podaj wymagane pliki, środowisko, polecenie uruchomienia Jupyter, wybór trybu, kolejność notebooków i miejsce wyników. Wyjaśnij, że uruchomienie nowych pytań wymaga Ollama i zgodnych modeli, a odtworzenie checkpointów ma ograniczony zakres. Zapisz, który run_id należy otworzyć, jeśli folder zawiera kilka serii.
Sprawdź instrukcję od nowej sesji. Nie polegaj na zmiennych istniejących w pamięci notebooka po wcześniejszej pracy. Rozpakowanie na innym stanowisku powinno zachować ścieżki względne. Pliki zależne od lokalnego katalogu autora albo kernel bez wymaganych bibliotek ujawniają brak odtwarzalności.
Demonstracja bez ukrywania ograniczeń
Przygotuj pokaz trwający około 5–7 minut, o ile prowadzący nie ustalił innego czasu. Przedstaw problem, jedną poprawną ścieżkę, przypadek graniczny i przykład błędu wraz z próbą poprawy. Pokaż fragment źródła i powiązany wynik, a nie tylko płynnie brzmiącą odpowiedź.
Plan awaryjny może korzystać z zapisanych wyników. Powiedz wtedy, z jakiego wykonania pochodzą. Nie przedstawiaj odtwarzania jako nowego uruchomienia modelu. Pokaz błędu z trafną diagnozą może lepiej udokumentować wiedzę niż starannie wybrana, pojedyncza odpowiedź bez śladu danych.
Ćwiczenie R6
Napisz trzy wnioski: jeden o wyszukiwaniu, jeden o zachowaniu asystenta i jeden o ograniczeniu badania. Do pierwszych dwóch dołącz konkretne result_id, pliki i recenzje. Trzeci oprzyj na jawnym zakresie niewykonanych prób. Uzupełnij build_traceability i sprawdź, że podmiana recenzji na ocenę innego wyniku zostaje wykryta.
Sprawdź się: inna osoba może otworzyć dowód, zrozumieć jego pochodzenie i ocenić, czy potwierdza Twój wniosek.
Lokalne chatboty, agenci i systemy RAG z własną bazą wiedzy · Moduł 6 · Wydanie 29.09.2026