Genkit मॉडल प्लगिन लिखना

Genkit मॉडल के प्लगिन, Genkit में एक या एक से ज़्यादा जनरेटिव एआई मॉडल जोड़ते हैं रजिस्ट्री. मॉडल, ऐसे किसी भी जनरेटिव मॉडल को दिखाता है जो प्रॉम्प्ट को इनपुट के तौर पर और टेक्स्ट, मीडिया या डेटा को आउटपुट के तौर पर जनरेट किया जा सकता है.

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

लिखने के बारे में जानकारी पाने के लिए, Genkit प्लगिन लिखने के बारे में पढ़ें किसी भी तरह के Genkit प्लग-इन का इस्तेमाल कर सकते हैं. इनमें मॉडल प्लग-इन भी शामिल हैं. खास तौर पर, ध्यान दें कि हर प्लगिन के लिए एक Init फ़ंक्शन एक्सपोर्ट करना ज़रूरी है, जिसे उपयोगकर्ताओं को कॉल करना चाहिए प्लगिन का इस्तेमाल करें.

मॉडल की परिभाषाएं

आम तौर पर, एक मॉडल प्लगिन अपने ब्राउज़र में एक या उससे ज़्यादा ai.DefineModel कॉल करेगा Init फ़ंक्शन—हर एक मॉडल के लिए प्लगिन एक बार इंटरफ़ेस दे रहा है से.

मॉडल डेफ़िनिशन में तीन कॉम्पोनेंट होते हैं:

  1. मॉडल की क्षमताओं के बारे में बताने वाला मेटाडेटा.
  2. मॉडल के साथ काम करने वाले किसी खास पैरामीटर वाला कॉन्फ़िगरेशन टाइप.
  3. ऐसा जनरेशन फ़ंक्शन जो ai.GenerateRequest को स्वीकार करता है और ai.GenerateResponse, एआई मॉडल की मदद से बाद वाले मॉडल को जनरेट करता है.

बड़े लेवल पर, कोड में यह इस तरह दिखता है:

type MyModelConfig struct {
	ai.GenerationCommonConfig
	CustomOption int
	AnotherCustomOption string
}
ai.DefineModel(
	providerID, "my-model",
	&ai.ModelMetadata{
		Label: "my-model",
		Supports: ai.ModelCapabilities{
			Multiturn:  true,  // Does the model support multi-turn chats?
			SystemRole: true,  // Does the model support syatem messages?
			Media:      false, // Can the model accept media input?
			Tools:      false, // Does the model support function calling (tools)?
		},
	},
	func(ctx context.Context,
		genRequest *ai.GenerateRequest,
		_ ai.ModelStreamingCallback,
	) (*ai.GenerateResponse, error) {
		// Verify that the request includes a configuration that conforms to
		// your schema .
		if _, ok := genRequest.Config.(MyModelConfig); !ok {
			return nil, fmt.Errorf("request config must be type MyModelConfig")
		}

		// Use your custom logic to convert Genkit's ai.GenerateRequest
		// into a form usable by the model's native API.
		apiRequest, err := apiRequestFromGenkitRequest(genRequest)
		if err != nil {
			return nil, err
		}

		// Send the request to the model API, using your own code or the
		// model API's client library.
		apiResponse, err := callModelAPI(apiRequest)
		if err != nil {
			return nil, err
		}

		// Use your custom logic to convert the model's response to Genkin's
		// ai.GenerateResponse.
		response, err := genResponseFromAPIResponse(apiResponse)
		if err != nil {
			return nil, err
		}

		return response, nil
	},
)

मॉडल की क्षमताओं की जानकारी

हर मॉडल परिभाषा में, इसके मेटाडेटा के हिस्से के रूप में, ai.ModelCapabilities वैल्यू, जिससे पता चलता है कि मॉडल में कौनसी सुविधाएं काम करती हैं. Genkit इस जानकारी का इस्तेमाल कुछ चुनिंदा गतिविधियों का पता लगाने के लिए करता है. जैसे, पुष्टि करना क्या कुछ इनपुट मॉडल के लिए मान्य हैं. उदाहरण के लिए, अगर मॉडल बार-बार होने वाले इंटरैक्शन की सुविधा नहीं है, तो इसे मैसेज भेजना गड़बड़ी हो सकती है इतिहास.

