डेव्हलपर्स आता Vercel AI SDK किंवा Anthropic च्या tool-use API मध्ये Zod schemas जोडून, LLM कडून मिळणारा JSON एका पूर्वनिर्धारित (predefined) स्वरूपात असेल याची खात्री देऊ शकतात, ज्यामुळे मॉडेल एखादे अनपेक्षित फील्ड जोडल्यामुळे होणारे runtime crashes टाळता येतात.

जानेवारीमध्ये एका ठोस संरक्षणाची (guard) गरज स्पष्टपणे जाणवली, जेव्हा प्रोडक्शनमध्ये पाठवलेला एक classifier तीन आठवडे विनासायास काम केल्यानंतर अचानक दुसरा “explanation” की (key) परत करू लागला. कोडमध्ये फक्त एकाच फील्डची अपेक्षा होती, त्यामुळे त्या अतिरिक्त की मुळे कोणताही कोड डिप्लॉय न करताच exception त्रुटी निर्माण झाली. ही घटना एका व्यापक समस्येचे दर्शन घडवते: बहुतेक ट्युटोरियल्स JSON.parse(response) वरच थांबतात, असे गृहीत धरून की मॉडेल प्रॉम्प्टच्या schema चे पालन करेल. प्रत्यक्षात, LLMs वारंवार भरकटतात—कॅसिंग (casing) बदलणे, नवीन फील्ड्स जोडणे किंवा आउटपुटला markdown fences मध्ये गुंडाळणे—ज्यामुळे डेटाचे नुकसान (silent data corruption) किंवा पूर्णपणे अपयश येऊ शकते.

रॉ JSON पार्सिंग (raw JSON parsing) असुरक्षित का आहे

