# संरचित Output, Validation और Repair Loops — LLM Engineering की बुनियाद

Source: https://www.geekswithgeeks.com/hi/llm-engineering/q-structured

> मॉडल आउटपुट को कोड के उपयोग के लिए सुरक्षित बनाएँ।

## अनुबंध, validate, repair, fallback

डाउनस्ट्रीम कोड को गद्य नहीं, अनुमेय डेटा चाहिए। **अनुबंध** परिभाषित करें (fields, types और अनुमत मानों वाला schema) और जहाँ उपलब्ध हो provider की structured-output या tool-calling सुविधाओं से उसे माँगें। फिर **कोड में validate** करें: parse करें, types, सीमाएँ और enumerations, और cross-field नियम (जैसे "refund राशि order कुल से अधिक न हो") जाँचें। विफलता पर **सीमित repair loop** चलाएँ: विशिष्ट validation error जोड़कर एक-दो बार दोबारा पूछें; फिर भी विफल हो तो **सुरक्षित fallback** करें (डिफ़ॉल्ट, सरल रास्ता, या मानव queue) और विफलता गिनें। **वैध-आउटपुट दर** को मुख्य metric के रूप में ट्रैक करें: गिरावट prompt या मॉडल drift की शुरुआती चेतावनी है। Validate न हुआ मॉडल आउटपुट database, भुगतान system या user-दिखने वाली कार्रवाई तक कभी न पहुँचने दें।

## Validate-और-repair loop (उदाहरण)

`call_model` और `fallback_to_human` आपके अपने functions के placeholders हैं। यहाँ चलाया नहीं गया।

```python
import json

ALLOWED = {"billing", "technical", "other"}

def validate(raw):
    data = json.loads(raw)                                   # may raise: not JSON
    if data.get("category") not in ALLOWED: raise ValueError("category must be one of %s" % sorted(ALLOWED))
    if not (1 <= int(data.get("urgency", 0)) <= 5): raise ValueError("urgency must be 1..5")
    return data

def classify(ticket, max_repairs=2):
    prompt = f"Classify this ticket as JSON: {ticket}"
    for attempt in range(1 + max_repairs):
        raw = call_model(prompt)
        try:
            return validate(raw)
        except (ValueError, json.JSONDecodeError) as e:
            prompt += f"\nYour last reply was invalid ({e}). Reply with valid JSON only."
    return fallback_to_human(ticket)                           # bounded: never loop forever
```

## Repairs को metric के रूप में गिनें

बढ़ती repair दर users के नोटिस करने से पहले prompt या मॉडल drift की चेतावनी देती है।

**Quiz:** Repair loop को क्यों सीमित करें?

- [ ] क्योंकि मॉडल retries नापसंद करते हैं
- [x] अंतहीन retries और बेक़ाबू लागत से बचने के लिए; उसकी जगह सुरक्षित fallback करें
- [ ] आउटपुट लंबे करने के लिए
- [ ] Repair loops असीमित होने चाहिए

*Answer:* अंतहीन retries और बेक़ाबू लागत से बचने के लिए; उसकी जगह सुरक्षित fallback करें. हर retry पैसा और समय ख़र्चता है; सीमा रखें और सुरक्षित डिफ़ॉल्ट रखें।
