W module Generatywna AI dowiedzieliśmy się, że przestrzeń wejściowa modeli generatywnej AI jest praktycznie nieograniczona. Aby uzyskać wyniki zgodne z oczekiwaniami użytkowników, musisz tworzyć prompty. Prompt to uporządkowana umowa między aplikacją a modelem.
Dobrze napisany prompt:
- Określa, jak model LLM powinien tworzyć odpowiedź.
- Składa się z wielu komponentów, które można wersjonować, testować i ulepszać z czasem.
- Może pełnić rolę wspólnego artefaktu do współpracy między zespołami.
Z tego modułu dowiesz się, jak pisać skuteczne prompty. Wyjaśniamy, jak jest skonstruowany prompt i jak jego komponenty są rozdzielane między system a użytkownika. Poznasz też podstawowe techniki promptowania i scenariusze, w których możesz ich używać.
W tym module będziemy korzystać ze wspólnego przykładu: BlogBuddy, czyli asystenta pisania opartego na AI, inspirowanego wykorzystaniem interfejsu Prompt API przez CyberAgent.
Wróć do modułu generatywnej AI w schemacie systemu BlogBuddy.
Komponenty promptu
Każdy komponent promptu odgrywa określoną rolę w sterowaniu zachowaniem modelu.
- Kontekst: określa rolę i domenę modelu, aby wiedział, jak się zachowywać.
- Instrukcja: przypisuje do modelu konkretne zadanie.
- Zmienne wejściowe: kontekst specyficzny dla danej sytuacji, dostarczany przez aplikację w czasie rzeczywistym.
- Format wyjściowy: określa oczekiwaną strukturę danych wyjściowych. Możesz na przykład chcieć uzyskać dane wyjściowe w formacie JSON.
- Przykłady: pokaż, jak wykonać zadanie na co najmniej 1 innych danych wejściowych.
- Ograniczenia: ustaw jasne limity, aby zapewnić spójność, bezpieczeństwo i zgodność danych wyjściowych z marką.
Prompt może zawierać niektóre lub wszystkie z tych komponentów. Poniższy przykład ilustruje te komponenty w przypadku funkcji asystenta pisania BlogBuddy.
### Context
You are a writing assistant for blog authors.
Your job is to generate helpful, concise, and engaging content.
### Instruction
Generate 3 alternative titles for the user's blog post with a given style.
### Input variables
Here is the content of the blog post:
${blogPostContent}
Here is the desired style:
${titleStyle}
### Output format
Return valid JSON ONLY, in the following exact structure:
{
"titles": ["Title option 1", "Title option 2", "Title option 3"]
}
### Examples
Example input:
{
"blogPostContent": "I finally visited the small neighborhood café I've been eyeing for months...",
"titleStyle": "friendly"
}
Example output:
{
"titles": [
"A First Visit to the Neighborhood Café",
"Trying the Café I've Wanted to Visit for Months",
"My Experience at a Long-Awaited Local Spot"
]
}
### Constraints
- Each title must be under 128 characters.
- Titles must be original, not copied verbatim from the draft.
- Keep the tone natural and human. Avoid emojis unless explicitly requested.
- Avoid sensationalism or clickbait.
- If the draft includes multiple topics, choose the most prominent topic.
W przypadku pierwszych promptów zacznij od podstaw: instrukcji i formatu wyjściowego. Następnie stopniowo dodawaj kolejne komponenty, analizując wyniki i określając, jakie bardziej precyzyjne ustawienia są potrzebne, aby osiągnąć sukces.
Prompty systemowe a prompty użytkownika
Niektóre komponenty promptu są zakodowane na stałe, a inne mogą być dostarczane przez użytkownika:
Prompt systemowy jest dostarczany przez deweloperów aplikacji i określa ogólne zachowanie modelu. Może określać rolę modelu, oczekiwany ton, format danych wyjściowych (np. ścisły schemat JSON) i wszelkie ograniczenia globalne. W prompcie systemowym kodowane są też wymagania dotyczące bezpieczeństwa i odpowiedzialności. Pozostaje on spójny w przypadku wszystkich żądań i stanowi stabilną podstawę działania modelu.
Prompt użytkownika zawiera bezpośrednie żądanie, które prowadzi do uzyskania wyniku. Użytkownik prosi o wykonanie określonego zadania, które może obejmować konkretne zmienne. Na przykład: „Wyświetl 3 tytuły tego posta”, „Kontynuuj ten akapit” lub „Spraw, aby ten tekst brzmiał bardziej formalnie”.
Większość interfejsów API generatywnej AI umożliwia strukturyzowanie promptu jako tablicy wiadomości, z których każda ma rolę (system lub użytkownik) i zawartość. Ułatwia to oddzielenie stabilnych, globalnych instrukcji od dynamicznych danych wejściowych dla każdego żądania.
Jak decydujesz, które komponenty powinny znajdować się w prompcie systemowym, a które powinny być pozostawione do określenia przez użytkownika? Odpowiedź zależy od tego, jak elastyczne jest doświadczenie użytkownika i jakie możliwości ma Twój model.
Ograniczone przypadki użycia
W przypadku bardzo konkretnych zastosowań większość prompta można zdefiniować wstępnie w prompcie systemowym. Na przykład w BlogBuddy użytkownicy mogą kliknąć Pokaż tytuły, aby wyświetlić wygenerowane sugestie tytułów do swojego projektu.

