Poradniki
Poradniki · 11 min czytania · 28 marca 2026

Jak używać OpenAI Harmony Response Format – przewodnik praktyczny

Grafika ilustrująca: Jak używać OpenAI Harmony Response Format – przewodnik praktyczny

Źródło: Link

W skrócie:
  • Harmony Response Format to metoda formatowania odpowiedzi z API OpenAI w przewidywalnej strukturze JSON
  • Pozwala kontrolować format odpowiedzi modelu GPT bez dodatkowych promptów
  • Szczególnie przydatny w aplikacjach, które potrzebują spójnych danych wyjściowych
  • Działa z modelami GPT-4o, GPT-4.5 i nowszymi – nie z przestarzałym GPT-4

Większość ludzi używa API OpenAI jak czarnej skrzynki: wrzucasz prompt, dostajesz tekst. Problem? Nigdy nie wiesz, w jakiej formie przyjdzie odpowiedź. Raz lista wypunktowana, raz akapit, a raz JSON (ale z błędami składni).

OpenAI Harmony Response Format rozwiązuje ten problem. To mechanizm, który każe modelowi GPT zwracać dane w ściśle określonej strukturze. Bez improwizacji, bez niespodzianek. Zamiast prosić model "proszę, zwróć mi JSON", definiujesz schemat i dostajesz dokładnie to, czego potrzebujesz.

Czym właściwie jest Harmony Response Format

Harmony Response Format to parametr w API sztucznej inteligencji OpenAI, który wymusza na modelu językowym zwracanie odpowiedzi w konkretnym formacie JSON. Definiujesz schemat (tzw. JSON Schema), a model GPT musi się do niego dostosować – nawet jeśli naturalnie chciałby odpowiedzieć inaczej.

Przykład: prosisz o analizę opinii klienta. Bez Harmony dostajesz esej. Z Harmony otrzymujesz:

{
 "sentiment": "negatywny",
 "score": -0.7,
 "main_issues": ["długi czas dostawy", "uszkodzone opakowanie"],
 "suggested_action": "kontakt z obsługą klienta"
}

Zawsze w tej samej strukturze. Zawsze z tymi samymi kluczami. Gotowe do przetworzenia przez Twoją aplikację.

Różnica między standardową odpowiedzią a formatem Harmony

Co będzie Ci potrzebne na start

Żeby pracować z Harmony Response Format, musisz mieć:

  • Konto OpenAI z aktywnym API key – bez tego nie uruchomisz żadnego zapytania
  • Dostęp do modeli GPT-4o lub nowszych – starsze modele (GPT-3.5, GPT-4 z 2023) nie obsługują tej funkcji
  • Podstawową znajomość JSON – nie musisz być programistą, ale powinieneś rozumieć strukturę klucz-wartość
  • Narzędzie do wysyłania zapytań API – może to być Postman, curl w terminalu, lub kod w Pythonie/JavaScript

Jeśli dopiero zaczynasz pracę z API OpenAI, sprawdź nasz przewodnik po podłączaniu ChatGPT do aplikacji – tam znajdziesz podstawy.

Krok 1: Zdefiniuj schemat odpowiedzi

Pierwsza rzecz: musisz określić, jak ma wyglądać odpowiedź. Używasz do tego JSON Schema – standardu opisującego strukturę danych JSON.

Załóżmy, że budujesz chatbot AI dla sklepu internetowego i chcesz, żeby model klasyfikował zapytania klientów. Twój schemat może wyglądać tak:

{
 "type": "object",
 "properties": {
 "kategoria": {
 "type": "string",
 "enum": ["zamowienie", "reklamacja", "produkt", "platnosc", "inne"]
 },
 "pilnosc": {
 "type": "string",
 "enum": ["niska", "srednia", "wysoka"]
 },
 "sugerowane_dzialanie": {
 "type": "string"
 }
 },
 "required": ["kategoria", "pilnosc"]
}

Co tu się dzieje:

  • type: object – odpowiedź będzie obiektem JSON
  • properties – lista pól, które mają się pojawić w odpowiedzi
  • enum – dozwolone wartości (model nie może wymyślić niczego poza tą listą)
  • required – pola obowiązkowe (model MUSI je wypełnić)

Zapisz ten schemat – będziesz go przekazywać w każdym zapytaniu do API.

Jak tworzyć dobre schematy

Kilka zasad, które oszczędzą Ci frustracji:

  1. Bądź konkretny – zamiast type: string bez ograniczeń, użyj enum z konkretnymi wartościami
  2. Nie przesadzaj z zagnieżdżeniami – duże modele językowe LLM radzą sobie z 2-3 poziomami, głębsze struktury mogą powodować błędy
  3. Dodawaj opisy – pole description w schemacie pomaga modelowi zrozumieć, czego oczekujesz
  4. Testuj na prostych przykładach – zanim użyjesz schematu w produkcji, sprawdź go na kilku testowych promptach

