মিথুনে ফাংশন কলিং ব্যবহার করে API-এর সাথে কীভাবে ইন্টারঅ্যাক্ট করবেন

1। সংক্ষিপ্ত বিবরণ

মিথুনে ফাংশন কলিং কি?

Vertex AI Gemini API হল Google DeepMind দ্বারা তৈরি জেনারেটিভ AI মডেলের একটি পরিবার যা মাল্টিমডাল ব্যবহারের ক্ষেত্রে ডিজাইন করা হয়েছে। ফাংশন কলিং হল জেমিনি মডেলের একটি বৈশিষ্ট্য যা ডেভেলপারদের জন্য জেনারেটিভ মডেল থেকে স্ট্রাকচার্ড ডেটা আউটপুট পেতে সহজ করে তোলে।

বিকাশকারীরা তখন এই আউটপুটগুলি ব্যবহার করে অন্যান্য API কল করতে এবং মডেলে প্রাসঙ্গিক প্রতিক্রিয়া ডেটা ফেরত দিতে পারে। অন্য কথায়, ফাংশন কলিং আপনাকে আপনার জেনারেটিভ মডেলগুলিকে বাহ্যিক সিস্টেমের সাথে সংযুক্ত করতে সাহায্য করে যাতে তৈরি করা সামগ্রীতে সর্বাধিক আপ-টু-ডেট এবং সঠিক তথ্য অন্তর্ভুক্ত থাকে।

ফাংশন কলিং কিভাবে কাজ করে

ফাংশনগুলিকে ফাংশন ডিক্লেয়ারেশন ব্যবহার করে বর্ণনা করা হয়, যা জেনারেটিভ মডেলকে একটি ফাংশনের মধ্যে উদ্দেশ্য এবং প্যারামিটার বুঝতে সাহায্য করে। আপনি একটি জেনারেটিভ মডেলে একটি ক্যোয়ারীতে ফাংশন ঘোষণা পাস করার পরে, মডেলটি একটি স্ট্রাকচার্ড অবজেক্ট ফেরত দেয় যাতে ব্যবহারকারীর প্রশ্নের উপর ভিত্তি করে প্রাসঙ্গিক ফাংশনের নাম এবং তাদের আর্গুমেন্ট অন্তর্ভুক্ত থাকে। লক্ষ্য করুন যে ফাংশন কলিংয়ের সাথে, মডেলটি আসলে ফাংশনটিকে কল করে না। পরিবর্তে, আপনি যে কোনো ভাষা, লাইব্রেরি বা ফ্রেমওয়ার্কে ফাংশনটি কল করতে রিটার্নড ফাংশন এবং প্যারামিটার ব্যবহার করতে পারেন যা আপনি চান!

API ইন্টারফেস

আপনি কি নির্মাণ করবেন

এই কোডল্যাবে, আপনি Vertex AI Gemini API এবং Python-এর সাথে একটি জেনারেটিভ AI পাইপলাইন তৈরি করবেন। আপনার অ্যাপ ব্যবহার করে, ব্যবহারকারীরা বিনিময় হার সম্পর্কে জিজ্ঞাসা করতে পারে এবং সিস্টেমটি একটি বাহ্যিক API থেকে সর্বশেষ ডেটা আনবে এবং উত্তর সহ ব্যবহারকারীকে সাড়া দেবে।

আপনি কি শিখবেন

  • পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করে মিথুন মডেলের সাথে কীভাবে যোগাযোগ করবেন
  • কিভাবে একটি ফাংশন ঘোষণা সংজ্ঞায়িত এবং একটি টুল হিসাবে এটি নিবন্ধন
  • কীভাবে মিথুনকে কল করবেন এবং একটি ফাংশন কলের প্রতিক্রিয়া পাবেন
  • কিভাবে মিথুনে ফাংশন রেসপন্স রিটার্ন করবেন এবং ইউজারকে রেসপন্স করবেন

আপনি কি প্রয়োজন হবে

  • একটি Google ক্লাউড প্রকল্প
  • একটি ব্রাউজার যেমন ক্রোম
  • একটি পাইথন ডেভেলপমেন্ট এনভায়রনমেন্ট যেমন Colab বা Colab Enterprise

2. সেটআপ এবং প্রয়োজনীয়তা

