Ten moduł obejmuje podstawowe pojęcia i techniki tworzenia skutecznych promptów w modelach generatywnej sztucznej inteligencji. Sposób, w jaki formułujesz prompt dla LLM, również ma znaczenie. Starannie przygotowany prompt może zapewnić lepszą jakość odpowiedzi. Ale co dokładnie oznaczają terminy takie jak prompt i inżynieria promptów? I jak poprawić prompt wejściowy, który wysyłam do LLM? Na te pytania spróbujemy odpowiedzieć w tym oraz następnym rozdziale.
Generatywna AI potrafi tworzyć nowe treści (np. tekst, obrazy, audio, kod itp.) w odpowiedzi na prośby użytkownika. Osiąga to za pomocą Dużych Modeli Językowych takich jak seria GPT firmowana przez OpenAI („Generative Pre-trained Transformer”), które są trenowane do używania języka naturalnego oraz kodu.
Użytkownicy mogą teraz wchodzić w interakcje z tymi modelami za pomocą znajomych paradygmatów, takich jak czat, bez konieczności posiadania żadnej wiedzy technicznej czy szkolenia. Modele są oparte na promptach – użytkownicy wysyłają tekstowy input (prompt) i otrzymują odpowiedź AI (completion). Mogą następnie "rozmawiać z AI" iteracyjnie, w wieloetapowych rozmowach, udoskonalając swój prompt, aż odpowiedź spełni ich oczekiwania.
„Prompty” stają się teraz podstawowym interfejsem programistycznym dla aplikacji generatywnej AI, mówiącym modelom, co mają zrobić i wpływającym na jakość otrzymanych odpowiedzi. „Inżynieria promptów” to szybko rozwijająca się dziedzina, która koncentruje się na projektowaniu i optymalizacji promptów w celu uzyskania spójnych i jakościowych odpowiedzi na dużą skalę.
W tej lekcji dowiemy się, czym jest inżynieria promptów, dlaczego jest ważna oraz jak możemy tworzyć skuteczniejsze prompt’y dla danego modelu i celu aplikacji. Zrozumiemy podstawowe pojęcia i najlepsze praktyki inżynierii promptów – a także poznamy interaktywne środowisko Jupyter Notebooks, w którym możemy zobaczyć zastosowanie tych koncepcji na prawdziwych przykładach.
Do końca tej lekcji będziemy potrafili:
- Wyjaśnić, czym jest inżynieria promptów i dlaczego jest ważna.
- Opisać składniki promptu i jak są używane.
- Poznać najlepsze praktyki i techniki inżynierii promptów.
- Zastosować poznane techniki na prawdziwych przykładach, korzystając z punktu końcowego OpenAI.
Inżynieria promptów: Praktyka projektowania i udoskonalania inputów, które kierują modele AI do generowania pożądanych wyników.
Tokenizacja: Proces przekształcania tekstu w mniejsze jednostki, zwane tokenami, które model potrafi zrozumieć i przetworzyć.
Instruction-Tuned LLMs: Duże modele językowe (LLM), które zostały dopasowane przez dodatkowe treningi z konkretnymi instrukcjami, aby poprawić precyzję i trafność odpowiedzi.
Inżynieria promptów jest obecnie bardziej sztuką niż nauką. Najlepszym sposobem na poprawę intuicji jest praktykowanie i stosowanie podejścia metodą prób i błędów, które łączy wiedzę z domeny zastosowania z rekomendowanymi technikami oraz optymalizacjami specyficznymi dla modelu.
Notatnik Jupyter dołączony do tej lekcji udostępnia środowisko piaskownicy, w którym można wypróbować poznane treści – na bieżąco lub jako część wyzwania na zakończenie. Aby wykonać ćwiczenia, potrzebujesz:
- Klucz API Azure OpenAI – punkt końcowy usługi dla wdrożonego LLM.
- Środowisko uruchomieniowe Python – w którym można odpalić notatnik.
- Lokalne zmienne środowiskowe – u ukończ teraz kroki SETUP, aby być gotowym.
Notatnik zawiera startowe ćwiczenia – ale zachęcamy do dodawania własnych sekcji Markdown (opisu) i Code (żądań promptów), aby wypróbować więcej przykładów i pomysłów oraz budować intuicję projektowania promptów.
Chcesz poznać ogólny obraz tego, czego dotyczy ta lekcja, zanim zagłębisz się w szczegóły? Sprawdź ten ilustrowany przewodnik, który przedstawia główne tematy i kluczowe wnioski do rozważenia w każdej z części. Plan lekcji prowadzi od zrozumienia podstawowych koncepcji i wyzwań do rozwiązywania ich przy pomocy odpowiednich technik i najlepszych praktyk inżynierii promptów. Zauważ, że część „Zaawansowane techniki” w tym przewodniku dotyczy treści omawianych w następnym rozdziale tego kursu.
Porozmawiajmy teraz, jak ten temat wiąże się z misją naszego startupu, który ma na celu wprowadzenie innowacji AI do edukacji. Chcemy budować aplikacje zasilane AI dla spersonalizowanego uczenia się – więc zastanówmy się, jak różni użytkownicy naszej aplikacji mogą „projektować” prompty:
- Administratorzy mogą poprosić AI o analizę danych programów nauczania w celu wykrycia luk w ich pokryciu. AI może podsumować wyniki lub wizualizować je za pomocą kodu.
- Nauczyciele mogą poprosić AI o wygenerowanie planu lekcji dla docelowej grupy odbiorców i tematu. AI może stworzyć spersonalizowany plan w określonym formacie.
- Studenci mogą poprosić AI o prowadzenie ich jako korepetytor w trudnym przedmiocie. AI może teraz kierować uczniów poprzez lekcje, wskazówki i przykłady dostosowane do ich poziomu.
To tylko wierzchołek góry lodowej. Sprawdź Prompty dla edukacji – otwartoźródłową bibliotekę promptów opracowaną przez ekspertów edukacyjnych – aby zyskać szersze spojrzenie na możliwości! Wypróbuj uruchomienie niektórych promptów w piaskownicy lub na OpenAI Playground, aby zobaczyć, co się stanie!
Lekcję rozpoczęliśmy od definicji Inżynierii Promptów jako procesu projektowania i optymalizacji tekstowych danych wejściowych (promptów) w celu dostarczenia spójnych i jakościowych odpowiedzi (completions) dla danego celu aplikacji i modelu. Możemy to rozumieć jako proces dwustopniowy:
- projektowanie początkowego promptu dla danego modelu i celu
- udoskonalanie promptu iteracyjnie w celu poprawy jakości odpowiedzi
To z natury proces prób i błędów, który wymaga intuicji użytkownika oraz wysiłku, aby uzyskać optymalne rezultaty. Dlaczego więc jest to ważne? Aby odpowiedzieć na to pytanie, musimy najpierw zrozumieć trzy pojęcia:
- Tokenizacja = jak model „widzi” prompt
- Bazowe LLM = jak model podstawowy „przetwarza” prompt
- Instruction-Tuned LLM = jak model może teraz rozumieć „zadania”
LLM widzi prompt jako ciąg tokenów, gdzie różne modele (lub wersje modelu) mogą tokenizować ten sam prompt inaczej. Ponieważ LLM są trenowane na tokenach (a nie na surowym tekście), sposób tokenizacji ma bezpośredni wpływ na jakość generowanej odpowiedzi.
Aby zyskać intuicję, jak działa tokenizacja, wypróbuj narzędzia takie jak OpenAI Tokenizer pokazane poniżej. Wklej swój prompt – i zobacz, jak jest on przekształcany w tokeny, zwracając uwagę na traktowanie spacji i znaków interpunkcyjnych. Zauważ, że ten przykład pokazuje starszy model LLM (GPT-3) – więc użycie nowszego modelu może dać inny wynik.
Po tokenizacji promptu główną funkcją "Bazowego LLM" (lub modelu podstawowego) jest przewidywanie kolejnego tokena w sekwencji. Ponieważ LLM są trenowane na ogromnych zbiorach tekstów, mają dobre wyczucie statystycznych zależności między tokenami i potrafią przewidzieć następny token z pewnym prawdopodobieństwem. Należy zauważyć, że nie rozumieją znaczenia słów w prompcie lub tokenie; widzą jedynie wzór, który mogą „uzupełnić” kolejnym przewidywaniem. Mogą kontynuować przewidywanie sekwencji aż do momentu zakończenia przez interwencję użytkownika lub spełnienia ustalonego warunku.
Chcesz zobaczyć, jak działa uzupełnianie oparte na promptach? Wprowadź powyższy prompt do studia Azure OpenAI Chat Playground z domyślnymi ustawieniami. System jest skonfigurowany tak, aby traktować prompty jako zapytania o informacje – więc powinieneś zobaczyć odpowiedź pasującą do tego kontekstu.
A co jeśli użytkownik chciał zobaczyć coś konkretnego, spełniającego dany cel czy kryterium zadania? Tutaj do akcji wchodzi instruction-tuned LLM.
Instruction Tuned LLM zaczyna od modelu podstawowego i dopasowuje go dalej, stosując przykłady lub pary input/output (np. wieloetapowe „wiadomości”), które mogą zawierać jasne instrukcje – a odpowiedź AI stara się tych instrukcji przestrzegać.
Stosuje to techniki takie jak uczenie ze wzmocnieniem z informacją zwrotną od ludzi (RLHF), które mogą nauczyć model podążania za instrukcjami i uczenia się na podstawie informacji zwrotnej, tak aby produkował odpowiedzi lepiej dopasowane do zastosowań praktycznych i bardziej adekwatne do celów użytkownika.
Wypróbujmy to – wróć do powyższego promptu, ale zmień teraz wiadomość systemową tak, aby podać następującą instrukcję jako kontekst:
Podsumuj dostarczoną zawartość dla ucznia drugiej klasy szkoły podstawowej. Zachowaj wynik w jednym paragrafie z 3-5 punktami wypunktowanymi.
Zobacz, jak wynik teraz jest dopasowany do założonego celu i formatu? Nauczyciel może teraz bezpośrednio użyć tej odpowiedzi na swoich slajdach dla tej klasy.
Skoro już wiemy, jak LLM przetwarzają prompt, porozmawiajmy o dlaczego potrzebujemy inżynierii promptów. Odpowiedź tkwi w tym, że obecne LLM stawiają wiele wyzwań, które powodują, że uzyskanie niezawodnych i spójnych odpowiedzi jest trudniejsze bez poświęcenia uwagi na konstrukcję i optymalizację promptów. Na przykład:
-
Odpowiedzi modelu są stochastyczne. Ten sam prompt prawdopodobnie wygeneruje różne odpowiedzi na różnych modelach lub ich wersjach. I może też dawać różne wyniki na tym samym modelu w różnych momentach. Techniki inżynierii promptów pomagają zminimalizować te różnice, zapewniając lepsze zabezpieczenia.
-
Modele mogą tworzyć wymyślone odpowiedzi. Modele są wstępnie trenowane na ogromnych, ale skończonych zbiorach danych, co oznacza, że nie znają pojęć spoza zakresu treningu. W efekcie mogą generować uzupełnienia, które są nieścisłe, fikcyjne lub sprzeczne z faktami. Techniki inżynierii promptów pomagają użytkownikom wykrywać i ograniczać takie zmyślenia np. poprzez prośbę AI o podanie cytatów lub rozumowania.
-
Możliwości modeli będą się różnić. Nowsze modele lub generacje modeli będą miały bogatsze możliwości, ale też oferują unikalne cechy i kompromisy pod względem kosztów i złożoności. Inżynieria promptów pomaga opracowywać najlepsze praktyki i przepływy pracy, które abstrahują różnice i dostosowują się do wymagań specyficznych dla modelu w sposób skalowalny i płynny.
Zobaczmy to w praktyce w OpenAI lub Azure OpenAI Playground:
- Użyj tego samego promptu z różnymi wdrożeniami LLM (np. OpenAI, Azure OpenAI, Hugging Face) – czy zauważyłeś różnice?
- Użyj tego samego promptu wielokrotnie z tym samym wdrożeniem LLM (np. na playground Azure OpenAI) – jak się te odpowiedzi różniły?
W tym kursie używamy terminu „zmyślenie” na określenie zjawiska, gdy LLM czasem generują nieprawdziwe informacje z powodu ograniczeń w treningu lub innych czynników. Możesz też spotkać się z tym określeniem pod postacią „halucynacje” w popularnych artykułach lub publikacjach naukowych. Jednak zdecydowanie zalecamy stosowanie terminu „zmyślenie”, aby nie przydawać zachowaniom modelu cech ludzkich i nie antropomorfizować maszynowego efektu. Wspiera to również wytyczne dotyczące odpowiedzialnej AI z perspektywy terminologicznej, eliminując określenia, które w pewnych kontekstach mogą być uznane za obraźliwe lub nieinkluzujące.
Chcesz zobaczyć, jak działają zmyślenia? Pomyśl o prompcie, który instruuje AI, aby wygenerowało treść na temat nieistniejący (aby upewnić się, że nie jest on obecny w zbiorze treningowym). Na przykład – wypróbowałem taki prompt:
Prompt: stwórz plan lekcji dotyczący Marsjańskiej Wojny z 2076 roku. Wyniki wyszukiwania w sieci pokazały, że istniały fikcyjne relacje (np. seriale telewizyjne lub książki) o wojnach marsjańskich – ale żadnej z roku 2076. Zdrowy rozsądek podpowiada również, że rok 2076 jest w przyszłości, więc nie może być powiązany z prawdziwym wydarzeniem.
Co się stanie, gdy uruchomimy ten prompt z różnymi dostawcami LLM?
Odpowiedź 1: OpenAI Playground (GPT-35)
Odpowiedź 2: Azure OpenAI Playground (GPT-35)
Odpowiedź 3: : Hugging Face Chat Playground (LLama-2)
Jak można się było spodziewać, każdy model (lub wersja modelu) generuje nieco inne odpowiedzi dzięki zachowaniom stochastycznym i różnicom w możliwościach modelu. Na przykład jeden model kieruje się do odbiorców na poziomie 8 klasy szkoły podstawowej, podczas gdy inny zakłada, że użytkownik to uczeń szkoły średniej. Jednak wszystkie trzy modele wygenerowały odpowiedzi, które mogłyby przekonać nieświadomego użytkownika, że wydarzenie było prawdziwe.
Techniki inżynierii promptów, takie jak metaprompting i konfiguracja temperatury, mogą do pewnego stopnia ograniczyć fałszywe informacje generowane przez model. Nowe architektury inżynierii promptów także płynnie integrują nowe narzędzia i techniki w przepływ promptu, aby złagodzić lub zmniejszyć część tych efektów.
Podsumujmy tę sekcję, przyglądając się, jak inżynieria promptów jest wykorzystywana w realnych rozwiązaniach na przykładzie jednego studium przypadku: GitHub Copilot.
GitHub Copilot to Twój "AI Pair Programmer" – przekształca tekstowe prompta w uzupełnienia kodu i jest zintegrowany z Twoim środowiskiem programistycznym (np. Visual Studio Code), zapewniając płynne doświadczenie użytkownika. Jak opisano w serii poniższych wpisów na blogu, najwcześniejsza wersja opierała się na modelu OpenAI Codex – inżynierowie szybko dostrzegli potrzebę dostrojenia modelu i opracowania lepszych technik inżynierii promptów, aby poprawić jakość kodu. W lipcu zaprezentowali udoskonalony model AI, który wykracza poza Codex, oferujący jeszcze szybsze sugestie.
Przeczytaj wpisy w kolejności, aby śledzić proces nauki.
- maj 2023 | GitHub Copilot staje się lepszy w rozumieniu twojego kodu
- maj 2023 | W środku GitHub: praca z LLM stojącymi za GitHub Copilot.
- czerwiec 2023 | Jak pisać lepsze prompty dla GitHub Copilot.
- lipiec 2023 | GitHub Copilot wykracza poza Codex z ulepszonym modelem AI
- lipiec 2023 | Przewodnik dewelopera po inżynierii promptów i LLM
- wrzesień 2023 | Jak zbudować aplikację korporacyjną LLM: lekcje z GitHub Copilot
Możesz też przeglądać ich blog inżynierski aby znaleźć więcej wpisów podobnych do tego, który pokazuje, jak te modele i techniki są zastosowane do napędzania rzeczywistych zastosowań.
Widzieliśmy, dlaczego inżynieria promptów jest ważna – teraz zrozummy, jak prompt są budowane, abyśmy mogli ocenić różne techniki tworzenia bardziej efektywnych promptów.
Zacznijmy od podstawowego promptu: tekstowego wejścia wysłanego do modelu bez dodatkowego kontekstu. Oto przykład – gdy wyślemy pierwsze kilka słów hymnu narodowego USA do OpenAI Completion API, model natychmiast uzupełnia odpowiedź kolejnymi wersami, ilustrując podstawowe zachowanie predykcyjne.
| Prompt (Wejście) | Uzupełnienie (Wyjście) |
|---|---|
| Oh say can you see | Wygląda na to, że zaczynasz tekst piosenki „The Star-Spangled Banner”, hymnu narodowego Stanów Zjednoczonych. Pełny tekst to ... |
Teraz dodajmy kontekst i instrukcje do tego podstawowego promptu. Chat Completion API pozwala na skonstruowanie złożonego promptu jako zbioru wiadomości z:
- parami wejścia/wyjścia odzwierciedlającymi dane użytkownika i odpowiedź asystenta,
- wiadomością systemową ustawiającą kontekst zachowania lub osobowości asystenta.
Teraz żądanie ma formę poniżej, gdzie tokenizacja skutecznie wyłapuje istotne informacje z kontekstu i rozmowy. Zmiana kontekstu systemowego może teraz mieć równie duży wpływ na jakość uzupełnień, co podane dane użytkownika.
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)W powyższych przykładach prompt użytkownika był prostym zapytaniem tekstowym, które można interpretować jako prośbę o informacje. Przy prompty instrukcyjnym możemy użyć tego tekstu, aby dokładniej określić zadanie, zapewniając lepsze wskazówki dla AI. Oto przykład:
| Prompt (Wejście) | Uzupełnienie (Wyjście) | Typ instrukcji |
|---|---|---|
| Napisz opis Wojny Secesyjnej | zwrócono prosty akapit | Prosta |
| Napisz opis Wojny Secesyjnej. Podaj kluczowe daty i wydarzenia oraz opisz ich znaczenie | zwrócono akapit, a następnie listę kluczowych dat i opisy wydarzeń | Złożona |
| Napisz opis Wojny Secesyjnej w 1 akapicie. Podaj 3 punkty z kluczowymi datami i ich znaczeniem. Podaj 3 kolejne punkty z ważnymi postaciami historycznymi i ich wkładem. Zwróć wynik jako plik JSON | zwraca bardziej szczegółowe dane w polu tekstowym, sformatowane jako JSON, które możesz skopiować do pliku i w razie potrzeby zweryfikować | Złożona. Sformatowana. |
W powyższych przykładach prompt był nadal dość otwarty, pozwalając LLM na decyzję, jaka część jego wstępnie wytrenowanego zbioru danych jest istotna. W wzorcu projektowym głównej treści tekst wejściowy dzielony jest na dwie części:
- instrukcję (akcję)
- odpowiednią treść (która wpływa na akcję)
Oto przykład, w którym instrukcja brzmi: „podsumuj to w 2 zdaniach”.
| Prompt (Wejście) | Uzupełnienie (Wyjście) |
|---|---|
| Jowisz jest piątą planetą od Słońca i największą w Układzie Słonecznym. Jest gazowym olbrzymem o masie jednej tysięcznej masy Słońca, ale dwukrotnie i pół większej niż wszystkich pozostałych planet Układu Słonecznego razem wziętych. Jowisz jest jednym z najjaśniejszych obiektów widocznych gołym okiem na nocnym niebie i jest znany starożytnym cywilizacjom od czasów przedhistorycznych. Został nazwany na cześć rzymskiego boga Jowisza.[19] Z Ziemi Jowisz może być na tyle jasny, że jego odbite światło rzuca widoczne cienie,[20] i jest zazwyczaj trzecim najjaśniejszym naturalnym obiektem na nocnym niebie po Księżycu i Wenus. Podsumuj to w 2 krótkich zdaniach |
Jowisz, piąta planeta od Słońca, jest największą w Układzie Słonecznym i znany jest jako jeden z najjaśniejszych obiektów na nocnym niebie. Nazwany na cześć rzymskiego boga Jowisza, jest gazowym olbrzymem, którego masa jest dwukrotnie i pół większa niż suma mas wszystkich pozostałych planet Układu Słonecznego. |
Segment głównej treści można stosować na różne sposoby, aby prowadzić bardziej skuteczne instrukcje:
- Przykłady – zamiast mówić modelowi, co ma zrobić w jawnej instrukcji, podaj mu przykłady oczekiwanego wyniku i pozwól wywnioskować wzorzec.
- Wskazówki – po instrukcji dołącz „wskazówkę”, która zapoczątkuje uzupełnienie, kierując model do odpowiedzi bardziej zgodnej z oczekiwaniami.
- Szablony – to powtarzalne „przepisy” na prompt z polami (zmiennymi), które można konfigurować danymi dla konkretnych zastosowań.
Przyjrzyjmy się tym podejściom w praktyce.
To podejście, w którym wykorzystujesz główną treść do „nakarmienia modelu” przykładami oczekiwanego wyjścia dla danej instrukcji i pozwalasz mu wywnioskować wzorzec oczekiwanego rezultatu. W zależności od liczby przykładów możemy mieć zero-shot prompting, one-shot prompting, few-shot prompting itd.
Prompt składa się teraz z trzech części:
- Opis zadania
- Kilka przykładów oczekiwanego wyjścia
- Początek nowego przykładu (który staje się niejawnie opisem zadania)
| Typ Nauki | Prompt (Wejście) | Uzupełnienie (Wyjście) |
|---|---|---|
| Zero-shot | „The Sun is Shining”. Przetłumacz na hiszpański | „El Sol está brillando”. |
| One-shot | „The Sun is Shining” => „El Sol está brillando”. „It's a Cold and Windy Day” => |
„Es un día frío y ventoso”. |
| Few-shot | The player ran the bases => Baseball The player hit an ace => Tennis The player hit a six => Cricket The player made a slam-dunk => |
Koszykówka |
Zauważ, jak w zero-shot prompting podajemy explicite instrukcję („Przetłumacz na hiszpański”), ale w przykładzie one-shot instrukcja zostaje wywnioskowana. Przykład few-shot pokazuje, jak dodanie większej liczby przykładów pozwala modelom na dokładniejsze wnioskowanie bez dodatkowych instrukcji.
Inną techniką korzystania z głównej treści jest podawanie wskazówek zamiast przykładów. W takim przypadku dajemy modelowi impuls w postaci fragmentu, który odzwierciedla pożądany format odpowiedzi. Model „bierze wskazówkę” i kontynuuje w tym stylu.
| Liczba Wskazówek | Prompt (Wejście) | Uzupełnienie (Wyjście) |
|---|---|---|
| 0 | Jowisz jest piątą planetą od Słońca i największą w Układzie Słonecznym. Jest gazowym olbrzymem o masie jednej tysięcznej masy Słońca, ale dwukrotnie i pół większej niż wszystkich pozostałych planet Układu Słonecznego razem wziętych. Jowisz jest jednym z najjaśniejszych obiektów widocznych gołym okiem na nocnym niebie i jest znany starożytnym cywilizacjom od czasów przedhistorycznych. Podsumuj to |
Jowisz jest największą planetą w naszym Układzie Słonecznym i piątą od Słońca. Jest gazowym olbrzymem o masie 1/1000 masy Słońca, ale cięższym niż wszystkie pozostałe planety razem wzięte. Starożytne cywilizacje znały Jowisza od dawna i jest on łatwo widoczny na nocnym niebie. |
| 1 | Jowisz jest piątą planetą od Słońca i największą w Układzie Słonecznym. To gazowy olbrzym o masie jednej tysięcznej masy Słońca, ale dwukrotnie i pół większej niż wszystkich pozostałych planet Układu Słonecznego razem wziętych. Jowisz jest jednym z najjaśniejszych obiektów widocznych gołym okiem na nocnym niebie i był znany starożytnym cywilizacjom od czasów przed zapisanymi dziejami. Podsumuj to Czego się dowiedzieliśmy, to że Jowisz |
jest piątą planetą od Słońca i największą w Układzie Słonecznym. To gazowy olbrzym o masie jednej tysięcznej masy Słońca, ale dwukrotnie i pół większej niż wszystkich pozostałych planet razem wziętych. Jest łatwo widoczny gołym okiem i znany od czasów starożytnych. |
| 2 | Jowisz jest piątą planetą od Słońca i największą w Układzie Słonecznym. To gazowy olbrzym o masie jednej tysięcznej masy Słońca, ale dwukrotnie i pół większej niż wszystkich pozostałych planet w Układzie Słonecznym razem wziętych. Jowisz jest jednym z najjaśniejszych obiektów widocznych gołym okiem na nocnym niebie i był znany starożytnym cywilizacjom od czasów przed zapisanymi dziejami. Podsumuj to 3 najważniejsze fakty, które poznaliśmy: |
1. Jowisz jest piątą planetą od Słońca i największą w Układzie Słonecznym. 2. Jest gazowym olbrzymem o masie jednej tysięcznej masy Słońca... 3. Jowisz był widoczny gołym okiem od czasów starożytnych... |
Szablon promptu to wstępnie zdefiniowany przepis na prompt, który można przechowywać i ponownie wykorzystywać w razie potrzeby, aby zapewnić bardziej spójne doświadczenia użytkownika na dużą skalę. W najprostszej formie jest to po prostu zbiór przykładów promptów takich jak ten od OpenAI, który zapewnia zarówno interaktywne komponenty promptu (wiadomości użytkownika i systemu), jak i format żądania sterowany przez API - aby umożliwić ponowne użycie.
W bardziej zaawansowanej formie, jak ten przykład z LangChain, zawiera miejsca na dane (placeholders), które można zastąpić danymi z różnych źródeł (wejście użytkownika, kontekst systemu, zewnętrzne źródła danych itp.) w celu dynamicznego generowania promptu. Pozwala to na stworzenie biblioteki wielokrotnego użytku promptów, które można programowo wykorzystać do zapewniania spójnych doświadczeń użytkownika na dużą skalę.
Ostatecznie prawdziwa wartość szablonów polega na możliwości tworzenia i publikowania bibliotek promptów dla pionowych domen zastosowań – gdzie szablon promptu jest optymalizowany pod kątem specyficznego kontekstu aplikacji lub przykładów, które sprawiają, że odpowiedzi są bardziej trafne i dokładne dla docelowej grupy użytkowników. Repozytorium Prompts For Edu jest świetnym przykładem tego podejścia, gromadząc bibliotekę promptów dla edukacji z naciskiem na kluczowe cele, takie jak planowanie lekcji, projektowanie programów nauczania, tutoring uczniów itd.
Jeśli myślimy o konstrukcji promptu jako o instrukcji (zadaniu) i celu (głównej treści), to dodatkowa zawartość jest jak dodatkowy kontekst, który dostarczamy, aby wpłynąć na wynik w jakiś sposób. Mogą to być parametry ustawień, instrukcje formatowania, taksonomie tematyczne itp., które pomagają modelowi dostosować odpowiedź do oczekiwanych celów użytkownika.
Na przykład: Mając katalog kursów z rozległymi metadanymi (nazwa, opis, poziom, tagi metadanych, instruktor itp.) dla wszystkich dostępnych kursów w programie nauczania:
- możemy zdefiniować instrukcję "podsumuj katalog kursów na semestr jesienny 2023"
- możemy użyć głównej zawartości, aby podać kilka przykładów pożądanego wyniku
- możemy użyć dodatkowej zawartości, aby wskazać 5 najważniejszych "tagów" zainteresowania.
Teraz model może dostarczyć podsumowanie w formacie pokazanym przez kilka przykładów - ale jeśli wynik zawiera wiele tagów, może priorytetowo traktować te 5 tagów wskazanych w dodatkowej zawartości.
Teraz, gdy wiemy, jak można konstruować prompty, możemy zacząć myśleć o tym, jak je projektować, aby odzwierciedlały najlepsze praktyki. Możemy to rozważać w dwóch aspektach – posiadaniu odpowiedniego nastawienia oraz stosowaniu odpowiednich technik.
Inżynieria promptów to proces prób i błędów, więc trzy szerokie czynniki przewodnie trzeba mieć na uwadze:
-
Znajomość domeny ma znaczenie. Dokładność i trafność odpowiedzi zależą od domeny, w której działa dana aplikacja lub użytkownik. Stosuj swoją intuicję i wiedzę dziedzinową, aby dalszej personalizacji technik. Na przykład zdefiniuj osobowości specyficzne dla domeny w promptach systemowych lub użyj szablonów specyficznych dla domeny w promptach użytkownika. Dostarczaj dodatkową zawartość odzwierciedlającą konteksty specyficzne domeny albo stosuj wskazówki i przykłady specyficzne dla domeny, aby nakierować model na znane wzorce użycia.
-
Znajomość modelu ma znaczenie. Wiemy, że modele są z natury stochastyczne. Jednak implementacje modeli mogą także różnić się zestawem danych treningowych (wiedza wstępna), możliwościami jakie oferują (np. za pośrednictwem API lub SDK) oraz rodzajem optymalizacji pod kątem konkretnej zawartości (np. kod kontra obrazy czy tekst). Zrozum mocne i słabe strony używanego modelu i korzystaj z tej wiedzy, aby priorytetować zadania lub tworzyć dostosowane szablony, które są zoptymalizowane pod kątem możliwości modelu.
-
Iteracja i walidacja mają znaczenie. Modele szybko się rozwijają, podobnie jak techniki inżynierii promptów. Jako ekspert dziedzinowy możesz mieć inny kontekst czy kryteria dla konkretnej aplikacji, które nie muszą odnosić się do szerszej społeczności. Użyj narzędzi i technik inżynierii promptów, by "szybko rozpocząć" konstrukcję promptu, następnie iteruj i waliduj wyniki korzystając z własnej intuicji i wiedzy dziedzinowej. Zapisuj swoje spostrzeżenia i twórz bazę wiedzy (np. biblioteki promptów), którą inni będą mogli wykorzystać jako nową podstawę do szybszych iteracji.
Przyjrzyjmy się teraz powszechnie rekomendowanym najlepszym praktykom przez OpenAI oraz Azure OpenAI.
| Co | Dlaczego |
|---|---|
| Oceń najnowsze modele. | Nowe generacje modeli prawdopodobnie mają ulepszone cechy i jakość — ale też mogą generować wyższe koszty. Oceń ich wpływ, a następnie podejmij decyzje o migracji. |
| Oddziel instrukcje i kontekst | Sprawdź, czy twój model/dostawca definiuje odgraniczniki dla jasnego rozróżnienia instrukcji, zawartości podstawowej i dodatkowej. To może pomóc modelom dokładniej przypisywać wagi do tokenów. |
| Bądź precyzyjny i jasny | Podawaj więcej szczegółów dotyczących oczekiwanego kontekstu, wyniku, długości, formatu, stylu itd. Poprawi to zarówno jakość, jak i spójność odpowiedzi. Rejestruj przepisy w wielokrotnego użytku szablonach. |
| Bądź opisowy, używaj przykładów | Modele mogą lepiej reagować na podejście „pokaż i powiedz”. Zacznij od podejścia zero-shot, gdzie dajesz instrukcję (ale bez przykładów), a potem wypróbuj few-shot jako doprecyzowanie, dostarczając kilka przykładów oczekiwanego wyniku. Używaj analogii. |
| Używaj wskazówek do inicjacji ukończenia | Nakieruj model ku oczekiwanemu wynikowi, podając niektóre słowa lub frazy startowe, z których może skorzystać jako punkt wyjścia przy generowaniu odpowiedzi. |
| Wzmacniaj komunikację | Czasem trzeba powtórzyć instrukcje modelowi. Daj instrukcje przed i po głównej treści, użyj instrukcji i wskazówki itd. Iteruj i waliduj, aby zobaczyć, co działa. |
| Kolejność ma znaczenie | Kolejność, w jakiej dostarczasz informacje modelowi, może wpływać na wynik, nawet w przykładach uczących, ze względu na efekt świeżości. Wypróbuj różne opcje, aby zobaczyć, co działa najlepiej. |
| Daj modelowi „wyjście awaryjne” | Daj modelowi zapasową odpowiedź, którą może wygenerować, jeśli z jakiegoś powodu nie będzie w stanie ukończyć zadania. To może zmniejszyć ryzyko fałszywych lub zmyślonych odpowiedzi. |
Jak przy każdej najlepszej praktyce, pamiętaj, że wyniki mogą się różnić w zależności od modelu, zadania i domeny. Używaj ich jako punktu wyjścia i iteruj, aby znaleźć to, co działa najlepiej dla ciebie. Nieustannie oceniaj na nowo swój proces inżynierii promptów w miarę pojawiania się nowych modeli i narzędzi, ze szczególnym uwzględnieniem skalowalności procesu i jakości odpowiedzi.
Gratulacje! Dotarłeś do końca lekcji! Czas przetestować niektóre z tych koncepcji i technik na prawdziwych przykładach!
Do zadania użyjemy Jupyter Notebook z ćwiczeniami, które możesz wykonywać interaktywnie. Możesz też rozszerzyć Notebook o własne komórki Markdown i kodu, aby samodzielnie eksplorować pomysły i techniki.
- (Zalecane) Uruchom GitHub Codespaces
- (Alternatywnie) Sklonuj repozytorium na lokalne urządzenie i użyj go z Docker Desktop
- (Alternatywnie) Otwórz Notebook w preferowanym środowisku uruchomieniowym Notebooków
- Skopiuj plik
.env.copyz katalogu głównego repo do.envi uzupełnij wartościAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTorazAZURE_OPENAI_DEPLOYMENT. Wróć do sekcji Learning Sandbox, aby dowiedzieć się jak to zrobić.
- Wybierz kernel uruchomieniowy. Jeśli używasz opcji 1 lub 2, po prostu wybierz domyślny kernel Python 3.10.x dostarczony przez kontener deweloperski.
Jesteś gotowy, aby wykonywać ćwiczenia. Pamiętaj, że nie ma tutaj jednoznacznych odpowiedzi — to raczej eksploracja przez próbę i błąd oraz budowanie intuicji, co działa dla danego modelu i dziedziny zastosowania.
Z tego powodu lekcja nie zawiera segmentów z rozwiązaniem kodowym. Zamiast tego Notebook będzie miał komórki Markdown zatytułowane „Moje rozwiązanie:”, które pokażą przykładowy wynik jako odniesienie.
Który z poniższych promptów jest dobrym promptem zgodnym z rozsądnymi najlepszymi praktykami?
- Pokaż mi obraz czerwonego samochodu
- Pokaż mi obraz czerwonego samochodu marki Volvo i modelu XC90 zaparkowanego przy klifie o zachodzie słońca
- Pokaż mi obraz czerwonego samochodu marki Volvo i modelu XC90
Odp.: 2, to najlepszy prompt, ponieważ podaje szczegóły dotyczące "czego" i wchodzi w konkret (nie byle jaki samochód, ale konkretna marka i model), a także opisuje ogólne otoczenie. 3 jest następny, ponieważ też zawiera sporo opisu.
Sprawdź, czy potrafisz skorzystać z techniki "wskazówki" z promptem: Ukończ zdanie "Pokaż mi obraz czerwonego samochodu marki Volvo i ". Co model odpowiada, i jak byś to poprawił?
Chcesz dowiedzieć się więcej o różnych koncepcjach inżynierii promptów? Przejdź na stronę kontynuacji nauki, aby znaleźć inne świetne materiały na ten temat.
Przejdź do Lekcji 5, gdzie przyjrzymy się zaawansowanym technikom tworzenia promptów!
Zastrzeżenie:
Ten dokument został przetłumaczony przy użyciu usługi tłumaczenia AI Co-op Translator. Mimo że dokładamy starań, aby tłumaczenie było jak najdokładniejsze, prosimy mieć na uwadze, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku źródłowym powinien być uznawany za autorytatywne źródło informacji. W przypadku istotnych informacji rekomendowane jest skorzystanie z profesjonalnego, ludzkiego tłumaczenia. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.