Krok 2: Wyślij zapytanie z parametrem response_format

Teraz łączysz schemat z zapytaniem do API. W parametrze response_format przekazujesz typ json_schema i Twój schemat.

Przykład w Pythonie (używając biblioteki openai):

import openai

client = openai.OpenAI(api_key="twoj-klucz-api")

response = client.chat.completions.create(
 model="gpt-4o",
 messages=[
 {"role": "system", "content": "Jesteś asystentem klasyfikującym zapytania klientów."},
 {"role": "user", "content": "Kiedy dostanę zwrot pieniędzy za zwrócony produkt?"}
 ],
 response_format={
 "type": "json_schema",
 "json_schema": {
 "name": "klasyfikacja_zapytania",
 "schema": {
 "type": "object",
 "properties": {
 "kategoria": {
 "type": "string",
 "enum": ["zamowienie", "reklamacja", "produkt", "platnosc", "inne"]
 },
 "pilnosc": {
 "type": "string",
 "enum": ["niska", "srednia", "wysoka"]
 },
 "sugerowane_dzialanie": {
 "type": "string"
 }
 },
 "required": ["kategoria", "pilnosc"]
 }
 }
 }
)

print(response.choices[0].message.content)

Odpowiedź, którą dostaniesz:

{
 "kategoria": "reklamacja",
 "pilnosc": "srednia",
 "sugerowane_dzialanie": "Przekieruj do działu zwrotów, podaj standardowy czas realizacji (5-7 dni roboczych)"
}

Dokładnie w formacie, który zdefiniowałeś. Bez dodatkowych komentarzy, bez improwizacji.

Przykład implementacji Harmony Response Format w Pythonie

Co jeśli używasz innego języka

JavaScript (Node.js):

const openai = require('openai');

const client = new openai.OpenAI({
 apiKey: 'twoj-klucz-api'
});

const response = await client.chat.completions.create({
 model: 'gpt-4o',
 messages: [
 {role: 'system', content: 'Jesteś asystentem klasyfikującym zapytania klientów.'},
 {role: 'user', content: 'Kiedy dostanę zwrot pieniędzy za zwrócony produkt?'}
 ],
 response_format: {
 type: 'json_schema',
 json_schema: {
 name: 'klasyfikacja_zapytania',
 schema: { /* twój schemat */ }
 }
 }
});

console.log(response.choices[0].message.content);

Mechanizm jest identyczny – zmieniają się tylko szczegóły składni.

Krok 3: Obsłuż odpowiedź w swojej aplikacji

Teraz masz gwarancję, że odpowiedź zawsze będzie w tym samym formacie. Możesz bezpiecznie parsować JSON i używać danych dalej:

import json

# Parsuj odpowiedź
data = json.loads(response.choices[0].message.content)

# Użyj danych
if data['pilnosc'] == 'wysoka':
 wyslij_alert_do_managera(data['sugerowane_dzialanie'])
elif data['kategoria'] == 'reklamacja':
 przekieruj_do_dzialu_zwrotow()
else:
 zapisz_do_kolejki_standardowej()

Żadnych if "kategoria" in response, żadnego sprawdzania, czy pole istnieje. Model GPT musi zwrócić wszystkie wymagane pola – inaczej API zwróci błąd.

Walidacja i obsługa błędów

Nawet z Harmony czasem coś pójdzie nie tak. Dobre praktyki:

  1. Zawsze owijaj parsowanie JSON w try-except – teoretycznie model powinien zwrócić poprawny JSON, ale lepiej dmuchać na zimne
  2. Loguj nieoczekiwane wartości – jeśli kategoria ma być z enuma, ale dostałeś coś innego, zapisz to do logów
  3. Miej plan B – co zrobisz, jeśli API zwróci błąd? Może fallback na prostszą klasyfikację?

Kiedy Harmony naprawdę się przydaje

Harmony Response Format nie jest potrzebny w każdej sytuacji. Sprawdza się, gdy:

  • Integrujesz AI z istniejącym systemem – np. CRM, baza danych, kolejka zadań. Potrzebujesz przewidywalnych danych wejściowych
  • Automatyzujesz procesy – klasyfikacja ticketów, analiza opinii, ekstrakcja danych z dokumentów
  • Budujesz API dla innych deweloperów – Twoi użytkownicy oczekują spójnych odpowiedzi
  • Przetwarzasz duże wolumeny danych – ręczne sprawdzanie każdej odpowiedzi nie wchodzi w grę

Kiedy NIE potrzebujesz Harmony:

  • Tworzysz chatbot konwersacyjny – tam naturalny język jest wartością
  • Generujesz treści kreatywne – ograniczanie formatu zabija kreatywność
  • Testujesz pomysły – na etapie eksperymentów sztywny format tylko przeszkadza
