James Phoenix, Mike Taylor

Skuteczna inżynieria promptów

Przyszłościowe rozwiązania dla rzetelnych wyników generatywnej AI

Przekład: Krzysztof Rychlicki-Kicior

Tytuł oryginału: Prompt Engineering for Generative AI: Future-Proof Inputs for Reliable AI Outputs

Tłumaczenie: Krzysztof Rychlicki-Kicior

ISBN: 978-83-289-1905-1

© 2025 Helion S.A.

Authorized Polish translation of the English edition of Prompt Engineering for Generative AI ISBN 9781098153434 © 2024 Saxifrage, LLC and Just Understanding Data LTD.

This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz wydawca dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz wydawca nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Helion S.A.
ul. Kościuszki 1c, 44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
WWW: https://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
https://helion.pl/user/opinie/skuinz_ebook
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

- Kup w wersji papierowej

- Poleć książkę na Facebook.com

- Oceń książkę

- Księgarnia internetowa

- Lubię to! » Nasza społeczność

Opinie o książce

Absolutnie najlepszy zasób na temat inżynierii promptów spośród tego kalibru książek, które miałem okazję przeczytać. Mike i James to mistrzowie w swoim fachu.

— Dan Shipper, współzałożyciel i prezes Every

Ta książka to solidne wprowadzenie w świat podstaw inżynierii promptów i generatywnej sztucznej inteligencji. Autorzy omawiają szeroki zakres użytecznych technik dla każdego — od początkujących aż po zaawansowanych, w prosty, praktyczny i łatwy do zrozumienia sposób. Jeśli chcesz poprawić dokładność i wiarygodność swoich systemów AI, ta książka powinna znaleźć się na Twojej półce.

— Mayo Oshin, założyciel i prezes Siennai Analytics, wczesny kontrybutor LangChain

Przewodnik Phoenixa i Taylora to istna latarnia w przepastnym świecie generatywnej sztucznej inteligencji. Ich książka stanowiła fundament mojego zespołu w Phiture AI Labs, gdy uczyliśmy się korzystać z mocy dużych modeli językowych i modeli dyfuzyjnych do tworzenia zasobów marketingowych, które dobrze współgrają z przesłaniem kryjącym się za aplikacjami i grami naszych klientów. Dzięki inżynierii promptów byliśmy w stanie generować treści szyte na miarę i zgodne z filozofią marki — a to wszystko na dużą skalę. Ta książka to nie tylko teoretyczne wynurzenia — to przede wszystkim praktyczny majstersztyk w przekształcaniu ogromnego potencjału AI w szyte na miarę rozwiązania. Jest to lektura obowiązkowa dla programistów, którzy chcą wznieść techniki integracji z modelami AI na nowe szczyty kreatywności i wydajności.

— Moritz Daan, założyciel/partner, Phiture Mobile Growth Consultancy

Skuteczna inżynieria promptów to prawdopodobnie najbardziej odporna na przyszłość metoda zabezpieczenia swojej kariery w świecie technologii. To bez wątpienia najlepszy zasób dla wszystkich pracujących z praktycznymi aplikacjami AI. Bogate, rozbudowane zasady pomogą zarówno nowym, jak i doświadczonym inżynierom AI pozostać w tej niezwykle konkurencyjnej grze na dłuższy czas.

— Ellis Crosby, dyrektor ds. technologii i współzałożyciel Incremento

Jest to kluczowy przewodnik zarówno dla agencji, jak i freelancerów. Integrowanie AI z usługami i obsługą klienta, zarządzanie automatyzacją i przyspieszanie działania rozwiązań ustanowi nowe, powszechne standardy. W tej książce znajdziesz użyteczne, praktyczne informacje i techniki, które pozwolą Ci lepiej zrozumieć i wykorzystać AI w całej swojej mocy.

— Byron Tassoni-Resch, prezes i współzałożyciel WeDiscover

Bardzo interesująca i pouczająca lektura, łącząca praktyczne wskazówki z solidnym wprowadzeniem teoretycznym. Świat GenAI rozwija się w zadziwiającym tempie, więc posiadanie w zanadrzu narzędzi, które pozwolą osiągnąć lepsze wyniki, niezależnie od modelu użytego w danej sytuacji, jest na wagę złota!

— Riaan Dreyer, CDDO, Bank of Iceland

Autorzy doskonale tłumaczą zawiłości inżynierii promptów w formie praktycznego zestawu narzędzi do generowania tekstu i obrazków. Ten poradnik, uwzględniający zarówno standardowe praktyki, jak i absolutne nowinki, daje czytelnikom praktyczne wskazówki, które pozwolą im zmaksymalizować możliwości modeli generatywnych sztucznej inteligencji.

— Aditya Goel, konsultant generatywnej AI

Wprowadzenie

