फ़ंक्शन कॉलिंग का ट्यूटोरियल

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

Gemini मॉडल में फ़ंक्शन की जानकारी दी जा सकती है. ये ऐसे फ़ंक्शन होते हैं जिन्हें आप अपने ऐप्लिकेशन की भाषा में लिखते हैं. इसका मतलब है कि ये Google Cloud फ़ंक्शन नहीं होते. मॉडल, आपकी क्वेरी को मैनेज करने में मदद करने के लिए, आपसे किसी फ़ंक्शन को कॉल करने और नतीजा भेजने के लिए कह सकता है.

अगर आपने पहले से ही ज़्यादा नहीं जाना है, तो फ़ंक्शन कॉल करने के बारे में जानकारी देखें.

लाइटिंग कंट्रोल के लिए एपीआई का उदाहरण

मान लें कि आपके पास ऐप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) वाला एक बुनियादी लाइटिंग कंट्रोल सिस्टम है और आपको उपयोगकर्ताओं को टेक्स्ट के आसान अनुरोधों की मदद से लाइटें कंट्रोल करने की अनुमति देनी है. फ़ंक्शन कॉलिंग की सुविधा का इस्तेमाल करके, उपयोगकर्ताओं से मिले लाइटिंग में बदलाव करने के अनुरोधों को समझा जा सकता है. साथ ही, लाइटिंग की वैल्यू सेट करने के लिए, उन्हें एपीआई कॉल में बदला जा सकता है. इस लाइटिंग कंट्रोल सिस्टम की मदद से, लाइट की ब्राइटनेस और रंग के तापमान को कंट्रोल किया जा सकता है. इन दोनों पैरामीटर को अलग-अलग तय किया जाता है:

पैरामीटर टाइप ज़रूरी है ब्यौरा
brightness संख्या हां लाइट का लेवल 0 से 100 तक होता है. शून्य का मतलब है कि रोशनी बंद है और 100 का मतलब है कि रोशनी पूरी है.
colorTemperature स्ट्रिंग हां लाइट फ़िक्सचर का कलर टेंपरेचर, जो daylight, cool या warm हो सकता है.

आसानी के लिए, इस काल्पनिक लाइटिंग सिस्टम में सिर्फ़ एक लाइट है, ताकि उपयोगकर्ता को कमरे या जगह की जानकारी देने की ज़रूरत न पड़े. यहां JSON अनुरोध का एक उदाहरण दिया गया है. इसे लाइटिंग कंट्रोल एपीआई को भेजा जा सकता है, ताकि दिन के उजाले के कलर टेंपरेचर का इस्तेमाल करके, लाइट के लेवल को 50% पर सेट किया जा सके:

{
  "brightness": "50",
  "colorTemperature": "daylight"
}

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

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

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

एपीआई फ़ंक्शन तय करना

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

func setLightValues(brightness int, colorTemp string) map[string]any {
    // This mock API returns the requested lighting values
    return map[string]any{
        "brightness":       brightness,
        "colorTemperature": colorTemp}
}

फ़ंक्शन का एलान करना

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

lightControlTool := &genai.Tool{
    FunctionDeclarations: []*genai.FunctionDeclaration{{
        Name:        "controlLight",
        Description: "Set the brightness and color temperature of a room light.",
        Parameters: &genai.Schema{
            Type: genai.TypeObject,
            Properties: map[string]*genai.Schema{
                "brightness": {
                    Type:        genai.TypeString,
                    Description: "Light level from 0 to 100. Zero is off and"+
                        " 100 is full brightness.",
                },
                "colorTemperature": {
                    Type:        genai.TypeString,
                    Description: "Color temperature of the light fixture which" +
                        " can be `daylight`, `cool` or `warm`.",
                },
            },
            Required: []string{"brightness", "colorTemperature"},
        },
    }},
}

मॉडल को शुरू करने के दौरान फ़ंक्शन का एलान करना

अगर आपको मॉडल के साथ फ़ंक्शन कॉलिंग का इस्तेमाल करना है, तो मॉडल ऑब्जेक्ट को शुरू करते समय, आपको अपने फ़ंक्शन के एलान देने होंगे. मॉडल के Tools पैरामीटर को सेट करके, फ़ंक्शन का एलान किया जाता है:

// ...

lightControlTool := &genai.Tool{
    // ...
}

// Use a model that supports function calling, like a Gemini 1.5 model
model := client.GenerativeModel("gemini-1.5-flash")

// Specify the function declaration.
model.Tools = []*genai.Tool{lightControlTool}

फ़ंक्शन कॉल जनरेट करना

फ़ंक्शन के एलान की मदद से मॉडल को शुरू करने के बाद, तय किए गए फ़ंक्शन के साथ मॉडल को प्रॉम्प्ट किया जा सकता है. आपको चैट प्रॉम्प्ट (SendMessage()) का इस्तेमाल करके, फ़ंक्शन कॉलिंग का इस्तेमाल करना चाहिए. ऐसा इसलिए, क्योंकि फ़ंक्शन कॉलिंग में आम तौर पर, पिछले प्रॉम्प्ट और जवाबों का कॉन्टेक्स्ट होने से फ़ायदा मिलता है.

// Start new chat session.
session := model.StartChat()

prompt := "Dim the lights so the room feels cozy and warm."

// Send the message to the generative model.
resp, err := session.SendMessage(ctx, genai.Text(prompt))
if err != nil {
    log.Fatalf("Error sending message: %v\n", err)
}

// Check that you got the expected function call back.
part := resp.Candidates[0].Content.Parts[0]
funcall, ok := part.(genai.FunctionCall)
if !ok {
    log.Fatalf("Expected type FunctionCall, got %T", part)
}
if g, e := funcall.Name, lightControlTool.FunctionDeclarations[0].Name; g != e {
    log.Fatalf("Expected FunctionCall.Name %q, got %q", e, g)
}
fmt.Printf("Received function call response:\n%q\n\n", part)

apiResult := map[string]any{
    "brightness":  "30",
    "colorTemperature":  "warm" }

// Send the hypothetical API result back to the generative model.
fmt.Printf("Sending API result:\n%q\n\n", apiResult)
resp, err = session.SendMessage(ctx, genai.FunctionResponse{
    Name:     lightControlTool.FunctionDeclarations[0].Name,
    Response: apiResult,
})
if err != nil {
    log.Fatalf("Error sending message: %v\n", err)
}

// Show the model's response, which is expected to be text.
for _, part := range resp.Candidates[0].Content.Parts {
    fmt.Printf("%v\n", part)
}