Podręcznik uczestnika z objaśnieniami, przykładami i ćwiczeniami do samodzielnej nauki do Modułu 4
3. Wywołanie lokalnego modelu LLM z Pythona
Najprostszy krok generacji to jedno żądanie i jedna odpowiedź. Zanim dodasz wyszukiwanie, trzeba umieć określić pełne wejście modelu, rozpoznać błąd wywołania i zachować wynik, którego później nie pomylisz z inną próbą.
1. Umowa funkcji wywołującej model
def generate_with_ollama(
prompt: str,
model_name: str = LLM_MODEL,
temperature: float = DEFAULT_TEMPERATURE,
) -> str:
...
To sygnatura do przeczytania, nie kompletna funkcja do uruchomienia. Parametr prompt zawiera zadanie i dostępne dane, model_name wskazuje lokalny model, a temperature jest ustawieniem generacji. Wynik ma być tekstem. Obiekt odpowiedzi API może mieć dodatkowo informacje o liczbie tokenów i sposobie zakończenia; aplikacja zachowuje je oddzielnie w diagnostyce.
Ollama udostępnia lokalny interfejs do wywołań modeli. W prezentacji zobaczysz wariant z klientem Python, a pakiet M4 korzysta z HTTP API przez bibliotekę standardową. To dwa sposoby komunikacji z tą samą usługą. Przebieg nadal trzeba opisać pełnym żądaniem: nazwą modelu, wiadomościami i opcjami, nie tylko ostatnim pytaniem widocznym na ekranie.
2. Instrukcja a materiał źródłowy
Porównaj trzy żądania dla pytania „Co należy zrobić po zmianie konfiguracji?”. Samo pytanie może wywołać ogólne rady. Dopisanie „odpowiedz w dwóch punktach” ogranicza format, lecz nie dostarcza lokalnej procedury. Dopiero dołączenie odpowiedniego fragmentu daje modelowi podstawę do podania nazwy usługi i dokładnych poleceń.
| Próba | Wiadomość użytkownika | Co można sprawdzić |
|---|---|---|
| P1 | Samo pytanie o zmianę konfiguracji. | Czy model ujawni brak lokalnego źródła zamiast dopowiadać szczegóły. |
| P2 | To samo pytanie oraz prośba o dwa punkty. | Zgodność formatu; nadal brak dokumentacji. |
| P3 | Pytanie, reguła odpowiedzi ze źródeł i konkretny fragment instrukcji. | Zgodność twierdzeń z przekazanym tekstem. |
Każda próba w pakiecie rozpoczyna nową rozmowę bez wcześniejszej historii. Inaczej wariant pozornie „bez dokumentu” mógłby korzystać z dokumentu przesłanego przed chwilą. Nie porównuj prób, jeśli nie wiesz, jakie wiadomości otrzymał model.
3. Parametry i zakończenie odpowiedzi
Temperatura wpływa na sposób wyboru kolejnych tokenów, ale nie jest suwakiem prawdziwości. Niska wartość nie zapewnia zgodności ze źródłem, a pojedyncza odpowiedź przy wysokiej wartości nie dowodzi większej jakości ani większej różnorodności. Do oceny zmienności potrzebujesz wielu prób przy jasno określonych warunkach.
W gotowym pakiecie przyjęto temperaturę 0.1, seed=42, num_predict=384 i num_ctx=4096. To ustawienia ćwiczenia. num_predict ogranicza generowaną odpowiedź, a num_ctx określa skonfigurowany rozmiar kontekstu. Stały seed pomaga porównywać warunki, lecz nie daje bezwarunkowej gwarancji identycznego tekstu przy innym środowisku.
| Sygnał | Jak go interpretować |
|---|---|
| Pusty prompt | Niepoprawne wejście: popraw zadanie przed wywołaniem. |
| Brak usługi lub modelu | Problem środowiska; nie jest to odmowa oparta na źródłach. |
done_reason="stop" |
Generacja zakończyła się bez wskazania limitu długości; treść nadal wymaga oceny. |
done_reason="length" |
Możliwe ucięcie przez limit. Zachowaj wynik jako niepełny. |
4. Własne wywołanie i odtworzenie
W trybie ollama powstaje nowe wywołanie. W trybie checkpoint aplikacja odnajduje wcześniej zapisane identyczne żądanie i odtwarza odpowiedź. Zmiana pytania, promptu lub opcji może oznaczać brak odpowiedniego wpisu. Program nie powinien wtedy wymyślać odpowiedzi ani bez informacji przełączać sposobu pracy.
W zapisie odtworzenia original_elapsed_s jest czasem pierwotnego wywołania. Nie przedstawiaj go jako czasu generacji wykonanej teraz. Ten sam tekst odtworzony dziesięć razy nie jest dziesięcioma niezależnymi obserwacjami jakości modelu.
Ćwiczenie 2. Oceń żądanie i odpowiedź
Poniższe odpowiedzi i informacje diagnostyczne są przygotowanymi przykładami, a nie zapisami pomiaru.
- W P1 model pisze: „Uruchom ponownie usługę i sprawdź logi”. Nie otrzymał źródła. W P2 pisze: „1. Zrestartuj system. 2. Sprawdź działanie”. Oceń oddzielnie format i podstawę obu odpowiedzi.
- P3 zwraca „Po zmianie pliku uruchom ponownie usługę, a następnie…” oraz done_reason=length. Wyjaśnij, dlaczego nie wolno uznać tej próby za kompletną procedurę.
- Masz porównać temperatury 0.0 i 0.8. Wypisz cztery elementy, które powinny pozostać stałe, i dwa, które trzeba zapisać w wyniku.
- Odtworzony rekord ma mode=checkpoint, original_elapsed_s=4.2 i current_elapsed_s=0.01. Która wartość opisuje pierwotne wywołanie, a czego nie wolno wnioskować z drugiej?
Czy odróżniasz błąd wykonania, ograniczenie długości i brak podstaw merytorycznych?
Jeżeli pracujesz również na komputerze, wykorzystaj kartę R2 oraz notebook M12_M4_R2_wywolanie_llm_start.ipynb.
Porównaj pięć zapisanych prób: trzy prompty i dwie dodatkowe temperatury. W logu zachowaj pełne żądania i odpowiedzi. W dołączonym checkpoincie próba bez kontekstu jest ucięta, co oznaczono w diagnostyce; nie traktuj jej jako pełnej wypowiedzi.