আপনি জেমিনিতে ফাংশন কলিং ব্যবহার শুরু করার আগে, আপনাকে Vertex AI API সক্ষম করতে হবে এবং Vertex AI Python ক্লায়েন্ট লাইব্রেরির সর্বশেষ সংস্করণটি ইনস্টল করতে হবে।

Vertex AI API সক্ষম করুন৷

Vertex AI API সক্ষম করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার ব্রাউজারে, Vertex AI API পরিষেবার বিবরণ পৃষ্ঠায় নেভিগেট করুন।
  2. আপনার Google ক্লাউড প্রকল্পে Vertex AI API সক্ষম করতে সক্ষম বোতামে ক্লিক করুন৷

Vertex AI এর জন্য Python ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন

Vertex AI এর জন্য Python ক্লায়েন্ট লাইব্রেরি ইনস্টল করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার উন্নয়ন পরিবেশে একটি টার্মিনাল খুলুন।
  2. আপনার কাছে একটি বৈধ পাইথন ডেভেলপমেন্ট এনভায়রনমেন্ট আছে কিনা যাচাই করুন এবং প্রয়োজনে এই নির্দেশিকাগুলি পড়ুন।
  3. ভার্টেক্স এআই-এর জন্য পাইথন ক্লায়েন্ট লাইব্রেরি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:
    pip install --upgrade google-cloud-aiplatform
    
  4. আপনি যদি একটি নোটবুক পরিবেশে চলছেন, তাহলে নতুন ইনস্টল করা প্যাকেজগুলি ব্যবহার করার জন্য আপনাকে আপনার রানটাইম/কার্নেল পুনরায় চালু করতে হতে পারে।

এখন আপনি Vertex AI API ব্যবহার করার জন্য প্রস্তুত!

3. সমস্যাটি বুঝুন

আপনি কি কখনও একটি বৃহৎ ভাষার মডেল বা জেনারেটিভ এআই মডেলের সাথে যোগাযোগ করেছেন এবং এটিকে রিয়েল-টাইম বা বর্তমান তথ্য সম্পর্কে জিজ্ঞাসা করেছেন, শুধুমাত্র পুরানো তথ্য বা ভুল তথ্যের সাথে প্রতিক্রিয়া পেতে?

এর এখন চেষ্টা করা যাক! প্রথমে, আমরা প্রাসঙ্গিক পাইথন প্যাকেজগুলি আমদানি করব এবং জেমিনি মডেলটি শুরু করব। আপনি একটি পাইথন ডেভেলপমেন্ট এনভায়রনমেন্ট যেমন Colab বা Colab Enterprise এবং 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. সাধারণ সমাধানের চেষ্টা করুন

এমন পরিস্থিতিতে জেনারেটিভ মডেলগুলির সাথে কাজ করার সময় যেখানে আপনার বাহ্যিক উত্স থেকে আপ-টু-ডেট তথ্য বা ডেটার প্রয়োজন হয়, আপনি একটি বাহ্যিক API কল করতে পারেন তারপর ফলাফলগুলিকে জেনারেটিভ মডেলে ফিরিয়ে দিতে পারেন যাতে এটি তার প্রতিক্রিয়াতে ব্যবহার করতে পারে।

আপনি একটি বাহ্যিক সিস্টেমে কল করার আগে, আপনাকে সঠিক ফাংশনটি ব্যবহার করতে হবে, ব্যবহারকারীর কাছ থেকে প্রাসঙ্গিক প্যারামিটারগুলি বের করতে হবে এবং প্যারামিটারগুলিকে একটি কাঠামোগত ডেটা অবজেক্টে রাখতে হবে৷ এটি সাধারণত বৈধ কাঠামোগত ডেটা আউটপুট করার জন্য জেনারেটিভ মডেলকে বাধ্য করার জন্য সম্পূর্ণ প্রম্পট ইঞ্জিনিয়ারিং জড়িত।