Zadanie jest stałe, format wyjściowy jest znany, a użytkownik nie musi podawać dodatkowego kontekstu, aby uzyskać oczekiwany wynik. W tym przypadku wszystkie stabilne reguły, wytyczne dotyczące tonu, schematy danych wyjściowych i przykłady umieszczasz w prompcie systemowym.
Aby to zrobić za pomocą Prompt API, użyjemy initialPrompts do zdefiniowania zachowania na poziomie systemu dla całej sesji:
// Defines stable behavior for the entire session
const session = await LanguageModel.create({
initialPrompts: [
{
role: "system",
content: `You are a blog-writing assistant.
Your task is to generate high-quality titles for blog posts.
Always respond in concise, friendly language.
Return exactly 3 alternative titles.
Produce valid JSON with a "titles" array of strings.`
}
]
});
Gdy użytkownik kliknie Pokaż tytuły, pojawi się prośba dotycząca bieżącej treści:
// The only variable input is the blog content
const result = await session.prompt(blogContent);
Z czasem użytkownicy mogą poprosić o większą elastyczność i kontrolę. W takim przypadku możesz przenieść niektóre komponenty do promptu użytkownika za pomocą elementów sterujących interfejsu. Na przykład menu z określeniami stylu lub tonu.
Jednak zbyt wiele działań strukturalnych może utrudniać korzystanie z aplikacji. W takiej sytuacji warto przejść na bardziej otwarty projekt, który pozwala użytkownikom samodzielnie określać większość promptów. Więcej informacji o optymalizacji tego projektu znajdziesz w module dotyczącym wzorców UX.
Elastyczne zadania wymagają szczegółowych promptów użytkownika
Otwarta, interaktywna funkcja, która pomaga użytkownikom pisać posty na blogu od zera i zapewnia im większą elastyczność. Mogą prosić o pomysły, konspekty, poprawki, zmiany stylu lub burzę mózgów albo określać, jak dokładnie należy wykonać zadanie. W przypadku tego typu aplikacji prawdopodobnie potrzebujesz bardziej zaawansowanego modelu po stronie serwera.

