Az LLM-ek tökéletes JSON-t adhatnak, mégis tévesek lehetnek az adatok
Az OpenAI Structured Outputs funkciója hibátlan JSON-t generál, de a hiányzó adatok esetén a modell kitalált értékeket illeszthet be, ami rejtett hibákhoz vezethet.

A probléma egy fizetési megerősítő üzenetek feldolgozására használt rendszer tesztelése során derült ki, ahol a hibátlanul validált JSON-kimenetek ellenére a reconciliációs folyamat 2-3%-os eltérést mutatott a tranzakciós dátumokban. (Towards Data Science)
A tökéletes séma csapdája
Az OpenAI Python SDK és a Pydantic modellek használatával a fejlesztők könnyedén definiálhatnak sémákat, és a modell garantáltan érvényes JSON-t ad vissza, elhagyva a korábbi regex-elemzőket vagy retry-loopokat. Azonban ez az érvényesség nem jelenti azt, hogy az értékek valósak is lennének, mivel a modell nem tud üresen hagyni egy kötelező mezőt.
Ha az információ hiányzik a forrásból, a modell kénytelen azt pótolni – legyen az a jelenlegi dátum, a betanítási adatok vége, vagy egy plausibilis becslés. Ezek a kitalált értékek tökéletesen megfelelnek a séma típusellenőrzésének, de valójában hamisak, és csak a downstream rendszerekben okoznak problémát.
A bizonytalanság kezelése sématervezéssel
A megoldás kulcsa a sématervezésben rejlik: a mezők `nullable` (nullázható) típusúvá tételével. Ezzel a modelt arra lehet instruálni, hogy ha egy adat hiányzik, azt jelezze, ahelyett, hogy kitalálna egy értéket, például a `transaction_date: date | None` típusdeklaráció segítségével.
A szerző egy `evidence` mező hozzáadását javasolja minden értékhez, amely az eredeti forrásszöveg pontos idézetét tartalmazza. Ez a megközelítés növeli a kimeneti tokenek számát és a feldolgozási időt, de pénzügyi tranzakciók esetén, ahol a pontosság kritikus, mindenképpen megéri a befektetést. A `evidence` mező segít azonosítani azokat az eseteket, amikor a modell nem az eredeti szövegből, hanem más forrásból vagy kitalálva adja meg az értéket.