Pętle naprawcze dla nieprawidłowych danych wyjściowych
Jeśli nie można sparsować JSON-a, odeślij błąd do modelu i poproś o poprawienie danych wyjściowych.
Pętle naprawcze dla nieprawidłowych danych wyjściowych to bezpłatna lekcja AI Agents 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 Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Nawet tryby ścisłe czasem zawodzą
Starsze modele, przypadki brzegowe lub dostawcy bez trybu ścisłego czasami zwracają nieprawidłowy JSON. Odporne agenty odzyskują poprawność, prosząc model o naprawienie wyniku.
Basic Repair Loop
from pydantic import ValidationError
import json
def call_with_repair(messages, schema, max_attempts=3):
for attempt in range(max_attempts):
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=messages,
response_format={'type': 'json_object'}
)
raw = response.choices[0].message.content
try:
return schema.model_validate_json(raw)
except (json.JSONDecodeError, ValidationError) as e:
messages.append({'role': 'assistant', 'content': raw})
messages.append({
'role': 'user',
'content': f'That output failed to validate: {e}.\nReturn ONLY valid JSON that matches the schema. No prose, no markdown fences.'
})
raise RuntimeError('Could not get valid output after repair attempts.')Dlaczego to działa
Model widzi komunikat o błędzie i zwykle poprawia wynik w następnej turze. Należy dodać wyraźne instrukcje:
- "Bez tekstu prozą"
- "Bez bloków markdown"
- "Dopasuj dokładnie tę strukturę: ..."
Usuwanie znaczników bloków Markdown
Modele często opakowują JSON w ```json ... ```. Przed parsowaniem należy je usunąć:
import re
def extract_json(text):
m = re.search(r'```(?:json)?\s*(.*?)```', text, re.S)
if m:
return m.group(1).strip()
return text.strip()
sample = '```json\n{"name": "Alice"}\n```'
print(extract_json(sample))
Wycinanie od pierwszego nawiasu
Jeśli występuje zbędny tekst prozą, należy wyciąć fragment od pierwszego { do ostatniego odpowiadającego mu }:
def find_json_slice(text):
start = text.find('{')
if start == -1:
return None
depth = 0
for i, c in enumerate(text[start:], start):
if c == '{': depth += 1
if c == '}':
depth -= 1
if depth == 0:
return text[start:i+1]
return None
sample = 'Here is your answer: {"name": "Alice", "age": 30} - hope that helps!'
print(find_json_slice(sample))
Narzędzia, które robią to za Ciebie
- Instructor — łączy Pydantic, pętle naprawcze i ponowienia prób
- Outlines — gwarantuje dane strukturalne dzięki dekodowaniu sterowanemu
- jsonformer — wymusza poprawny JSON token po tokenie (modele HF)
Skuteczne prompty naprawcze
Należy uwzględnić konkretny komunikat o błędzie oraz krótkie przypomnienie o formacie:
repair_prompt = f'''
Your previous output had this error: {error}
Fix the output. Requirements:
- Valid JSON only
- Match this schema: {json.dumps(schema)}
- No prose, no markdown fences
'''Koszt pętli naprawczych
Każda naprawa oznacza kolejne wywołanie LLM. Należy ograniczyć liczbę ponowień prób (2–3 w zupełności wystarczą — po przekroczeniu tej liczby model prawdopodobnie nie odzyska poprawności) i rejestrować odsetek napraw jako miarę jakości.
Naprawy jako sygnał jakości
Jeśli odsetek napraw przekracza 5%, coś jest nie tak: prompt jest niejasny, schemat zbyt złożony albo model zbyt mały. Należy to zbadać.
Alternatywa: dekodowanie ograniczone
Modele open source obsługują dekodowanie ograniczone gramatyką — model w ogóle nie może wygenerować nieprawidłowego wyniku. Outlines, jsonformer i gramatyki llama.cpp zapewniają tę funkcję.
Alternatywa: funkcje zamiast schematu
Wymuszenie wywołania narzędzia za pomocą trybu ścisłego jest bardziej przejrzystą alternatywą dla trybu JSON i napraw. Należy używać go zawsze, gdy dostawca go obsługuje.
Rejestrowanie nieprawidłowych wyników
Należy rejestrować każdy naprawiony wynik, aby móc analizować wzorce:
log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})Kiedy się poddać
Jeśli po N próbach naprawy wynik nadal jest nieprawidłowy, należy zwrócić użytkownikowi błąd — nie wolno tworzyć zmyślonego rozwiązania zastępczego. Uczciwy błąd jest lepszy niż niezauważone uszkodzenie danych.
Wzorzec pętli naprawczej
Jaki jest najprostszy pierwszy krok w pętli naprawczej?
Podsumowanie
Należy wykrywać błędy parsowania, dołączać je jako komunikat narzędzia lub użytkownika i prosić model o naprawę. Liczbę ponowień prób należy ograniczyć. Preferowane są wywołania narzędzi w trybie ścisłym, które całkowicie eliminują tę potrzebę.
Ucz się AI Agents 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
- 60
- Lekcje
- 239
Często zadawane pytania
Czy lekcja „Pętle naprawcze dla nieprawidłowych danych wyjściowych” jest bezpłatna?
Tak — pełny tekst „Pętle naprawcze dla nieprawidłowych danych wyjściowych” 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 Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Pętle naprawcze dla nieprawidłowych danych wyjściowych”?
Jeśli nie można sparsować JSON-a, odeślij błąd do modelu i poproś o poprawienie danych wyjściowych. Ćwiczysz AI Agents 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 Agents?
Nie wymagamy żadnego doświadczenia. AI Agents 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 „Pętle naprawcze dla nieprawidłowych danych wyjściowych”?
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 Agents?
Tak. Każda lekcja AI Agents 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
- Tryb JSON i wyniki wywołań narzędzi
- Walidacja schematów Pydantic
- Pętle naprawcze dla nieprawidłowych danych wyjściowych
- Instructor / Outlines dla gwarantowanej struktury