Virheellisen tulosteen korjaussilmukat
Jos JSON ei jäsenny, lähettäkää virhe takaisin mallille ja pyytäkää sitä korjaamaan tuloste.
Virheellisen tulosteen korjaussilmukat on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Osaa tämän oppitunnin sisällöstä ei ole vielä käännetty, joten se näytetään englanniksi.
Myös strict-tilat epäonnistuvat joskus
Vanhemmat mallit, reunaehdot tai strict-tilaa käyttämättömät palveluntarjoajat palauttavat toisinaan virheellistä JSONia. Vankat agentit selviytyvät tästä pyytämällä mallia korjaamaan tulosteensa.
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.')Miksi tämä toimii
Malli näkee virheilmoituksen ja yleensä korjaa vastauksensa seuraavalla vuorolla. Lisätkää täsmälliset ohjeet:
- "Ei proosaa"
- "Ei Markdown-koodilohkoja"
- "Vastaa täsmälleen tätä rakennetta: ..."
Markdown-koodilohkojen poistaminen
Mallit ympäröivät JSONin usein merkkijonolla ```json ... ```. Poistakaa se ennen jäsentämistä:
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))
Leikkaaminen ensimmäisestä aaltosulkeesta
Jos mukana on ylimääräistä proosaa, leikatkaa merkkijono ensimmäisestä merkistä { viimeiseen vastaavaan merkkiin }:
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))
Työkalut, jotka tekevät tämän puolestanne
- Instructor — yhdistää Pydanticin, korjaussilmukat ja uudelleenyritykset
- Outlines — taattu jäsennelty tuloste ohjatun dekoodauksen avulla
- jsonformer — pakottaa JSONin muodostamisen token kerrallaan (HF-mallit)
Toimivat korjauskehotteet
Sisällyttäkää mukaan täsmällinen virheilmoitus ja lyhyt muistutus muodosta:
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
'''Korjaussilmukoiden kustannukset
Jokainen korjaus on uusi LLM-kutsu. Rajoittakaa uudelleenyritykset (2–3 riittää — sen jälkeen malli tuskin enää palautuu tilanteesta) ja kirjatkaa korjausmäärät laatumittarina.
Korjaukset laatumittarina
Jos korjausmäärä on > 5 %, jokin on vialla: kehote on epäselvä, skeema liian monimutkainen tai malli liian pieni. Selvittäkää syy.
Vaihtoehto: rajoitettu dekoodaus
Avoimen lähdekoodin mallit tukevat kielioppirajoitteista dekoodausta — malli ei voi tuottaa lainkaan virheellistä tulostetta. Outlines, jsonformer ja llama.cpp:n kieliopit toimivat näin.
Vaihtoehto: funktiot skeeman sijaan
Työkalukutsun pakottaminen strict-tilassa on selkeämpi vaihtoehto kuin JSON-tila ja korjaus. Käyttäkää sitä aina, kun palveluntarjoaja tukee sitä.
Virheellisten tulosteiden kirjaaminen
Kirjatkaa jokainen korjattu tuloste, jotta voitte analysoida toistuvia malleja:
log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})Milloin kannattaa luovuttaa
Jos tuloste on N korjausyrityksen jälkeenkin virheellinen, palauttakaa käyttäjälle virhe — älkää keksikö varatulosta. Rehellinen epäonnistuminen on parempi kuin huomaamaton tietojen vioittuminen.
Korjaussilmukan toimintamalli
Mikä on korjaussilmukan yksinkertaisin ensimmäinen vaihe?
Kertaus
Havaitkaa jäsentämisvirheet, liittäkää ne tool/user-viestiksi ja pyytäkää mallia korjaamaan tuloste. Rajoittakaa uudelleenyritykset. Suosikaa strict-tilan työkalukutsuja, jotta korjauksia ei tarvita lainkaan.
Opi Tekoälyagentit tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 60
- Oppitunnit
- 239
Usein kysytyt kysymykset
Onko oppitunti ”Virheellisen tulosteen korjaussilmukat” ilmainen?
Kyllä – oppitunnin ”Virheellisen tulosteen korjaussilmukat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Virheellisen tulosteen korjaussilmukat”?
Jos JSON ei jäsenny, lähettäkää virhe takaisin mallille ja pyytäkää sitä korjaamaan tuloste. Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Virheellisen tulosteen korjaussilmukat”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyagentit-oppitunnilla?
Kyllä. Jokainen Tekoälyagentit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- JSON-tila ja työkalukutsujen tulosteet
- Pydantic-skeeman validointi
- Virheellisen tulosteen korjaussilmukat
- Instructor ja Outlines taatun rakenteen varmistamiseen