System prompt, temperatura, okno kontekstowe i max tokens po ludzku
Najważniejsze parametry zapytania do modelu AI na prawdziwych wynikach: system prompt, temperatura (i pułapka z GPT-6), top_p, okno kontekstowe, max tokens i finish_reason oraz gotowe ustawienia na start.

👁 115 przeczytań
- System prompt to instrukcja roli i zasad modelu, wysyłana w każdym zapytaniu API, za którą płacisz przy każdym wywołaniu.
- Temperatura 0 daje powtarzalne wyniki (trzy identyczne odpowiedzi co do znaku), 0,7 - zróżnicowane i sensowne, 1,2 - losowe z dziwnymi artefaktami jak słowo 'Kawa Mrugu'.
- Okno kontekstowe wynosi dziś zwykle 1 mln tokenów w GPT-6, Claude Sonnet, Opus 5.5 i Gemini 3.8 Flash, a liczy się w nim zarówno wejście, jak i wyjście razem.
System prompt ustala, kim jest model i jakich zasad się trzyma. Temperatura decyduje, jak bardzo odpowiedzi są przewidywalne. Okno kontekstowe to limit wszystkiego, co model widzi naraz, a max tokens to limit długości odpowiedzi. Poniżej wyjaśniam każdy parametr po ludzku i pokazuję prawdziwe wyniki: to samo pytanie przy temperaturze 0, 0,7 i 1,2, trzy różne system prompty i odpowiedź uciętą w pół słowa. To część ścieżki API AI od zera.
Ściąga (stan na 4 października 2026)
- system - rola i zasady; wysyłany w każdym zapytaniu, więc płacisz za niego za każdym razem.
- temperature - 0 dla danych i klasyfikacji, 0,7 dla zwykłego tekstu, powyżej 1 dla burzy mózgów. Modele rozumujące OpenAI (GPT-6) jej nie przyjmują.
- max_tokens - górny limit długości odpowiedzi; po jego przekroczeniu
finish_reasontolength. - okno kontekstowe - dziś zwykle 1 mln tokenów (GPT-6, Claude Sonnet i Opus 5.5, Gemini 3.8 Flash), ale liczy się w nim wejście i wyjście razem.
System prompt: instrukcja, która obowiązuje całą rozmowę
W zapytaniu do API wysyłasz listę wiadomości. Pierwsza, z rolą system (w Anthropic osobne pole system, w OpenAI Responses pole instructions), mówi modelowi, kim ma być i czego pilnować. Kolejne to wymiana user i assistant. Model traktuje instrukcję systemową poważniej niż prośby użytkownika, dlatego tam wpisujesz zasady, które nie mogą się zmienić: język, ton, format, czego nie robić.
Sprawdziłem, jak bardzo system prompt zmienia odpowiedź na to samo pytanie „Czy warto uczyć się programowania w 2026 roku?” w modelu Mistral Small 4:
"""System prompt zmienia zachowanie modelu, a max_tokens ucina odpowiedź (finish_reason=length)."""
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"])
MODEL = "mistralai/mistral-small-2603"
PYTANIE = "Czy warto uczyć się programowania w 2026 roku?"
for system in (
None,
"Jesteś zrzędliwym programistą z 30-letnim stażem. Odpowiadasz w maksymalnie dwóch zdaniach.",
"Odpowiadasz wyłącznie jednym słowem: TAK albo NIE.",
):
wiadomosci = [{"role": "user", "content": PYTANIE}]
if system:
wiadomosci.insert(0, {"role": "system", "content": system})
r = client.chat.completions.create(model=MODEL, messages=wiadomosci, max_tokens=150, temperature=0.3)
print(f"\n### system: {system or '(brak)'}")
print(r.choices[0].message.content.strip())
print(f"[finish_reason={r.choices[0].finish_reason}, tokeny wyjścia={r.usage.completion_tokens}]")
# max_tokens za mały: odpowiedź urwana w pół zdania
r = client.chat.completions.create(model=MODEL, messages=[{"role": "user", "content": PYTANIE}], max_tokens=25)
print("\n### max_tokens=25")
print(r.choices[0].message.content.strip())
print(f"[finish_reason={r.choices[0].finish_reason}]")### system: (brak)
Tak, **uczenie się programowania w 2026 roku nadal będzie bardzo wartościowe**, a nawet bardziej niż obecnie. Oto kluczowe powody, dlaczego warto zainwestować w te umiejętności:
### **1. Wysokie zapotrzebowanie na programistów**
- **AI i automatyzacja** będą dalej zastępować rutynowe zadania, ale **programiści będą potrzebni do tworzenia, utrzymania i rozwijania systemów AI, narzędzi i infrastruktury**.
- Według **World Economic Forum**, do 2025 roku **ponad połowa wszystkich nowych miejsc pracy** będzie wymagać umieję
[finish_reason=length, tokeny wyjścia=150]
### system: Jesteś zrzędliwym programistą z 30-letnim stażem. Odpowiadasz w maksymalnie dwóch zdaniach.
Nawet w 2026 programowanie będzie potrzebne, ale nie ucz się tylko samego kodu - zrozum problem, który rozwiązujesz, bo inaczej stracisz pracę na rzecz AI. I nie marudź, że to trudne, bo w moich czasach mieliśmy dziury w kartach perforowanych.
[finish_reason=stop, tokeny wyjścia=79]
### system: Odpowiadasz wyłącznie jednym słowem: TAK albo NIE.
TAK
[finish_reason=stop, tokeny wyjścia=3]Trzy obserwacje:
- Bez system promptu model rozpisał się w punktach, z nagłówkami i pogrubieniami, i nie zmieścił się w limicie 150 tokenów (
finish_reason=length). Do tego powołał się na prognozę „do 2025 roku”, czyli nieaktualną wiedzę z danych treningowych. - Z rolą „zrzędliwy programista” zmieścił się w dwóch zdaniach, zmienił ton i sam zakończył odpowiedź (
stop). - Z ograniczeniem do jednego słowa odpowiedział „TAK” i zużył 3 tokeny zamiast 150. To najtańszy sposób na klasyfikację.
Zasady, których się trzymam przy pisaniu system promptów:
- Konkret zamiast przymiotników: „maksymalnie 3 zdania” zamiast „zwięźle”.
- Format odpowiedzi wprost: lista, JSON, jedno słowo. Do twardego JSON-a używam trybu structured output, nie samej prośby.
- Czego nie robić, z powodem: „nie podawaj cen, bo zmieniają się co tydzień”.
- Długi, stały system prompt na początku zapytania - wtedy dostawca może go trzymać w pamięci podręcznej i liczyć taniej.
Więcej o samej sztuce pisania instrukcji: Prompt: co to jest i jak napisać polecenie do AI i System prompty w Claude.
Temperatura: eksperyment 0 / 0,7 / 1,2
Model przy każdym kolejnym tokenie wybiera z listy kandydatów z prawdopodobieństwami. Temperatura „spłaszcza” albo „wyostrza” ten rozkład. Przy 0 model prawie zawsze bierze najbardziej prawdopodobny token, więc odpowiedź jest powtarzalna. Przy wyższych wartościach częściej sięga po mniej oczywiste słowa: odpowiedzi są bardziej zróżnicowane, ale też bardziej ryzykowne.
Wysłałem to samo polecenie dziewięć razy do Mistral Small 4: po trzy razy przy temperaturze 0, 0,7 i 1,2.
"""Eksperyment: to samo zapytanie przy temperaturze 0, 0.7 i 1.2 (po 3 razy)."""
import os, sys
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"])
# Model musi obsługiwać temperature. Modele rozumujące OpenAI (GPT-6) jej nie przyjmują.
MODEL = sys.argv[1] if len(sys.argv) > 1 else "mistralai/mistral-small-2603"
PYTANIE = "Wymyśl nazwę i jednozdaniowy slogan dla małej kawiarni w Gdańsku. Odpowiedz w jednej linii."
for temperatura in (0, 0.7, 1.2):
print(f"\n=== temperature={temperatura} ===")
for proba in range(1, 4):
r = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": PYTANIE}],
temperature=temperatura,
max_tokens=80,
# tylko dostawcy, którzy naprawdę obsługują temperature
extra_body={"provider": {"require_parameters": True}},
)
print(f"{proba}. {r.choices[0].message.content.strip()}")=== temperature=0 ===
1. **"Bursztynowa Kawa" - "Gdański smak, który rozgrzewa duszę."*
2. **"Bursztynowa Kawa" - "Gdański smak, który rozgrzewa duszę."*
3. **"Bursztynowa Kawa" - "Gdański smak, który rozgrzewa duszę."*
=== temperature=0.7 ===
1. **"Morska Kawa"** - "Gdańskie smaki w sercu miasta."
2. **"Kawa na Darszu"** - *Gdańska kawa, lokalny smak.*
3. **"Gdańska Mała Kawa" - "Gdzie każda filiżanka to kawałek Gdańska."*
=== temperature=1.2 ===
1. **"Kawa Mrugu"** - *Twój ulubiony smak spotyka gdański zachód słońca.*
2. **"Bursztynowa Kawiarnia
- Serce Gdańska w filiżance."**
3. **"Bursztyn Café"** - "Gdzie rodzinna atmosfera spotyka się z gdańskim niebem."Co widać w wynikach:
- Temperatura 0: trzy razy identyczna odpowiedź, co do znaku, łącznie z niedomkniętą gwiazdką formatowania. Tego chcesz przy wyciąganiu danych, klasyfikacji i testach.
- Temperatura 0,7: trzy różne, sensowne propozycje. Dobry kompromis do tekstów marketingowych i odpowiedzi czatu.
- Temperatura 1,2: pojawiają się dziwactwa: „Kawa Mrugu” (słowo, którego nie ma), łamanie linii w środku nazwy, pomieszane cudzysłowy. Czasem trafi się perełka, ale do produkcji to za dużo losowości.
Dwie pułapki, na które trafiłem:
- Temperatura 0 nie gwarantuje identycznych odpowiedzi. U mnie trzy razy wyszło to samo, ale dostawcy nie obiecują pełnej powtarzalności (obliczenia na GPU, różne serwery). Dlaczego czat odpowiada różnie na to samo pytanie, opisałem w tekście Dlaczego ChatGPT podaje różne odpowiedzi.
- Nie każdy model przyjmuje temperaturę. Modele rozumujące OpenAI (GPT-6 Luna, Sol, Astra) jej nie obsługują. OpenRouter domyślnie po cichu pomija taki parametr, więc kod działa, ale temperatura nic nie zmienia. Sprawdziłem to:
"""Pułapka: GPT-6 nie obsługuje temperature, a OpenRouter domyślnie po cichu pomija ten parametr."""
import os
from dotenv import load_dotenv
import openai
from openai import OpenAI
load_dotenv()
client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"])
for wymagaj in (False, True):
try:
r = client.chat.completions.create(
model="openai/gpt-6-luna",
messages=[{"role": "user", "content": "Podaj jedną nazwę dla kawiarni w Gdańsku."}],
temperature=1.2,
max_tokens=60,
extra_body={"provider": {"require_parameters": wymagaj}},
)
print(f"require_parameters={wymagaj}: 200 OK -> {r.choices[0].message.content}")
except openai.APIStatusError as e:
print(f"require_parameters={wymagaj}: {e.status_code} -> {e.body.get('message') if isinstance(e.body, dict) else e.message}")require_parameters=False: 200 OK -> Mokka Motława
require_parameters=True: 404 -> No endpoints found that can handle the requested parameters. To learn more about provider routing, visit: https://openrouter.ai/docs/guides/routing/provider-selectionBez require_parameters zapytanie przeszło, a temperatura 1,2 została zignorowana. Z tym ustawieniem OpenRouter uczciwie odmówił (404 - brak dostawcy, który obsłuży wszystkie parametry). W modelach rozumujących zamiast temperatury sterujesz parametrem reasoning_effort (ile model myśli) i verbosity (jak długo pisze).
Pokrewny parametr top_p ogranicza wybór do najbardziej prawdopodobnych tokenów, których łączne prawdopodobieństwo nie przekracza podanej wartości. Zasada praktyczna: zmieniaj albo temperaturę, albo top_p, nie oba naraz.
Okno kontekstowe: ile model widzi naraz
Mam to spisane w całości
Zebrałem te rzeczy w ebookach, które możesz pobrać za darmo - bez zapisu na listę, bez haczyka.
Okno kontekstowe to maksymalna liczba tokenów w jednym zapytaniu: system prompt, cała historia rozmowy, wklejone dokumenty, opisy narzędzi i odpowiedź modelu. API nie pamięta poprzednich zapytań - jeśli chcesz rozmowy, za każdym razem wysyłasz całą historię od nowa i za każdym razem za nią płacisz.
| Model | Okno kontekstowe | Maksymalna odpowiedź |
|---|---|---|
| GPT-6 Luna, Sol, Astra | 1,05 mln tokenów | 128 tys. |
| Claude Opus 5.5, Sonnet 5.5, Fable 5.1 | 1 mln | 128 tys. |
| Claude Haiku 4.5 | 200 tys. | 64 tys. |
| Gemini 3.8 Flash | 1,05 mln | 65 tys. |
| Grok 4.7 | 500 tys. | - |
| DeepSeek V4.1 Flash, V4 Pro | 1 mln | 384 tys. |
| Mistral Small 4, Medium 3.5 | 256 tys. | - |
Milion tokenów to po polsku kilka książek, ale w praktyce trzy rzeczy psują ten obraz:
- Koszt. Zapytanie z 500 tys. tokenów wejścia do Claude Sonnet 5.5 kosztuje 1 USD, zanim model napisze słowo. GPT-6 i Grok powyżej progów (272 tys. i 200 tys.) liczą wyższe stawki za całe zapytanie.
- Jakość. Model gorzej znajduje informacje w środku bardzo długiego tekstu. Sprawdziłem to w tekście Modele obiecują milion tokenów kontekstu - dwa z trzech modeli poległy.
- Polski zajmuje więcej. Ten sam tekst po polsku to od 1,4 do 2,1 raza więcej tokenów niż po angielsku (pomiar w tekście Tokeny AI).
Gdy dokumentów jest więcej, niż sensownie mieści się w oknie, zamiast wklejać wszystko używa się wyszukiwania fragmentów, czyli RAG. Wyjaśniam go w tekście RAG: jak działa, a w kodzie pokazuję go w tekście RAG krok po kroku.
max tokens: limit długości odpowiedzi
max_tokens (w nowszym API OpenAI max_completion_tokens, w Gemini max_output_tokens) to sufit liczby tokenów, które model może wygenerować. Model nie „planuje” odpowiedzi pod ten limit - po prostu zostaje ucięty, gdy go osiągnie:
### max_tokens=25
Tak, warto uczyć się programowania w **2026 roku** - i to z kilku ważnych powod
[finish_reason=length]Jak tego używać:
- Zawsze sprawdzaj
finish_reason.stop- model skończył sam,length- ucięty limitem,tool_calls- chce wywołać narzędzie,content_filter- zablokowany. - Limit to zabezpieczenie kosztów, nie sposób na krótkie odpowiedzi. Krótkość wymuszasz w system prompcie („maksymalnie 3 zdania”), a
max_tokensustawiasz z zapasem. - W modelach rozumujących limit obejmuje myślenie. Gdy ustawisz 200 tokenów, a model zużyje 190 na myślenie, odpowiedź będzie miała 10 tokenów albo będzie pusta. Dla takich modeli daję limit co najmniej kilka tysięcy.
- W Anthropic
max_tokensjest obowiązkowy - zapytanie bez niego dostanie błąd 400.
Inne parametry, które warto znać
| Parametr | Do czego | Kiedy używam |
|---|---|---|
stop | lista napisów, po których model ma przestać | gdy model dopisuje zbędne rzeczy po właściwej odpowiedzi |
seed | ziarno losowości dla powtarzalności | testy; działa „w miarę możliwości”, bez gwarancji |
reasoning_effort | ile model myśli (np. low, medium, high) | modele rozumujące; niski poziom tnie koszt przy prostych zadaniach |
response_format | wymuszenie JSON zgodnego ze schematem | wyciąganie danych - structured output |
tools | lista funkcji, które model może wywołać | agenci - function calling |
stream | odpowiedź kawałek po kawałku | czaty - przykład w Pythonie |
Moje ustawienia na start
| Zadanie | temperature | max_tokens | System prompt |
|---|---|---|---|
| Wyciąganie danych, klasyfikacja | 0 | 500 + schemat JSON | krótki, z listą kategorii |
| Streszczenie, tłumaczenie | 0,2-0,3 | 2× oczekiwana długość | język, długość, dla kogo |
| Teksty, odpowiedzi czatu | 0,7 | 1500-3000 | rola, ton, czego unikać |
| Burza mózgów, nazwy, slogany | 0,9-1,1 | 500 | „podaj 10 propozycji, każda inna” |
| Modele rozumujące (GPT-6, Gemini z myśleniem) | nie ustawiam | min. 4000 | jak wyżej + reasoning_effort |
Najczęstsze pytania
Co to jest system prompt?
To instrukcja dla modelu wysyłana na początku zapytania, z rolą system. Ustala zasady całej rozmowy: kim jest model, w jakim języku i formacie odpowiada, czego nie robi. W aplikacjach czatu użytkownik go nie widzi.
Jaką temperaturę ustawić?
0 do zadań z jedną poprawną odpowiedzią (dane, klasyfikacja, kod), około 0,7 do zwykłego tekstu, 0,9-1,1 do szukania pomysłów. Powyżej 1,2 odpowiedzi zaczynają się sypać, co widać w moim teście.
Co to jest okno kontekstowe?
Maksymalna liczba tokenów, którą model przetworzy w jednym zapytaniu, razem z odpowiedzią. W październiku 2026 czołowe modele mają około 1 mln tokenów, mniejsze 128-256 tys.
Czym różni się max_tokens od okna kontekstowego?
Okno to limit całości (wejście plus wyjście), ustalony przez model. max_tokens to Twój limit samej odpowiedzi, który ustawiasz w zapytaniu i który nie może przekroczyć maksymalnej odpowiedzi modelu.
Dlaczego model ignoruje mój system prompt?
Najczęściej instrukcje są sprzeczne albo ogólnikowe, a prośba użytkownika mówi co innego. Pomaga konkret („maksymalnie 3 zdania”), przykład oczekiwanej odpowiedzi i powtórzenie najważniejszej zasady na końcu instrukcji.
Google · Twoje źródłaPromptowy wyżej w Twoim Google - jednym kliknięciemDodaj do preferowanych źródeł →Źródła i data sprawdzenia
Eksperymenty uruchomiłem 4 października 2026 na Windows 11, Python 3.13.15, openai 3.24.0, przez OpenRouter. Koszt wszystkich zapytań z tego tekstu: około 0,002 USD.
- OpenRouter - parametry zapytań
- OpenRouter - require_parameters
- Anthropic - modele, okna kontekstowe i limity odpowiedzi
- Google - modele Gemini
- OpenAI - modele
- DeepSeek - modele i limity
Cały tydzień w AI, w jednym mailu
Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.
Zapisz się za darmo →
