Gemini API की मदद से स्ट्रक्चर्ड आउटपुट जनरेट करें


Gemini डिफ़ॉल्ट रूप से अनस्ट्रक्चर्ड टेक्स्ट जनरेट करता है. हालांकि, कुछ ऐप्लिकेशन के लिए स्ट्रक्चर्ड टेक्स्ट की ज़रूरत होती है. इन इस्तेमाल के उदाहरणों के लिए, Gemini को जवाब देने के लिए, JSON का इस्तेमाल करने के लिए सीमित किया जा सकता है. यह स्ट्रक्चर्ड डेटा का एक फ़ॉर्मैट है, जो अपने-आप प्रोसेस होने के लिए सही है. आपके पास, एनम में बताए गए किसी एक विकल्प के साथ जवाब देने के लिए, मॉडल को सीमित करने का विकल्प भी है.

यहां कुछ ऐसे इस्तेमाल के उदाहरण दिए गए हैं जिनमें मॉडल से स्ट्रक्चर्ड आउटपुट की ज़रूरत पड़ सकती है:

  • अखबार के लेखों से कंपनी की जानकारी इकट्ठा करके, कंपनियों का डेटाबेस बनाएं.
  • रीज़्यूमे से स्टैंडर्ड जानकारी निकालना.
  • रेसिपी से सामग्री निकालें और हर सामग्री के लिए, किराने की सामान बेचने वाली वेबसाइट का लिंक दिखाएं.

अपने प्रॉम्प्ट में, Gemini से JSON फ़ॉर्मैट में आउटपुट देने के लिए कहा जा सकता है. हालांकि, ध्यान रखें कि इस बात की कोई गारंटी नहीं है कि मॉडल सिर्फ़ JSON फ़ॉर्मैट में आउटपुट देगा. ज़्यादा सटीक जवाब पाने के लिए, responseSchema फ़ील्ड में कोई खास JSON स्कीमा पास किया जा सकता है, ताकि Gemini हमेशा उम्मीद के मुताबिक स्ट्रक्चर में जवाब दे. स्कीमा के साथ काम करने के बारे में ज़्यादा जानने के लिए, JSON स्कीमा के बारे में ज़्यादा जानकारी देखें.

इस गाइड में, अपनी पसंद के SDK टूल के ज़रिए generateContent तरीके का इस्तेमाल करके या सीधे REST API का इस्तेमाल करके, JSON जनरेट करने का तरीका बताया गया है. उदाहरणों में सिर्फ़ टेक्स्ट वाला इनपुट दिखाया गया है. हालांकि, Gemini मल्टीमोडल अनुरोधों के लिए JSON रिस्पॉन्स भी जनरेट कर सकता है. इनमें इमेज, वीडियो, और ऑडियो शामिल हैं.

शुरू करने से पहले: अपना प्रोजेक्ट और एपीआई पासकोड सेट अप करना

Gemini API को कॉल करने से पहले, आपको अपना प्रोजेक्ट सेट अप करना होगा और अपनी एपीआई पासकोड को कॉन्फ़िगर करना होगा.

JSON जेनरेट करें

जब मॉडल को JSON आउटपुट करने के लिए कॉन्फ़िगर किया जाता है, तो वह किसी भी प्रॉम्प्ट का जवाब, JSON फ़ॉर्मैट में देता है.

स्कीमा की मदद से, JSON रिस्पॉन्स के स्ट्रक्चर को कंट्रोल किया जा सकता है. मॉडल में स्कीमा डालने के दो तरीके हैं:

  • प्रॉम्प्ट में टेक्स्ट के तौर पर
  • मॉडल कॉन्फ़िगरेशन की मदद से दिए गए स्ट्रक्चर्ड स्कीमा के तौर पर

प्रॉम्प्ट में टेक्स्ट के तौर पर स्कीमा दें

नीचे दिए गए उदाहरण में, मॉडल को किसी खास JSON फ़ॉर्मैट में कुकी रेसिपी दिखाने के लिए कहा गया है.

मॉडल को प्रॉम्प्ट में मौजूद टेक्स्ट से फ़ॉर्मैट की जानकारी मिलती है. इसलिए, आपके पास स्पेसिफ़िकेशन को दिखाने के तरीके में कुछ बदलाव करने की सुविधा होती है. JSON स्कीमा को दिखाने के लिए, कोई भी सही फ़ॉर्मैट काम कर सकता है.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
});

const prompt = `List a few popular cookie recipes using this JSON schema:

Recipe = {'recipeName': string}
Return: Array<Recipe>`;

const result = await model.generateContent(prompt);
console.log(result.response.text());

आउटपुट कुछ ऐसा दिख सकता है:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

मॉडल कॉन्फ़िगरेशन की मदद से स्कीमा देना

