Gemini में फ़ंक्शन कॉलिंग की सुविधा का इस्तेमाल करके, एपीआई के साथ इंटरैक्ट करने का तरीका

1. खास जानकारी

Gemini में कॉल करने की सुविधा क्या है?

Vertex AI Gemini API, जनरेटिव एआई मॉडल का एक फ़ैमिली मॉडल है. इसे Google DeepMind ने बनाया है. इसे मल्टीमोडल इस्तेमाल के उदाहरणों के लिए डिज़ाइन किया गया है. फ़ंक्शन कॉल, Gemini मॉडल की एक सुविधा है. इससे डेवलपर को जनरेटिव मॉडल से स्ट्रक्चर्ड डेटा का आउटपुट पाने में आसानी होती है.

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

फ़ंक्शन कॉलिंग की सुविधा कैसे काम करती है

फ़ंक्शन की जानकारी, फ़ंक्शन से जुड़े एलानों का इस्तेमाल करके दी जाती है. इससे जनरेटिव मॉडल को फ़ंक्शन के मकसद और पैरामीटर को समझने में मदद मिलती है. किसी क्वेरी में जनरेटिव मॉडल के लिए फ़ंक्शन की जानकारी पास करने के बाद, मॉडल एक स्ट्रक्चर्ड ऑब्जेक्ट दिखाता है. इस ऑब्जेक्ट में, उपयोगकर्ता की क्वेरी के आधार पर काम के फ़ंक्शन के नाम और उनके आर्ग्युमेंट शामिल होते हैं. ध्यान दें कि फ़ंक्शन कॉलिंग के साथ, मॉडल असल में फ़ंक्शन को कॉल नहीं करता. इसके बजाय, अपनी पसंद की किसी भी भाषा, लाइब्रेरी या फ़्रेमवर्क में फ़ंक्शन को कॉल करने के लिए, लौटाए गए फ़ंक्शन और पैरामीटर का इस्तेमाल करें!

एपीआई इंटरफ़ेस

आपको क्या बनाना होगा

इस कोडलैब में, Vertex AI Gemini API और Python की मदद से जनरेटिव एआई की एक पाइपलाइन बनाई जा सकती है. आपके ऐप्लिकेशन का इस्तेमाल करके, उपयोगकर्ता एक्सचेंज रेट के बारे में पूछ सकते हैं. सिस्टम, बाहरी एपीआई से नया डेटा फ़ेच करेगा और उपयोगकर्ता को जवाब देगा.

आप इन चीज़ों के बारे में जानेंगे

  • Python क्लाइंट लाइब्रेरी का इस्तेमाल करके, Gemini मॉडल के साथ इंटरैक्ट करने का तरीका
  • फ़ंक्शन का एलान करने और उसे टूल के तौर पर रजिस्टर करने का तरीका
  • Gemini को कॉल करने और फ़ंक्शन का जवाब पाने का तरीका
  • Gemini को फ़ंक्शन का जवाब देने और उपयोगकर्ता को जवाब देने का तरीका

आपको इनकी ज़रूरत होगी

  • Google Cloud प्रोजेक्ट
  • Chrome जैसा ब्राउज़र
  • Python डेवलपमेंट एनवायरमेंट, जैसे कि Colab या Colab Enterprise

2. सेटअप और ज़रूरी शर्तें

Gemini में फ़ंक्शन कॉलिंग की सुविधा का इस्तेमाल शुरू करने से पहले, आपको Vertex AI API चालू करना होगा. साथ ही, Vertex AI Python क्लाइंट लाइब्रेरी का सबसे नया वर्शन इंस्टॉल करना होगा.

Vertex AI API को चालू करें

Vertex AI API को चालू करने के लिए, यह तरीका अपनाएं:

  1. अपने ब्राउज़र में, Vertex AI API की सेवा की जानकारी वाले पेज पर जाएं.
  2. अपने Google Cloud प्रोजेक्ट में Vertex AI API चालू करने के लिए, चालू करें बटन पर क्लिक करें.

Vertex AI के लिए, Python क्लाइंट लाइब्रेरी इंस्टॉल करें

