Skip to content

Latest commit

 

History

History
445 lines (285 loc) · 48.5 KB

File metadata and controls

445 lines (285 loc) · 48.5 KB

Podstawy Inżynierii Promptów

Podstawy Inżynierii Promptów

Wprowadzenie

Ten moduł obejmuje kluczowe pojęcia i techniki tworzenia skutecznych promptów w modelach generatywnej sztucznej inteligencji. Sposób, w jaki formułujesz prompt do LLM, 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ć wejście promptu, które wysyłam do LLM? Na te pytania postaramy się odpowiedzieć w tym i następnym rozdziale.

Generatywna AI potrafi tworzyć nowe treści (np. tekst, obrazy, dźwięk, kod itp.) w odpowiedzi na zapytania użytkownika. Osiąga to dzięki Dużym Modelom Językowym (LLM), takim jak seria GPT firmy OpenAI („Generative Pre-trained Transformer”), które są trenowane do pracy z językiem naturalnym i kodem.

Użytkownicy mogą teraz wchodzić w interakcje z tymi modelami za pomocą znanych paradygmatów, takich jak czat, bez potrzeby posiadania specjalistycznej wiedzy technicznej czy szkolenia. Modele są oparte na promptach – użytkownicy wysyłają tekstowe wejście (prompt) i otrzymują odpowiedź AI (completion). Mogą następnie „rozmawiać z AI” iteracyjnie, w wieloetapowych konwersacjach, dopracowując prompt, aż odpowiedź spełni ich oczekiwania.

„Prompty” stają się teraz głównym interfejsem programistycznym dla aplikacji generatywnej AI, mówiąc modelom, co mają robić i wpływając na jakość zwracanych odpowiedzi. „Inżynieria promptów” to szybko rozwijająca się dziedzina, która koncentruje się na projektowaniu i optymalizacji promptów, aby dostarczać spójne i wysokiej jakości odpowiedzi na dużą skalę.

Cele nauki

W tej lekcji dowiemy się, czym jest inżynieria promptów, dlaczego jest ważna oraz jak tworzyć skuteczniejsze prompty dla danego modelu i celu aplikacji. Poznamy podstawowe pojęcia i najlepsze praktyki inżynierii promptów – oraz zapoznamy się z interaktywnym środowiskiem Jupyter Notebook „sandbox”, gdzie zobaczymy zastosowanie tych koncepcji na rzeczywistych przykładach.

Pod koniec tej lekcji będziemy potrafili:

  1. Wyjaśnić, czym jest inżynieria promptów i dlaczego jest ważna.
  2. Opisać składniki promptu i sposób ich użycia.
  3. Poznać najlepsze praktyki i techniki inżynierii promptów.
  4. Zastosować poznane techniki na rzeczywistych przykładach, korzystając z punktu końcowego OpenAI.

Kluczowe pojęcia

Inżynieria promptów: Praktyka projektowania i udoskonalania wejść, które kierują modele AI do generowania pożądanych wyników.
Tokenizacja: Proces zamiany tekstu na mniejsze jednostki, zwane tokenami, które model może zrozumieć i przetworzyć.
Instruction-Tuned LLMs: Duże modele językowe (LLM), które zostały dostrojone za pomocą konkretnych instrukcji, aby poprawić dokładność i trafność odpowiedzi.

Środowisko do nauki

Inżynieria promptów to obecnie bardziej sztuka niż nauka. Najlepszym sposobem na rozwinięcie intuicji jest praktyka i podejście metodą prób i błędów, które łączy wiedzę z dziedziny zastosowania z zalecanymi technikami i optymalizacjami specyficznymi dla modelu.

Dołączony do tej lekcji Jupyter Notebook oferuje środowisko sandbox, w którym możesz wypróbować to, czego się uczysz – na bieżąco lub jako część wyzwania kodowego na końcu. Aby wykonać ćwiczenia, potrzebujesz:

  1. Klucz API Azure OpenAI – punkt końcowy usługi dla wdrożonego LLM.
  2. Środowisko uruchomieniowe Pythona – w którym można uruchomić Notebook.
  3. Lokalne zmienne środowiskoweukończ teraz kroki z SETUP, aby się przygotować.

