Wyobraź sobie, @name, że masz do dyspozycji genialnego stażystę: przeczytał pół internetu, ale nie czyta w myślach i zrobi dokładnie to, co napiszesz - ani mniej, ani więcej. Prompt engineering to sztuka wydawania mu poleceń tak, by trafiał za pierwszym razem. Trzy filary: bądź konkretny, daj kontekst, określ format.
Ogólne polecenie daje ogólną odpowiedź. Im węziej opiszesz, czego chcesz, tym trafniejszy wynik. Porównaj:
1# Źle - stażysta zgadnie, co masz na myśli
2"Napisz coś o zwierzętach"
3
4# Dobrze - nie ma miejsca na domysły
5"Napisz 3 akapity o zachowaniach lwów afrykańskich podczas polowania,
6skupiając się na współpracy w stadzie."Różnica nie jest w długości, lecz w precyzji: liczba akapitów, konkretny temat, konkretny aspekt. Dobra zasada: jeśli po przeczytaniu promptu człowiek mógłby napisać dziesięć różnych odpowiedzi, model też będzie zgadywać.
Ten sam stażysta pomoże dużo lepiej, gdy wie, kim jesteś i na czym stoisz. Kontekst zawęża odpowiedź do Twojej sytuacji.
1# Źle - o czym w ogóle mowa?
2"Jak to naprawić?"
3
4# Dobrze - model wie, kto pyta i co się dzieje
5"Jestem junior Python developerem. Mój kod FastAPI zwraca błąd 422
6przy POST request. Oto kod: [kod]. Jak to naprawić?"Kto pyta, jaka technologia, jaki dokładnie objaw - te trzy informacje zamieniają ogólny wykład na odpowiedź szytą na miarę. Model nie zna Twojego projektu; wszystko, co przemilczysz, będzie musiał zgadnąć.
Jeśli wynik ma trafić do programu, nie proś o "opis" - pokaż dokładny kształt, jakiego oczekujesz. Model odwzoruje podany wzór.
1prompt = """
2Przeanalizuj tekst i zwróć wynik w formacie JSON:
3{
4 "gatunek": "nazwa gatunku",
5 "siedlisko": "gdzie żyje",
6 "dieta": "co je"
7}
8
9Tekst: Lew afrykański żyje na sawannach...
10"""Podając gotowy szkielet JSON, prawie gwarantujesz, że odpowiedź da się wczytać w kodzie bez ręcznego sprzątania. To najprostszy sposób, by wynik z modelu wpiąć wprost do aplikacji.
Gdy zależy Ci na powtarzalnym wzorcu odpowiedzi, nie tłumacz go słowami - pokaż kilka przykładów. Model dopasuje się do wzoru.
1prompt = """
2Klasyfikuj zwierzęta:
3
4Zwierzę: Lew
5Klasyfikacja: Drapieżnik
6
7Zwierzę: Zebra
8Klasyfikacja: Roślinożerca
9
10Zwierzę: Słoń
11Klasyfikacja:
12"""Dwa rozwiązane przykłady mówią modelowi więcej niż akapit instrukcji: widzi format, styl i poziom szczegółowości. Zostawiając ostatnią klasyfikację pustą, każesz mu dokończyć wzór - i o to chodzi w "few-shot".
Przy zadaniach wymagających rozumowania model częściej się myli, gdy odpowiada od razu. Poproś go, by rozpisał kroki - tak jak uczeń pokazujący działania.
1prompt = """
2Rozwiąż problem krok po kroku:
3
4Problem: W Safari jest 15 lwów i 23 słonie.
5Każdego dnia przybywa 2 lwy i odchodzi 1 słoń.
6Ile zwierząt będzie po 5 dniach?
7
8Rozwiązanie:
9Krok 1: Policz początkową liczbę zwierząt...
10"""Fraza "krok po kroku" i zaczęte "Rozwiązanie" skłaniają model do rozłożenia zadania na etapy zamiast strzelania od razu wynikiem. Przy matematyce i logice ta jedna sztuczka zauważalnie podnosi trafność.
Możesz ustawić modelowi punkt widzenia, z którego ma odpowiadać. Robisz to w wiadomości systemowej, która nadaje ton całej rozmowie.
1system_prompt = """
2Jesteś doświadczonym przewodnikiem Safari z 20-letnim stażem.
3Odpowiadasz entuzjastycznie, używasz anegdot z terenu.
4Zawsze dbasz o bezpieczeństwo turystów.
5"""Nadanie roli zmienia nie fakty, lecz styl i priorytety odpowiedzi - ten sam model raz brzmi jak sucha encyklopedia, raz jak gawędziarz z buszu. To najszybszy sposób dopasowania tonu do odbiorcy.
Gdy ten sam prompt odpalasz na wielu danych, nie sklejaj napisów ręcznie - użyj szablonu z lukami do wypełnienia.
1from string import Template
2
3template = Template("""
4Jako ekspert od $dziedzina, przeanalizuj poniższy $typ_danych:
5
6$dane
7
8Zwróć: 1. Obserwacje 2. Problemy 3. Rekomendacje
9""")
10
11prompt = template.substitute(
12 dziedzina="ekologii Safari",
13 typ_danych="raport populacji",
14 dane="Lwy: 45, Słonie: 120, Żyrafy: 78"
15)Template podmienia $dziedzina, $typ_danych i $dane na przekazane wartości - dzięki temu masz jeden sprawdzony prompt i wiele wejść, zamiast dziesięciu ręcznie sklejanych wariantów.Kilka zasad, które oszczędzą Ci frustracji - potraktuj je jak listę kontrolną przy pisaniu promptu.
1# 1. Oddzielaj sekcje separatorami, by prompt był czytelny dla modelu
2prompt = """
3### Zadanie ###
4Przeanalizuj kod poniżej i znajdź błąd.
5
6### Kod ###
7def calculate(): pass
8
9### Format odpowiedzi ###
10- Na czym polega błąd
11- Poprawiona wersja
12"""
13
14# 2. Mów też, czego NIE chcesz
15"Odpowiedz krótko, bez wstępów typu 'Oczywiście, oto...'"
16
17# 3. Dobierz temperaturę do zadania:
18# temperature=0 -> kod i fakty (powtarzalnie)
19# temperature=0.7 -> tekst kreatywny (różnorodnie)Nagłówki
### ... ### pomagają modelowi odróżnić instrukcję od danych, a wskazanie, czego unikać, bywa równie ważne jak polecenie. Temperatura zaś steruje losowością: przy kodzie chcesz zawsze tej samej, poprawnej odpowiedzi, przy opowieści - odrobiny fantazji.Pamiętaj z tej lekcji: piszesz do zdolnego stażysty, który nie czyta w myślach. Konkretnie, z kontekstem, w zadanym formacie - a gdy zadanie jest trudne, dorzuć przykłady albo każ myśleć krok po kroku.