Vertex AI के लिए Python क्लाइंट लाइब्रेरी इंस्टॉल करने के लिए, यह तरीका अपनाएं:

  1. अपने डेवलपमेंट एनवायरमेंट में टर्मिनल खोलें.
  2. पुष्टि करें कि आपके पास एक मान्य Python डेवलपमेंट एनवायरमेंट मौजूद हो और ज़रूरत पड़ने पर इन दिशा-निर्देशों को देखें.
  3. Vertex AI के लिए Python क्लाइंट लाइब्रेरी इंस्टॉल करने के लिए, यह कमांड चलाएं:
    pip install --upgrade google-cloud-aiplatform
    
  4. अगर नोटबुक एनवायरमेंट में चल रही है, तो आपको इंस्टॉल किए गए नए पैकेज का इस्तेमाल करने के लिए, अपने रनटाइम/कर्नेल को रीस्टार्ट करना पड़ सकता है.

अब आप Vertex AI API का इस्तेमाल करने के लिए तैयार हैं!

3. समस्या को समझना

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

इसे अभी आज़माएं! सबसे पहले, हम Python पैकेज इंपोर्ट करेंगे और Gemini मॉडल को शुरू करेंगे. यहां दिए गए कोड को Colab या Colab Enterprise जैसे Python डेवलपमेंट एनवायरमेंट में चलाया जा सकता है. इसके अलावा, Python के लिए Vertex AI SDK टूल के नए वर्शन को इंस्टॉल करके भी ऐसा किया जा सकता है:

import vertexai
from vertexai.generative_models import GenerativeModel
model = GenerativeModel("gemini-1.5-pro-001")

चलिए, अब अलग-अलग मुद्राओं के लिए एक्सचेंज रेट के बारे में सवाल पूछते हैं:

response = model.generate_content(
    "What's the exchange rate for euros to dollars today?"
)
print(response.text)

मॉडल को आपके लिए सीमित या पुराना जवाब जनरेट करना चाहिए, जैसे:

As an AI language model, I don't have access to real-time currency exchange
rates. However, as of my last update in September 2021, the approximate exchange
rate between euros (EUR) and US dollars (USD) was:

1 EUR ≈ 1.18 USD

Please note that currency exchange rates constantly fluctuate and can vary
depending on various factors such as economic conditions, supply and demand,
political events, and more. To obtain the most up-to-date and accurate exchange
rate, I recommend using a reliable currency converter or financial website that
provides live rates.

[...]

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

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

4. सामान्य समाधान आज़माएं

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

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

चलिए, पिछले सेक्शन में पूछे गए सवाल पर दोबारा नज़र डालते हैं और मॉडल के लिए कुछ अतिरिक्त निर्देश जोड़ते हैं. Gemini मॉडल को यह अनुरोध भेजें:

user_prompt = "What's the exchange rate from euros to US dollars today?"

response = model.generate_content("""
Your task is to extract parameters from the user's input and return it as a
structured JSON payload. The user will ask about the exchange rate and which
currency they are converting from and converting to.

User input: {user_prompt}

Please extract the currencies as parameters and put them in a JSON object.
""".format(user_prompt=user_prompt))
print(response.text)

यह नतीजा इस तरह का टेक्स्ट रिस्पॉन्स है, जो मान्य JSON नहीं है और हमारे लिए इसके साथ काम करना मुश्किल होगा:

```json
{
  "currency_from": "euros",
  "currency_to": "US dollars"
}
```

खास तौर पर, टेक्स्ट रिस्पॉन्स की पहली और आखिरी लाइनों में कोड ब्लॉक तय करने के लिए बैकटिक शामिल होते हैं. पहली लाइन में भाषा की जानकारी देने वाली सुविधा होती है. साथ ही, JSON ऑब्जेक्ट की वैल्यू, तीन अक्षरों वाले मुद्रा के अब्रिविएशन के नहीं हैं, जिन्हें करंसी एक्सचेंज एपीआई को इनपुट पैरामीटर के तौर पर देखना चाहिए.

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

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

5. फ़ंक्शन कॉलिंग की सुविधा कैसे काम करती है

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

Gemini में फ़ंक्शन कॉल करने के बारे में खास जानकारी

Gemini API के लिए उपयोगकर्ता का इनपुट

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

Gemini API, फ़ंक्शन कॉल दिखाता है

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

एपीआई अनुरोध करें

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

Gemini को एपीआई से मिला जवाब वापस भेजें

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

6. अपना एपीआई चुनें

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

हमारे मुद्रा विनिमय ऐप्लिकेशन के लिए, हम वैश्विक विनिमय दरों के बारे में नई जानकारी फ़ेच करने के लिए https://www.frankfurter.app/ पर REST API का उपयोग करेंगे.

इस REST API के साथ इंटरैक्ट करने के लिए, हम Python में requests के साथ इस तरह REST API कॉल कर सकते हैं:

import requests
url = "https://api.frankfurter.app/latest"
response = requests.get(url)
response.text