Generatywna sztuczna inteligencja, za sprawą stojącej za nią innowacyjności i stałego postępu technicznego w tej dziedzinie, ma niezwykły wpływ na to, jak żyjemy i pracujemy każdego dnia. Ogromne tempo zmian sprawia, że niezwykle trudno jest być z nią na bieżąco. Liczba artykułów nt. sztucznej inteligencji opublikowanych w serwisie arXiv rośnie wykładniczo (https://oreil.ly/EN5ay); model Stable Diffusion (https://oreil.ly/QX-yy) jest jednym z najszybciej rosnących projektów otwartego oprogramowania w historii, a serwer Discord narzędzia do tworzenia sztuki Midjourney (https://oreil.ly/ZVZ5o) ma dziesiątki milionów członków, czym bije na głowę nawet największe społeczności skoncentrowane wokół gier komputerowych. Jedną z głównych przyczyn takiego sukcesu jest opublikowanie przez OpenAI usługi ChatGPT, która osiągnęła 100 milionów użytkowników w zaledwie dwa miesiące (https://oreil.ly/FbYWk), co uczyniło ją najszybciej rosnącą aplikacją konsumencką w historii. Umiejętność pracy z AI (ang. Artificial Intelligence — sztuczna inteligencja) stała się jedną z najbardziej pożądanych na rynku pracy.

Każdy, kto pracuje ze sztuczną inteligencją zawodowo, szybko zauważa, że jakość rezultatu pracy, tzw. wyjścia (ang. output), niezmiernie zależy od danych wejściowych (ang. input). To założenie doprowadziło do wyodrębnienia się inżynierii promptów (ang. prompt engineering), czyli zestawu najlepszych praktyk, które pozwalają na osiągnięcie odpowiedniej stabilności, wydajności i dokładności modeli AI. „W ciągu 10 lat połowa wszystkich zawodów wykonywanych na całym świecie będzie wiązała się z inżynierią promptów” — jak twierdzi Robin Li (https://oreil.ly/IdIfO), współzałożyciel i prezes chińskiego giganta Baidu. Z drugiej strony, należy zauważyć, że inżynieria promptów będzie stanowić raczej cenioną umiejętność przydatną w wielu zawodach — podobnie do np. obsługi programu Microsoft Excel — aniżeli zawód sam w sobie. Ten nowy trend zmienia niemal wszystko, co w swoim przekonaniu wiemy na temat komputerów. Jesteśmy przyzwyczajeni do algorytmów, które przy każdym uruchomieniu zwracają te same wyniki. W przypadku AI odpowiedzi są niedeterministyczne, czyli dla tych samych danych wejściowych możemy uzyskać różne dane wyjściowe. Po całych dekadach funkcjonowania prawa Moore’a, gdy przyzwyczailiśmy się, że obliczenia komputerowe dzieją się natychmiast i niemalże nic nie kosztują, istotnymi czynnikami stają się ponownie koszt operacji i opóźnienie w jej wykonaniu (latencja, ang. latency). Ważnym wyzwaniem staje się także skłonność modelu do wymyślania nieprawdziwych informacji, nazywana halucynacją, co zmusza nas do ponownego rozważenia tego, jak określamy dokładność działania programów komputerowych.

Z generatywną sztuczną inteligencją pracujemy od czasów modelu GPT-3 w wersji beta, tj. od roku 2020. Obserwowaliśmy, jak wraz ze zmianą działania modeli wiele wczesnych sposobów promptowania stało się niepotrzebnych. Z upływem czasu byliśmy w stanie wyodrębnić zbiór reguł, które wciąż funkcjonują prawidłowo w nowszych modelach, zarówno w zakresie operacji tekstowych, jak i generowania obrazów. Pisząc tę książkę, skorzystaliśmy z tych ponadczasowych reguł, ułatwiając Ci poznanie i opanowanie umiejętności, które będą użyteczne niezależnie od tego, jak zmieni się AI przez najbliższych pięć lat. Kluczem do skutecznej pracy ze sztuczną inteligencją nie jest „wymyślenie, jak obejść prompt przez dodanie magicznego słowa na końcu, które zmieni całość prompta”, jak zapewnia współzałożyciel OpenAI Sam Altman (https://oreil.ly/oo262). Najważniejsza jest „jakość pomysłów i zrozumienie tego, co chcesz osiągnąć”. Choć nie jesteśmy pewni, czy za pięć lat będziemy mówić o „inżynierii promptów”, efektywna praca z generatywną AI stanie się na pewno coraz bardziej istotna.

Wymagania w zakresie oprogramowania

Wszystkie przykłady kodu w tej książce zostały opracowane w języku Python i są przeznaczone do uruchomienia w środowisku Jupyter Notebook (https://jupyter.org) lub Google Colab (https://colab.research.google.com). Poruszone w niej zagadnienia można przenieść na język JavaScript lub dowolny inny preferowany — pamiętaj przy tym, że skupiamy się tu przede wszystkim na technikach promptowania, a nie na programowaniu samym w sobie. Wszystkie przykłady znajdziesz pod adresem https://ftp.helion.pl/przyklady/skuinz.zip. Pracując nad przykładami z tej książki, warto korzystać ze wspomnianego repozytorium i uruchamiać kody w trakcie lektury.

W przypadku przykładów wykraczających poza notatniki Jupyter skrypty możesz uruchamiać w swoim terminalu (wierszu poleceń) za pomocą polecenia python tresc/rozdzial_x/skrypt.py, gdzie x to numer rozdziału, a skrypt.py to nazwa pliku ze skryptem. W niektórych przypadkach klucze API muszą być ustawione jako zmienne środowiskowe — będziemy o tym przypominali. Pakiety (zależności) stosowane w przykładach są często aktualizowane, dlatego upewnij się, że przed uruchomieniem przykładu w swoim wirtualnym środowisku masz zainstalowane najnowsze zależności z pliku requirements.txt (https://oreil.ly/BPreq).

Plik requirements.txt jest wygenerowany dla Pythona w wersji 3.9. Jeśli chcesz skorzystać z innej wersji Pythona, możesz wygenerować plik requirements.txt na podstawie pliku requirements.in, który znajdziesz w naszym repozytorium, przez uruchomienie poniższego polecenia:

pip install pip-tools

pip-compile requirements.in

Jeśli używasz komputera z systemem macOS, wykonaj następujące polecenia:

1. Otwórz Terminal — znajdziesz go w folderze Aplikacje; możesz go też wyszukać za pomocą funkcji Spotlight.

2. Przejdź do katalogu projektu — skorzystaj z polecenia cd, aby zmienić katalog na katalog projektu, np. cd sciezka/do/twojego/projektu.

3. Utwórz środowisko wirtualne — wykonaj poniższe polecenie, aby utworzyć środowisko wirtualne o nazwie venv: python3 -m venv venv.

4. Włącz środowisko wirtualne — przed zainstalowaniem pakietów musisz włączyć (aktywować) środowisko wirtualne. W tym celu uruchom polecenie source venv/bin/activate.

5. Zainstaluj pakiety — po włączeniu środowiska wirtualnego możesz zainstalować pakiety za pomocą polecenia pip. Aby zainstalować pakiety z pliku requirements.txt, wykonaj polecenie pip install -r requirements.txt.

6. Wyłącz środowisko wirtualne — po zakończeniu pracy możesz wyłączyć środowisko wirtualne poleceniem deactivate.

Jeśli używasz komputera z systemem Windows:

1. Uruchom wiersz polecenia — wystarczy wyszukać polecenie cmd w menu Start.

2. Przejdź do katalogu projektu — aby zmienić bieżący katalog na katalog projektu, skorzystaj z polecenia cd, np. cd sciezka\do\twojego\projektu.

3. Utwórz środowisko wirtualne — wykonaj poniższe polecenie, aby utworzyć środowisko wirtualne o nazwie venv: python -m venv venv.

4. Włącz środowisko wirtualne — przed zainstalowaniem pakietów musisz włączyć (aktywować) środowisko wirtualne. W tym celu uruchom polecenie .\venv\Scripts\activate.

5. Zainstaluj pakiety — aby zainstalować pakiety z pliku requirements.txt, wykonaj polecenie pip install -r requirements.txt.

6. Wyłącz środowisko wirtualne — po zakończeniu pracy możesz wyłączyć środowisko wirtualne poleceniem deactivate.

W tym miejscu mamy dla Ciebie jeszcze kilka wskazówek:

- Zawsze sprawdzaj, czy Twoja wersja Pythona jest aktualna — unikniesz w ten sposób problemów z kompatybilnością.

- Pamiętaj, aby aktywować swoje środowisko wirtualne zawsze, gdy chcesz pracować nad projektem.

- Plik requirements.txt powinien znajdować się w tym samym katalogu, co Twoje środowisko wirtualne — alternatywnie możesz określić ścieżkę do niego za pomocą polecenia pip install -r.

W tej książce zakładamy, że masz dostęp do konta deweloperskiego OpenAI, ponieważ zmienna środowiskowa OPENAI_API_KEY, zawierająca prawidłowy klucz dostępu, musi być ustawiona we wszelkich przykładach, w których importujemy bibliotekę OpenAI. Krótki przewodnik konfigurowania środowiska deweloperskiego znajdziesz w dokumentacji OpenAI (https://oreil.ly/YqbrY).

Jeśli chcesz uruchamiać przykłady zawarte w tej książce, musisz także pamiętać o włączeniu rozliczeń (ang. billing) na swoim koncie OpenAI, a także o dodaniu działającej metody płatności. W przykładach, o ile nie określono inaczej, korzystamy z modelu GPT-4 — w niektórych przykładach korzystamy także z modelu Claude 3 (https://oreil.ly/jY8Ai), otwartego modelu Llama 3 (https://oreil.ly/BbXZ3) firmy Meta oraz Google Gemini (https://oreil.ly/KYgij).

Do generowania obrazów korzystamy z biblioteki Midjourney (https://www.midjourney.com), która do rejestracji wymaga konta Discord. Te same zasady dotyczą usługi DALL-E 3 (dostępna za pomocą subskrypcji ChatGPT Plus lub z użyciem API), a także Stable Diffusion (dostępne za pomocą API pod adresem https://oreil.ly/cmTtW lub do uruchomienia na własnym komputerze — https://oreil.ly/Ha0T5 — o ile dysponujesz odpowiednio przystosowaną kartą graficzną GPU). W przykładach dotyczących generowania obrazów w tej książce korzystamy z Midjourney v6, Stable Diffusion v1.5 (ze względu na fakt, że wiele rozszerzeń wciąż jest zgodnych tylko z tą wersją) lub Stable Diffusion XL (https://oreil.ly/S0P4s). Wspominamy o różnicach między tymi modelami tam, gdzie ma to faktyczne znaczenie.

Przedstawiamy przykłady z zastosowaniem bibliotek otwartych tam, gdzie jest to możliwe, choć zarazem niekiedy dołączamy rozwiązania komercyjne — np. w rozdziale 5. w przypadku wektorowych baz danych przedstawiamy zarówno FAISS (bibliotekę otwartą), jak i Pinecone (płatne rozwiązanie zewnętrznego dostawcy). Przykłady w tej książce można z łatwością zmieniać w celu użycia alternatywnych modeli czy rozwiązań dostawców, a zdobyte umiejętności nie dotyczą tylko jednego rozwiązania. W rozdziale 4., dotyczącym zaawansowanego generowania tekstu, koncentrujemy się na bibliotece LLM o nazwie LangChain, a w rozdziale 9. zaawansowany mechanizm generowania obrazów został skonstruowany na podstawie biblioteki Stable Diffusion Web UI autorstwa użytkownika AUTOMATIC1111 z serwisu GitHub.

Konwencje typograficzne

W tej książce stosujemy następujące konwencje typograficzne:

Wyróżnienie

Oznacza adresy URL, adresy e-mail, nazwy plików i rozszerzenia.

Pogrubienie

Jest używane do wprowadzenia nowych pojęć.

Stała szerokość znaków

Jest stosowana do fragmentów kodu pojawiających się w treści tekstu i w listingach.

Stała szerokość znaków z pogrubieniem

Jest stosowana do poleceń lub innych tekstów wprowadzanych bezpośrednio przez użytkownika.

Stała szerokość znaków z kursywą

Jest stosowana do tekstu, który powinien być podmieniony przez wartości podane przez użytkownika lub wartości wynikające z kontekstu.

Ten element oznacza wskazówkę lub sugestię.

Ten element przedstawia ogólną informację.

Ten element sugeruje zachowanie ostrożności.

W treści książki często odwołujemy się do pięciu zasad promptowania, wskazując, która z reguł jest w danej chwili najbardziej przydatna. W rozdziale 1. szczegółowo omawiamy treść tych reguł.

Nazwa reguły

W tym miejscu dowiesz się, jakie zastosowanie dana reguła ma w omawianej sytuacji.

Przykładowe kody

Wszelkie materiały dodatkowe (przykładowe kody, ćwiczenia, itd.) są dostępne do pobrania pod adresem https://ftp.helion.pl/przyklady/skuinz.zip.

Książka ta ma pomóc Ci w pracy. Ogólnie rzecz biorąc, kodu znajdującego się w tej książce można używać we własnych programach i dokumentacjach bez proszenia kogokolwiek o zgodę, chyba że wykorzystasz duże fragmenty. Jeśli np. w pisanym programie użyjesz kilku fragmentów kodu z tej książki, nie musisz pytać o pozwolenie. Aby sprzedawać i rozprowadzać płyty CD-ROM z przykładami, trzeba mieć zezwolenie. Aby odpowiedzieć komuś na pytanie, cytując fragment tej książki wraz z kodem źródłowym, nie trzeba mieć zezwolenia. Aby wykorzystać dużą ilość kodu źródłowego z tej książki w dokumentacji własnego produktu, trzeba mieć pozwolenie.

Informacje o źródle użytych fragmentów są mile widziane, ale nie wymagane. Notka powinna zawierać nazwisko autora, tytuł publikacji, nazwę wydawcy oraz datę i miejsce publikacji, np. James Phoenix, Mike Taylor, Skuteczna inżynieria promptów, Helion, Gliwice 2025.

Podziękowania

W tym miejscu chcielibyśmy podziękować osobom, które wsparły nas w procesie recenzji technicznej tej książki, w szczególności za ich cierpliwość w dostosowywaniu treści książki do szybko zmieniającej się sytuacji w świecie sztucznej inteligencji. Oto one:

- Mayo Oshin, wczesny kontrybutor technologii LangChain, a także założyciel firmy SeinnAI Analytics (https://www.siennaianalytics.com),

- Ellis Crosby, założyciel Scarlett Panda (https://www.scarlettpanda.com) i agencji AI Incremen.to (https://incremen.to),

- Dave Pawson, autor książki „XSL-FO”, wydanej przez O’Reilly (https://oreil.ly/XSL-FO),

- Mark Phoenix, starszy inżynier oprogramowania,

- Aditya Goel, konsultant generatywnej sztucznej inteligencji.

Jesteśmy także wdzięczni naszym rodzinom za ich cierpliwość i zrozumienie. Chcielibyśmy też je zapewnić, że wciąż wolimy rozmawiać z nimi — a nie z ChatGPT.

Rozdział 1.
Pięć zasad promptowania

Inżynieria promptów (ang. prompt engineering ) to proces odkrywania i opracowywania promptów, które generują użyteczne i pożądane wyniki.

Prompt (nazywany też monitem) to informacja, zazwyczaj tekstowa, którą przekazujesz do modelu AI, takiego jak ChatGPT czy Midjourney. Prompt stanowi zestaw instrukcji, dzięki którym model może wygenerować pożądaną odpowiedź — tekst w przypadku dużych modeli językowych (ang. large language models , LLM) używanych w ramach usługi ChatGPT ( https://chat.openai .com ) lub obrazy w przypadku modeli dyfuzyjnych (ang. diffusion models ), takich jak Midjourney ( https://www.midjourney.com ).

Oto prosty przykład prompta, który pomoże nam wygenerować nazwę produktu (zainspirowaliśmy się w tym przypadku jednym z przykładów OpenAI — https://oreil.ly/Fc8cq ). Wejście to tekst przekazany przez nas, a wyjście — efekt działania ChatGPT:

Wejście:

Czy możesz wymyślić listę nazw dla butów, które mogą pasować do dowolnego rozmiaru stopy, w języku polskim?

Wyjście:

1. Uniwersalne Stopy

2. Komfort Bez Rozmiaru

3. Magiczne Buty

4. Nieskończony Komfort

5. Wszechstronne Wkładki

6. Bezgraniczne Buty

7. Wszystko-w-jednym

8. Wszystkie Stopy

9. Rozciągliwe Elegancje

10. Styl Bez Granic

11. Fantastyczne FitButy

12. Buty dla Wszystkich

13. HarmonyFit

14. Uniwersalne Eleganckie

15. Komfortowo Bez Granic

Jak na tak prosty prompt, otrzymaliśmy niezwykle dobrą odpowiedź; efekt wydaje się niemal magiczny, zważywszy na to, jak mało wysiłku włożyliśmy w przygotowanie prompta. Ze względu na fakt, że modele najnowszej generacji wciąż są udoskonalane, prawdopodobieństwo uzyskania wystarczająco dobrych wyników już przy pierwszej próbie ciągle rośnie. W przypadku wielu interakcji z modelem AI, gdy nie planujesz wykonywania tego samego zadania wiele razy, takie proste podejście często okazuje się wystarczające.

Jeśli jednak chcesz skorzystać z tego prompta w warunkach produkcyjnych, na pewno warto włożyć więcej pracy w uzyskane efekty. Błędnie skonstruowany prompt będzie Cię kosztować nie tylko z powodu opłat wydanych na skorzystanie z usługi — tym większych, im dłuższe prompty i odpowiedzi przekazujesz, ale także ze względu na czas poświęcony na poprawianie błędów. Jeśli chcesz stworzyć generator nazw produktów dla tysięcy użytkowników, na pewno warto poświęcić czas na rozwiązanie następujących problemów:

Nieprecyzyjne instrukcje

Nie informujesz AI o stylu nazwy, jaki chcesz uzyskać, a także jakimi atrybutami taka nazwa powinna się odznaczać. Czy oczekujesz podania jednego słowa, a może kilku? Czy słowa mogą być wymyślone, czy powinny istnieć w języku polskim? Czy chcesz, aby AI spróbowała wygenerować nazwy podobne do tych, które tworzył ktoś, kto był znany z wymyślania świetnych nazw produktów?

Niesformatowane wyjście

W tym przypadku wygenerowana została lista nazw po jednej w każdym wierszu, o nieokreślonej długości (liczbie znaków). Jeśli uruchomisz ten prompt wiele razy, z pewnością zdarzy Ci się otrzymać listę numerowaną albo zawierającą tekst na początku odpowiedzi, co z pewnością utrudni jego przetworzenie w sposób automatyczny.

Brakujące przykłady

Nie określono żadnych przykładów dobrych nazw, które mogłyby stanowić inspirację dla modelu AI. W związku z tym odpowiedzi są tworzone na podstawie danych treningowych, czyli tak naprawdę na podstawie całego Internetu (z całą jego specyfiką). Czy jednak to jest to, co chcesz uzyskać? Zdecydowanie lepiej jest przedstawić przykłady dobrych lub popularnych nazw w danej branży albo po prostu nazw, które Ci się podobają.

Ograniczona metoda oceny

Nie dysponujesz żadną spójną ani skalowalną metodą oceny nazw — które są dobre, a które złe — dlatego każdą z odpowiedzi musisz oceniać ręcznie. Opracowanie mechanizmu oceny pomoże zoptymalizować prompty, aby uzyskiwać coraz lepsze wyniki i określać, jak często model AI się myli.

Brak podziału zadań

W tym przykładzie sporo się spodziewasz po pojedynczym prompcie. Przy wymyślaniu nazw produktów trzeba pamiętać o wielu różnych czynnikach, a w tym momencie niezwykle ważne zadanie zostało oddelegowane do modelu AI w jednej próbie, bez doprecyzowania zadania ani przeanalizowania tego, w jaki sposób zadanie jest wykonywane przez model dla Ciebie.

Rozwiązanie tych problemów jest podstawę do opracowania zasad, które będziemy stosować w dalszej części tej książki. Istnieje wiele różnych metod sformułowania zadania dla modelu AI, a nawet najmniejsze zmiany w opracowaniu prompta mogą spowodować duże różnice. Duże modele językowe działają, przewidując następny token (w języku angielskim jeden token odpowiada średnio mniej więcej 3/ 4 słowa, natomiast w języku polskim przeciętny token stanowi mniejszą część przeciętnego słowa, m.in. ze względu na występowanie znaków diakrytycznych) z użyciem treści zawartej w Twoim prompcie. Każdy kolejny token jest wybierany na podstawie prawdopodobieństwa jego wystąpienia w odniesieniu do już istniejącej treści — przy czym w doborze tokena jest uwzględniana również losowość (za pomocą parametru nazywanego temperaturą).

Duże modele językowe trenuje się w zasadzie na całej zawartości tekstowej Internetu, po czym dostraja się je (ang. fine-tuned), by mogły odpowiadać na konkretne problemy. Przeciętny prompt pozwala na uzyskanie przeciętnych odpowiedzi, co często wywołuje wrażenie, że technologia ta nie zasługuje na takie uznanie. To, co umieścisz w prompcie, zmienia prawdopodobieństwo wygenerowania wszystkich kolejnych słów, dlatego tak ważne jest jego prawidłowe skonstruowanie. Duże modele językowe widziały zarówno te najlepsze, jak i najgorsze wytwory człowieka, dlatego też są w stanie wygenerować niemal wszystko — o ile dobrze skonstruujesz prośbę. OpenAI nalicza opłaty na podstawie liczby użytych tokenów ( https://openai.com/pricing ) zarówno w treści prompta, jak i odpowiedzi, dlatego inżynierowie promptów muszą umieć optymalizować prompty nie tylko pod kątem jakości i stabilności, ale także kosztu.

Teraz powrócimy do pierwszego przykładu, ale po zastosowaniu szeregu dodatkowych technik inżynierii promptów. Poprosimy o nazwy w stylu zgodnym z założeniami Steve’a Jobsa, zaznaczając, że chcemy uzyskać listę przedzieloną przecinkami, przedstawiając także przykłady dobrych nazw.

Wejście:

Czy możesz wymyślić listę nazw dla butów, które mogą pasować do dowolnego rozmiaru stopy, w języku polskim tak, jakby zaproponował je Steve Jobs?

Zwróć wyniki w postaci listy przedzielonej przecinkami, w następującym formacie:

Opis produktu: But, który pasuje do dowolnego rozmiaru stopy

Nazwy produktów: [lista trzech nazw produktów]

## Przykłady

Opis produktu: Lodówka, która wydaje piwo

Nazwy produktów: iBarFridge, iFridgeBeer, iDrinkBeerFridge

Opis produktu: Zegarek, który podaje dokładny czas w przestrzeni kosmicznej

Nazwy produktów: iNaut, iSpace, iTime

Opis produktu: Automat do przygotowania mlecznych koktajli w domu

Nazwy produktów: iShake, iSmoothie, iShake Mini

Wyjście:

Opis produktu: But, który pasuje do dowolnego rozmiaru stopy

Nazwy produktów: iFit, iShoe, iFlex

Choć żaden prompt nie jest doskonały, ten konkretny jest zoptymalizowany pod kątem stabilnego generowania dobrych nazw produktów we właściwym formacie. Użytkownik Twojego generatora może wybrać kogokolwiek innego — niekoniecznie Steve’a Jobsa — aby uzyskać pożądane przez siebie nazwy. Zawsze można zmienić format odpowiedzi, a wyjście tego prompta może stać się wejściem następnego. Przykłady zawarte w treści prompta warto co jakiś czas zmieniać, opierając się na informacjach zwrotnych od użytkowników, dzięki czemu Twój system z czasem będzie coraz bardziej inteligentny.

Omówienie pięciu zasad promptowania

Proces optymalizacji poprzedniego prompta był zgodny z pięcioma zasadami promptowania , których dokładną analizą będziemy się zajmować przez resztę tego rozdziału — a odwoływać się do tych zasad będziemy już do końca książki. Pięć zasad dotyczy pięciu problemów, o których wspomnieliśmy podczas analizy naszego pierwszego, trywialnego prompta. Odwołania w pozostałych rozdziałach pozwolą Ci lepiej zrozumieć, jak zasady te stosuje się w praktyce. Pięć zasad promptowania brzmi następująco:

Określ wytyczne

Opisz styl, w jakim chcesz uzyskać odpowiedź, lub odnieś się do osoby, którą chcesz się zainspirować.

Określ format odpowiedzi

Sprecyzuj reguły i strukturę, zgodnie z którymi ma zostać wygenerowana odpowiedź.

Przedstaw przykłady

Przedstaw zróżnicowany zbiór przykładów, które można określić mianem właściwych odpowiedzi na zadany prompt.

Oceniaj jakość

Znajdź błędy i oceniaj jakość odpowiedzi, weryfikując, co zwiększa wydajność.

Dziel pracę

Podziel dane zadanie na wiele kroków, które po połączeniu będą w stanie właściwie osiągać złożone cele.

Przedstawione reguły nie są jedynie prostymi wskazówkami czy trikami — stanowią one powszechnie uznane zasady, które są przydatne w pracy z dowolną inteligencją, zarówno tą sztuczną, jak i biologiczną. Reguły te są niezależne od modelu i powinny usprawniać Twoje prompty niezależnie od tego, czy generujesz tekst czy też obrazy. Po raz pierwszy opublikowaliśmy te reguły w lipcu 2022 r. w poście Prompt Engineering: From Words to Art and Copy („Inżynieria promptów: od słów do sztuki i kopiowania” — https://oreil. ly/RYYiV ) i od tamtej pory nie musieliśmy ich zmieniać — można powiedzieć, że przetrwały próbę czasu. Co więcej, podobne wytyczne OpenAI przedstawiła w Prompt Engineering Guide („Podręcznik inżynierii promptów”, https:// oreil.ly/dF8q- ), wydanym rok później. Każdy, kto pracuje ściśle z modelami generatywnej sztucznej inteligencji, z pewnością prędzej czy później dojdzie do tych samych wniosków i strategii rozwiązania typowych problemów. W niniejszej książce omawiamy setki przykładów, dzięki którym będziesz mógł usprawnić swoje prompty.

Udostępniliśmy jednostronicowe dokumenty do pobrania, przydatne w generowaniu tekstu i grafiki, które możesz traktować jako listę tematów do sprawdzenia, gdy chcesz wdrażać w praktyce przedstawione zasady. Dokumenty te opracowaliśmy w ramach popularnego kursu w serwisie Udemy — The Complete Prompt Engineering for AI Bootcamp („Inżynieria promptów dla AI” — https://oreil.ly/V40zg ). Ponad 70 tysięcy studentów skorzystało z tego kursu, poznając te same zasady, ale w ramach innych treści niż te przedstawione w tej książce:

- generowanie tekstu: https :// oreil . ly / VCcgy ,

- generowanie obrazu: https://oreil.ly/q7wQF .

Pięć zasad promptowania działa równie dobrze w przypadku obrazów. Zademonstrujemy teraz, jak zastosować każdą z pięciu zasad w konkretnym przykładzie generowania obrazów. Skopiuj i wklej cały prompt wejściowy do bota Midjourney w usłudze Discord, pamiętając o łączu do obrazka na samym początku. Całość wpisz za poleceniem /imagine , które spowoduje wyświetlenie pola do wpisania prompta. Aby wykonać ten przykład, musisz mieć darmowe konto Discord ( https://discord.com ), a także płatne konto Midjourney ( https://www.midjourney.com ).

Wejście:

https://s.mj.run/TKAsyhNiKmc stockowe zdjęcie spotkania biznesowego czterech osób patrzących na jednego białego MacBooka leżącego na szklanym stoliku, Panasonic, DC-GH5

Efekt działania prompta jest pokazany na rysunku 1.1 .

Rysunek 1.1. Standardowe zdjęcie spotkania biznesowego

Przedstawiony prompt korzysta z możliwości pobrania przykładowego obrazka bazowego przez usługę Midjourney — to właśnie dlatego w treści prompta znalazł się adres URL ( https://s.mj. run/TKAsyhNiKmc ). Skorzystaliśmy z darmowego serwisu ze zdjęciami wolnymi od tantiem — Unsplash ( rysunek 1.2 ). Jeśli w momencie uruchomienia prompta otrzymasz komunikat o błędzie, spróbuj wysłać obrazek samodzielnie lub zapoznaj się z dokumentacją Midjourney ( https://oreil.ly/UTxpX ) i sprawdź, czy nie zmieniły się wytyczne dotyczące formatowania.

Rysunek 1.2. Zdjęcie autorstwa Mimi Thian w serwisie Unsplash ( https :// oreil . ly / J4Hkr )

Porównajmy efekt uzyskany na podstawie tego dobrze przygotowanego prompta z tym, co uzyskasz z serwisu Midjourney, jeśli poprosisz o standardowe zdjęcie w najprostszy możliwy sposób. Rysunek 1.3 przedstawia przykład tego, co osiągniesz bez zastosowania zasad inżynierii promptów. Będzie to najprawdopodobniej obraz o ciemniejszej kolorystyce i nieco innym stylu niż ten, którego oczekiwałbyś od standardowego (stockowego) zdjęcia.

Wejście:

Ludzie na spotkaniu biznesowym

Efekt działania tego prompta jest pokazany na rysunku 1.3 .

Rysunek 1.3. Ludzie na spotkaniu biznesowym

Warto pamiętać, że w Midjourney występuje mechanizm informacji zwrotnej od społeczności — gdy użytkownicy wybierają obrazek do przeskalowania do wyższej rozdzielczości. Wybory użytkowników mogą być użyte do trenowania modeli. Ten mechanizm powoduje powstanie pewnej skłonności (ang. bias ) w kierunku stylistyki fantasy , co mniej odpowiada naszym wymaganiom dotyczącym standardowego charakteru zdjęcia (na szczęście w Midjourney v5 problem ten zdaje się występować w mniejszej skali). Pierwsi użytkownicy Midjourney pochodzili ze świata sztuki cyfrowej, która w naturalny sposób często nawiązuje do stylistyki fantasy i science fiction, co z kolei miało wpływ na stylistykę generowanych obrazów.

Przykłady tekstowe zawarte w tej książce są zgodne z usługą ChatGPT Plus (model GPT-4), a przykłady obrazkowe — z Midjourney v6 i Stable Diffusion XL. W miejscach, w których wersja modelu ma szczególne znaczenie, będziemy o tym wspominać. Te podstawowe modele należą do najnowszych zdobyczy techniki w zakresie modeli generatywnej sztucznej inteligencji i dobrze radzą sobie z szerokim zakresem zadań. Przedstawione zasady opracowano tak, aby dobrze zniosły próbę czasu, dlatego jeśli czytasz tę książkę w czasach np. GPT-5, Midjourney v7 lub Stable Diffusion XXL albo korzystasz z zupełnie innego dostawcy, np. Google — nasze reguły wciąż powinny być przydatne.

1. Określ wytyczne

Jednym z problemów trywialnego promptowania w poprzednim przykładzie było pominięcie rodzajów nazw produktów, które chcieliśmy uzyskać. Nazywanie produktów jest kwestią poniekąd subiektywną i jeżeli nie damy modelowi AI próbki tego, co chcielibyśmy uzyskać, szansa na osiągnięcie właściwych wyników nie będzie wysoka.

Warto zauważyć, że człowiek również miałby problem z właściwym wykonaniem zadania, jeśli nie otrzymałby zestawu wytycznych (ang. brief ), czego agencje kreatywne czy brandingowe na ogół wymagają, zanim podejmą się realizacji jakiegoś zlecenia.

Choć nie jest to może najlepsze porównanie, jeśli nie wiesz, co dołączyć do prompta, warto, żebyś sobie wyobraził, jakich informacji oczekiwałby od Ciebie człowiek przed wykonaniem danego zadania.

W przykładowym prompcie przekazaliśmy wytyczne przez odgrywanie ról (ang. role-playing ): nakazaliśmy naśladowanie stylu Steve’a Jobsa, znanego z tworzenia zapadających w pamięć i znanych nazw produktów. Jeśli zmienimy osobę na kogoś, kto także może występować w danych treningowych (a także przekazując przykłady uwzględniające ten inny styl), otrzymamy znacząco inne wyniki.

Wejście:

Czy możesz wymyślić listę nazw dla butów, które mogą pasować do dowolnego rozmiaru stopy w języku polskim, tak, jakby zaproponował je Elon Musk?

Zwróć wyniki w postaci listy przedzielonej przecinkami, w następującym formacie:

Opis produktu: But, który pasuje do dowolnego rozmiaru stopy

Nazwy produktów: [lista trzech nazw produktów]

## Przykłady

Opis produktu: Lodówka, która wydaje piwo

Nazwy produktów: Teslacool, FridgeX, Neuradink

Opis produktu: Zegarek, który podaje dokładny czas w przestrzeni kosmicznej

Nazwy produktów: WatchX, iSpace, The Watch Company

Opis produktu: Automat do przygotowania mlecznych koktajli w domu

Nazwy produktów: ShakeX, The Milkshake Company, HyperShake

Wyjście:

Opis produktu: But, który pasuje do dowolnego rozmiaru stopy

Nazwy produktów: FeetX, Spacewalk, OmniFit

Warto pamiętać, że do prompta możesz dołączyć pewne dodatkowe instrukcje, które mogą poprowadzić model AI w stronę właściwej nazwy. Technika ta nosi nazwę rozgrzewania (ang. prewarming ) lub wewnętrznego pozyskania (ang. internal retrieval ) i jest ona prosta, ale skuteczna [Liu et al., 2021 ( http:// oreil.ly/1lqzK )]. Rozpoczęcie konwersacji prośbą o przedstawienie najlepszych praktyk, a następnie nakazanie postępowania zgodnie z tymi praktykami może znacząco pomóc. Można powiedzieć, że prosisz model o wygenerowanie swoich własnych wytycznych.

Wejście:

Przedstaw mi 5 wskazówek w zakresie nazywania produktów na podstawie opinii ekspertów.

Wyjście:

1. Siła prostoty: Im prostsza nazwa, tym lepiej. Łatwe do wymówienia i zapamiętania nazwy są zwykle bardziej skuteczne. Unikaj skomplikowanych słów czy zapożyczeń z obcych języków, które mogą tylko zniechęcić potencjalnego klienta.

...

5. Sprawdź dostępność domeny: Przed określeniem ostatecznej nazwy produktu, sprawdź, czy jest dostępna odpowiednia domena internetowa. To ważne, jeśli planujesz tworzenie strony internetowej lub sklepu online dedykowanego temu produktowi.

Następnie, w tym samym oknie konwersacji, w którym model dysponuje już kontekstem zawierającym poprzednie porady, przedstaw swój początkowy prompt z zadaniem, które chcesz zrealizować.

Wejście:

Korzystając z wcześniejszych porad, czy możesz wygenerować listę nazw produktów dla butów, które pasują do dowolnego rozmiaru stopy, w języku polskim?

Wyjście:

Oczywiście, oto kilka propozycji:

1. RozmiarOptymalny

2. UniRozmiar

...

9. ButyDlaWszystkich

10. ZmieniaRozmiar

Pamiętaj jednak, że niektóre z tych nazw mogą być już używane przez inne firmy. Przed podjęciem ostatecznej decyzji, zawsze zaleca się przeprowadzenie dogłębnego badania.

Innym podejściem, które jak wynika z naszego doświadczenia, warto zastosować, jest uwzględnienie najlepszej dostępnej porady dla danego zadania i wstawienie jej w kontekst prompta. Możesz skorzystać np. z artykułu 5 Golden Rules („5 złotych reguł”) firmy Brandwatch ( https://oreil.ly/3bWjz ) lub innego zaufanego, sprawdzonego źródła, a następnie wstawić te reguły w treść prompta. W ten sposób znacząco zwiększysz jego rozmiar — co wygeneruje dodatkowe koszty (jeżeli będziesz korzystać z API jako programista), ale być może warto ponieść taki koszt, jeżeli zaowocuje to zwiększeniem jakości odpowiedzi.

Wejście:

Czy możesz wygenerować listę nazw produktów dla butów, które pasują do dowolnego rozmiaru stopy, w języku polskim? Zastosuj przy tym następujące pięć reguł:

1. It should be readable and writable

If your product name is hard to pronounce, people won’t talk about it and if they can’t write it down (and spell it correctly!) when they hear it, how do you expect them to Google it?

Keep it simple and don’t go with any wacky spellings just for the sake of it.

...

5. It should evoke an emotion, feeling or idea

Your product name should tie back into what your product is, what the feeling you want people to have when experiencing your product is, and/or what idea are you trying to get across.

It should be emotive and inspiring.

Wyjście [1] :

Oto kilka przykładów nazw produktów dla butów, które pasują do dowolnego rozmiaru stopy, zgodnie z podanymi wytycznymi:

1. "DopasujStopę"

2. "UniROZMIAR"

...

9. "SzyteNaWyrost"

10. "PasujeJakUlane"

Wszystkie te nazwy są proste, łatwe do zrozumienia i wymówienia. Są unikalne dla branży. Nie są długie, więc łatwo je zapamiętać. Brzmią dobrze, kiedy są wymawiane na głos, i wywołują emocje lub uczucie, które jest związane z produktem.

Istnieje także wiele innych metod określania wytycznych. W przypadku generowania obrazów określiliśmy, że spotkanie biznesowe toczy się przy szklanym stole. Jeśli zmienisz ten jeden szczegół, możesz otrzymać zupełnie inny obraz, jak na rysunku 1.4.

Wejście:

https://s.mj.run/TKAsyhNiKmc stockowe zdjęcie spotkania biznesowego czterech osób zgromadzonych w lesie, Panasonic, DC-GH5.

Na rysunku 1.4 jest pokazane wyjście prompta.

Rysunek 1.4. Standardowe zdjęcie spotkania biznesowego w lesie

Odgrywanie ról ma duże znaczenie zwłaszcza w generowaniu obrazów i dzięki niemu możesz z łatwością poinstruować Midjourney przez podanie mu imienia i nazwiska malarza lub nazwy stylu malarskiego, który ma zastosować. Jednym z artystów, którymi często inspirują się twórcy AI, jest Vincent van Gogh, znany ze swoich śmiałych, intensywnych pociągnięć pędzlem i użycia żywych kolorów. Spójrzmy, co się stanie, gdy uwzględnimy go w prompcie ( rysunek 1.5 ).

Wejście [2] :

people in a business meeting, by Van Gogh

(Ludzie na spotkaniu biznesowym, w stylu van Gogha)

Na rysunku 1.5 jest pokazane wyjście.

Rysunek 1.5. Ludzie na spotkaniu biznesowym, w stylu van Gogha

Aby ostatni prompt zadziałał, musimy usunąć wiele pozostałych wytycznych. Przede wszystkim usuwamy obraz bazowy, a także sformułowanie standardowe zdjęcie , podobnie jak odwołanie do aparatu — Panasonic , model DC-GH5 . W ten sposób ułatwimy modelowi uzyskanie obrazka w stylu van Gogha. Umieszczenie w prompcie zbyt wielu wytycznych może doprowadzić do powstania konfliktu w działaniu modelu — uzyska on kombinację parametrów, których nie da się sensownie rozwiązać. Jeśli Twój prompt jest zbyt dokładny, model może nie znaleźć zbyt wielu pasujących danych treningowych do wygenerowania obrazka, który byłby zgodny ze wszystkimi wytycznymi. W tym przypadku musisz ustalić, która z wytycznych jest ważniejsza — tutaj zostawiliśmy tylko odwołanie do van Gogha.

Wytyczne stanowią jedną z najczęściej stosowanych zasad. Czasami zasada ta sprowadzi się do użycia właściwego opisu w celu doprecyzowania swoich intencji lub wskazania osób, którymi należy się inspirować przy generowaniu odpowiedzi. Nie należy przy tym przesadzać — choć zbyt dużo wytycznych ograniczy kreatywność modelu, znacznie częstszym problemem jest przekazanie zbyt małej ich liczby.

2. Określ format odpowiedzi

Modele AI potrafią swobodnie tłumaczyć treści. Oznacza to nie tylko umiejętność tłumaczenia z języka francuskiego na angielski, urdu lub klingoński, ale także zdolność do przekształcania struktur danych, np. z formatu JSON na YAML lub z języka naturalnego na kod Pythona. Modele te są w stanie wygenerować odpowiedź niemal w każdym formacie, dlatego ważnym aspektem inżynierii promptów jest właściwe określenie, w jakim formacie ma być przedstawiona odpowiedź.

Od czasu do czasu zauważysz, że wykonanie tego samego prompta potrafi skutkować otrzymaniem odpowiedzi w różnych formatach — np. jako listy numerowanej, a nie w formacie przedzielanym przecinkami. Często nie jest to problem, ponieważ prompty są wykonywane pojedynczo, bezpośrednio w konwersacji z usługami takimi, jak ChatGPT czy Midjourney. Jeśli jednak zamierzasz włączyć AI w skład większej całości, jakiegoś złożonego systemu, to nieścisłości w formacie odpowiedzi potrafią doprowadzić do różnego rodzaju błędów.

Podobnie jak w pracy z ludźmi, możesz uniknąć tego rodzaju problemów, jeśli określisz format, w jakim ma być przedstawiona odpowiedź. W przypadku modeli tekstowych z reguły lepiej jest poprosić o wygenerowanie dokumentu w formacie JSON zamiast zwykłej listy numerowanej, format ten jest bowiem powszechnie stosowany przy generowaniu odpowiedzi przez różnorodne API, co znacząco ułatwi parsowanie i odnotowanie ewentualnych błędów, jak również późniejsze wygenerowanie kodu HTML w Twojej aplikacji. Innym popularnym formatem danych jest YAML, ponieważ może on być łatwo przetwarzany w sposób automatyczny, przy zachowaniu dużej czytelności dla ludzi.

W oryginalnym prompcie załączyliśmy przykłady w ramach wytycznych, a dwukropek na końcu prompta sugerował, że w odpowiedzi powinna zostać wstawiona lista. Aby zmienić format odpowiedzi na JSON, musisz zmienić obie części prompta, a także zostawić dokument JSON do uzupełnienia, dzięki czemu model GPT-4 będzie wiedział, że wymaga on uzupełnienia.

Wejście:

Zwróć listę nazw produktów, oddzielonych przecinkami w formacie JSON, dla zapytania „Buty, które mogą pasować do dowolnego rozmiaru stopy”. Zwróć tylko dane JSON.

Przykłady:

[{

"Opis produktu": "Automat do przygotowania mlecznych koktajli w domu.",

"Nazwy produktów": ["HomeShaker", "Fit Shaker", "QuickShake", "Shake Maker"]

},

{

"Opis produktu": " Zegarek, który podaje dokładny czas w przestrzeni kosmicznej ",

"Nazwy produktów": ["AstroTime", "SpaceGuard", "Orbit-Accurate", "EliptoTime"]

}

]

Wyjście:

[{

"Opis produktu": "Buty, które mogą pasować do dowolnego rozmiaru stopy.",

"Nazwy produktów": ["FlexFit", "One4All-Boot", "UniShoer", "StepPerfect", "FootEase"]

}]

Wyjście, które otrzymujemy, stanowi dokument w formacie JSON z uzupełnionymi nazwami produktów. Może on być następnie przetworzony w sposób automatyczny, np. z poziomu kodu programu — w aplikacji lub skrypcie. W tym momencie bardzo łatwo można sprawdzić, czy w wygenerowanym kodzie są jakieś błędy — wystarczy skorzystać np. ze standardowej biblioteki json w języku Python. Błędnie sformatowany dokument JSON spowoduje powstanie błędu parsowania, co z kolei może spowodować ponowne odpytanie modelu AI z prośbą o prawidłowy dokument JSON. Jeśli po kolejnych próbach format odpowiedzi wciąż jest nieprawidłowy, warto załączyć na początku lub na końcu prompta — ewentualnie w ramach wiadomości systemowej, jeśli korzystasz z modelu czata — Jesteś pomocnym asystentem, który odpowiada tylko w formacie JSON . Można też określić w parametrach modelu format wyjściowy jako JSON ( https://oreil.ly/E7wua ), o ile jest to możliwe (mechanizm ten w modelach Llama nosi nazwę gramatyk — https://oreil.ly/yU27T ).

Jeśli nie masz doświadczenia z formatem JSON, warto, żebyś zapoznał się z wprowadzeniem w serwisie W3Schools ( https :// oreil . ly / Xakgc ).

W przypadku modeli do generowania obrazów format ma ogromne znaczenie, ponieważ możliwości generowania obrazu są prawie nieograniczone. Do najbardziej typowych formatów należą zdjęcie stockowe (standardowe), ilustracja , obraz olejny . Te mniej oczywiste to np. obraz z kamery samochodowej , rzeźba lodowa czy Minecraft ( rysunek 1.6 ).

Wejście:

Spotkanie biznesowe czterech osób, oglądających MacBooka położonego na stole, w Minecrafcie.

Efekt działania prompta jest pokazany na rysunku 1.6 .

Rysunek 1.6. Spotkanie biznesowe w Minecrafcie

Ustawiając format, warto pamiętać o usunięciu tych elementów prompta, które mogą kolidować z wybranym formatem. Jeśli w prompcie załączysz obraz bazowy będący zdjęciem stockowym, efektem może być dziwna kombinacja tego obrazu z wybranym formatem odpowiedzi. Modele generowania obrazów są w stanie uogólniać i tworzyć nowe kombinacje i scenariusze, które nie pojawiły się w zbiorach treningowych, ale z naszego doświadczenia wynika, że im więcej niepowiązanych ze sobą elementów, tym większe prawdopodobieństwo uzyskania niewłaściwego obrazka.

Dwie pierwsze zasady — „ Określ wytyczne” i „ Określ format odpowiedzi ” — często się ze sobą wiążą. Druga z reguł odpowiada za określenie postaci tego, co otrzymamy w odpowiedzi, np. dokumentu JSON lub zdjęcia stockowego. Pierwsza reguła z kolei określa styl odpowiedzi, który chcesz uzyskać, niezależnie od jej technicznej postaci, np. nazwy produktów w stylu Steve’a Jobsa lub obrazu spotkania biznesowego w stylu van Gogha. Jeżeli kombinacja przekazanych wytycznych powoduje konflikt i efekt daleki od oczekiwań, najłatwiejszą metodą rozwiązania problemu jest usunięcie mniej istotnej z wytycznych.

3. Przedstaw przykłady

Nasz początkowy prompt nie zawierał żadnych przykładów tego, co można by uznać za dobre nazwy. W związku z tym odpowiedź była zbliżona do tego, co uznano by za dobrą nazwę na przestrzeni całego Internetu — a z pewnością możemy wygenerować coś lepszego. W świecie nauki podejście polegające na podaniu prompta bez żadnych przykładów nosi nazwę podejścia bez przykładów (ang. zero-shot ) i zawsze jest to miłą niespodzianką, gdy model AI jest w stanie rozwiązać problem w taki sposób — to znak, że ma on naprawdę spore możliwości. Z drugiej strony, jeśli nie dostarczasz żadnych przykładów, prosisz o wiele, nie dając nic w zamian. Nawet dostarczenie jednego przykładu (ang. one-shot ) może przynieść zauważalny efekt, natomiast z reguły badacze testują wydajność modeli na podstawie kilku przykładów (ang. few-shot ). Jednym z najbardziej znanych tekstów naukowych na ten temat jest słynny artykuł dotyczący modelu GPT-3: Language Models are Few-Shot Learners („Modele językowe uczą się na podstawie podejścia opartego na kilku przykładach” — https://oreil.ly/KW5PS ). Wyniki przedstawione w artykule są pokazane na rysunku 1.7 . Dodanie już jednego przykładu do prompta potrafi zwiększyć dokładność wyników z 10% do 50%.

Rysunek 1.7. Liczba przykładów przekazanych w kontekście

Gdy instruujesz kolegę lub koleżankę w pracy, jak wykonać nowe zadanie, logicznym krokiem jest przedstawienie przykładów sytuacji, gdy dane zadanie zostało wykonane w przeszłości w sposób właściwy. W pracy z AI działa to tak samo — siła prompta często bierze się z jego przykładów. Przedstawienie przykładów jest czasem znacznie prostsze niż próba samodzielnego opisania reguł, którymi powinien kierować się model przy rozwiązywaniu problemu. Technika ta jest więc szczególnie przydatna, gdy nie jesteś ekspertem w dziedzinie problemu, który próbujesz rozwiązać. Ilość tekstu, który możesz załączyć w ramach prompta, jest ograniczona (w chwili pisania tych słów jest to 6000 znaków w Midjourney i ok. 32 tysięcy znaków w darmowej wersji usługi ChatGPT), dlatego wiele pracy w ramach inżynierii promptów wiąże się z wybraniem i umieszczeniem w prompcie zróżnicowanych i wartościowych przykładów.

Kreatywność i stabilność nie idą ze sobą w parze: jeśli w swoim prompcie umieścisz więcej niż 3 – 5 przykładów, wyniki staną się bardziej przewidywalne, ale niestety kosztem kreatywności. Im więcej przykładów przedstawisz i im mniejsza będzie ich różnorodność, tym bardziej ograniczona stanie się odpowiedź. Jeśli w poprzednim prompcie zmienisz wszystkie przykłady np. na gatunki zwierząt, wpłynie to zauważalnie na odpowiedź — będzie ona zawierać nazwy oparte na gatunkach zwierząt.

Wejście:

Czy możesz wygenerować listę nazw produktów dla butów, które pasują do dowolnego rozmiaru stopy?

Zwróć wyniki w postaci listy przedzielonej przecinkami, w następującym formacie:

Opis produktu: But, który pasuje do dowolnego rozmiaru stopy

Nazwy produktów: [lista trzech nazw produktów]

## Przykłady

Opis produktu: Lodówka, która wydaje piwo

Nazwy produktów: MisioLodówka, Fajny Kot, Pingwinboks.

Opis produktu: Zegarek, który podaje dokładny czas w przestrzeni kosmicznej

Nazwy produktów: AstroOwca, Kosmiczny Miś, Orla Orbita

Opis produktu: Automat do przygotowania mlecznych koktajli w domu

Nazwy produktów: Szybka panda, Zdrowy Miś, Kompaktowy Koala

Wyjście:

Opis produktu: But, który pasuje do dowolnego rozmiaru stopy

Nazwy produktów: Elastyczny Elf, Regulowany Rekin, Uniwersalny Urwis.

Oczywiście w ten sposób zwiększamy ryzyko pominięcia znacznie lepszej nazwy, która nie pasuje do tego dość wąskiego zestawu przykładów. Zagadnienie braku różnorodności i zmienności w ramach przykładów dotyczy także obsługi przypadków brzegowych lub innych nietypowych scenariuszy. Dołączenie od jednego do trzech przykładów jest proste i prawie zawsze przynosi pozytywny efekt, natomiast powyżej tych wartości musisz dokładnie sprawdzić, jakie wyniki osiągasz, a także jakie jest podobieństwo między nimi. Są dowody (Hsieh et al., 2023 — https://oreil.ly/ 6Ixcw ), że załączanie wytycznych zamiast przykładów działa lepiej. Czasami zgromadzenie dobrych przykładów nie jest łatwe, dlatego z reguły warto zacząć od wdrożenia reguły „ Określ wytyczne” .

W zakresie generowania obrazów przedstawianie przykładów sprowadza się do załączenia obrazu bazowego — mechanizmu, który społeczność otwartego modelu Stable Diffusion nazywa img2img ( https://oreil.ly/huVRu ). W zależności od zastosowanego modelu generowania obrazów, obrazków tych można używać jako punktu startowego, z którego model skorzysta do generowania swoich wyników, a to z kolei znacząco wpływa na uzyskane wyniki. Możesz pozostawić tekstowy prompt bez zmian i podmienić jedynie obraz bazowy, a efekt będzie znacząco inny, jak na rysunku 1.8 .

Wejście:

https://s.mj.run/6D5Zmqn0YN4 Stockowe zdjęcie spotkania biznesowego czterech osób oglądających białego MacBooka na szklanym stoliku, Panasonic, DC-GH5

Rezultat jest pokazany na rysunku 1.8 .

Rysunek 1.8. Standardowe (stockowe) zdjęcie spotkania biznesowego czterech osób

W tym przypadku podmieniony został obraz bazowy — na ten widoczny na rysunku 1.9 , także pochodzący z serwisu Unsplash. Widać wyraźnie, jak różnie zadziałał model, który w tym przypadku dołączył tablice do rysowania i samoprzylepne karteczki.

Przedstawione przykłady demonstrują zdolności modeli do generowania obrazów, ale wysyłając w ramach promptów bazowe obrazy, trzeba się wykazać dużą ostrożnością. Sprawdź licencję każdego obrazka, który chcesz zastosować w prompcie jako obraz bazowy, i upewnij się, że nie podlega on prawom autorskim. W przeciwnym razie grożą Ci poważne konsekwencje prawne, nie mówiąc o tym, że takie zachowanie jest niezgodne z regulaminami usług świadczonych przez wszystkich istotnych dostawców modeli do generowania obrazów.

Rysunek 1.9. Zdjęcie Jasona Goodmana w serwisie Unsplash ( https :// oreil . ly / ZbzZy )

4. Oceniaj jakość

Do tej pory nie korzystaliśmy z żadnej metody oceny jakości naszych odpowiedzi — innej niż zwykła metoda prób i błędów uzyskiwanych w wyniku uruchamiania promptów i zapoznawania się z wynikami, nazywana promptowaniem chaotycznym (ang. blind prompting , https://oreil.ly/42rSz ). Nie jest to problem, jeśli swoje prompty stosujesz do pojedynczych, prostych zadań i na ogół nie używasz ich ponownie. Jeśli jednak korzystasz z nich wielokrotnie lub budujesz aplikację w środowisku produkcyjnym, a do jej działania jest potrzebne stabilne działanie promptów, musisz zadbać o prawidłowy proces oceny odpowiedzi.

Istnieje szereg metod, za pomocą których można ocenić jakość rozwiązania — wszystko zależy od tego, jakiego rodzaju problemy chcesz rozwiązać. W momencie udostępnienia nowego modelu AI uwaga badaczy skupia się przede wszystkim na tym, jak model wypada na tzw. ewaluacjach (ang. evals , evaluations ) — standardowym zbiorze pytań o dobrze sprecyzowanych odpowiedziach lub kryteriach oceny, których można używać do oceny jakości różnych modeli. W różnych zadaniach różne modele będą się różnie zachowywać, dlatego nie ma gwarancji, że prompt, który zadziałał dobrze z jednym modelem, sprawdzi się dobrze także w drugim. OpenAI udostępniła framework evals ( https://oreil. ly/wolEL ) do oceny jakości działania dużych modeli językowych w formie otwartego oprogramowania, zachęcając przy tym innych do zgłaszania kontrybucji w formie dodatkowych szablonów ewaluacji.

Poza standardowymi ewaluacjami warto wyróżnić także przykuwające uwagę testy, takie jak GPT-4 zdający egzamin prawniczy ( https://oreil.ly/txhSZ ). Trudno jest utworzyć ewaluacje dla bardziej subiektywnych zadań. Ponadto ewaluacje potrafią zabierać wiele czasu i generować duże koszty, zwłaszcza jeśli zespół nie jest liczny. W niektórych przypadkach badacze korzystają z bardziej zaawansowanych modeli, takich jak GPT-4, do oceny odpowiedzi z mniej wyszukanych modeli — taka sytuacja miała miejsce, gdy udostępniono model Vicuna-13B ( https://oreil .ly/NW3WX ), dostrajany model oparty na otwartym modelu Llama firmy Meta ( rysunek 1.10 ).

Rysunek 1.10. Ewaluacje modelu Vicuna GPT-4

Bardziej rozbudowane i rygorystyczne metody oceny są niezbędne, gdy chcesz napisać i opublikować artykuł naukowy lub ocenić nowo wydany model. Do typowych zastosowań sposoby te nie są jednak konieczne — wystarczy wysilić się zaledwie nieco bardziej niż w przypadku zwykłej metody prób i błędów. Już zwykły system oceny kciuk do góry/ kciuk w dół, zaimplementowany w Jupyter Notebook, może wystarczyć do optymalizacji prompta bez dodawania zbyt dużego narzutu. Na pewno warto sprawdzić, czy dołączenie przykładów jest warte dodatkowego kosztu (wynikającego ze zwiększenia długości prompta). Może uda Ci się rozwiązać problem bez podawania przykładów? Warto zacząć od przeanalizowania odpowiedzi uzyskanych w wyniku wielu uruchomień tego samego prompta i przechowywania ich w arkuszu kalkulacyjnym — zrobimy to zaraz po skonfigurowaniu naszego środowiska.

Aby zainstalować pakiet OpenAI dla języka Python, wystarczy wykonać polecenie pip install openai . Jeśli masz problemy związane z kompatybilnością paczki, utwórz wirtualne środowisko i zainstaluj naszą wersję pliku requirements.txt ( https ://oreil.ly/2KDV6 ; szczegółowe instrukcje znajdziesz we „ Wprowadzeniu” ).

Aby skorzystać z API, musisz utworzyć konto OpenAI ( https://oreil.ly/ oGv4j ), a następnie przejść pod adres https://oreil.ly/oHID1 , aby uzyskać swój klucz API.

Zapisywanie kluczy API bezpośrednio w kodzie skryptów nie jest zalecane ze względu na kwestie bezpieczeństwa. Zamiast tego do zarządzania kluczami warto używać zmiennych środowiskowych lub plików konfiguracyjnych.

Po uzyskaniu klucza API należy przypisać go do zmiennej środowiskowej przez wykonanie poniższego polecenia, które podmienia tekst klucz_API na faktyczną wartość klucza API:

export OPENAI_API_KEY="klucz_API"

lub w systemie Windows:

set OPENAI_API_KEY=klucz_API

Alternatywnie, jeśli nie chcesz ustawiać klucza API, możesz przekazać go w momencie inicjalizacji modelu lub wczytać go z pliku .env z wykorzystaniem mechanizmu python -dotenv ( https://oreil.ly/IaQjS ). Najpierw zainstaluj bibliotekę za pomocą polecenia pip install python-dotenv , a następnie wczytaj zmienne środowiskowe z użyciem poniższego kodu, umieszczonego na początku Twojego skryptu lub notatnika:

from dotenv import load_dotenv

load_dotenv() # Wczytaj zmienne środowiskowe z pliku .env

Pierwszy krok polega na uzyskaniu odpowiedzi z wielu uruchomień każdego prompta, a następnie zapisaniu ich do arkusza.

Wejście:

# Zdefiniuj dwa warianty prompta, aby porównać podejście bez przykładów z podejściem z kilkoma przykładami

prompt_A = """Opis produktu: Buty, które pasują dla każdego rozmiaru stopy.

Słowa początkowe: dostosowanie, dopasowanie, uniwersalny rozmiar

Nazwy produktów:"""

prompt_B = """Opis produktu: Automat do przygotowania mlecznych koktajli w domu.

Słowa początkowe: szybki, zdrowy, kompaktowy.

Nazwy produktów: HomeShaker, Fit Shaker, QuickShake, Shake Maker

Opis produktu: Zegarek, który podaje dokładny czas w przestrzeni kosmicznej

Słowa początkowe: astronauta, odporne na przestrzeń kosmiczną, orbita eliptyczna

Nazwy produktów: AstroTime, SpaceGuard, Orbit-Accurate, EliptoTime.

Opis produktu: Buty, które pasują dla każdego rozmiaru stopy.

Słowa początkowe: dostosowanie, dopasowanie, uniwersalny rozmiar

Nazwy produktów:"""

test_prompts = [prompt_A, prompt_B]

import pandas as pd

from openai import OpenAI

import os

# Przekaż swój klucz OpenAI jako zmienną środowiskową

# https://platform.openai.com/api-keys

client = OpenAI(

api_key=os.environ['OPENAI_API_KEY'], # Domyślnie

)

def get_response(prompt):

response = client.chat.completions.create(

model="gpt-3.5-turbo",

messages=[

{

"role": "system",

"content": "Jesteś pomocnym asystentem."

},

{

"role": "user"

"content": prompt

}

]

)

return response.choices[0].message.content

# Przejdź przez wszystkie prompty i pozyskaj odpowiedzi

responses = []

num_tests = 5

for idx, prompt in enumerate(test_prompts):

# numer prompta jako litera

var_name = chr(ord('A') + idx)

for i in range(num_tests):

# Pobierz odpowiedź z modelu

response = get_response(prompt)

data = {

"variant": var_name,

"prompt": prompt,

"response": response

}

responses.append(data)

# Skonwertuj odpowiedzi na obiekt ramki danych

df = pd.DataFrame(responses)

# Zapisz ramkę danych do pliku CSV

df.to_csv("odpowiedzi.csv", index=False)

print(df)

Wyjście:

variant    prompt                                           response

0       A  Opis produktu: Buty, które pasują dla każdego ...  1. UniFit Shoes\n2. FlexiSize Footwear\n3. Siz...

1       A  Opis produktu: Buty, które pasują dla każdego ...  1. Dostosowujące się buty\n2. Uniwersalne dopa...

2       A  Opis produktu: Buty, które pasują dla każdego ...  1. UniFit Shoes\n2. PerfectFit Footwear\n3. On...

3       A  Opis produktu: Buty, które pasują dla każdego ...  1. UniFit Shoes\n2. AdaptSize Sneakers\n3. Uni...

4       A  Opis produktu: Buty, które pasują dla każdego ...  1. UniFit Shoes\n2. Dopasuj-Do-Mnie Shoes\n3. ...

5       B  Opis produktu: Automat do przygotowania mleczn...      FlexFit, UniversalSole, SizeZero, PerfectFit.

6       B  Opis produktu: Automat do przygotowania mleczn...           FitFoot, SizeFlex, EasyFit, UniversalFit

7       B  Opis produktu: Automat do przygotowania mleczn...            FootFlex, SizeEase, FitAll, StepPerfect

8       B  Opis produktu: Automat do przygotowania mleczn...        UniversaFit, SizeFlex, AdaptASole, FootEase

9       B  Opis produktu: Automat do przygotowania mleczn...  UniFit Shoes, FlexiFit Footwear, SizeAdapt Sho...

W tym miejscu korzystamy z API Open AI do wygenerowania odpowiedzi dla zadanego zbioru promptów, a następnie zapisania wyników w ramce danych (ang. data frame ) i na koniec — w pliku CSV. Oto jak działa ten mechanizm: