JSON Schema w promptach
Ograniczanie struktury danych wyjściowych
JSON Schema w promptach to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Prompt Engineering, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Schemat jako kontrakt danych wyjściowych
JSON Schema deklaratywnie opisuje strukturę poprawnych danych wyjściowych: typy, wymagane klucze, ograniczenia wartości i zagnieżdżenia. Po przekazaniu do API obsługującego ustrukturyzowane dane wyjściowe staje się twardym kontraktem, a po umieszczeniu w promptcie — silną wskazówką.
Biegłość w tworzeniu schematów to podstawowa umiejętność generowania strukturalnego.
Flaga strict zmienia wszystko
W trybie strict dostawcy wymagają, aby każda właściwość była wymieniona w required, a additionalProperties miało wartość false. Pola opcjonalne wyraża się jako unię z null, a nie przez ich pominięcie.
{
'type': 'object',
'properties': {
'name': {'type': 'string'},
'nickname': {'type': ['string', 'null']}
},
'required': ['name', 'nickname'],
'additionalProperties': False
}Ograniczanie wartości skalarnych
Należy przenieść walidację do schematu zamiast wykonywać ją po wygenerowaniu danych:
enumdla stałego zbioru możliwości.minimum/maximumdla zakresów liczbowych.patterndla ciągów znaków weryfikowanych za pomocą wyrażeń regularnych.formatjako wskazówka, na przykładdate-timelubemail.
{
'rating': {'type': 'integer', 'minimum': 1, 'maximum': 5},
'sku': {'type': 'string', 'pattern': '^[A-Z]{3}-[0-9]{4}$'},
'created': {'type': 'string', 'format': 'date-time'}
}Tablice i krotki
Należy używać items dla jednorodnych tablic oraz dodawać minItems/maxItems, aby ograniczyć ich długość. W przypadku krotek pozycyjnych należy przekazać tablicę schematów za pomocą prefixItems.
{
'tags': {
'type': 'array',
'items': {'type': 'string'},
'minItems': 1,
'maxItems': 5
}
}Sumy rozłączne z użyciem oneOf
Polimorficzne wyniki należy modelować za pomocą oneOf oraz pola rozróżniającego. Model wybiera dokładnie jedną gałąź, a deserializator przełącza się na podstawie znacznika.
{
'oneOf': [
{'type': 'object', 'properties': {
'kind': {'const': 'email'},
'address': {'type': 'string', 'format': 'email'}},
'required': ['kind', 'address']},
{'type': 'object', 'properties': {
'kind': {'const': 'phone'},
'number': {'type': 'string'}},
'required': ['kind', 'number']}
]
}Generowanie schematów na podstawie typów
Ręczne pisanie schematów jest podatne na błędy. Należy wyprowadzać je z modeli typowanych, aby schemat i kod nigdy się nie rozminęły.
from pydantic import BaseModel
class Invoice(BaseModel):
total: float
currency: str
paid: bool
schema = Invoice.model_json_schema()
# pass schema directly to response_formatOpisy też są promptami
Każdy description w schemacie jest odczytywany przez model. Należy używać opisów do sterowania znaczeniem, a nie tylko do dokumentowania pól.
Na przykład opis 'kod kraju ISO-3166 alpha-2, wielkie litery' znacząco poprawia dokładność pola. Opisy należy traktować jako mikroprompty osadzone w kontrakcie.
{
'country': {
'type': 'string',
'description': 'ISO-3166 alpha-2 code, uppercase, e.g. US, TR, DE'
}
}Osadzanie schematu w promptcie
Gdy dostawca nie oferuje natywnej obsługi, należy umieścić schemat w promptcie i wymagać zgodności z nim. Warto połączyć go z pojedynczym przykładem in-context oraz wyraźną instrukcją tylko JSON, bez prozy.
SYSTEM = (
'You output ONLY JSON matching this schema. No markdown, no commentary.\n'
'Schema:\n' + json.dumps(schema) + '\n'
'If a value is unknown, use null.'
)Unikanie rozdęcia schematu
Nadmiernie głębokie lub rozgałęzione schematy dezorientują model i zwiększają koszt tokenów. Wytyczne:
- Należy ograniczać zagnieżdżenia i spłaszczać strukturę, gdy jest to możliwe.
- Należy preferować enumy zamiast swobodnych ciągów znaków.
- Należy dzielić ogromny schemat na kilka ukierunkowanych wywołań.
- Niektórzy dostawcy ograniczają głębokość zagnieżdżenia i łączną liczbę właściwości; należy sprawdzić te limity.
Referencje i ponowne użycie
Należy używać $defs i $ref do ponownego wykorzystywania podschematów (na przykład Address używanego przy rozliczeniach i wysyłce). Niektóre tryby strict ograniczają głębokość rekurencji, dlatego przed wykorzystaniem referencji samoodwołujących się należy sprawdzić obsługę tej funkcji.
{
'$defs': {
'Address': {'type': 'object', 'properties': {
'city': {'type': 'string'}}, 'required': ['city'],
'additionalProperties': False}
},
'type': 'object',
'properties': {
'billing': {'$ref': '#/$defs/Address'},
'shipping': {'$ref': '#/$defs/Address'}
},
'required': ['billing', 'shipping'],
'additionalProperties': False
}Weryfikowanie samego schematu
Istnieje subtelna klasa błędów: schemat jest niepoprawny, a nie dane wyjściowe. Należy uruchamiać lint i weryfikować schematy w CI względem met schematu JSON Schema, a przed wdrożeniem przepuścić przykładowy obiekt przez walidator.
import jsonschema
jsonschema.Draft202012Validator.check_schema(schema)
# also: validate a known-good sample
jsonschema.validate(sample_obj, schema)Szybki test
Jak w trybie strict JSON Schema dostawcy poprawnie wyraża się pole opcjonalne?
Podsumowanie
Możesz już tworzyć precyzyjne schematy:
- tryb strict wymaga umieszczenia wszystkich pól w required oraz ustawienia additionalProperties na false.
- Wartości skalarne należy ograniczać za pomocą enum, zakresu, pattern i format.
- Polimorfizm należy modelować za pomocą dyskryminatorów oneOf.
- Schematy należy generować z modeli typowanych, a opisy traktować jako mikroprompty.
- Sam schemat należy weryfikować w CI.
Następnie: zastosowanie schematów w wywoływaniu narzędzi i funkcji.
Ucz się AI Prompt Engineering dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 53
- Lekcje
- 199
Często zadawane pytania
Czy lekcja „JSON Schema w promptach” jest bezpłatna?
Tak — pełny tekst „JSON Schema w promptach” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Prompt Engineering, przejdź na CoddyKit PRO. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Co nauczysz się w „JSON Schema w promptach”?
Ograniczanie struktury danych wyjściowych Ćwiczysz AI Prompt Engineering z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Prompt Engineering?
Nie wymagamy żadnego doświadczenia. AI Prompt Engineering w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „JSON Schema w promptach”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Prompt Engineering?
Tak. Każda lekcja AI Prompt Engineering zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego warto używać ustrukturyzowanych danych wyjściowych
- JSON Schema w promptach
- Schematy narzędzi i funkcji
- Pętle naprawy i walidacji