Prompt engineering – wprowadzenie

Ten wpis jest wprowadzeniem do fascynującego tematu inżynierii podpowiedzi, czyli sztuki budowania precyzyjnych i skutecznych instrukcji w interakcjach z dużymi modelami językowymi.


Spis treści
  1. Czym jest inżynieria podpowiedzi?
  2. Czemu temat inżynierii podpowiedzi jest tak ważny?
  3. Jak wygląda typowa interakcja LLM – człowiek?
  4. Inżynieria podpowiedzi – dobre praktyki i wskazówki.
  5. Podsumowanie.

1. Czym jest inżynieria podpowiedzi?

Zacznijmy od definicji tytułowego procesu. Inżynieria podpowiedzi (ang. prompt engineering) jest jednym z kluczowych pojęć w dziedzinie sztucznej inteligencji, zwłaszcza w obszarze przetwarzania języka naturalnego i dużych modeli językowych (tzw. LLM, z ang. large language models).

Proces ten odnosi się do budowy i udoskonalania instrukcji lub podpowiedzi, które prowadzą modele językowe do generowania odpowiedzi oczekiwanych przez użytkownika.

2. Czemu temat inżynierii podpowiedzi jest tak ważny?

Zagadnienie inżynierii podpowiedzi ma ogromne znaczenie dla poprawy skuteczności i precyzji modeli językowych. Rozwiązania bazujące na LLM-ach, takie jak np. ChatGPT nie są doskonałe i prawdopodobnie nigdy nie będą. Potrafią popełniać wiele błędów i niejednokrotnie wprowadzają użytkowników w błąd. Bodaj najczęściej spotykanym problemem są tzw. halucynacje modeli językowych.

Zmora użytkowników modeli językowych – halucynacje.

Halucynacje modeli językowych są dosyć znanym zagadnieniem w obszarze AI. Odnoszą się one do sytuacji, w której model językowy generuje nieprawdziwe, błędne lub niedokładne odpowiedzi. Innymi słowy – model zmyśla, zamiast bazować na faktach. 😉

Co ważne, z problemem tym spotykamy się nie tylko jako użytkownicy końcowi modeli, ale również na etapie budowy i testowania danego modelu.

W praktyce halucynacje mogą mieć poważne konsekwencje, szczególnie gdy modele są wykorzystywane w istotnych procesach, jak np.: diagnozy medyczne, obsługa klientów lub ocena ryzyka.

Halucynacje – przyczyny

Halucynacje mogą być spowodowane różnymi czynnikami, takimi jak zbyt małe lub nieodpowiednie dane treningowe, nadmierna skomplikowanie modelu, czy specyficzne cechy algorytmów generatywnych (kompromis pomiędzy dokładnością a kreatywnością).

Halucynacje – rozwiązanie

Istnieje wiele metod, które jako badacze danych możemy zastosować do minimalizowania ryzyka wystąpienia halucynacji. Tak się składa, że jedną z tych metod jest właśnie inżynieria podpowiedzi.

Co istotne, ma ona wiele zalet w porównaniu z innymi technikami stosowanymi do udoskonalania modeli językowych. W porównaniu np. z  fine-tuningiem inżynieria podpowiedzi jest szybka, relatywnie prosta i nie wymaga użycia znaczących zasobów serwerowych. Niemal same plusy. 🙂

3. Jak wygląda typowa interakcja LLM – człowiek?

Tekstową interakcję pomiędzy człowiekiem a dużym modelem językowym możemy w uproszczeniu sprowadzić do następujących elementów:

  1. [Opcjonalnie] Komunikat systemowy (ang. system message) – jest elementem, którego zazwyczaj, w gotowych rozwiązaniach (jak np. wirtualny asystent klienta), nie widzi użytkownik końcowy, który prowadzi konwersację z chat-botem.
    • Służy on do przekazywania modelowi instrukcji lub dostarczania mu kontekstu na początku rozmowy. W konwersacji jest wyraźnie wyróżniony od zwykłych wiadomości, co pomaga modelowi zrozumieć jego rolę w rozmowie.
    • Komunikat systemowy zazwyczaj kieruje zachowaniem modelu, ustawia ton rozmowy, określa oczekiwaną odpowiedź modelu, długość odpowiedzi, etc. Z jego użyciem możemy sprawić, by np. model był nieco mnie lub bardziej formalny.
    • W OpenAI ChatGPT czymś w rodzaju komunikatu systemowego jest opcja „Dostosuj czatbota ChatGPT” > „Jak chcesz, aby czatbot ChatGPT odpowiadał?” (przykład poniżej).
  2. [Opcjonalnie] Kontekst (ang. context) – dodatkowa informacja do modelu przekazana przez człowieka.
    • Może mieć postać np. tekstu/kodu/grafiki.
    • Może zawierać informacje dotyczące tematu rozmowy, istotnych faktów lub informacji wprowadzających.
    • Pomaga modelowi zrozumieć, jaki jest cel konwersacji oraz udzielić poprawnej odpowiedzi na polecenie użytkownika.
  3. Instrukcja (ang. instruction) – podstawowy składnik podpowiedzi (ang. prompt).
    • Wskazuje modelowi cel, co należy zrobić/jakie jest polecenie użytkownika.
    • Instrukcje mogą przybrać formy: pytań, poleceń, sugestii lub wytycznych, które określają oczekiwane zachowanie modelu.
  4. Odpowiedź modelu (ang. model response/completions) – rezultat działania modelu, który stara się odpowiedzieć na pytania lub wygenerować tekst na podstawie dostarczonych przez użytkownika wskazówek.
    • Może przybrać formę tekstu, kodu, grafiki lub nagrania wideo.
    • Jest generowana automatycznie lub może zostać wybrana przez użytkownika spośród kilku propozycji przygotowanych przez model.