या cURL का अनुरोध करें. जैसे:

curl https://api.frankfurter.app/latest

जो ऐसा जवाब देता है:

{
  "amount": 1,
  "base": "EUR",
  "date": "2023-12-20",
  "rates": {
    "AUD": 1.6186, "BGN": 1.9558, "BRL": 5.3287,
    "CAD": 1.4609, "CHF": 0.946, "CNY": 7.8121,
    "CZK": 24.538, "DKK": 7.4565, "GBP": 0.86555,
    "HKD": 8.5439, "HUF": 385.23, "IDR": 16994,
    "ILS": 3.9983, "INR": 91.06, "ISK": 150.3,
    "JPY": 157.12, "KRW": 1425.62, "MXN": 18.6867,
    "MYR": 5.0977, "NOK": 11.2895, "NZD": 1.7421,
    "PHP": 60.991, "PLN": 4.3413, "RON": 4.9699,
    "SEK": 11.129, "SGD": 1.4562, "THB": 38.252,
    "TRY": 31.883, "USD": 1.0944, "ZAR": 20.111
  }
}

Gemini में फ़ंक्शन कॉलिंग आपके लिए बाहरी एपीआई कॉल नहीं करता. इसलिए, किस तरह के एपीआई का इस्तेमाल किया जा रहा है, इस पर आपकी कोई पाबंदी नहीं है! Cloud Run सेवा, Cloud Function, Google Cloud सेवा के लिए एपीआई अनुरोध या किसी बाहरी REST API का इस्तेमाल किया जा सकता है.

7. फ़ंक्शन और टूल के बारे में बताना

आपने इस्तेमाल करने के लिए कोई REST API चुन लिया है, तो अब हम एपीआई के लिए स्पेसिफ़िकेशन तय कर सकते हैं और फ़ंक्शन को टूल में रजिस्टर कर सकते हैं.

पक्का करें कि आपने Python के लिए Vertex AI SDK का सबसे नया वर्शन इंस्टॉल किया है.

इसके बाद, Python SDK से ज़रूरी मॉड्यूल इंपोर्ट करें और Gemini मॉडल को शुरू करें:

from vertexai.generative_models import (
    Content,
    FunctionDeclaration,
    GenerativeModel,
    Part,
    Tool,
)

model = GenerativeModel("gemini-1.5-pro-001")

https://api.frankfurter.app/ पर REST API के बारे में देखते हुए, हम देख सकते हैं कि यह इन इनपुट पैरामीटर को स्वीकार करता है:

पैरामीटर

टाइप

ब्यौरा

from

स्ट्रिंग

जिस मुद्रा से कन्वर्ट करना है

to

स्ट्रिंग

जिस मुद्रा में बदलना है उसे

date

स्ट्रिंग

एक्सचेंज रेट फ़ेच करने की तारीख

इन पैरामीटर का इस्तेमाल करके, YAML फ़ॉर्मैट में इस REST API के लिए कुछ OpenAPI स्पेसिफ़िकेशन इस तरह से दिखते हैं:

openapi: 3.0.0
info:
  title: Frankfurter Exchange Rate API
  description: This API provides current and historical exchange rates
  version: 1.0.0
servers:
  - url: https://api.frankfurter.app
paths:
  /{date}:
    get:
      summary: Get the latest currency exchange rates.
      parameters:
        - name: date
          in: path
          description: Get currency rates for a specific date or 'latest' if a date is not specified
          required: true
          schema:
            type: string
        - name: from
          in: query
          description: The currency to convert from.
          required: true
          schema:
            type: string
        - name: to
          in: query
          description: The currency to convert to.
          schema:
            type: string

आइए, अब इसे Gemini के लिए Python SDK टूल का इस्तेमाल करके FunctionDeclaration के तौर पर रजिस्टर करते हैं:

get_exchange_rate_func = FunctionDeclaration(
    name="get_exchange_rate",
    description="Get the exchange rate for currencies between countries",
    parameters={
    "type": "object",
    "properties": {
        "currency_date": {
            "type": "string",
            "description": "A date that must always be in YYYY-MM-DD format or the value 'latest' if a time period is not specified"
        },
        "currency_from": {
            "type": "string",
            "description": "The currency to convert from in ISO 4217 format"
        },
        "currency_to": {
            "type": "string",
            "description": "The currency to convert to in ISO 4217 format"
        }
    },
         "required": [
            "currency_from",
            "currency_date",
      ]
  },
)

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

आखिर में, आपको एक ऐसा Tool तय करना होगा जिसमें फ़ंक्शन का एलान शामिल हो:

exchange_rate_tool = Tool(
    function_declarations=[get_exchange_rate_func],
)

यहां, टूल में एक फ़ंक्शन का एलान इस्तेमाल किया जा रहा है. हालांकि, ध्यान रखें कि किसी टूल में एक या उससे ज़्यादा फ़ंक्शन एलान रजिस्टर किए जा सकते हैं. साथ ही, मॉडल रनटाइम के समय इस्तेमाल करने के लिए सही फ़ंक्शन चुनेगा. Gemini SDK for Python में FunctionDeclaration, Tool, और इससे जुड़ी क्लास के बारे में ज़्यादा जानकारी के लिए, Gemini API में फ़ंक्शन कॉलिंग से जुड़ा दस्तावेज़ देखें.

आपने अपने फ़ंक्शन और टूल की परिभाषाओं का कॉन्फ़िगरेशन पूरा कर लिया है. अगले सेक्शन में, हम इस टूल से जनरेटिव मॉडल को कॉल करेंगे और वापस एक फ़ंक्शन कॉल करेंगे. इस कॉल का इस्तेमाल करके, REST API को कॉल किया जा सकता है.

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

अब जनरेटिव मॉडल को प्रॉम्प्ट भेजा जा सकता है और अपने तय किए गए tool को शामिल किया जा सकता है:

prompt = """What is the exchange rate from Australian dollars to Swedish krona?
How much is 500 Australian dollars worth in Swedish krona?"""

response = model.generate_content(
    prompt,
    tools=[exchange_rate_tool],
)

चलिए, रिस्पॉन्स ऑब्जेक्ट पर एक नज़र डालते हैं:

print(response.candidates[0].content)

role: "model"
parts {
  function_call {
    name: "get_exchange_rate"
    args {
      fields {
        key: "currency_to"
        value {
          string_value: "SEK"
        }
      }
      fields {
        key: "currency_from"
        value {
          string_value: "AUD"
        }
      }
      fields {
        key: "currency_date"
        value {
          string_value: "latest"
        }
      }
    }
  }
}

ऐसा लगता है कि मॉडल ने एक उपलब्ध फ़ंक्शन चुना है और पैरामीटर के साथ get_exchange_rate फ़ंक्शन के लिए फ़ंक्शन कॉल लौटाया है. पैरामीटर भी सही फ़ॉर्मैट में हों, जो हमें चाहिए थे. जनरेटिव मॉडल से स्ट्रक्चर्ड जवाब पाने के लिए बधाई!

अगले सेक्शन में, आपको एपीआई अनुरोध करने के जवाब में दी गई जानकारी का इस्तेमाल करना होगा.

9. एपीआई अनुरोध करें

याद रखें कि Gemini में कॉल करने की सुविधा, असल में बाहरी एपीआई कॉल नहीं करती. इसके बजाय, आपके पास अपनी पसंद की किसी भी भाषा, लाइब्रेरी या फ़्रेमवर्क का इस्तेमाल करने का विकल्प होता है!

यहां एक्सचेंज रेट के REST API को कॉल करने के लिए, Python में requests लाइब्रेरी का इस्तेमाल किया जा सकता है.

चलिए, रिस्पॉन्स को Python डिक्शनरी में देते हैं:

params = {}
for key, value in response.candidates[0].content.parts[0].function_call.args.items():
    params[key[9:]] = value
params

अब हम requests या किसी दूसरे तरीके से कॉल कर सकते हैं:

import requests
url = f"https://api.frankfurter.app/{params['date']}"
api_response = requests.get(url, params=params)
api_response.text

जिसकी वजह से ऐसा जवाब मिलता है:

'{"amount":1.0,"base":"AUD","date":"2024-01-16","rates":{"SEK":6.8682}}'

REST API से जवाब मिला है, जिसमें आज के एक्सचेंज रेट की सबसे नई जानकारी शामिल है. अगले सेक्शन में, हम इस जानकारी को मॉडल में वापस भेजेंगे, ताकि यह उपयोगकर्ता के लिए सही जवाब जनरेट कर सके.

10. जवाब जनरेट करें

आखिर में, हम बातचीत के अगले मोड़ में मॉडल को फ़ंक्शन रिस्पॉन्स पास करके उपयोगकर्ता के लिए रिस्पॉन्स जनरेट करते हैं:

response = model.generate_content(
    [
    Content(role="user", parts=[
        Part.from_text(prompt + """Give your answer in steps with lots of detail
            and context, including the exchange rate and date."""),
    ]),
    Content(role="function", parts=[
        Part.from_dict({
            "function_call": {
                "name": "get_exchange_rate",
            }
        })
    ]),
    Content(role="function", parts=[
        Part.from_function_response(
            name="get_exchange_rate",
            response={
                "content": api_response.text,
            }
        )
    ]),
    ],
    tools=[exchange_rate_tool],
)


response.candidates[0].content.parts[0].text

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

The exchange rate from Australian dollars to Swedish krona on January 16, 2024,
is 1 Australian dollar is equal to 6.8663 Swedish krona.

So, 500 Australian dollars would be worth 500 * 6.8663 = 3,433.15 Swedish krona.

11. कोड का पूरा उदाहरण देखें

इसके बाद, Cloud Run सेवा, Cloud Function या किसी दूसरी क्लाउड सेवा का इस्तेमाल करके अपने Python कोड को बैकएंड एपीआई में रखा जा सकता है. साथ ही, कोई ऐसा फ़्रंटएंड ऐप्लिकेशन डिप्लॉय किया जा सकता है जो मॉडल क्वेरी और एपीआई कॉल करने के लिए इस बैकएंड एपीआई का इस्तेमाल करता है.

यहां हमारे आखिरी समाधान के लिए पूरे कोड का उदाहरण दिया गया है:

import requests
from vertexai.generative_models import (
    Content,
    FunctionDeclaration,
    GenerativeModel,
    Part,
    Tool,
)

model = GenerativeModel("gemini-1.5-pro-001")

get_exchange_rate_func = FunctionDeclaration(
    name="get_exchange_rate",
    description="Get the exchange rate for currencies between countries",
    parameters={
    "type": "object",
    "properties": {
        "currency_date": {
            "type": "string",
            "description": "A date that must always be in YYYY-MM-DD format or the value 'latest' if a time period is not specified"
        },
        "currency_from": {
            "type": "string",
            "description": "The currency to convert from in ISO 4217 format"
        },
        "currency_to": {
            "type": "string",
            "description": "The currency to convert to in ISO 4217 format"
        }
    },
         "required": [
            "currency_from",
            "currency_date",
      ]
  },
)

exchange_rate_tool = Tool(
    function_declarations=[get_exchange_rate_func],
)

prompt = """What is the exchange rate from Australian dollars to Swedish krona?
How much is 500 Australian dollars worth in Swedish krona?"""

response = model.generate_content(
    prompt,
    tools=[exchange_rate_tool],
)

response.candidates[0].content

params = {}
for key, value in response.candidates[0].content.parts[0].function_call.args.items():
    params[key[9:]] = value
params

import requests
url = f"https://api.frankfurter.app/{params['date']}"
api_response = requests.get(url, params=params)
api_response.text

response = model.generate_content(
    [
    Content(role="user", parts=[
        Part.from_text(prompt + """Give your answer in steps with lots of detail
            and context, including the exchange rate and date."""),
    ]),
    Content(role="function", parts=[
        Part.from_dict({
            "function_call": {
                "name": "get_exchange_rate",
            }
        })
    ]),
    Content(role="function", parts=[
        Part.from_function_response(
            name="get_exchange_rate",
            response={
                "content": api_response.text,
            }
        )
    ]),
    ],
    tools=[exchange_rate_tool],
)


response.candidates[0].content.parts[0].text

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

कोड के ज़्यादा सैंपल पाने के लिए, Gemini में फ़ंक्शन कॉल करने के लिए नोटबुक का सैंपल देखें.

12. बधाई हो

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

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

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

एपीआई इंटरफ़ेस

स्टोरेज खाली करें

कोडलैब में इस्तेमाल किए जाने वाले संसाधनों के लिए, Google Cloud खाते में लगने वाले शुल्क से बचने के लिए, क्लीनअप का इस्तेमाल करें:

  • Google Cloud के ग़ैर-ज़रूरी शुल्कों से बचने के लिए, अगर आपको अपने प्रोजेक्ट की ज़रूरत नहीं है, तो Google Cloud कंसोल का इस्तेमाल करके उसे मिटा दें.
  • अगर आपको Vertex AI के लिए एपीआई बंद करने हैं, तो Vertex AI API की सेवा की ज़्यादा जानकारी वाले पेज पर जाएं. इसके बाद, एपीआई बंद करें पर क्लिक करके पुष्टि करें.

ज़्यादा जानें

इन गाइड और संसाधनों की मदद से, बातचीत वाले एआई और जनरेटिव एआई के बारे में ज़्यादा जानें:

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.