# Structured Output और उत्तरों का Validation — Claude API / OpenAI API की बुनियाद

Source: https://www.geekswithgeeks.com/hi/llm-apis/m-structured

> मशीन-पठनीय आउटपुट पाएँ और कोड में जाँचें।

## माँगें, फिर जाँचें

जब कोड उत्तर उपयोग करे, सटीक keys और अनुमत मानों वाला JSON माँगें, उदाहरण दें, और जो वापस आए उसे **validate** करें। दोनों providers ऐसी सुविधाएँ देते हैं जो वैध आउटपुट की संभावना बहुत बढ़ाती हैं: schema के साथ **tool/function calling**, और समर्थित मॉडलों पर **structured output / JSON-schema modes**। तब भी types, सीमाएँ और अनुमत मान जाँचें, और विफलताएँ सँभालें: मॉडल कभी-कभी JSON को पाठ या code fences में लपेटते हैं, `max_tokens` पर कट जाते हैं, या आपकी सूची के बाहर मान चुनते हैं। JSON ऑब्जेक्ट निकालें, `json.loads` से parse करें, अपने नियमों से validate करें, और **error संदेश के साथ retry** करें या सुरक्षित रूप से fallback करें। सख़्त जाँच के बिना मॉडल आउटपुट को `eval`, shell या SQL में कभी न दें।

## JSON निकालना और validate करना, चलाकर

मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। साफ़ JSON पास होता है; पाठ और code fence के भीतर का JSON निकलकर पास होता है; अनुमत समूह के बाहर की category अस्वीकृत है; JSON रहित उत्तर रिपोर्ट होता है। ये strings मॉडल उत्तरों की जगह हैं।

```python
import json

def parse_json_reply(text):
    """Models sometimes wrap JSON in prose or code fences; extract and validate it."""
    start, end = text.find("{"), text.rfind("}")
    if start == -1 or end == -1:
        return None, "no JSON object found"
    try:
        data = json.loads(text[start:end + 1])
    except json.JSONDecodeError as e:
        return None, f"invalid JSON: {e.msg}"
    if data.get("category") not in {"billing", "technical", "other"}:
        return None, "category not allowed"
    return data, None

for reply in ['{"category": "billing"}',
              'Sure! Here you go:\n```json\n{"category": "technical"}\n```',
              '{"category": "refunds"}',
              'I cannot help with that.']:
    print(parse_json_reply(reply))

```

Output:

```
({'category': 'billing'}, None)
({'category': 'technical'}, None)
(None, 'category not allowed')
(None, 'no JSON object found')
```

## सटीक JSON का एक उदाहरण दिखाएँ

Prompt में एक उदाहरण आउटपुट अक्सर लंबे विवरण से अधिक भरोसे से key नाम और formatting ठीक करता है।

**Quiz:** Structured-output सुविधा होने पर भी JSON validate क्यों करें?

- [ ] मॉडलों पर भरोसा मना है
- [ ] JSON parse नहीं हो सकता
- [x] मान फिर भी ग़लत या आपके व्यावसायिक नियमों से बाहर हो सकते हैं, और विफलताएँ होती हैं
- [ ] यह उत्तर छोटे करता है

*Answer:* मान फिर भी ग़लत या आपके व्यावसायिक नियमों से बाहर हो सकते हैं, और विफलताएँ होती हैं. Schema वैधता आपके नियमों के लिए शुद्धता के बराबर नहीं।
