AI Prompt Engineering · Lekcja

JSON Schema w promptach

Ograniczanie struktury danych wyjściowych

Lekcja 2 z 413 kroki

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:

  • enum dla stałego zbioru możliwości.
  • minimum/maximum dla zakresów liczbowych.
  • pattern dla ciągów znaków weryfikowanych za pomocą wyrażeń regularnych.
  • format jako wskazówka, na przykład date-time lub email.
{
  '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_format

Opisy 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.

Bezpłatny start

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

  1. Dlaczego warto używać ustrukturyzowanych danych wyjściowych
  2. JSON Schema w promptach
  3. Schematy narzędzi i funkcji
  4. Pętle naprawy i walidacji
← Powrót do AI Prompt Engineering