Notebook zawiera początkowe ćwiczenia – ale zachęcamy do dodawania własnych sekcji Markdown (opis) i Code (zapytania promptów), aby wypróbować więcej przykładów lub pomysłów – i rozwijać intuicję projektowania promptów.

Ilustrowany przewodnik

Chcesz zobaczyć ogólny obraz tego, co obejmuje ta lekcja, zanim zaczniesz? Sprawdź ten ilustrowany przewodnik, który przedstawia główne tematy i kluczowe wnioski do przemyślenia w każdym z nich. Mapa lekcji prowadzi od zrozumienia podstawowych pojęć i wyzwań do ich rozwiązania za pomocą odpowiednich technik inżynierii promptów i najlepszych praktyk. Zwróć uwagę, że sekcja „Zaawansowane techniki” w tym przewodniku odnosi się do treści omawianych w następnym rozdziale tego kursu.

Ilustrowany przewodnik po inżynierii promptów

Nasz startup

Porozmawiajmy teraz o tym, jak ten temat wiąże się z misją naszego startupu, który ma na celu wprowadzenie innowacji AI do edukacji. Chcemy tworzyć aplikacje AI wspierające spersonalizowaną naukę – pomyślmy więc, jak różni użytkownicy naszej aplikacji mogą „projektować” prompty:

  • Administratorzy mogą poprosić AI o analizę danych programów nauczania w celu zidentyfikowania luk w materiałach. AI może podsumować wyniki lub zwizualizować je za pomocą kodu.
  • Nauczyciele mogą poprosić AI o wygenerowanie planu lekcji dla określonej grupy odbiorców i tematu. AI może stworzyć spersonalizowany plan w określonym formacie.
  • Uczniowie mogą poprosić AI o prowadzenie korepetycji z trudnego przedmiotu. AI może teraz prowadzić uczniów, oferując lekcje, wskazówki i przykłady dostosowane do ich poziomu.

To tylko wierzchołek góry lodowej. Sprawdź Prompts For Education – otwartą bibliotekę promptów opracowaną przez ekspertów edukacyjnych – aby zobaczyć szersze możliwości! Spróbuj uruchomić niektóre z tych promptów w sandboxie lub w OpenAI Playground, aby zobaczyć, co się stanie!

Czym jest inżynieria promptów?

Zaczęliśmy tę lekcję od zdefiniowania inżynierii promptów jako procesu projektowania i optymalizacji tekstowych wejść (promptów), aby dostarczać spójne i wysokiej jakości odpowiedzi (completion) dla określonego celu aplikacji i modelu. Możemy to traktować jako proces dwuetapowy:

  • projektowanie początkowego promptu dla danego modelu i celu
  • doprecyzowywanie promptu iteracyjnie, aby poprawić jakość odpowiedzi

To z konieczności proces metodą prób i błędów, który wymaga intuicji i wysiłku użytkownika, aby uzyskać optymalne wyniki. Dlaczego jest to ważne? Aby odpowiedzieć na to pytanie, musimy najpierw zrozumieć trzy pojęcia:

  • Tokenizacja = jak model „widzi” prompt
  • Podstawowe LLM = jak model bazowy „przetwarza” prompt
  • Instruction-Tuned LLM = jak model może teraz rozumieć „zadania”

Tokenizacja

LLM widzi prompt jako ciąg tokenów, gdzie różne modele (lub wersje modelu) mogą tokenizować ten sam prompt na różne sposoby. Ponieważ LLM są trenowane na tokenach (a nie na surowym tekście), sposób tokenizacji promptu ma bezpośredni wpływ na jakość generowanej odpowiedzi.

Aby zrozumieć, jak działa tokenizacja, wypróbuj narzędzia takie jak OpenAI Tokenizer pokazane poniżej. Wklej swój prompt – i zobacz, jak jest zamieniany na tokeny, zwracając uwagę na to, jak traktowane są znaki białe i interpunkcja. Zwróć uwagę, że ten przykład pokazuje starszy model LLM (GPT-3) – więc próba z nowszym modelem może dać inny wynik.

Tokenizacja

Pojęcie: Modele bazowe

