Walidatory schematów i reguł
Wymuszanie ograniczeń
Walidatory schematów i reguł to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 3 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.
Walidatory egzekwują kontrakt
Walidator to mechanizm ochronny, który sprawdza dane wyjściowe względem jawnej specyfikacji: JSON Schema, zestawu reguł biznesowych albo obu tych elementów. W przeciwieństwie do klasyfikatora moderacyjnego walidator jest deterministyczny i w pełni audytowalny — te same dane wejściowe zawsze dają ten sam werdykt.
Warstwa walidacji schematu
Pierwszy walidator potwierdza, że dane wyjściowe spełniają kontrakt strukturalny. Należy zebrać wszystkie błędy, a nie tylko pierwszy, aby informacje zwrotne potrzebne do naprawy były kompletne.
import jsonschema
def schema_errors(obj, schema):
v = jsonschema.Draft202012Validator(schema)
return [f"{list(e.path) or 'root'}: {e.message}"
for e in v.iter_errors(obj)]Poza schematem: reguły biznesowe
Schematy nie pozwalają wyrazić wszystkiego. Schemat może określać, że discount jest liczbą, ale nie że nie może przekraczać wartości subtotal. Walidatory reguł kodują te niezmienniki między polami i niezmienniki domenowe.
RULES = [
('discount_le_subtotal', lambda o: o['discount'] <= o['subtotal']),
('total_consistent', lambda o: o['total'] == o['subtotal'] - o['discount']),
('currency_supported', lambda o: o['currency'] in SUPPORTED)
]
def rule_errors(o):
return [name for name, fn in RULES if not fn(o)]Modele typowane jako walidatory
Biblioteka modeli typowanych (np. Pydantic) pełni jednocześnie funkcję generatora schematów i walidatora, a także obsługuje niestandardowe walidatory reguł. Niepowodzenie parsowania jest werdyktem.
from pydantic import BaseModel, field_validator
class Order(BaseModel):
subtotal: float
discount: float
total: float
@field_validator('discount')
@classmethod
def discount_ok(cls, v, info):
if v < 0:
raise ValueError('discount must be non-negative')
return vWalidatory ugruntowania i cytowań
W przypadku danych wyjściowych RAG należy sprawdzać, czy twierdzenia są poparte dostarczonym kontekstem. Należy wymagać od modelu podawania identyfikatorów źródeł, a następnie weryfikować, czy każdy przytoczony identyfikator istnieje oraz czy cytowane fragmenty rzeczywiście występują w źródle. Należy odrzucać odpowiedzi, które odwołują się do brakujących lub zmyślonych źródeł.
def citations_valid(answer, sources):
for cite in answer['citations']:
if cite['source_id'] not in sources:
return False
if cite['quote'] not in sources[cite['source_id']]:
return False
return TrueKontrole referencyjne i między systemami
Niektóre reguły wymagają wyszukiwania w zewnętrznych systemach: czy przywołany identyfikator zamówienia istnieje, czy produkt jest dostępny, czy data mieści się w prawidłowym przedziale? Te walidatory odpytują Państwa systemy. Należy zadbać o ich szybkość (buforowanie, przetwarzanie wsadowe), ponieważ znajdują się na ścieżce obsługi odpowiedzi.
def order_exists(o):
return db.exists('SELECT 1 FROM orders WHERE id = %s', o['order_id'])Werdykty z oznaczeniem ważności
Nie wszystkie naruszenia mają taką samą wagę. Każdej regule należy przypisać poziom ważności, aby potok mógł wybrać właściwe działanie: całkowicie blokować krytyczne naruszenia, ponawiać generowanie w przypadku problemów jakościowych, a drobne naruszenia przepuszczać z ostrzeżeniem.
RULE_SEVERITY = {
'discount_le_subtotal': 'critical',
'total_consistent': 'critical',
'tone_professional': 'warning'
}Komponowanie walidatorów w odpowiedniej kolejności
Walidatory należy uruchamiać od najtańszych i przerywać działanie po krytycznych błędach: najpierw schemat, następnie reguły działające w pamięci, potem wyszukiwania zewnętrzne, a na końcu ewentualne kontrole wykonywane przez model oceniający. Minimalizuje to koszty na typowej ścieżce odrzucenia.
def validate_all(obj):
errs = schema_errors(obj, SCHEMA)
if errs: return Reject(errs, 'critical')
errs = rule_errors(obj)
if errs: return Reject(errs, max_severity(errs))
if not order_exists(obj): return Reject(['order_id'], 'critical')
return Accept()Walidatory napędzają informacje zwrotne potrzebne do naprawy
Wartość walidatora rośnie wielokrotnie, gdy jego komunikaty zasilają pętlę naprawczą. Należy generować błędy możliwe do przetworzenia przez maszynę, zawierające ścieżkę pola, niespełnioną regułę i nieprawidłową wartość, aby model mógł precyzyjnie naprawić problem w jednej iteracji.
{'errors': [
{'path': 'discount', 'rule': 'discount_le_subtotal',
'got': 120, 'limit': 100}
]}Testowanie samych walidatorów
Błędny walidator może po cichu przepuszczać nieprawidłowe dane wyjściowe albo blokować prawidłowe. Należy testować każdą regułę za pomocą przypadków pozytywnych i negatywnych oraz dodawać testy oparte na właściwościach dla niezmienników liczbowych. Zestaw testów walidatorów to kod o krytycznym znaczeniu dla produkcji, a nie skrypt.
def test_discount_rule():
assert rule_errors({'discount':10,'subtotal':100,'total':90}) == []
assert 'discount_le_subtotal' in rule_errors(
{'discount':120,'subtotal':100,'total':-20})Walidatory a dekodowanie z ograniczeniami
Dekodowanie z ograniczeniami zapobiega błędom strukturalnym podczas generowania, ale nie może wymuszać semantyki (nie zna Państwa reguł biznesowych). Walidatory wykrywają naruszenia semantyczne już po wygenerowaniu danych. Należy stosować oba mechanizmy: dekodowanie do kontroli kształtu, walidatory do kontroli znaczenia, a pętlę naprawczą do uzgadniania wyników.
Szybki test
JSON Schema oznacza discount i subtotal jako liczby. Model zwraca discount równy 120 przy subtotal równym 100. Która warstwa powinna to wykryć?
Podsumowanie
Walidatory schematów i reguł:
- Walidacja schematu obejmuje strukturę, a walidatory reguł — semantykę.
- Modele typowane generują schematy i przeprowadzają walidację w jednym miejscu.
- W przypadku RAG i przepływów danych należy dodawać kontrole ugruntowania, cytowań i odwołań.
- Należy oznaczać ważność, komponować walidatory od najtańszych i przekazywać precyzyjne błędy do naprawy.
- Walidatory należy testować jak kod o krytycznym znaczeniu dla produkcji.
Następnie: walidacja samokrytyczna, w której model sprawdza własne dane wyjściowe.
Często zadawane pytania
Czy lekcja „Walidatory schematów i reguł” jest bezpłatna?
Tak — pełny tekst „Walidatory schematów i reguł” 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 „Walidatory schematów i reguł”?
Wymuszanie ograniczeń Ć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 3 z 4.
Ile czasu zajmuje lekcja „Walidatory schematów i reguł”?
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
- Czym są mechanizmy ochronne
- Filtrowanie danych wejściowych i wyjściowych
- Walidatory schematów i reguł
- Walidacja przez samokrytykę