वेब ऐप्लिकेशन में हाइब्रिड अनुभवों के लिए स्ट्रक्चर्ड आउटपुट जनरेट करना


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

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

यहां कुछ उदाहरण दिए गए हैं:

  • पक्का करें कि मॉडल का जवाब मान्य JSON फ़ॉर्मैट में हो और आपके दिए गए स्कीमा के मुताबिक हो.
    उदाहरण के लिए, मॉडल ऐसी रेसिपी के लिए स्ट्रक्चर्ड एंट्री जनरेट कर सकता है जिनमें हमेशा रेसिपी का नाम, सामग्री की सूची, और बनाने का तरीका शामिल होता है. इसके बाद, इस जानकारी को आसानी से पार्स किया जा सकता है और अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में दिखाया जा सकता है.

  • यह तय करना कि क्लासिफ़िकेशन के टास्क के दौरान मॉडल कैसे जवाब दे सकता है.
    उदाहरण के लिए, मॉडल को टेक्स्ट की व्याख्या करने के लिए, लेबल का कोई खास सेट दिया जा सकता है. जैसे, एनम का कोई खास सेट, जैसे कि positive और negative. ऐसा करने से, मॉडल के जनरेट किए गए लेबल के बजाय, आपके दिए गए लेबल का इस्तेमाल किया जाएगा. मॉडल के जनरेट किए गए लेबल में अलग-अलग तरह के लेबल शामिल हो सकते हैं. जैसे, good, positive, negative या bad.

इस पेज पर, वेब ऐप्लिकेशन के लिए हाइब्रिड अनुभवों में स्ट्रक्चर्ड आउटपुट (जैसे कि JSON और enum) जनरेट करने का तरीका बताया गया है.

शुरू करने से पहले

पक्का करें कि आपने हाइब्रिड अनुभव बनाने के लिए, शुरू करने से जुड़ी गाइड को पूरा कर लिया हो.

स्ट्रक्चर्ड आउटपुट के लिए कॉन्फ़िगरेशन सेट करना

स्ट्रक्चर्ड आउटपुट (जैसे, JSON और enum) जनरेट करने की सुविधा, क्लाउड पर होस्ट किए गए और डिवाइस पर मौजूद, दोनों तरह के मॉडल के साथ काम करती है.

हाइब्रिड इन्फ़रेंस के लिए, inCloudParams और onDeviceParams, दोनों का इस्तेमाल करें. इससे मॉडल को स्ट्रक्चर्ड आउटपुट के साथ जवाब देने के लिए कॉन्फ़िगर किया जा सकेगा. अन्य मोड के लिए, सिर्फ़ लागू होने वाले कॉन्फ़िगरेशन का इस्तेमाल करें.

  • inCloudParams के लिए: सही responseMimeType (उदाहरण के लिए, application/json) के साथ-साथ वह responseSchema भी तय करें जिसका इस्तेमाल मॉडल को करना है.

  • onDeviceParams के लिए: वह responseConstraint तय करें जिसका इस्तेमाल मॉडल को करना है.

JSON आउटपुट

यहां दिए गए उदाहरण में, JSON आउटपुट के सामान्य उदाहरण को हाइब्रिड इन्फ़रेंस (इस उदाहरण में, PREFER_ON_DEVICE) के हिसाब से बदला गया है:

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const jsonSchema = Schema.object({
 properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          accessory: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
        },
        optionalProperties: ["accessory"],
      }),
    }),
  }
});

const model = getGenerativeModel(ai, {
  mode: InferenceMode.PREFER_ON_DEVICE,
  inCloudParams: {
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});

// ...

Enum आउटपुट

यहां दिए गए उदाहरण में, सामान्य enum आउटपुट के उदाहरण को हाइब्रिड इन्फ़्रेंस (इस उदाहरण में, PREFER_ON_DEVICE) के हिसाब से बदला गया है:

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"],
});

const model = getGenerativeModel(ai, {
  mode: InferenceMode.PREFER_ON_DEVICE,
  inCloudParams: {
    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: enumSchema
    }
  }
});

// ...