Po tokenizacji promptu, główną funkcją "Podstawowego LLM" (lub modelu bazowego) 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 mogą dokonać tego przewidywania z pewnym prawdopodobieństwem. Należy zauważyć, że nie rozumieją znaczenia słów w promptach czy tokenach; widzą jedynie wzór, który mogą „uzupełnić” kolejnym przewidywaniem. Mogą kontynuować przewidywanie sekwencji aż do przerwania przez użytkownika lub spełnienia określonego warunku.

Chcesz zobaczyć, jak działa uzupełnianie oparte na promptach? Wprowadź powyższy prompt do Azure OpenAI Studio Chat Playground z domyślnymi ustawieniami. System jest skonfigurowany tak, aby traktować prompt jako zapytanie o informacje – więc powinieneś zobaczyć odpowiedź spełniającą ten kontekst.

A co jeśli użytkownik chciałby zobaczyć coś konkretnego, spełniającego określone kryteria lub cel zadania? Wtedy na scenę wchodzą instruction-tuned LLM.

Podstawowy LLM - uzupełnianie czatu

Pojęcie: Instruction Tuned LLM

Instruction Tuned LLM zaczyna się od modelu bazowego i jest dostrajany za pomocą przykładów lub par wejście/wyjście (np. wieloetapowych „wiadomości”), które zawierają jasne instrukcje – a odpowiedź AI stara się te instrukcje realizować.

Wykorzystuje to techniki takie jak Reinforcement Learning with Human Feedback (RLHF), które uczą model podążania za instrukcjami i uczenia się na podstawie informacji zwrotnej, dzięki czemu generuje odpowiedzi lepiej dopasowane do praktycznych zastosowań i bardziej adekwatne do celów użytkownika.

Wypróbujmy to – wróć do powyższego promptu, ale teraz zmień wiadomość systemową, aby zawierała następującą instrukcję jako kontekst:

Podsumuj dostarczone treści dla ucznia drugiej klasy. Zachowaj wynik w jednym akapicie z 3-5 punktami.

Zobacz, jak wynik jest teraz dostosowany do pożądanego celu i formatu? Nauczyciel może teraz bezpośrednio wykorzystać tę odpowiedź na swoich slajdach na lekcji.

Instruction Tuned LLM - uzupełnianie czatu

Dlaczego potrzebujemy inżynierii promptów?

Teraz, gdy wiemy, jak LLM przetwarzają prompty, porozmawiajmy o dlaczego potrzebujemy inżynierii promptów. Odpowiedź leży w tym, że obecne LLM stawiają szereg wyzwań, które utrudniają uzyskanie wiarygodnych i spójnych odpowiedzi bez wysiłku włożonego w konstrukcję i optymalizację promptów. Na przykład:

  1. Odpowiedzi modelu są stochastyczne. Ten sam prompt prawdopodobnie wygeneruje różne odpowiedzi w różnych modelach lub wersjach modelu. Może też dawać różne wyniki w tym samym modelu w różnych momentach. Techniki inżynierii promptów pomagają zminimalizować te różnice, zapewniając lepsze zabezpieczenia.

  2. Modele mogą tworzyć fałszywe odpowiedzi. Modele są trenowane na dużych, ale skończonych zbiorach danych, co oznacza, że nie znają pojęć spoza zakresu treningu. W efekcie mogą generować odpowiedzi nieścisłe, wymyślone lub sprzeczne z faktami. Techniki inżynierii promptów pomagają użytkownikom wykrywać i ograniczać takie fałszywki, np. prosząc AI o podanie źródeł lub uzasadnienia.

  3. Możliwości modeli będą się różnić. Nowsze modele lub generacje modeli mają bogatsze możliwości, ale też unikalne cechy i kompromisy w kosztach i złożoności. Inżynieria promptów pomaga opracować najlepsze praktyki i procesy, które ukrywają różnice i dostosowują się do wymagań specyficznych dla modelu w sposób skalowalny i bezproblemowy.

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. Azure OpenAI playground) – jak różniły się te odpowiedzi?

Przykład fałszywek