LLMs ला उपयुक्त बनवण्यासाठी प्रशिक्षित केले जाते, आज्ञाधारक बनवण्यासाठी नाही. ```json { "category": "string" }


जेव्हा असा विसंगतीचा (mismatch) प्रकार प्रोडक्शन कोडमध्ये पोहोचतो, तेव्हा त्याचे परिणाम तात्काळ दिसून येतात: exception येणे, विनंती (request) अयशस्वी होणे आणि संभाव्यतः पुढील अनेक त्रुटी निर्माण होणे. मोठ्या सेवांमध्ये, डाउनटाइमच्या त्या काही मिनिटांमुळे महसूल कमी होतो आणि वापरकर्त्यांचा विश्वास कमी होतो.

## Zod + Vercel AI SDK: तीन-टप्प्यांचे सुरक्षा कवच

Zod हा एक TypeScript-first schema validator आहे जो मॉडेलने तयार करायला हवा तो नेमका डेटा आकार (data shape) वर्णन करू शकतो. Vercel AI SDK च्या `Output.object` हेल्परसोबत वापरल्यास, मॉडेलने प्रतिसाद तयार केल्यानंतर व्हॅलिडेशन आपोआप होते.

1. **Schema परिभाषित करा** – अपेक्षित JSON प्रमाणेच एक Zod object लिहा. एका साध्या classifier साठी ते `z.object({ category: z.string() })` असू शकते; एका जटिल invoice extractor साठी schema मध्ये objects, arrays आणि discriminated unions समाविष्ट असू शकतात.
2. **SDK कडे पाठवा** – schema ला `Output.object(schema)` ने वेढून घ्या (wrap). SDK एक असा प्रॉम्प्ट समाविष्ट करतो जो मॉडेलला schema शी जुळणारा JSON ब्लॉक आउटपुट करण्यास सांगतो आणि Zod च्या `safeParse` द्वारे निकालाचे पार्सिंग करतो.
3. **अपयश हाताळा** – `safeParse` त्रुटी (exception) देण्याऐवजी एक result object परत करते. जर पार्सिंग अयशस्वी झाले, तर ती त्रुटी मॉडेलला पुन्हा पाठवा आणि पुन्हा प्रयत्न करा. नेमक्या व्हॅलिडेशन मेसेजच्या आधारे आउटपुट सुधारण्यासाठी मॉडेलला सूचना दिली जाऊ शकते, ज्यामुळे बहुतेक edge cases चे रूपांतर एका self-healing loop मध्ये होते.

कारण SDK प्रॉम्प्टिंग, पार्सिंग आणि retry लॉजिक एकाच ठिकाणी करते, त्यामुळे डेव्हलपर्सना अनेक विखुरलेल्या (ad-hoc) स्ट्रिंग मॅनिप्युलेशन्सऐवजी केवळ एकच, type-checked कॉल वापरावा लागतो.

## Anthropic tool use: स्ट्रक्चर्ड आउटपुटसाठी सक्ती करणे

Anthropic च्या API सोबत थेट काम करताना, "tool use" द्वारे तीच खात्री मिळवता येते. टूलची व्याख्या एका फंक्शनप्रमाणे केली जाते ज्याचा इनपुट schema JSON Schema मध्ये व्यक्त केला जातो; Anthropic चे मॉडेल टूलला तेव्हाच कॉल करेल जेव्हा ते schema पूर्ण करू शकेल. `tool_choice` ला `"any"` (किंवा विशिष्ट टूलचे नाव) सेट करून, मॉडेलला मुक्त मजकुराऐवजी (free-form text) एक स्ट्रक्चर्ड ब्लॉक परत देण्यासाठी भाग पाडले जाते.

ही कार्यपद्धती (workflow) Vercel च्या दृष्टिकोनासारखीच आहे:

- Zod schema लिहा.
- टूल डेफिनेशनसाठी त्याचे JSON Schema payload मध्ये रूपांतर करा.
- विनंतीमध्ये (request) टूल समाविष्ट करा आणि मॉडेलला ते वापरण्यास सांगा.
- `zod.safeParse` वापरून टूलच्या प्रतिसादाचे पार्सिंग करा.

जर मॉडेलने तरीही चुकीचा (malformed) डेटा तयार केला, तर तोच 'retry-with-feedback' पॅटर्न लागू होतो.

## जेव्हा व्हॅलिडेशन तरीही अयशस्वी होते

Schema लागू करूनही, अधूनमधून विसंगती (mismatches) उद्भवू शकतात. याची कारणे खालीलप्रमाणे आहेत:

- **Model hallucination**: मॉडेल असा स्ट्रिंग तयार करू शकते जो JSON सारखा दिसतो परंतु त्यात सिंटॅक्स त्रुटी (syntax errors) असू शकतात.
- **Prompt leakage**: संभाषणातील मागील टप्पे (conversation turns) फॉरमॅटिंग सूचना लीक करू शकतात, ज्यामुळे schema विनंती दुर्लक्षित होऊ शकते.
- **Version differences**: नवीन मॉडेल रिलीज कधीकधी टूल कॉल्सचा अर्थ लावण्याची पद्धत बदलतात.

यासाठी शिफारस केलेली उपाययोजना म्हणजे एक हलका (lightweight) retry loop वापरणे. पार्सिंग अयशस्वी झाल्यावर, कोड “तुमचा शेवटचा आउटपुट वैध JSON नव्हता. त्यात ... होते. कृपया schema मध्ये परिभाषित केलेली फील्ड्सच परत करा.” असा फॉलो-अप प्रॉम्प्ट पाठवतो. व्हॅलिडेशन एरर स्पष्ट असल्याने, मॉडेल मानवी हस्तक्षेपाशिवाय स्वतःला सुधारू शकते.

## परफॉर्मन्स आणि खर्चाचा विचार (Performance and cost considerations)

Zod validation जोडल्यामुळे CPU वर नगण्य भार (overhead) पडतो—सामान्य पेलोडसाठी `safeParse` प्रक्रिया मायक्रोसेकंदात पूर्ण होते. नेटवर्क लॅटन्सी (latency) मध्ये कोणताही बदल होत नाही; पुन्हा प्रयत्न करण्यासाठी लागणारा अतिरिक्त राऊंड-ट्रिप फक्त दुर्मिळ अपयशाच्या परिस्थितीतच होतो. व्यवहारात, एक अपवाद (exception) रोखल्यामुळे होणारा फायदा, विनंतीच्या वेळेत होणाऱ्या किरकोळ वाढीपेक्षा कितीतरी जास्त असतो.

## प्रतिवाद: स्कीमा एन्फोर्समेंट (schema enforcement) गरजेपेक्षा जास्त आहे का?

काही डेव्हलपर्सचे असे मत आहे की कडक स्कीमा मॉडेलची लवचिकता मर्यादित करतात, विशेषतः जेव्हा नवीन फील्ड्स मौल्यवान संदर्भ (context) देऊ शकतात. हा सुरक्षितता आणि मोकळेपणा यांमधील तडजोडीचा विषय आहे. मिशन-क्रिटिकल सेवांमध्ये—जसे की पेमेंट प्रोसेसिंग, ओळख पडताळणी (identity verification), कंप्लायन्स रिपोर्टिंग—पूर्वानुमानक्षमता (predictability) महत्त्वाची ठरते. प्रायोगिक प्रोटोटाइप्समध्ये, थोडा शिथिल दृष्टिकोन स्वीकारार्ह असू शकतो, परंतु तिथेही एक किमान सुरक्षा (उदा. `z.object({}).passthrough()`) उपयुक्त विस्तार (extensions) न गमावता गंभीर पार्सिंग त्रुटी शोधू शकते.

## पुढे काय पाहावे

- **SDK विकास**: Vercel च्या AI SDK रोडमॅपमध्ये अंगभूत (built-in) रीट्राय पॉलिसीज आणि अधिक समृद्ध एरर रिपोर्टिंग समाविष्ट आहे, ज्यामुळे दुरुस्तीची प्रक्रिया (repair loop) अधिक सुलभ होईल.
- **टूलिंग मानकीकरण (Tooling standardization)**: जसजसे अधिक प्रदाते (providers) टूल-वापर संमतता (tool-use conventions) स्वीकारतील, तसतसे क्रॉस-प्रदाता स्कीमा व्हॅलिडेटर्स समोर येऊ शकतात, ज्यामुळे प्रदाता-विशिष्ट अडॅप्टर्सची गरज कमी होईल.
- **कम्युनिटी पॅटर्न**: ओपन-सोर्स लायब्ररी आता प्रॉम्प्ट टेम्पलेट्ससोबत Zod स्कीमा एकत्र करू लागल्या आहेत, ज्यामुळे "स्कीमा-फर्स्ट" वर्कफ्लो एक पुन्हा वापरण्यायोग्य मालमत्ता (reusable asset) बनत आहे.

## निष्कर्ष

Zod स्कीमाला अशा कराराप्रमाणे (contract) मानल्यामुळे जो मॉडेल मोडू शकत नाही, डेव्हलपर्स नाजूक `JSON.parse` हॅक्सकडून एका निश्चित (deterministic) पाइपलाइनकडे वळतात, जिथे अनपेक्षित फील्ड्समुळे नियंत्रित व्हॅलिडेशन फेल्युअर होते, प्रोडक्शन क्रॅश नाही. Vercel चे `Output.object` हेल्पर आणि Anthropic ची टूल-वापर यंत्रणा यांचे संयोजन LLMs ला अनपेक्षित टेक्स्ट जनरेटर्समधून विश्वसनीय डेटा प्रदात्यांमध्ये रूपांतरित करते, ज्यामुळे टीम्सना सततच्या एज-केस डीबगिंगऐवजी बिझनेस लॉजिकवर लक्ष केंद्रित करता येते.