Kiedy warto (a kiedy nie) używać Harmony Response Format

Przykłady praktyczne – co możesz zbudować

Ekstrakcja danych z faktur

Masz skan faktury w PDF. Chcesz wyciągnąć: numer faktury, datę, kwotę, NIP sprzedawcy. Schemat:

{
 "type": "object",
 "properties": {
 "numer_faktury": {"type": "string"},
 "data_wystawienia": {"type": "string", "format": "date"},
 "kwota_brutto": {"type": "number"},
 "waluta": {"type": "string", "enum": ["PLN", "EUR", "USD"]},
 "nip_sprzedawcy": {"type": "string"}
 },
 "required": ["numer_faktury", "data_wystawienia", "kwota_brutto"]
}

Wysyłasz tekst z OCR do API, dostajesz ustrukturyzowane dane gotowe do wrzucenia do systemu księgowego.

Moderacja treści

Użytkownicy dodają komentarze na forum. Chcesz automatycznie je klasyfikować:

{
 "type": "object",
 "properties": {
 "czy_bezpieczny": {"type": "boolean"},
 "kategorie_naruszen": {
 "type": "array",
 "items": {
 "type": "string",
 "enum": ["spam", "hate_speech", "wulgaryzmy", "dezinformacja", "brak"]
 }
 },
 "poziom_pewnosci": {"type": "number", "minimum": 0, "maximum": 1}
 },
 "required": ["czy_bezpieczny", "kategorie_naruszen"]
}

Model analizuje komentarz i zwraca decyzję w formacie, który Twoja aplikacja może natychmiast przetworzyć.

Analiza nastrojów w opiniach klientów

Masz tysiące opinii o produkcie. Chcesz je automatycznie kategoryzować:

{
 "type": "object",
 "properties": {
 "sentiment": {"type": "string", "enum": ["pozytywny", "neutralny", "negatywny"]},
 "score": {"type": "number", "minimum": -1, "maximum": 1},
 "glowne_tematy": {
 "type": "array",
 "items": {"type": "string"}
 },
 "wymaga_odpowiedzi": {"type": "boolean"}
 },
 "required": ["sentiment", "score"]
}

Zamiast czytać każdą opinię ręcznie, dostajesz dashboard z agregatami: "72% pozytywnych, główne tematy: szybka dostawa (45%), dobra jakość (38%), wysoka cena (12%)".

Więcej o praktycznym wykorzystaniu AI w biznesie znajdziesz w artykule o wdrażaniu chatbotów AI.

Najczęstsze problemy i jak je rozwiązać

Problem 1: Model zwraca błędny JSON

Teoretycznie nie powinno się zdarzyć, ale czasem API zwraca błąd walidacji. Przyczyny:

  • Schemat jest zbyt skomplikowany – spróbuj uprościć, zmniejsz zagnieżdżenia
  • Enum ma zbyt wiele opcji – powyżej 20-30 wartości model może się gubić
  • Używasz starego modelu – sprawdź, czy na pewno to GPT-4o lub nowszy

Rozwiązanie: zacznij od prostego schematu (2-3 pola) i stopniowo go rozbudowuj.

Problem 2: Odpowiedzi są poprawne strukturalnie, ale merytorycznie błędne

Harmony wymusza format, nie poprawność treści. Jeśli model klasyfikuje reklamację jako "pytanie o produkt", problem leży w promptcie, nie w schemacie.

Rozwiązanie:

  1. Dopracuj system prompt – bądź konkretny co do definicji kategorii
  2. Dodaj przykłady w wiadomościach (few-shot learning)
  3. Użyj description w schemacie, żeby wyjaśnić, czego oczekujesz w każdym polu

Problem 3: Koszty rosną szybciej niż oczekiwałeś

Harmony Response Format nie zwiększa bezpośrednio kosztów, ale złożone schematy mogą wydłużać odpowiedzi modelu (więcej tokenów wyjściowych).

Rozwiązanie:

  • Ogranicz długość pól tekstowych (maxLength w schemacie)
  • Użyj mniejszego modelu tam, gdzie to możliwe (GPT-4o-mini zamiast GPT-4.5)
  • Cachuj powtarzalne zapytania

Harmony vs inne metody formatowania

Przed Harmony ludzie używali różnych trików, żeby wymusić strukturę odpowiedzi:

  • Prośba w promptcie – "Zwróć odpowiedź w formacie JSON". Problem: model czasem ignoruje, czasem dodaje komentarze poza JSON
  • Function calling – definiujesz "funkcję", którą model ma wywołać. Działa, ale jest bardziej skomplikowane w setupie
  • Parsowanie regex – wyciągasz dane z tekstu wyrażeniami regularnymi. Kruche jak szkło – jeden zmieniony przecinek i wszystko się sypie