W tym kursie używamy terminu „fałszywka” (fabrication) na określenie zjawiska, gdy LLM czasem generują informacje niezgodne z faktami z powodu ograniczeń w treningu lub innych czynników. Możesz też spotkać się z określeniem „halucynacje” w popularnych artykułach lub publikacjach naukowych. Jednak zdecydowanie zalecamy używanie terminu „fałszywka”, aby nie antropomorfizować zachowania, przypisując maszynie cechy ludzkie. Wzmacnia to również wytyczne dotyczące odpowiedzialnej AI z perspektywy terminologii, eliminując terminy, które mogą być uznane za obraźliwe lub nieinkluzywne w niektórych kontekstach.

Chcesz zobaczyć, jak działają fałszywki? Pomyśl o promptcie, który instruuje AI, aby wygenerowało treść na temat nieistniejący (aby mieć pewność, że nie znajduje się w zbiorze treningowym). Na przykład – wypróbowałem taki prompt:

Plan lekcji: Wojna Marsjańska 2076

Cel lekcji

Poznanie przyczyn, przebiegu oraz skutków Wojny Marsjańskiej 2076, a także zrozumienie jej wpływu na rozwój technologii i stosunki międzyplanetarne.

Wprowadzenie (10 minut)

  • Krótkie omówienie tła historycznego: kolonizacja Marsa i napięcia między Ziemią a Marsjańskimi koloniami.
  • Przedstawienie głównych stron konfliktu.

Główna część (30 minut)

1. Przyczyny Wojny Marsjańskiej

  • Nierówności ekonomiczne i polityczne między Ziemią a Marsjańskimi koloniami.
  • Konflikty o zasoby naturalne.
  • Rola korporacji i rządów w eskalacji napięć.

2. Przebieg konfliktu

  • Najważniejsze bitwy i wydarzenia.
  • Technologie wojskowe używane podczas wojny.
  • Strategie i taktyki obu stron.

3. Skutki wojny

  • Zmiany polityczne i społeczne na Marsie i Ziemi.
  • Postęp technologiczny wynikający z konfliktu.
  • Długoterminowe konsekwencje dla stosunków międzyplanetarnych.

Podsumowanie (10 minut)

  • Dyskusja na temat lekcji wyniesionych z Wojny Marsjańskiej.
  • Refleksja nad znaczeniem pokoju i współpracy międzyplanetarnej.

Zadanie domowe

  • Napisz krótki esej na temat: „Jak Wojna Marsjańska 2076 wpłynęła na przyszłość eksploracji kosmosu?” Wyszukiwanie w sieci pokazało, że istniały fikcyjne relacje (np. seriale telewizyjne lub książki) o wojnach marsjańskich – ale żadnych z roku 2076. Zdrowy rozsądek podpowiada również, że 2076 to przyszłość, więc nie może być powiązany z prawdziwym wydarzeniem.

Co się więc dzieje, gdy uruchomimy ten prompt u różnych dostawców LLM?

Odpowiedź 1: OpenAI Playground (GPT-35)

Response 1

Odpowiedź 2: Azure OpenAI Playground (GPT-35)

Response 2

Odpowiedź 3: : Hugging Face Chat Playground (LLama-2)

Response 3

Jak można się było spodziewać, każdy model (lub jego wersja) generuje nieco inne odpowiedzi dzięki losowemu zachowaniu i różnicom w możliwościach modelu. Na przykład jeden model kieruje odpowiedź do uczniów ósmej klasy, podczas gdy inny zakłada odbiorcę na poziomie 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ą w pewnym stopniu ograniczyć fałszywe informacje generowane przez modele. Nowe architektury inżynierii promptów również bezproblemowo integrują nowe narzędzia i techniki w przepływ promptu, aby złagodzić lub zmniejszyć niektóre z tych efektów.

Studium przypadku: GitHub Copilot

Zakończmy tę sekcję, przyglądając się, jak inżynieria promptów jest wykorzystywana w rzeczywistych rozwiązaniach, na przykładzie jednego studium przypadku: GitHub Copilot.

