# Fine-tuning notatek produkcyjnych: dane i wynik małej próby

Syntalith, 10 października 2026. To zapis lokalnego eksperymentu na fikcyjnych notatkach, bez danych klienta i bez wdrożenia w zakładzie. Materiał służy sprawdzeniu, co zmieniło dostrojenie modelu i jakie błędy pozostały.

## Wynik oraz jego ograniczenia

Porównaliśmy Qwen2.5-0.5B-Instruct z tym samym modelem po uczeniu adaptera LoRA. Użyliśmy 30 notatek treningowych z 29 grup, czterech walidacyjnych i ośmiu testowych. Powiązane wpisy jednej sprawy pozostały w tym samym podzbiorze. Wszystkie teksty i etykiety przygotowano na potrzeby eksperymentu. Autor próby znał przykłady testowe; nie była to niezależna, zaślepiona ocena.

| Wariant | Podzbiór | Dokładnie poprawne etykiety | Niepoprawny format |
| --- | --- | --- | --- |
| Model bazowy, krótka instrukcja | test | 0 z 8 | 7 z 8 |
| Model bazowy, dłuższa instrukcja | test | 1 z 8 | 7 z 8 |
| Adapter, krótka instrukcja | test | 6 z 8 | 0 z 8 |
| Adapter, krótka instrukcja | walidacja | 3 z 4 | 0 z 4 |

Wymagaliśmy dokładnej nazwy kategorii. Wielka litera albo dodatkowy tekst oznaczały błąd formatu. Zmiana wyniku obejmuje więc także nauczenie formatu. Nie dowodzi, że cała różnica wynika z lepszego rozumienia notatki. Nie porównaliśmy tu mocniejszego modelu, pełnego zestawu instrukcji ani osobnej metody normalizowania odpowiedzi.

Adapter przeoczył potwierdzone zabrudzenie czujnika. W innym przykładzie wykonał polecenie umieszczone w notatce i przypisał zabrudzenie bez dowodu. W walidacji pomylił wyciek z luźnym połączeniem. Wynik nie uzasadnia samodzielnego wykorzystania klasyfikatora w raporcie zakładu.

Licznik przypisań niepotwierdzonej przyczyny obejmuje tylko poprawnie zapisane etykiety. Zerowy wynik tego licznika dla modelu bazowego nie świadczy o bezpiecznych odpowiedziach: odpowiedzi w złym formacie mogły również zawierać nieuprawnione stwierdzenia. Surowe wyniki trzeba czytać razem z licznikami błędów.

## Pliki do sprawdzenia

- [Zbiór treningowy, walidacyjny i testowy](training-corpus-v2.json): tekst, etykieta, uzasadnienie oraz grupa każdego przykładu.
- [Pełny zapis eksperymentu](adapter-run-v1.json): konfiguracja, straty uczenia, surowe odpowiedzi i wynik dla każdej kategorii.
- [Wcześniejsze porównanie instrukcji](baseline-validation.json): cztery przykłady walidacyjne, na podstawie których wybrano krótką instrukcję.
- [Sprawdzenie ponownego wczytania adaptera](adapter-reload-verification.json): osiem odpowiedzi odtworzonych po ponownym wczytaniu. To kontrola zapisu modelu, bez niezależnej oceny jakości.
- [Identyfikator i rewizja modelu](base-model.json), [licencja modelu](base-model-license.txt) oraz [sumy plików bazowych](model-files.json).
- [Komplet plików w ZIP](experiment.zip), z kodem oceny, uczenia i listą wersji zależności. Nie zawiera wag modelu bazowego ani adaptera.
- [Manifest plików](manifest.json): sumy SHA-256 do kontroli pobranego zestawu.

Kod jest materiałem eksperymentalnym. Nie łączy się z systemem produkcyjnym, nie steruje maszyną i nie wskazuje technicznej przyczyny awarii na podstawie pomiarów. Kategorie opisują wyłącznie to, co zapisano w fikcyjnych notatkach.

## Sprawdzenie wyniku bez modelu

Rozpakuj ZIP do osobnego katalogu. Poniższe polecenia wymagają Pythona i nie pobierają modelu:

```sh
python3 -B -m unittest discover -s . -v
python3 -B verify_adapter_run.py
```

Pierwsze polecenie sprawdza osiem testów oceny i integralności podziału. Drugie ponownie oblicza wyniki zapisanych odpowiedzi i porównuje sumy plików. Nie wykonuje inferencji i samo nie dowodzi wykonania uczenia. Zapis eksperymentu zawiera informacje o zmianie parametrów, stratach i plikach adaptera.

## Powtórzenie eksperymentu lokalnie

Odczytaj identyfikator i rewizję z base-model.json. Pobierz odpowiadające im pliki modelu z repozytorium dostawcy; model-files.json określa ich nazwy i sumy. Wagi zajmują około 988 MB. Sprawdź licencję przed użyciem.

Przygotuj osobne środowisko i zainstaluj wersje z requirements-lock.txt. Nasz zapis pochodzi z Pythona 3.13 na macOS ARM64, z obliczeniami MPS i float32. Zgodność oraz identyczne wyniki na innych platformach nie zostały sprawdzone.

```sh
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements-lock.txt
.venv/bin/python -B train_adapter.py --model-path /sciezka/do/modelu --adapter-path /sciezka/do/nowego-adaptera --output /sciezka/do/nowego-wyniku.json
```

Ścieżki adaptera i wyniku muszą być nowe. Skrypt sprawdza sumy modelu, zamraża jego wagi bazowe i uczy adapter przez sześć epok. Ocenia model bazowy oraz adapter według zapisanych instrukcji. Nie dobiera parametrów na podstawie testu. Dane testowe pozostają jednak widoczne w tym pakiecie, więc powtórzenie nie tworzy niezależnego testu.

Pierwsze uruchomienie skryptu zatrzymało się przed uczeniem z powodu sposobu zwracania tokenów przez bibliotekę. Po poprawieniu odczytu input_ids powtórzono próbę bez zmiany danych, instrukcji ani harmonogramu. Model bazowy wygenerował zatem odpowiedzi testowe dwa razy. Zapisane wyniki pochodzą z ukończonej próby.

## Co pozostaje do zbadania

Potrzebny jest większy zbiór z oceną osoby znającej dokumentację, mocniejszy punkt odniesienia oraz przykłady nieużywane podczas projektowania. Osobno trzeba sprawdzić kilka zdarzeń w jednej notatce, nowe kategorie i polecenia w materiale wejściowym. Kolejne poprawki na tych samych ośmiu notatkach nie mogą być przedstawiane jako wynik na nietkniętym teście.

[Zakres prywatnych modeli Syntalith](/pl/uslugi/prywatne-modele-llm) ustalamy dla konkretnego zadania. Ten eksperyment nie podaje przewidywanej skuteczności, kosztu ani czasu wdrożenia u klienta.