ध्यान दें कि ये एलान, मॉडल की क्षमताओं के बारे में बताते हैं अपने प्लग इन का इस्तेमाल किया जा सकता है, और ज़रूरी नहीं है कि एक-दूसरे के साथ मैप करने की ज़रूरत हो. मौजूदा मॉडल और मॉडल एपीआई. उदाहरण के लिए, भले ही मॉडल API सिस्टम मैसेज को तय करने का एक खास तरीका उपलब्ध कराता है, तो आपका प्लगिन अब भी सिस्टम की भूमिका के लिए सहायता का एलान करेगा. साथ ही, इसे एक खास लॉजिक के तौर पर लागू करेगा, यूज़र प्रॉम्प्ट में सिस्टम के मैसेज शामिल करता है.

अपने मॉडल का कॉन्फ़िगरेशन स्कीमा तय करना

यह बताने के लिए कि मॉडल, डेटा जनरेट करने के कौनसे विकल्प इस्तेमाल कर सकता है, कॉन्फ़िगरेशन प्रकार. Genkit में एक ऐसा ai.GenerationCommonConfig है जिसमें यह शामिल है विकल्प, जो जनरेटिव एआई मॉडल सर्विस के साथ काम करते हैं. इन सेवाओं की मदद से, एम्बेड या उसका इस्तेमाल करना.

आपके जनरेट किए गए फ़ंक्शन से इस बात की पुष्टि होनी चाहिए कि अनुरोध में सही विकल्प प्रकार.

अनुरोधों और जवाबों में बदलाव करना

जनरेशन फ़ंक्शन, Genkit मॉडल प्लगिन का मुख्य काम करता है: ai.GenerateRequest को Genkit के सामान्य फ़ॉर्मैट से एक फ़ॉर्मैट में बदलकर जो आपके मॉडल के API द्वारा समर्थित हो और फिर इससे अपने मॉडल को Genkit के ज़रिए इस्तेमाल किए जाने वाले ai.GenerateResponse फ़ॉर्मैट में बदलें.

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

निर्यात

सभी प्लगिन को जिन संसाधनों को एक्सपोर्ट करना ज़रूरी होता है उनके अलावा—एक Init फ़ंक्शन और Config टाइप—मॉडल प्लगिन को भी फ़ॉलो किया जा रहा है:

  • जनरेशन कॉन्फ़िगरेशन का टाइप, जैसा कि पहले चर्चा की गई थी.

  • Model फ़ंक्शन, जो आपके प्लगिन के तय मॉडल के रेफ़रंस दिखाता है. आम तौर पर, ऐसा इन वजहों से हो सकता है:

    func Model(name string) *ai.Model {
        return ai.LookupModel(providerID, name)
    }
    
  • ज़रूरी नहीं: DefineModel फ़ंक्शन की मदद से उपयोगकर्ता ऐसे मॉडल तय कर सकते हैं आपके प्लगिन उपलब्ध करा सकता है, लेकिन यह अपने-आप तय नहीं होता. यहां हैं आपको ऐसा फ़ंक्शन देने की दो मुख्य वजहें हो सकती हैं:

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

    • आपके उपयोगकर्ताओं को हाल ही में रिलीज़ हुए मॉडल का इस्तेमाल करने की सुविधा देने के लिए को अभी तक आपके प्लग इन में नहीं जोड़ा गया है.

    आम तौर पर, प्लगिन का DefineModel फ़ंक्शन, ai.DefineModel का फ़्रंटएंड होता है जो जनरेशन फ़ंक्शन के बारे में जानकारी देता है. हालांकि, इसकी मदद से उपयोगकर्ता मॉडल का नाम तय कर सकता है और मॉडल की क्षमताओं के बारे में बात करते हैं.