GitHub Copilot to Twój „AI Pair Programmer” – zamienia tekstowe prompt’y na uzupełnienia kodu i jest zintegrowany z Twoim środowiskiem programistycznym (np. Visual Studio Code), zapewniając płynne doświadczenie użytkownika. Jak udokumentowano w serii poniższych blogów, najwcześniejsza wersja opierała się na modelu OpenAI Codex – a inżynierowie szybko zdali sobie sprawę z potrzeby dostrojenia modelu i opracowania lepszych technik inżynierii promptów, aby poprawić jakość kodu. W lipcu zaprezentowali ulepszony model AI, który wykracza poza Codex, oferujący jeszcze szybsze sugestie.

Przeczytaj wpisy w kolejności, aby śledzić ich drogę rozwoju.

Możesz też przeglądać ich blog inżynierski w poszukiwaniu kolejnych wpisów, takich jak ten, który pokazuje, jak te modele i techniki są stosowane do tworzenia rzeczywistych aplikacji.


Budowa promptu

Widzieliśmy, dlaczego inżynieria promptów jest ważna – teraz zrozummy, jak prompt’y są budowane, abyśmy mogli ocenić różne techniki dla skuteczniejszego projektowania promptów.

Podstawowy prompt

Zacznijmy od podstawowego promptu: tekstowego wejścia wysłanego do modelu bez dodatkowego kontekstu. Oto przykład – gdy wysyłamy 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 słowa „The Star-Spangled Banner”, hymnu narodowego Stanów Zjednoczonych. Pełny tekst to ...

Złożony prompt

Teraz dodajmy kontekst i instrukcje do tego podstawowego promptu. Chat Completion API pozwala nam zbudować złożony prompt jako zbiór wiadomości z:

  • parami wejście/wyjście odzwierciedlającymi dane użytkownika i odpowiedź asystenta,
  • wiadomością systemową ustawiającą kontekst zachowania lub osobowości asystenta.

Żądanie ma teraz poniższą formę, gdzie tokenizacja skutecznie wyłapuje istotne informacje z kontekstu i rozmowy. Zmiana kontekstu systemowego może 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?"}
    ]
)

Prompt z instrukcją

W powyższych przykładach prompt użytkownika był prostym zapytaniem tekstowym, które można interpretować jako prośbę o informację. W promptach z instrukcją możemy użyć tego tekstu, aby dokładniej określić zadanie, dając AI lepsze wskazówki. Oto przykład:

Prompt (Wejście) Uzupełnienie (Wyjście) Typ instrukcji
Napisz opis Wojny Secesyjnej zwrócono prosty akapit Prosty
Napisz opis Wojny Secesyjnej. Podaj kluczowe daty i wydarzenia oraz opisz ich znaczenie zwrócono akapit, a następnie listę kluczowych dat wydarzeń z opisami Złożony
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 rozbudowane szczegóły w polu tekstowym, sformatowane jako JSON, które można skopiować do pliku i zweryfikować Złożony. Sformatowany.

Główna treść

W powyższych przykładach prompt był nadal dość otwarty, pozwalając LLM zdecydować, która część jego wstępnie wytrenowanego zbioru danych jest istotna. W wzorcu projektowym główna treść tekst wejściowy dzielony jest na dwie części:

  • instrukcję (akcję),
  • odpowiednią treść (która wpływa na akcję).

Oto przykład, gdzie 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. 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 jeszcze przed zapisem historii. Został nazwany na cześć rzymskiego boga Jowisza.[19] Widoczny z Ziemi, Jowisz może być na tyle jasny, że jego odbite światło rzuca widoczne cienie,[20] i jest średnio 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 jednym z najjaśniejszych obiektów na nocnym niebie. Nazwany na cześć rzymskiego boga Jowisza, to gazowy olbrzym o masie dwukrotnie i pół większej niż wszystkich pozostałych planet Układu Słonecznego razem wziętych.

Segment głównej treści można wykorzystać na różne sposoby, aby uzyskać skuteczniejsze instrukcje:

  • Przykłady – zamiast mówić modelowi, co ma zrobić za pomocą jawnej instrukcji, podaj mu przykłady, a on sam wywnioskuje wzór.
  • Wskazówki – po instrukcji dodaj „wskazówkę”, która przygotowuje uzupełnienie, kierując model ku bardziej trafnym odpowiedziom.
  • Szablony – to powtarzalne „przepisy” na prompt’y z miejscami na zmienne, które można dostosować danymi do konkretnych zastosowań.

