AI Agents · Lekcja

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.

Lekcja 3 z 415 kroki

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

Bezpłatny start

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

  1. Tryb JSON i wyniki wywołań narzędzi
  2. Walidacja schematów Pydantic
  3. Pętle naprawcze dla nieprawidłowych danych wyjściowych
  4. Instructor / Outlines dla gwarantowanej struktury
← Powrót do AI Agents