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

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

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: String,
                    colorTemp: String) -> JSONObject {
  // This mock API returns the requested lighting values
  return [
    "brightness": .string(brightness),
    "colorTemperature": .string(colorTemp)
  ]
}

फ़ंक्शन के एलान बनाना

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

let controlLightFunctionDeclaration = FunctionDeclaration(
  name: "controlLight",
  description: "Set the brightness and color temperature of a room light.",
  parameters: [
    "brightness": Schema(
      type: .string,
      description: "Light level from 0 to 100. Zero is off and 100 is full brightness."
    ),
    "colorTemperature": Schema(
      type: .string,
      description: "Color temperature of the light fixture which can be `daylight`, `cool` or `warm`."
    ),
  ],
  requiredParameters: ["brightness", "colorTemperature"]
)

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

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

// Use a model that supports function calling, like a Gemini 1.5 model
let generativeModel = GenerativeModel(
  name: "gemini-2.0-flash",
  apiKey: apiKey,
  // Specify the function declaration.
  tools: [Tool(functionDeclarations: [controlLightFunctionDeclaration])]
)

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

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

let chat = generativeModel.startChat()

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

// Send the message to the generative model
let response1 = try await chat.sendMessage(prompt)

// Check if the model responded with a function call
guard let functionCall = response1.functionCalls.first else {
  fatalError("Model did not respond with a function call.")
}
// Print an error if the returned function was not declared
guard functionCall.name == "controlLight" else {
  fatalError("Unexpected function called: \(functionCall.name)")
}
// Verify that the names and types of the parameters match the declaration
guard case let .string(brightness) = functionCall.args["brightness"] else {
  fatalError("Missing argument: brightness")
}
guard case let .string(colorTemp) = functionCall.args["colorTemperature"] else {
  fatalError("Missing argument: colorTemperature")
}

// Call the hypothetical API
let apiResponse = setLightValues(brightness: brightness, colorTemperature: colorTemp)

// Send the API response back to the model so it can generate a text response that can be
// displayed to the user.
let response = try await chat.sendMessage([ModelContent(
  role: "function",
  parts: [.functionResponse(FunctionResponse(
    name: functionCall.name,
    response: apiResponse
  ))]
)])

// Log the text response.
guard let modelResponse = response.text else {
  fatalError("Model did not respond with text.")
}
print(modelResponse)