আসুন আমরা পূর্ববর্তী বিভাগে যে প্রশ্নটি জিজ্ঞাসা করেছি তা আবার দেখুন এবং মডেলের জন্য কিছু অতিরিক্ত নির্দেশনা যোগ করুন। মিথুন মডেলে নিম্নলিখিত অনুরোধ পাঠানোর চেষ্টা করুন:

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 অবজেক্টের মানগুলি তিনটি-অক্ষরের মুদ্রার সংক্ষিপ্ত রূপ নয় যা একটি মুদ্রা বিনিময় API করবে। ইনপুট পরামিতি হিসাবে আশা.

আমরা এই পাঠ্যটিকে বৈধ JSON এবং একটি অভিধানে পোস্ট-প্রসেস করার জন্য পাইথন ব্যবহার করার চেষ্টা করতে পারি, প্রম্পটে আরও নির্দেশাবলী যোগ করতে পারি, পছন্দসই আউটপুটের এক বা একাধিক উদাহরণ প্রদান করতে পারি, মডেলটিকে ফাইন-টিউন করতে পারি বা জেনারেটিভ মডেলকে জিজ্ঞাসা করার জন্য আরেকটি কল করতে পারি। এটি JSON পরিষ্কার করার জন্য।

কিন্তু আরো একটি নির্ধারক উপায় আছে! আসুন জেনে নিই কিভাবে মিথুনে ফাংশন কলিং ব্যবহার করে বাহ্যিক পরিষেবাগুলিতে তথ্যের জন্য অনুসন্ধান করতে হয় এবং শেষ-ব্যবহারকারীদের কাছে প্রাসঙ্গিক প্রতিক্রিয়া ফেরত দিতে হয়।

5. ফাংশন কলিং কিভাবে কাজ করে

আমরা প্যারামিটার নিষ্কাশন এবং ফাংশন কলিং শুরু করার আগে, চলুন ফাংশন কলিংয়ের ধাপগুলি এবং রানটাইমে কোন উপাদানগুলি ব্যবহার করা হয় তা জেনে নেই।

মিথুনে ফাংশন কলিং এর ওভারভিউ

Gemini API-তে ব্যবহারকারীর ইনপুট

ব্যবহারকারীর কাছ থেকে প্রম্পট জেমিনি এপিআই-তে পাঠানো হয় এবং জেমিনি মডেলের সেই API কলে, ডেভেলপার একটি টুলের মধ্যে এক বা একাধিক ফাংশন ঘোষণাকে সংজ্ঞায়িত করেছে যাতে জেমিনি মডেলটি জানে যে এটি কোন ফাংশনগুলিকে কল করতে পারে এবং কীভাবে তাদের কল করতে পারে .

Gemini API একটি ফাংশন কল ফেরত দেয়

ব্যবহারকারীর ইনপুট এবং প্রম্পটের বিষয়বস্তুর উপর ভিত্তি করে, জেমিনি স্ট্রাকচার্ড ডেটা সহ একটি ফাংশন কল প্রতিক্রিয়া প্রদান করবে যাতে কল করার জন্য ফাংশনের নাম এবং ব্যবহার করার জন্য সংশ্লিষ্ট প্যারামিটার অন্তর্ভুক্ত থাকে।

একটি API অনুরোধ করুন

তারপরে, আপনি একটি বহিরাগত সিস্টেম বা API থেকে তথ্য পুনরুদ্ধার করার জন্য একটি API অনুরোধ করতে ফাংশনের নাম এবং পরামিতিগুলি ব্যবহার করবেন৷ এই API অনুরোধ এবং প্রতিক্রিয়াটি অ্যাপ্লিকেশন কোডে বিকাশকারী দ্বারা প্রয়োগ করা হয় এবং এটি Gemini API এবং SDK এর সুযোগের বাইরে ঘটে। উদাহরণস্বরূপ, আপনি একটি REST API কল করতে এবং একটি JSON প্রতিক্রিয়া পেতে পাইথনে requests লাইব্রেরি ব্যবহার করতে পারেন। অথবা আপনি আপনার পছন্দের পদ্ধতি এবং ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ফাংশনটি কল করতে পারেন।

মিথুনে API প্রতিক্রিয়া ফেরত দিন

অবশেষে, আপনি এপিআই প্রতিক্রিয়াটি জেমিনি মডেলে ফেরত দেবেন যাতে এটি শেষ-ব্যবহারকারীর প্রাথমিক প্রম্পটে একটি প্রতিক্রিয়া তৈরি করতে পারে বা জেমিনি মডেল নির্ধারণ করে যে এটির অতিরিক্ত তথ্যের প্রয়োজন হলে অন্য একটি ফাংশন কল প্রতিক্রিয়া আহ্বান করতে পারে৷

