Prompt systemowy (system prompt) to zestaw instrukcji, które model AI dostaje przed rozpoczęciem rozmowy i które obowiązują dla każdej kolejnej wiadomości. Ustala rolę modelu, odbiorcę, zasady i domyślny format odpowiedzi, więc nie musisz powtarzać ich w każdej wiadomości. Użytkownik pisze prompty; prompt systemowy decyduje o tym, jak model odpowiada na wszystkie.
Każda aplikacja czatowa już go używa. Gdy otwierasz ChatGPT, Claude albo Gemini, model ma już instrukcje od firmy, która za nim stoi, a okno czatu ich nie pokazuje. Gdy programiści budują aplikację na bazie modelu, to w prompcie systemowym zmieniają ogólny model w korepetytora programowania, asystenta obsługi klienta albo generator opisów commitów.
Co robi prompt systemowy
Dane wejściowe modelu w czacie mają strukturę: najpierw prompt systemowy, a potem rozmowa, czyli naprzemienne wiadomości użytkownika i asystenta. Prompt systemowy stoi ponad całą wymianą, więc model ma go przed sobą przy każdej odpowiedzi, niezależnie od długości czatu.
Dzięki temu to właściwe miejsce na wszystko, co ma obowiązywać zawsze: do kogo model mówi, co mu wolno, a czego nie, i jak domyślnie ma wyglądać odpowiedź. Modele są też trenowane, żeby dawać mu większą wagę niż wiadomości użytkownika, gdy się ze sobą kłócą. To tendencja, a nie blokada. Zdeterminowany użytkownik czasem potrafi przekonać model do porzucenia promptu systemowego i dlatego nie powinien on być twoim jedynym zabezpieczeniem.
Prompt systemowy a wiadomość użytkownika
| Prompt systemowy | Wiadomość użytkownika | |
|---|---|---|
| Kto go pisze | Programista albo ty w ustawieniach aplikacji | Ty, w polu czatu |
| Zakres | Cała rozmowa | Jedna prośba |
| Typowa zawartość | Rola, odbiorca, zasady, fakty, domyślny format | Zadanie i materiał do niego |
| Kiedy się zmienia | Rzadko | W każdej turze |
| Waga przy konflikcie | Zwykle wyższa | Zwykle niższa |
Przydatny test: jeśli zdanie byłoby prawdziwe dla każdej wiadomości w czacie, należy do promptu systemowego. Jeśli dotyczy tej konkretnej prośby, należy do wiadomości użytkownika. "Odpowiadaj w mniej niż 100 słowach" może trafić w oba miejsca; "streść poniższego e-maila" to zawsze wiadomość użytkownika.
Gdzie ustawić prompt systemowy
W API prompt systemowy to osobne wejście. W bibliotece OpenAI dla Pythona to pierwsza wiadomość na liście, z rolą system. Dokumentacja OpenAI przy nowszych modelach nazywa ten sam rodzaj instrukcji także developer message.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "You are a patient Python tutor. Give hints, not full solutions."},
{"role": "user", "content": "Why does my loop stop at 9?"},
],
)
print(response.choices[0].message.content)
W bibliotece Anthropic dla Pythona to parametr system najwyższego poziomu, a lista messages zawiera tylko rozmowę:
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
message = client.messages.create(
model=MODEL,
max_tokens=500,
system="You are a patient Python tutor. Give hints, not full solutions.",
messages=[{"role": "user", "content": "Why does my loop stop at 9?"}],
)
print(message.content[0].text)
API Gemini od Google nazywa to system instruction (instrukcja systemowa). Nazwa jest inna, idea ta sama.
W aplikacjach czatowych nie masz dostępu do surowego pola system, bo aplikacja ma już własne. Dostajesz za to miejsce na stałe instrukcje, które aplikacja dołącza za ciebie. W ChatGPT to instrukcje niestandardowe, instrukcje projektu i instrukcje własnego GPT. W Claude to instrukcje projektu i preferencje w profilu. W Gemini to instrukcje Gema. Jak dokładnie każda aplikacja łączy twój tekst z własnymi instrukcjami, nie jest w pełni udokumentowane, ale w praktyce działają one jak prompt systemowy, który dzielisz z aplikacją.
Co umieścić w prompcie systemowym
- Rolę i odbiorcę. "Jesteś korepetytorem dla uczniów w pierwszym miesiącu nauki programowania" ustala słownictwo i poziom każdej odpowiedzi. Role prompting opisuje, co rola zmienia, a czego nie.
- Zasady obowiązujące w każdej turze. Co model ma robić zawsze albo nigdy: dawać wskazówki zamiast pełnych rozwiązań, odpowiadać tylko na pytania o produkt, odpisywać w języku użytkownika.
- Co robić w razie niepewności. "Jeśli odpowiedzi nie ma w poniższych faktach, napisz, że nie wiesz" robi więcej przeciw zmyślonym odpowiedziom niż ogólne "bądź dokładny".
- Fakty, których model potrzebuje. Szczegóły produktu, zasady, bieżąca data, plan użytkownika. Model nie odpowie na pytania o twoją aplikację na podstawie danych treningowych.
- Domyślny format. Długość, struktura, czy używać bloków kodu. Jeśli odpowiedź czyta program, podaj dokładny kształt; zobacz structured output.
Czego nie umieszczać
Sekretów. Prompt systemowy nie jest prywatny. Użytkownicy mogą poprosić model o powtórzenie instrukcji albo podstępem go do tego nakłonić, a modele nie odmawiają niezawodnie. Klucze API, hasła i wszystko, czego nie chcesz zobaczyć opublikowanego, nie powinny się tam znaleźć. Traktuj prompt systemowy jak tekst, który użytkownik może kiedyś przeczytać, i zajrzyj do prompt injection, żeby zobaczyć, jak instrukcje bywają obchodzone.
Zadania jednej wiadomości. Jeśli prompt systemowy mówi "streść ten artykuł", druga wiadomość w czacie nie ma już dokąd pójść.
Stosów nakładających się zasad. Dwadzieścia zasad pisanych w różnych momentach zwykle sobie przeczy, a model musi zgadywać, która wygrywa. Pogrupuj zasady, usuń duplikaty i ustal priorytety tam, gdzie dwie mogą się zderzyć.
Waty. Prompt systemowy jest wysyłany ponownie z każdym żądaniem i zajmuje miejsce w oknie kontekstu modelu, więc za każdy zbędny akapit płacisz w każdej turze.
Przykłady promptów systemowych
Pierwszy przykład to asystent produktu. Prompt systemowy ustala zakres, długość i zasadę dla pytań, na które nie da się odpowiedzieć, oraz zawiera fakty potrzebne modelowi. Przełączaj zakładki, żeby wysyłać mu różne wiadomości: ten sam prompt systemowy kształtuje wszystkie trzy odpowiedzi.
Otwórz zakup na liście transakcji i dotknij Podziel. Potem wybierz dwie kategorie, Spożywcze i Dom, i wpisz kwotę przypadającą na każdą z nich.
Drugi przykład to tekst, jaki można wpisać w instrukcje niestandardowe albo instrukcje projektu w aplikacji czatowej. Opisuje ciebie i to, jakich odpowiedzi oczekujesz, więc każdy czat zaczyna się od tego.
import { readFile } from "node:fs/promises";
const config = JSON.parse(await readFile("config.json", "utf8"));
Podanie kodowania sprawia, że readFile zwraca string, który JSON.parse zamienia w obiekt. await na najwyższym poziomie działa tylko w module ES ("type": "module" w package.json albo plik .mts); w przeciwnym razie opakuj wywołanie w funkcję async. Dodaj try/catch, jeśli pliku może brakować albo może być uszkodzony.
Bez promptu systemowego pytanie tak krótkie jak "jak odczytać plik JSON?" zostawia modelowi zgadywanie języka, a odpowiedź często przychodzi w Pythonie albo w zwykłym JavaScripcie, z akapitem o tym, czym jest JSON. Z nim odpowiedź wybiera właściwy język i środowisko, pomija podstawy i trzyma się żądanego kształtu.
Ta sama struktura sprawdza się w każdym asystencie, którego konfigurujesz: komu służy, jakie ma zasady, co robić w razie niepewności, jakich faktów potrzebuje i w jakim formacie odpowiada. Napisz go raz, przetestuj na zwykłym pytaniu, pytaniu nie na temat i takim, które próbuje złamać zasadę, i poprawiaj, aż wszystkie trzy odpowiedzi będą takie, jakich chcesz.
Najczęściej zadawane pytania
Czym jest prompt systemowy?
Prompt systemowy to zestaw instrukcji, które model AI dostaje przed rozpoczęciem rozmowy i które obowiązują dla każdej kolejnej wiadomości. Zwykle ustala rolę, odbiorcę, zasady i domyślny format odpowiedzi. W API to osobne pole albo wiadomość system; w aplikacjach czatowych tę samą funkcję pełnią instrukcje niestandardowe i instrukcje projektu.
Czym prompt systemowy różni się od promptu użytkownika?
Prompt systemowy zawiera stałe instrukcje dla całej rozmowy i zwykle pisze go programista albo ustawia się go raz w ustawieniach. Prompt użytkownika to pojedyncza wiadomość z prośbą o jedną rzecz. Gdy się ze sobą kłócą, modele są trenowane, żeby dawać większą wagę promptowi systemowemu, choć to tendencja, a nie gwarancja.
Czy mogę ustawić prompt systemowy w ChatGPT, Claude albo Gemini?
Nie samo surowe pole system, ale coś bardzo podobnego. ChatGPT ma instrukcje niestandardowe, instrukcje projektu i instrukcje dla własnych GPT. Claude ma instrukcje projektu i preferencje w profilu. Gemini ma instrukcje dla Gemów. Aplikacja łączy to, co tam wpiszesz, z własnymi instrukcjami systemowymi i stosuje to w twoich czatach.
Czy użytkownicy mogą zobaczyć albo wydobyć prompt systemowy?
Często tak. Użytkownik może poprosić model o powtórzenie instrukcji albo podstępem go do tego nakłonić, a modele nie utrzymują ich niezawodnie w tajemnicy. Nigdy nie umieszczaj w prompcie systemowym haseł, kluczy API ani poufnych danych firmy i nie traktuj go jak zabezpieczenia.
Jak długi powinien być prompt systemowy?
Na tyle długi, żeby objąć to, co dotyczy każdej wiadomości, i nie dłuższy. Osobisty może mieć trzy albo cztery zdania. Prompt systemowy produktu często zajmuje stronę: rola, zasady, fakty i format odpowiedzi. Każde słowo jest wysyłane z każdym żądaniem, więc za każdym razem kosztuje też tokeny.