पाठ 12 / 29
संरचित Output, Validation और Repair Loops
मॉडल आउटपुट को कोड के उपयोग के लिए सुरक्षित बनाएँ।
अनुबंध, 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 हैं। यहाँ चलाया नहीं गया।
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 foreverRepairs को metric के रूप में गिनें
बढ़ती repair दर users के नोटिस करने से पहले prompt या मॉडल drift की चेतावनी देती है।
त्वरित जाँच: Repair loop को क्यों सीमित करें?
- क्योंकि मॉडल retries नापसंद करते हैं
- अंतहीन retries और बेक़ाबू लागत से बचने के लिए; उसकी जगह सुरक्षित fallback करें
- आउटपुट लंबे करने के लिए
- Repair loops असीमित होने चाहिए
Answer
अंतहीन retries और बेक़ाबू लागत से बचने के लिए; उसकी जगह सुरक्षित fallback करें — हर retry पैसा और समय ख़र्चता है; सीमा रखें और सुरक्षित डिफ़ॉल्ट रखें।