6. আপনার API চয়ন করুন

এখন যেহেতু আপনি ফাংশন কলিংয়ের সামগ্রিক প্রবাহ এবং নির্দিষ্ট পদক্ষেপগুলি বুঝতে পেরেছেন, আপনি সর্বশেষ মুদ্রা বিনিময় হার আনতে একটি জেনারেটিভ এআই পাইপলাইন তৈরি করবেন। প্রথমত, আমাদের নির্বাচন করতে হবে কোন APIটি আমরা তথ্যের উৎস হিসেবে ব্যবহার করতে চাই।

আমাদের কারেন্সি এক্সচেঞ্জ অ্যাপের জন্য, আমরা https://www.frankfurter.app/- এ REST API ব্যবহার করব বিশ্বব্যাপী বিনিময় হার সম্পর্কে সর্বশেষ তথ্য পেতে।

এই REST API এর সাথে ইন্টারঅ্যাক্ট করতে, আমরা পাইথনে 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
  }
}

যেহেতু জেমিনিতে ফাংশন কলিং আসলে আপনার জন্য বাহ্যিক API কল করে না, আপনি কি ধরনের API ব্যবহার করেন তার উপর এই ধরনের কোনো বিধিনিষেধ নেই! আপনি একটি ক্লাউড রান পরিষেবা, একটি ক্লাউড ফাংশন, একটি Google ক্লাউড পরিষেবার জন্য একটি API অনুরোধ, বা কোনো বহিরাগত REST API ব্যবহার করতে পারেন৷

7. একটি ফাংশন এবং টুল সংজ্ঞায়িত করুন

এখন আপনি ব্যবহার করার জন্য একটি REST API নির্বাচন করেছেন, আমরা এখন একটি API স্পেসিফিকেশন সংজ্ঞায়িত করতে পারি এবং একটি টুলে ফাংশনটি নিবন্ধন করতে পারি।

নিশ্চিত করুন যে আপনি Python-এর জন্য Vertex AI SDK- এর সর্বশেষ সংস্করণ ইনস্টল করেছেন।

তারপর, পাইথন SDK থেকে প্রয়োজনীয় মডিউলগুলি আমদানি করুন এবং জেমিনি মডেলটি শুরু করুন:

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

এখন, মিথুনের জন্য পাইথন 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],
)

এখানে, আপনি একটি টুলের মধ্যে একটি ফাংশন ঘোষণা ব্যবহার করছেন, কিন্তু মনে রাখবেন যে আপনি একটি টুলে এক বা একাধিক ফাংশন ঘোষণা নিবন্ধন করতে পারেন এবং মডেলটি রানটাইমে ব্যবহারের জন্য উপযুক্ত ফাংশন নির্বাচন করবে। Python-এর জন্য Gemini SDK-এ 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 ফাংশনের জন্য একটি ফাংশন কল ফিরিয়ে দিয়েছে। এবং পরামিতিগুলি সঠিক বিন্যাসে রয়েছে যা আমরা চেয়েছিলাম। জেনারেটিভ মডেল থেকে কাঠামোগত প্রতিক্রিয়া পাওয়ার জন্য হুররে!

পরবর্তী বিভাগে, আপনি একটি API অনুরোধ করতে প্রতিক্রিয়াতে তথ্য ব্যবহার করবেন।

9. একটি API অনুরোধ করুন

মনে রাখবেন যে মিথুনে ফাংশন কলিং আসলে আপনার জন্য বাহ্যিক API কল করে না। বরং, আপনি যে কোনো ভাষা, লাইব্রেরি বা ফ্রেমওয়ার্ক ব্যবহার করতে পারবেন যা আপনি চান!

এখানে আপনি এক্সচেঞ্জ রেট REST API কল করতে পাইথনের requests লাইব্রেরি ব্যবহার করবেন।

আসুন পাইথন অভিধানে প্রতিক্রিয়াটি আনপ্যাক করি:

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