Przyjrzyjmy się temu w praktyce.

Używanie przykładów

To podejście polega na wykorzystaniu głównej treści do „nakarmienia modelu” przykładami pożądanego wyniku dla danej instrukcji i pozwoleniu mu wywnioskować wzór pożądanego wyjścia. W zależności od liczby podanych przykładów możemy mieć zero-shot prompting, one-shot prompting, few-shot prompting itd.

Prompt składa się teraz z trzech elementów:

  • opisu zadania,
  • kilku przykładów pożądanego wyniku,
  • rozpoczęcia 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 =>
Basketball

Zauważ, że w zero-shot prompting musieliśmy podać wyraźną instrukcję („Przetłumacz na hiszpański”), ale w przykładzie one-shot jest ona wywnioskowana. Przykład few-shot pokazuje, jak dodanie większej liczby przykładów pozwala modelom na dokładniejsze wnioskowanie bez dodatkowych instrukcji.

Wskazówki do promptu

Inną techniką wykorzystania głównej treści jest podawanie wskazówek zamiast przykładów. W tym przypadku dajemy modelowi delikatny impuls, zaczynając od fragmentu, który odzwierciedla pożądany format odpowiedzi. Model „łapie 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. 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 jeszcze przed zapisem historii.

Podsumuj to | Jowisz jest największą planetą w Układzie Słonecznym i piątą od Słońca. To gazowy olbrzym o masie 1/1000 masy Słońca, ale cięższy niż wszystkie pozostałe planety razem wzięte. Starożytne cywilizacje znały Jowisza od dawna, a planeta jest łatwo widoczna 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 dwa i pół razy większej niż wszystkich pozostałych planet razem wziętych. Jowisz jest jednym z najjaśniejszych obiektów widocznych gołym okiem na nocnym niebie i był znany starożytnym cywilizacjom jeszcze przed początkiem zapisanej historii.
Podsumuj to
Dowiedzieliśmy się, ż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 dwa i pół razy 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 dwa i pół razy większej niż wszystkich pozostałych planet razem wziętych. Jowisz jest jednym z najjaśniejszych obiektów widocznych gołym okiem na nocnym niebie i był znany starożytnym cywilizacjom jeszcze przed początkiem zapisanej historii.
Podsumuj to
Top 3 fakty, które poznaliśmy: | 1. Jowisz jest piątą planetą od Słońca i największą w Układzie Słonecznym.
2. To gazowy olbrzym o masie jednej tysięcznej masy Słońca...
3. Jowisz jest widoczny gołym okiem od czasów starożytnych ... | | | | |

Szablony promptów

Szablon promptu to zdefiniowany wcześniej przepis na prompt, który można przechowywać i wykorzystywać wielokrotnie, 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 zawiera zarówno interaktywne komponenty promptu (wiadomości użytkownika i systemu), jak i format zapytania API – wspierając ponowne użycie.

W bardziej złożonej formie, jak ten przykład od LangChain, zawiera placeholdy, 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.), aby dynamicznie generować prompt. Pozwala to tworzyć bibliotekę wielokrotnego użytku promptów, które mogą programowo zapewniać spójne doświadczenia użytkownika na dużą skalę.

Ostatecznie prawdziwa wartość szablonów polega na możliwości tworzenia i publikowania bibliotek promptów dla konkretnych dziedzin zastosowań – gdzie szablon promptu jest optymalizowany pod kątem kontekstu aplikacji lub przykładów, które sprawiają, że odpowiedzi są bardziej trafne i precyzyjne dla docelowej grupy użytkowników. Repozytorium Prompts For Edu jest świetnym przykładem takiego 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 itp.

Wspierające treści

Jeśli myślimy o konstrukcji promptu jako o instrukcji (zadaniu) i celu (głównych treściach), to treści wtórne są jak dodatkowy kontekst, który dostarczamy, aby wpłynąć na wynik w jakiś sposób. Mogą to być parametry strojenia, instrukcje formatowania, taksonomie tematów itp., które pomagają modelowi dostosować odpowiedź do oczekiwanych celów lub wymagań użytkownika.