struktura prompta

Wprawdzie rymy mu się „nie kleją” (być może kleiły się przed konwersją ENG ⮕ PL), ale stara się chłop jak może. 😉

4. Inżynieria podpowiedzi – dobre praktyki i wskazówki.

Dobrych praktyk związanych z inżynierią podpowiedzi jest całe mnóstwo i nie sposób je wszystkie wymienić i opisać w ramach jednego wpisu na blogu. Poniżej przedstawiam część z nich:

  1. Zacznij od odpowiedniego komunikatu systemowego – ustala ona kontekst i instrukcje dla modelu. Opisuje rolę asystenta, jego ograniczenia oraz pożądany format odpowiedzi. Jasno określa, na co model powinien i nie powinien odpowiadać oraz udostępnia wytyczne dotyczące generowania dokładnych i pomocnych odpowiedzi.
  2. Nich Twoje instrukcje będą precyzyjne – pozostaw modelowi jak najmniej miejsca na własną interpretację.
  3. Niech Twoje instrukcje będą opisowe – korzystaj z narzędzi takich jak np. analogia.
  4. W razie konieczności (niezadowalających odpowiedzi) stosuj techniki „podwójnego potwierdzenia – czasem może być niezbędne powtórzenie instrukcji np. przed i po kontekście.
  5. Poinstruuj model, by zachowywał się w określony sposób – przykładem może być tu instrukcja, by model wcielił się w rolę określonego doradcy, np. analityka finansowego, który jest maksymalnie precyzyjny i oszczędny w słowach.

  6. Załącz listę wskazówek – dostarcz modelowi listę klarownych wskazówek i oczekiwań dotyczących odpowiedzi.

  7. Podaj modelowi przykład, by lepiej zrozumiał Twoje oczekiwania – jakościowe podpowiedzi często zawierają przykłady odpowiedzi, które lepiej dostosowują model do pożądanej odpowiedzi.

  8. Dołącz do podpowiedzi treść wspierającą – jeśli oczekujesz np. streszczenia tekstu, możesz wskazać listę najważniejszych tematów, które model powinien uwzględnić w grupowaniu odpowiedzi.
  9. Stosuj one-shot learning lub few-shots learning – by osiągnąć zamierzony cel, dołącz do podpowiedzi przykłady.
    • Technika one-shot learning odnosi się do pojedynczego przykładu.
    • Few shots learning odnosi się do wielu przykładów w postaci par wejście-wyjście.
    • Budowa podpowiedzi bez przykładów nazywana jest zero-shot learning.
    • Powyższe techniki są często używane już na etapie budowy komunikatu systemowego, jako tablica przykładowych interakcji użytkownik-asystent.
    • Poniżej przykład few-shots learning.
  10. Rozbij duże zadanie na kilka mniejszych – znana od wieków zasada „dziel i rządź” sprawdzi się również w interakcjach z modelami językowymi. 🙂 Jak się okazuje, modele językowe zazwyczaj działają lepiej, jeśli podajemy im wiele mniejszych, klarownie przedstawionych zadań, niż jedno duże.

5. Podsumowanie.

Inżynieria podpowiedzi jest tematem dosyć obszernym i niniejszy wpis na pewno nie zamyka tego tematu. Mam jednak nadzieję, że powyższe informacje okazały się dla Ciebie wartościowym wprowadzeniem do „prompt engineeringu”. 😉

Jeśli masz jakieś spostrzeżenia lub własne, sprawdzone w praktyce metody inżynierii podpowiedzi, to proszę, podziel się nimi w komentarzu pod tym wpisem.

Źródło grafiki tytułowej: Emiliano Vittoriosi, Unsplash

Podobał Ci się ten artykuł?

Jeśli tak, to zarejestruj się, by otrzymywać informacje o nowych wpisach. Dodatkowo w prezencie wyślę Ci bezpłatny poradnik 🙂

Bądź pierwszy, który skomentuje ten wpis!

Dodaj komentarz

Twój adres email nie zostanie opublikowany.


*