W przypadku elastycznych zadań użytkownik musi podać więcej informacji, ponieważ zakres możliwych opcji jest znacznie szerszy. Prompt systemowy nadal określa ogólne zachowanie.
Sprawdzone metody:
- Umieść w prompcie systemowym stabilne reguły, strukturę i przykłady. Umieść w prompcie użytkownika dynamiczne treści i żądania dotyczące konkretnych zadań.
- Im bardziej otwarty jest interfejs, tym większej elastyczności wymaga prompt użytkownika, aby uwzględniać nieprzewidywalne dane wejściowe.
- Im więcej pracy musi wykonać prompt użytkownika, tym większe możliwości musi mieć model, ponieważ musi on obsługiwać większą różnorodność przy mniejszej wbudowanej strukturze.
Za pomocą tych reguł możesz stopniowo optymalizować kompromis między kontrolą a elastycznością użytkownika w kontekście produktu. Uważnie obserwuj preferencje i zachowania użytkowników. Większa elastyczność nie zawsze przekłada się na rzeczywistą wartość. Użytkownicy muszą też mieć czas, umiejętności i zdolności poznawcze, aby tworzyć bardziej rozbudowane prompty.
Typowe techniki promptowania
Deweloperzy zwykle wypróbowują kilka technik promptowania, aby znaleźć tę, która najlepiej sprawdza się w ich przypadku i w ich modelu.
Prompty „zero-shot”
Opisujesz zadanie dla modelu i liczysz na najlepsze wyniki. Na przykład:
"What is the capital of France?"
Promptowanie typu zero-shot to skuteczna podstawa w przypadku wielu zadań związanych z AI. W przypadku prostych zapytań, np. dotyczących wiedzy encyklopedycznej, najlepiej pozostać przy tej technice. W większości zastosowań w rzeczywistym świecie musisz jednak rozszerzyć prompt o dodatkowe warunki i logikę.
Prompty „few-shot”
W przypadku promptów typu „few-shot” podajesz przykłady, aby zademonstrować prawidłowe zachowanie, styl, strukturę i inne ważne zmienne. Oto przykładowy prompt do klasyfikacji sentymentu:
You classify user messages into one of the following categories:
- "positive"
- "negative"
- "neutral"
Here are examples to guide your classifications:
Input: "I love this product! It works perfectly."
Output: { "label": "positive" }
Input: "This is terrible. I want a refund."
Output: { "label": "negative" }
Prompty „few-shot” są przydatne w przypadku tego rodzaju zadań pseudoprognozujących. Można ją też stosować do zadań o rozpoznawalnej strukturze, takich jak generowanie tytułów na ilustracji 1.
Jeśli przestrzeń wyjściowa jest bardzo szeroka, np. w przypadku treści otwartych lub długich, prompting z kilkoma przykładami prawdopodobnie nie będzie najlepszą techniką. Trudno, a nawet niemożliwe jest podanie przykładów, które w znaczący sposób obejmują tę przestrzeń.
Wykorzystanie w prompcie łańcucha myśli
Zachęcasz model do krok po kroku, zanim wygeneruje odpowiedź. Kroki mogą być opisane wprost lub pozostawione do zdefiniowania przez model. Na przykład:
"Think step-by-step to identify the main idea of this paragraph. Then produce a
short heading under 60 characters."
Metoda łańcucha myśli sprawdza się w przypadku zadań wymagających wieloetapowego rozumowania i wykonania, takich jak tworzenie konspektu posta na blogu czy podejmowanie złożonych decyzji. Jest to główna technika stosowana w tzw. modelach rozumowania.
Może to być kosztowne. Generowanie śladów rozumowania krok po kroku zwiększa moc obliczeniową, koszty i opóźnienia. Używaj go tylko wtedy, gdy Twój przypadek użycia wymaga złożonego rozumowania i planowania.
Prompty dotyczące autorefleksji
Po wygenerowaniu wstępnej odpowiedzi prosisz model o jej ocenę i zmianę. Na przykład:
"Review your previous output.
Identify unclear phrasing and rewrite it more concisely."
Samorefleksja jest szczególnie przydatna w przypadku zadań, które wymagają iteracyjnego dopracowywania, takich jak narzędzia do edycji lub przepisywania. Jest szybka we wdrożeniu i może znacznie poprawić jakość. Pętla autorefleksji jest przydatna, gdy prompt działa dobrze. Najpierw dopracuj wynik, aby był bardziej przejrzysty lub zwiększał zadowolenie użytkowników.
Wnioski
Z tego modułu dowiesz się, jak prompty są tworzone ze strukturalnych komponentów. W praktyce inżynieria promptów ma charakter eksperymentalny. Jasność i wiarygodność pojawiają się dopiero po wielu rundach dopracowywania.
W następnym module przyjrzymy się opracowywaniu promptów na podstawie oceny. Dzięki temu możesz systematycznie ulepszać prompty i dostosowywać je do swoich produktów i użytkowników.
Zasoby
Każda z tych technik ma własne warianty i sprawdzone metody. Istnieje wiele szczegółowych zasobów zewnętrznych, np.:
- Przewodnik Google Cloud dotyczący inżynierii promptów
- Przewodnik DAIR po tworzeniu promptów
- Proste promptowanie Janna Lipenkova
- Przeczytaj rozdział 6 w książce The Art of AI Product Development (Sztuka tworzenia usług AI).
Zapoznaj się z dokumentacją wybranego modelu, ponieważ mogą w niej być konkretne wskazówki, które pomogą Ci uzyskać jak najlepsze wyniki.
Sprawdź swoją wiedzę
Jakie typy reguł można określić w prompcie systemowym?
Jakiej techniki należy użyć, gdy chcesz, aby model przed udzieleniem odpowiedzi przeprowadził rozumowanie krok po kroku?
Kiedy promptowanie z kilkoma przykładami jest najbardziej przydatne?
Na czym polega technika zachęcania do autorefleksji?