Na przykład: Mając katalog kursów z rozbudowanymi metadanymi (nazwa, opis, poziom, tagi metadanych, prowadzący itp.) dla wszystkich dostępnych kursów w programie nauczania:

  • możemy zdefiniować instrukcję „podsumuj katalog kursów na semestr jesień 2023”
  • możemy użyć głównych treści, aby podać kilka przykładów oczekiwanego wyniku
  • możemy użyć treści wtórnych, aby wskazać 5 najważniejszych „tagów” zainteresowania.

Wtedy model może wygenerować podsumowanie w formacie pokazanym przez przykłady – ale jeśli wynik zawiera wiele tagów, może priorytetowo traktować 5 tagów wskazanych w treściach wtórnych.


Najlepsze praktyki w promptowaniu

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 rozważać to w dwóch aspektach – posiadanie odpowiedniego nastawienia i stosowanie właściwych technik.

Nastawienie w inżynierii promptów

Inżynieria promptów to proces metodą prób i błędów, więc miej na uwadze trzy szerokie czynniki przewodnie:

  1. Znajomość dziedziny ma znaczenie. Dokładność i trafność odpowiedzi zależy od dziedziny, w której działa aplikacja lub użytkownik. Wykorzystaj swoją intuicję i wiedzę dziedzinową, aby dostosować techniki. Na przykład, definiuj osobowości specyficzne dla dziedziny w promptach systemowych lub używaj szablonów specyficznych dla dziedziny w promptach użytkownika. Dostarczaj treści wtórne odzwierciedlające kontekst dziedzinowy lub stosuj wskazówki i przykłady specyficzne dla dziedziny, aby nakierować model na znane wzorce użycia.

  2. Znajomość modelu ma znaczenie. Wiemy, że modele są z natury stochastyczne. Jednak implementacje modeli mogą się różnić pod względem użytego zbioru treningowego (wiedza wstępna), oferowanych możliwości (np. przez API lub SDK) oraz rodzaju treści, do których są optymalizowane (np. kod, obrazy, tekst). Poznaj mocne i słabe strony używanego modelu i wykorzystaj tę wiedzę, aby priorytetyzować zadania lub tworzyć dostosowane szablony zoptymalizowane pod kątem możliwości modelu.

  3. Iteracja i walidacja mają znaczenie. Modele szybko się rozwijają, podobnie jak techniki inżynierii promptów. Jako ekspert dziedzinowy możesz mieć dodatkowy kontekst lub kryteria specyficzne dla Twojej aplikacji, które niekoniecznie dotyczą szerszej społeczności. Używaj narzędzi i technik inżynierii promptów, aby „rozpocząć” konstrukcję promptu, a następnie iteruj i weryfikuj wyniki, korzystając z własnej intuicji i wiedzy dziedzinowej. Zapisuj swoje spostrzeżenia i twórz bazę wiedzy (np. biblioteki promptów), która może służyć jako nowa podstawa dla innych, przyspieszając kolejne iteracje.

Najlepsze praktyki

Przyjrzyjmy się teraz powszechnym najlepszym praktykom rekomendowanym przez praktyków z OpenAI i Azure OpenAI.

Co Dlaczego
Testuj najnowsze modele. Nowe generacje modeli prawdopodobnie mają ulepszone funkcje i jakość – ale mogą też generować wyższe koszty. Oceń ich wpływ, a następnie podejmij decyzję o migracji.
Oddziel instrukcje i kontekst Sprawdź, czy Twój model/dostawca definiuje delimitery do wyraźniejszego rozróżnienia instrukcji, treści głównych i wtórnych. To pomaga modelom dokładniej przypisywać wagi do tokenów.
Bądź konkretny i jasny Podaj więcej szczegółów dotyczących oczekiwanego kontekstu, rezultatu, długości, formatu, stylu itp. To poprawi zarówno jakość, jak i spójność odpowiedzi. Zapisuj przepisy w wielokrotnego użytku szablonach.
Bądź opisowy, używaj przykładów Modele mogą lepiej reagować na podejście „pokaż i opowiedz”. Zacznij od podejścia zero-shot, gdzie dajesz instrukcję (bez przykładów), a następnie spróbuj few-shot jako doprecyzowanie, podając kilka przykładów oczekiwanego wyniku. Używaj analogii.
Używaj wskazówek do rozpoczęcia odpowiedzi Nakieruj model na oczekiwany rezultat, podając kilka początkowych słów lub fraz, które może wykorzystać jako punkt startowy odpowiedzi.
Powtarzaj (Double Down) Czasem trzeba powtórzyć instrukcje modelowi. Podawaj instrukcje przed i po treści głównej, używaj instrukcji i wskazówek itd. Iteruj i weryfikuj, co działa najlepiej.
Kolejność ma znaczenie Kolejność prezentowania informacji 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” Zapewnij modelowi alternatywną odpowiedź, którą może zwrócić, jeśli z jakiegoś powodu nie jest w stanie wykonać zadania. To zmniejsza ryzyko generowania fałszywych lub wymyślonych odpowiedzi.

