लोकप्रिय एलएलएम प्रदाताओं - ओपनएआई, जेमिनी, एंथ्रोपिक, मिस्ट्रल और एडब्ल्यूएस बेड्रॉक के बीच संरचित आउटपुट तुलना

अलग तरह के एपीआई के लिए विशेष दृष्टिकोण की आवश्यकता होती है।

Page content

यहाँ एक साइड-बाय-साइड सपोर्ट तुलना है संरचित आउटपुट (विश्वसनीय JSON प्राप्त करना) लोकप्रिय LLM प्रदाताओं के बीच, साथ ही न्यूनतम Python उदाहरण

रंगीन बार खड़े

हमने पहले ही देखा है कि कैसे संरचित आउटपुट का अनुरोध किया जाता है LLM को होस्ट किया गया है Ollama पर। यहाँ हम देखेंगे कि कैसे इसी तरह का अनुरोध किया जा सकता है अन्य प्रदाताओं से।

TL;DR मैट्रिक्स

प्रदाता नेटिव “JSON मोड” JSON स्कीमा प्रवर्तन टिपिकल नॉब नोट्स
OpenAI हाँ हाँ (फर्स्ट-क्लास) response_format={"type":"json_schema", ...} काम करता है रिस्पॉन्स API या चैट कम्प्लीशन्स के माध्यम से; फंक्शन कॉलिंग भी कर सकता है।
Google Gemini हाँ हाँ (फर्स्ट-क्लास) response_schema= + response_mime_type="application/json" स्कीमा सेट होने पर कड़ाई से वैलिडेटेड JSON लौटाता है।
Anthropic (Claude) अप्रत्यक्ष हाँ (टूल यूज़ के साथ JSON स्कीमा) tools=[{input_schema=...}] + tool_choice मॉडल को “कॉल” करने के लिए मजबूर करें आपकी स्कीमा-परिभाषित टूल; स्कीमा-आकार के आर्ग्स देता है।
Mistral हाँ आंशिक (केवल JSON; कोई सर्वर-साइड स्कीमा नहीं) response_format={"type":"json_object"} JSON सुनिश्चित करता है, लेकिन आप क्लाइंट-साइड पर अपने स्कीमा के खिलाफ वैलिडेट करते हैं।
AWS Bedrock (प्लेटफॉर्म) मॉडल के अनुसार हाँ (टूल/कन्वर्स स्कीमा के माध्यम से) toolConfig.tools[].toolSpec.inputSchema Bedrock के कन्वर्स API टूल इनपुट को एक JSON स्कीमा के खिलाफ वैलिडेट करता है।

LLM संरचित आउटपुट - सामान्य जानकारी

LLM संरचित आउटपुट का मतलब है बड़े भाषा मॉडल (LLMs) की क्षमता कि वे उन प्रतिक्रियाओं को उत्पन्न करें जो एक पूर्वनिर्धारित, विशिष्ट प्रारूप या संरचना का कड़ाई से पालन करें, बजाय मुक्त-रूप में टेक्स्ट उत्पन्न करने के। यह संरचित आउटपुट JSON, XML, टेबल, या टेम्पलेट जैसे प्रारूपों में हो सकता है, जिससे डेटा मशीन-पठनीय, सुसंगत और सॉफ्टवेयर द्वारा आसानी से पार्स किया जा सके विभिन्न अनुप्रयोगों के लिए उपयोग के लिए।

संरचित आउटपुट्स पारंपरिक LLM आउटपुट्स से अलग होते हैं, जो आमतौर पर खुले-रूप में, प्राकृतिक भाषा टेक्स्ट उत्पन्न करते हैं। इसके बजाय, संरचित आउटपुट्स एक स्कीमा या प्रारूप को लागू करते हैं, जैसे JSON ऑब्जेक्ट्स के साथ परिभाषित कीज़ और वैल्यू टाइप्स, या आउटपुट में विशिष्ट क्लासेस (उदाहरण के लिए, मल्टीपल-चॉइस उत्तर, सेंटिमेंट क्लासेस, या डेटाबेस रॉ फॉर्मेट्स)। यह दृष्टिकोण विश्वसनीयता को बढ़ाता है, त्रुटियों और हॉलुसिनेशन्स को कम करता है, और डेटाबेस, APIs, या वर्कफ्लो जैसे सिस्टम में एकीकरण को सरल बनाता है।