একবার আমরা ফাংশন প্রতিক্রিয়াটি মডেলে ফেরত দিলে, এটি API প্রতিক্রিয়া থেকে প্রাসঙ্গিক তথ্য সহ ব্যবহারকারীর প্রম্পটে সাড়া দেবে।

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. সম্পূর্ণ কোড উদাহরণ দেখুন

এই মুহুর্তে, আপনি একটি ক্লাউড রান পরিষেবা, একটি ক্লাউড ফাংশন, বা অন্য ক্লাউড পরিষেবা ব্যবহার করে আপনার পাইথন কোডটি একটি ব্যাকএন্ড API-এ রাখতে পারেন এবং একটি ফ্রন্টএন্ড অ্যাপ স্থাপন করতে পারেন যা মডেল কোয়েরি এবং API কলগুলি সম্পাদন করতে এই ব্যাকএন্ড API ব্যবহার করে।

আমাদের চূড়ান্ত সমাধানের জন্য এখানে সম্পূর্ণ কোড উদাহরণ:

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

এই বাস্তবায়নে, আমরা জেনারেটিভ মডেলে দুটি অনুরোধ ব্যবহার করেছি: একটি ফাংশন কল জেনারেট করার অনুরোধ এবং অন্যটি ফাংশন প্রতিক্রিয়া ফেরত দেওয়ার অনুরোধ। মনে রাখবেন যে মিথুনের সাথে ফাংশন কল এবং ফাংশন প্রতিক্রিয়াগুলি পরিচালনা করার এটি শুধুমাত্র একটি পদ্ধতি। আপনি আপনার প্রশ্নের জন্য আরও তথ্য পেতে অতিরিক্ত ফাংশন কল করতে পারেন, অথবা চ্যাট এবং অ্যাসিঙ্ক্রোনাস পদ্ধতির সাথে ফাংশন কলিং ব্যবহার করতে পারেন।

অতিরিক্ত কোড নমুনার জন্য, মিথুনে ফাংশন কল করার জন্য নমুনা নোটবুক পড়ুন।

12. অভিনন্দন

জেমিনিতে ফাংশন কলিং ব্যবহার করে, আপনি সফলভাবে একটি জেনারেটিভ এআই পাইপলাইন তৈরি করেছেন যা ভার্টেক্স এআই জেমিনি এপিআই এবং পাইথনের সাথে ব্যবহার করে! ব্যবহারকারীরা বিনিময় হার সম্পর্কে জিজ্ঞাসা করতে পারেন, এবং সিস্টেমটি একটি বহিরাগত API থেকে সর্বশেষ ডেটা আনবে এবং একটি উত্তর দিয়ে প্রতিক্রিয়া জানাবে।

শেষ-ব্যবহারকারীর কাছ থেকে একটি প্রম্পট দেওয়া হলে, জেমিনিতে ফাংশন কলিং যথাযথ ফাংশন নির্বাচন করার, প্রম্পট থেকে পরামিতিগুলি বের করার এবং আপনাকে একটি বাহ্যিক API কল করার জন্য একটি কাঠামোগত ডেটা অবজেক্ট ফেরত দেওয়ার যত্ন নেয়।

মিথুনে ফাংশন কলিং এর ডিজাইনটি আপনাকে নির্ধারকভাবে প্যারামিটার বের করার জন্য উভয় জগতের সেরাটি দেওয়ার উদ্দেশ্যে তৈরি করা হয়েছে, যখন সারসংক্ষেপ এবং বিষয়বস্তু তৈরি করাকে জেনারেটিভ মডেলে ছেড়ে দেওয়া হয়েছে। আপনার পাইপলাইনে অন্যান্য API এবং প্রম্পটগুলি নির্দ্বিধায় ব্যবহার করে দেখুন এবং Vertex AI Gemini API- এর সাথে সম্পর্কিত অন্যান্য কার্যকারিতা অন্বেষণ করুন৷

API ইন্টারফেস

পরিষ্কার কর

এই কোডল্যাবে ব্যবহৃত রিসোর্সের জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে আপনি নিম্নলিখিত পরিষ্কার করতে পারেন:

আরও জানুন

এই নির্দেশিকা এবং সংস্থানগুলির সাথে কথোপকথনমূলক এআই এবং জেনারেটিভ এআই সম্পর্কে শেখা চালিয়ে যান:

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।