Jak w przypadku każdej najlepszej praktyki, pamiętaj, że Twoje doświadczenia mogą się różnić w zależności od modelu, zadania i dziedziny. Traktuj je jako punkt wyjścia i iteruj, aby znaleźć to, co działa najlepiej dla Ciebie. Nieustannie oceniaj proces inżynierii promptów, gdy pojawiają się nowe modele i narzędzia, koncentrując się na skalowalności procesu i jakości odpowiedzi.

Zadanie

Gratulacje! Dotarłeś do końca lekcji! Czas przetestować niektóre z poznanych 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.

Aby zacząć, zrób fork repozytorium, a następnie

  • (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.

Następnie skonfiguruj zmienne środowiskowe

  • Skopiuj plik .env.copy z katalogu głównego repozytorium do .env i uzupełnij wartości AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT oraz AZURE_OPENAI_DEPLOYMENT. Wróć do sekcji Learning Sandbox, aby dowiedzieć się jak.

Następnie otwórz Jupyter Notebook

  • Wybierz kernel środowiska uruchomieniowego. Jeśli korzystasz z opcji 1 lub 2, po prostu wybierz domyślny kernel Python 3.10.x dostarczany przez kontener deweloperski.

Jesteś gotowy do uruchamiania ćwiczeń. Pamiętaj, że nie ma tu dobrych i złych odpowiedzi – chodzi o eksplorację opcji metodą prób i błędów oraz budowanie intuicji, co działa dla danego modelu i dziedziny zastosowania.

Z tego powodu w tej lekcji nie ma segmentów z rozwiązaniami kodu. Zamiast tego w Notebooku znajdziesz komórki Markdown zatytułowane „Moje rozwiązanie:”, które pokazują jeden przykładowy wynik do odniesienia.

Sprawdzenie wiedzy

Który z poniższych promptów jest dobry i spełnia rozsądne najlepsze praktyki?

  1. Pokaż mi obraz czerwonego samochodu
  2. Pokaż mi obraz czerwonego samochodu marki Volvo, model XC90, zaparkowanego na klifie podczas zachodu słońca
  3. Pokaż mi obraz czerwonego samochodu marki Volvo, model XC90

Odp.: 2, to najlepszy prompt, ponieważ podaje szczegóły „co” i wchodzi w konkret (nie tylko dowolny samochód, ale konkretną markę i model) oraz opisuje ogólne otoczenie. 3 jest kolejnym najlepszym, bo też zawiera dużo opisu.

🚀 Wyzwanie

Sprawdź, czy potrafisz wykorzystać technikę „wskazówki” z promptem: Uzupełnij zdanie „Pokaż mi obraz czerwonego samochodu marki Volvo i …”. Jaką odpowiedź otrzymujesz i jak byś ją ulepszył?

Świetna robota! Kontynuuj naukę

Chcesz dowiedzieć się więcej o różnych koncepcjach inżynierii promptów? Przejdź do strony z dalszą nauką, gdzie znajdziesz inne świetne materiały na ten temat.

Przejdź do Lekcji 5, gdzie omówimy zaawansowane techniki promptowania!

Zastrzeżenie:
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Mimo że dążymy do jak największej dokładności, prosimy mieć na uwadze, że tłumaczenia automatyczne mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku źródłowym powinien być uznawany za źródło autorytatywne. W przypadku informacji o kluczowym znaczeniu zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.