LLMs में संरचित आउटपुट्स का उत्पादन अक्सर इन तकनीकों का उपयोग करता है:

  • विस्तृत प्रॉम्प्ट निर्देशों का निर्देशन करना मॉडल को प्रारूप में आउटपुट उत्पन्न करने के लिए।
  • वैलिडेशन और पार्सिंग टूल्स जैसे Pydantic का उपयोग करना Python में सुनिश्चित करने के लिए कि आउटपुट स्कीमा के साथ मेल खाता है।
  • कभी-कभी ग्रामर या फाइनाइट स्टेट मशीनों के आधार पर डिकोडिंग प्रतिबंधों को लागू करना सुनिश्चित करने के लिए कि टोकन-स्तर पर प्रारूप के साथ अनुपालन है।

संरचित LLM आउटपुट्स के लाभों में शामिल हैं:

  • मशीन-पठनीयता और आसान एकीकरण।
  • कम विविधता और त्रुटियाँ।
  • उन कार्यों के लिए सुधारी हुई भविष्यवाणी और सत्यापन जो सुसंगत डेटा प्रारूपों की आवश्यकता होती हैं।

संरचित आउटपुट्स के साथ चुनौतियों में प्रभावी स्कीमाओं का डिजाइन करना, जटिल नेटेड डेटा का प्रबंधन करना, और मुक्त-रूप टेक्स्ट उत्पादन की तुलना में संभावित कारणिंग क्षमताओं की सीमाएँ शामिल हैं।

सामान्य रूप से, संरचित आउटपुट LLM को अधिक उपयोगी बनाता है उन अनुप्रयोगों में जहां सटीक, फॉर्मेटेड डेटा की आवश्यकता होती है, केवल मानव-पठनीय टेक्स्ट के बजाय।

संरचित आउटपुट Python उदाहरण

सभी स्निपेट्स इवेंट जानकारी को JSON के रूप में निकालते हैं: {title, date, location}। जैसे आप चाहें, कीज़/मॉडल बदलें।

1) OpenAI — JSON स्कीमा (कड़ाई से)

from openai import OpenAI
import json

client = OpenAI()

schema = {
    "name": "Event",
    "schema": {
        "type": "object",
        "properties": {
            "title": {"type": "string"},
            "date":  {"type": "string", "description": "YYYY-MM-DD"},
            "location": {"type": "string"}
        },
        "required": ["title", "date", "location"],
        "additionalProperties": False
    },
    "strict": True
}

resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "Extract the event from: 'PyData Sydney is on 2025-11-03 at Darling Harbour.'"}
    ],
    response_format={"type": "json_schema", "json_schema": schema},
)

data = json.loads(resp.choices[0].message.content)
print(data)

OpenAI के संरचित आउटपुट्स फीचर सर्वर साइड पर इस स्कीमा को लागू करता है।


2) Google Gemini — रिस्पॉन्स स्कीमा + JSON MIME

import google.generativeai as genai
from google.genai import types

# Configure with your API key
# genai.configure(api_key="your-api-key")

schema = types.Schema(
    type=types.Type.OBJECT,
    properties={
        "title": types.Schema(type=types.Type.STRING),
        "date": types.Schema(type=types.Type.STRING),
        "location": types.Schema(type=types.Type.STRING),
    },
    required=["title", "date", "location"],
    additional_properties=False,
)

resp = genai.generate_content(
    model="gemini-2.0-flash",
    contents="Extract the event from: 'PyData Sydney is on 2025-11-03 at Darling Harbour.'",
    generation_config=genai.GenerationConfig(
        response_mime_type="application/json",
        response_schema=schema,
    ),
)

print(resp.text)  # already valid JSON per schema

Gemini कड़ाई से JSON लौटाएगा जो response_schema के अनुरूप है।


3) Anthropic (Claude) — टूल यूज़ के साथ JSON स्कीमा

from anthropic import Anthropic
import json

client = Anthropic()