Harmony to oficjalny, wspierany przez OpenAI mechanizm. Jeśli potrzebujesz strukturalnych danych, to najlepszy wybór.

Jeśli dopiero zaczynasz pracę z API i chcesz poznać podstawy, sprawdź przewodnik po używaniu ChatGPT do programowania.

FAQ – najczęstsze pytania

Czy Harmony Response Format działa z wszystkimi modelami OpenAI?

Nie. Działa tylko z nowszymi modelami: GPT-4o, GPT-4.5, o1, o3, o4-mini i nowszymi. Starsze modele (GPT-3.5, GPT-4 z 2023 roku) nie obsługują tego parametru. Jeśli spróbujesz użyć Harmony ze starym modelem, API zwróci błąd.

Czy mogę używać Harmony do generowania długich tekstów w określonym formacie?

Tak, ale z ograniczeniami. Harmony świetnie sprawdza się do strukturalnych danych (JSON z polami tekstowymi do ~500 znaków). Jeśli potrzebujesz wygenerować artykuł na 2000 słów w konkretnym formacie (np. z sekcjami H2/H3), lepiej użyj szczegółowego promptu bez Harmony – model będzie miał więcej swobody w doborze słów.

Czy Harmony zwiększa koszty używania API?

Nie bezpośrednio. Płacisz za tokeny (wejściowe i wyjściowe), jak zawsze. Harmony może nieznacznie zwiększyć liczbę tokenów wyjściowych (bo model musi dopasować się do schematu), ale różnica jest minimalna – rzędu 5-10%. Większy wpływ na koszty ma wybór modelu (GPT-4.5 vs GPT-4o-mini) niż użycie Harmony.

Co się stanie, jeśli model nie może dopasować odpowiedzi do schematu?

API zwróci błąd walidacji. Model GPT spróbuje maksymalnie dopasować się do schematu, ale jeśli schemat wymaga niemożliwego (np. "zwróć datę urodzenia osoby" dla tekstu, który jej nie zawiera), dostaniesz błąd. Dlatego ważne jest, żeby schemat był realistyczny względem danych wejściowych.

Czy mogę używać Harmony w połączeniu z function calling?

Nie w tym samym zapytaniu. Harmony Response Format i function calling to dwa różne mechanizmy kontroli formatu odpowiedzi – musisz wybrać jeden. W większości przypadków Harmony jest prostszy i wystarczający. Function calling przydaje się, gdy chcesz, żeby model "wywoływał" różne funkcje w zależności od kontekstu (np. raz sprawdza pogodę, raz rezerwuje lot).

Chcesz opanować AI od podstaw?

Ten poradnik to dopiero początek. W naszym kursie "Praktyczna AI" nauczysz się korzystać z ChatGPT, Claude i innych narzędzi AI w sposób systematyczny — od zera do zaawansowanego poziomu.

Sprawdź kurs →

Podsumowanie

Harmony Response Format to narzędzie dla ludzi, którzy potrzebują przewidywalnych, strukturalnych odpowiedzi z API OpenAI. Definiujesz schemat JSON, model GPT musi się do niego dostosować – bez improwizacji, bez niespodzianek.

Najważniejsze punkty:

  • Działa tylko z nowszymi modelami (GPT-4o i nowsze)
  • Wymaga zdefiniowania JSON Schema przed wysłaniem zapytania
  • Idealny do automatyzacji: klasyfikacja, ekstrakcja danych, moderacja
  • Nie zastępuje dobrego promptu – wymusza format, nie poprawność merytoryczną

Jeśli masz dostęp do API OpenAI, stwórz prosty schemat z 2-3 polami i przetestuj na przykładowym promptcie. Zacznij od czegoś prostego (np. klasyfikacja sentymentu: pozytywny/neutralny/negatywny + score 0-1). Dopiero gdy to zadziała, rozbuduj schemat o dodatkowe pola. Testowanie na prostych przykładach oszczędzi Ci godzin debugowania później.

Źródła

Informacje o artykule

Ten temat omawiam szerzej na webinarze

90 minut praktycznej wiedzy o AI. Pokaze Ci krok po kroku, jak zaczac oszczedzac 10 godzin tygodniowo dzieki sztucznej inteligencji.

Zapisz sie na webinar
Udostępnij:
Jan Gajos

Ekspert AI & Founder, AI Evolution

Pasjonat sztucznej inteligencji, który od 18 lat działa z sukcesem biznesowo i szkoleniowo. Wprowadzam AI do swoich firm oraz codziennego życia. Fascynują mnie nowe technologie, gry wideo i składanie klocków Lego – tam też widzę logikę i kreatywność, które AI potrafi wzmacniać. Wierzę, że dobrze użyta sztuczna inteligencja to nie ogłupiające ułatwienie, lecz prawdziwy przełom w sposobie, w jaki myślimy, tworzymy i pracujemy.