यहां दिए गए उदाहरण में ये काम किए गए हैं:

  1. JSON के साथ जवाब देने के लिए, स्कीमा के ज़रिए कॉन्फ़िगर किए गए मॉडल को इंस्टैंशिएट करता है.
  2. मॉडल को कुकी की रेसिपी दिखाने के लिए कहता है.

JSON स्कीमा को बताने का यह तरीका ज़्यादा औपचारिक है. इससे आपको प्रॉम्प्ट में मौजूद टेक्स्ट पर भरोसा करने के बजाय, ज़्यादा सटीक कंट्रोल मिलता है.

// Make sure to include these imports:
// import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const schema = {
  description: "List of recipes",
  type: SchemaType.ARRAY,
  items: {
    type: SchemaType.OBJECT,
    properties: {
      recipeName: {
        type: SchemaType.STRING,
        description: "Name of the recipe",
        nullable: false,
      },
    },
    required: ["recipeName"],
  },
};

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-pro",
  generationConfig: {
    responseMimeType: "application/json",
    responseSchema: schema,
  },
});

const result = await model.generateContent(
  "List a few popular cookie recipes.",
);
console.log(result.response.text());

आउटपुट कुछ ऐसा दिख सकता है:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

JSON स्कीमा के बारे में ज़्यादा जानकारी

JSON रिस्पॉन्स दिखाने के लिए मॉडल को कॉन्फ़िगर करते समय, JSON डेटा के टाइप को तय करने के लिए Schema ऑब्जेक्ट का इस्तेमाल किया जा सकता है. Schema, OpenAPI 3.0 स्कीमा ऑब्जेक्ट के चुने गए सबसेट को दिखाता है.

यहां सभी Schema फ़ील्ड का सूडो-JSON वर्शन दिया गया है:

{
  "type": enum (Type),
  "format": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "maxItems": string,
  "minItems": string,
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "propertyOrdering": [
    string
  ],
  "items": {
    object (Schema)
  }
}

स्कीमा का Type, OpenAPI के डेटा टाइप में से कोई एक होना चाहिए. हर Type के लिए, फ़ील्ड का सिर्फ़ एक सबसेट मान्य होता है. यहां दी गई सूची में, हर Type को उस टाइप के मान्य फ़ील्ड से मैप किया गया है:

  • string -> enum, format
  • integer -> फ़ॉर्मैट
  • number -> फ़ॉर्मैट
  • boolean
  • array -> minItems, maxItems, items
  • object -> properties, required, propertyOrdering, nullable

यहां टाइप और फ़ील्ड के मान्य कॉम्बिनेशन दिखाने वाले कुछ स्कीमा के उदाहरण दिए गए हैं:

{ "type": "string", "enum": ["a", "b", "c"] }

{ "type": "string", "format": "date-time" }

{ "type": "integer", "format": "int64" }

{ "type": "number", "format": "double" }

{ "type": "boolean" }

{ "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": ... } }

{ "type": "object",
  "properties": {
    "a": { "type": ... },
    "b": { "type": ... },
    "c": { "type": ... }
  },
  "nullable": true,
  "required": ["c"],
  "propertyOrdering": ["c", "b", "a"]
}

Gemini API में इस्तेमाल किए गए स्कीमा फ़ील्ड का पूरा दस्तावेज़ देखने के लिए, स्कीमा रेफ़रंस देखें.

प्रॉपर्टी ऑर्डर करना

Gemini API में JSON स्कीमा के साथ काम करते समय, प्रॉपर्टी का क्रम ज़रूरी होता है. डिफ़ॉल्ट रूप से, एपीआई प्रॉपर्टी को वर्णमाला के क्रम में लगाता है. साथ ही, वह उस क्रम को सेव नहीं करता जिसमें प्रॉपर्टी तय की गई हैं. हालांकि, Google जनरेटिव एआई SDK टूल इस क्रम को सेव कर सकते हैं. अगर कॉन्फ़िगर किए गए स्कीमा के साथ मॉडल को उदाहरण दिए जा रहे हैं और उदाहरणों की प्रॉपर्टी का क्रम, स्कीमा की प्रॉपर्टी के क्रम से मेल नहीं खाता है, तो आउटपुट गलत या अनचाहा हो सकता है.

प्रॉपर्टी की क्रम से लगाई गई सूची में कोई बदलाव न हो, इसके लिए propertyOrdering[] फ़ील्ड का इस्तेमाल किया जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.

"propertyOrdering": ["recipe_name", "ingredients"]

propertyOrdering[] – यह OpenAPI स्पेसिफ़िकेशन में स्टैंडर्ड फ़ील्ड नहीं है – यह एक स्ट्रिंग कलेक्शन है. इसका इस्तेमाल, रिस्पॉन्स में प्रॉपर्टी के क्रम को तय करने के लिए किया जाता है. प्रॉपर्टी का क्रम तय करके, उसी क्रम में प्रॉपर्टी के उदाहरण देने से, नतीजों की क्वालिटी को बेहतर बनाया जा सकता है.