tool = {
    "name": "extract_event",
    "description": "Return event details.",
    "input_schema": {
        "type": "object",
        "properties": {
            "title": {"type": "string"},
            "date": {"type": "string"},
            "location": {"type": "string"}
        },
        "required": ["title", "date", "location"],
        "additionalProperties": False
    }
}

msg = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=256,
    tools=[tool],
    tool_choice={"type": "tool", "name": "extract_event"},  # force schema
    messages=[{"role": "user", "content":
        "Extract the event from: 'PyData Sydney is on 2025-11-03 at Darling Harbour.'"}],
)

# Claude will "call" the tool; grab the args (which match your schema)
tool_use = next(b for b in msg.content if b.type == "tool_use")
print(json.dumps(tool_use.input, indent=2))

Claude के पास एक सामान्य “JSON मोड” स्विच नहीं है; इसके बजाय, टूल यूज़ के साथ एक input_schema आपको वैलिडेटेड, स्कीमा-आकार के आर्ग्स देता है (और आप इसका उपयोग मजबूर कर सकते हैं)।


4) Mistral — JSON मोड (क्लाइंट-साइड वैलिडेशन)

from mistralai import Mistral
import json

client = Mistral()

resp = client.chat.complete(
    model="mistral-large-latest",
    messages=[{"role":"user","content":
        "Return JSON with keys title, date (YYYY-MM-DD), location for: "
        "'PyData Sydney is on 2025-11-03 at Darling Harbour.'"}],
    response_format={"type": "json_object"}  # guarantees valid JSON
)

data = json.loads(resp.choices[0].message.content)
print(data)
# Tip: validate `data` against your Pydantic/JSON Schema locally.

Mistral का json_object JSON आकार को लागू करता है (आपके ठीक स्कीमा नहीं) — क्लाइंट-साइड पर वैलिडेट करें।


5) AWS Bedrock — कन्वर्स API टूल स्कीमा (मॉडल-एग्नोस्टिक)

import boto3, json

bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
model_id = "anthropic.claude-3-5-sonnet-20240620-v1:0"

tools = [{
    "toolSpec": {
        "name": "extract_event",
        "inputSchema": {
            "json": {
                "type": "object",
                "properties": {
                    "title": {"type": "string"},
                    "date": {"type": "string"},
                    "location": {"type": "string"}
                },
                "required": ["title","date","location"],
                "additionalProperties": False
            }
        }
    }
}]

resp = bedrock.converse(
    modelId=model_id,
    toolConfig={"tools": tools},
    toolChoice={"tool": {"name": "extract_event"}},  # force schema
    messages=[{"role":"user","content":[{"text":
        "Extract the event from: 'PyData Sydney is on 2025-11-03 at Darling Harbour.'"}]}],
)

# Pull toolUse content
tool_use = next(
    c["toolUse"] for c in resp["output"]["message"]["content"] if "toolUse" in c
)
print(json.dumps(tool_use["input"], indent=2))

Bedrock टूल इनपुट को आपकी JSON स्कीमा के खिलाफ वैलिडेट करता है और कई होस्टेड मॉडल (उदाहरण के लिए, Claude) इसे कन्वर्स के माध्यम से समर्थन करते हैं।


व्यावहारिक मार्गदर्शन और वैलिडेशन

  • अगर आप सर्वर-साइड गारंटी चाहते हैं: OpenAI संरचित आउटपुट्स या Gemini रिस्पॉन्स स्कीमा।
  • अगर आप पहले से ही Claude/Bedrock पर हैं: एक टूल परिभाषित करें जिसमें एक JSON स्कीमा है और इसका उपयोग मजबूर करें; टूल के आर्गुमेंट्स को अपने टाइप्ड ऑब्जेक्ट के रूप में पढ़ें।
  • अगर आप Mistral का उपयोग करते हैं: json_object को सक्षम करें और स्थानीय रूप से वैलिडेट करें (उदाहरण के लिए, Pydantic के साथ)।

वैलिडेशन पैटर्न (सभी के लिए काम करता है)

from pydantic import BaseModel, ValidationError

class Event(BaseModel):
    title: str
    date: str
    location: str

try:
    event = Event.model_validate(data)  # `data` किसी भी प्रदाता से
except ValidationError as e:
    # handle / retry / ask model to fix with e.errors()
    print(e)

उपयोगी लिंक