1. সংক্ষিপ্ত বিবরণ
মিথুন রাশিতে ফাংশন কলিং কী?
Vertex AI Gemini API হল Google DeepMind দ্বারা তৈরি জেনারেটিভ AI মডেলের একটি পরিবার যা মাল্টিমোডাল ব্যবহারের জন্য ডিজাইন করা হয়েছে। ফাংশন কলিং হল জেমিন মডেলের একটি বৈশিষ্ট্য যা ডেভেলপারদের জন্য জেনারেটিভ মডেল থেকে স্ট্রাকচার্ড ডেটা আউটপুট পেতে সহজ করে তোলে।
ডেভেলপাররা তখন এই আউটপুটগুলি ব্যবহার করে অন্যান্য API গুলিকে কল করতে এবং প্রাসঙ্গিক প্রতিক্রিয়া ডেটা মডেলে ফেরত পাঠাতে পারে। অন্য কথায়, ফাংশন কলিং আপনাকে আপনার জেনারেটিভ মডেলগুলিকে বহিরাগত সিস্টেমের সাথে সংযুক্ত করতে সাহায্য করে যাতে জেনারেটেড কন্টেন্টে সবচেয়ে আপ-টু-ডেট এবং সঠিক তথ্য অন্তর্ভুক্ত থাকে।
ফাংশন কলিং কীভাবে কাজ করে
ফাংশনগুলি ফাংশন ডিক্লারেশন ব্যবহার করে বর্ণনা করা হয়, যা জেনারেটিভ মডেলকে একটি ফাংশনের উদ্দেশ্য এবং প্যারামিটারগুলি বুঝতে সাহায্য করে। আপনি একটি জেনারেটিভ মডেলে একটি কোয়েরিতে ফাংশন ডিক্লারেশন পাস করার পরে, মডেলটি একটি স্ট্রাকচার্ড অবজেক্ট ফেরত দেয় যাতে প্রাসঙ্গিক ফাংশনের নাম এবং ব্যবহারকারীর কোয়েরির উপর ভিত্তি করে তাদের আর্গুমেন্ট অন্তর্ভুক্ত থাকে। মনে রাখবেন যে ফাংশন কলিংয়ের মাধ্যমে, মডেলটি আসলে ফাংশনটিকে কল করে না। পরিবর্তে, আপনি যে কোনও ভাষা, লাইব্রেরি বা ফ্রেমওয়ার্কে ফাংশন কল করতে ফিরে আসা ফাংশন এবং প্যারামিটারগুলি ব্যবহার করতে পারেন!

তুমি কী তৈরি করবে
এই কোডল্যাবে, আপনি Vertex AI Gemini API এবং Python ব্যবহার করে একটি জেনারেটিভ AI পাইপলাইন তৈরি করবেন। আপনার অ্যাপ ব্যবহার করে, ব্যবহারকারীরা বিনিময় হার সম্পর্কে জিজ্ঞাসা করতে পারবেন এবং সিস্টেমটি একটি বহিরাগত API থেকে সর্বশেষ ডেটা সংগ্রহ করবে এবং ব্যবহারকারীকে উত্তর দেবে।
তুমি কি শিখবে
- পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করে জেমিনি মডেলের সাথে কীভাবে ইন্টারঅ্যাক্ট করবেন
- কিভাবে একটি ফাংশন ঘোষণা সংজ্ঞায়িত করবেন এবং এটিকে একটি টুল হিসেবে নিবন্ধন করবেন
- কিভাবে জেমিনিকে কল করবেন এবং ফাংশন কলের প্রতিক্রিয়া পাবেন
- কিভাবে জেমিনিতে ফাংশন রেসপন্স ফেরত দেওয়া যায় এবং ব্যবহারকারীকে রেসপন্স করা যায়
তোমার যা লাগবে
- একটি গুগল ক্লাউড প্রকল্প
- ক্রোমের মতো একটি ব্রাউজার
- Colab বা Colab Enterprise-এর মতো একটি Python ডেভেলপমেন্ট পরিবেশ
2. সেটআপ এবং প্রয়োজনীয়তা
জেমিনিতে ফাংশন কলিং ব্যবহার শুরু করার আগে, আপনাকে Vertex AI API সক্ষম করতে হবে এবং Vertex AI Python ক্লায়েন্ট লাইব্রেরির সর্বশেষ সংস্করণ ইনস্টল করতে হবে।
Vertex AI API সক্ষম করুন
Vertex AI API সক্রিয় করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনার ব্রাউজারে, Vertex AI API পরিষেবা বিবরণ পৃষ্ঠায় যান।
- আপনার গুগল ক্লাউড প্রজেক্টে Vertex AI API সক্রিয় করতে Enable বাটনে ক্লিক করুন।
ভার্টেক্স এআই-এর জন্য পাইথন ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন
Vertex AI এর জন্য Python ক্লায়েন্ট লাইব্রেরি ইনস্টল করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনার ডেভেলপমেন্ট পরিবেশে একটি টার্মিনাল খুলুন।
- আপনার কাছে একটি বৈধ পাইথন ডেভেলপমেন্ট পরিবেশ আছে কিনা তা যাচাই করুন এবং প্রয়োজনে এই নির্দেশিকাগুলি পড়ুন।
- Vertex AI এর জন্য Python ক্লায়েন্ট লাইব্রেরি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:
pip install --upgrade google-cloud-aiplatform - যদি আপনি একটি নোটবুক পরিবেশে চালাচ্ছেন, তাহলে নতুন ইনস্টল করা প্যাকেজগুলি ব্যবহার করার জন্য আপনার রানটাইম/কার্নেল পুনরায় চালু করতে হতে পারে।
এখন আপনি Vertex AI API ব্যবহার করার জন্য প্রস্তুত!
৩. সমস্যাটি বুঝুন
আপনি কি কখনও কোনও বৃহৎ ভাষা মডেল বা জেনারেটিভ এআই মডেলের সাথে যোগাযোগ করেছেন এবং রিয়েল-টাইম বা বর্তমান তথ্য সম্পর্কে জিজ্ঞাসা করেছেন, কিন্তু শুধুমাত্র পুরানো তথ্য বা ভুল তথ্যের সাথে উত্তর পেয়েছেন?
এখনই চেষ্টা করে দেখা যাক! প্রথমে, আমরা প্রাসঙ্গিক পাইথন প্যাকেজগুলি আমদানি করব এবং জেমিনি মডেলটি শুরু করব। আপনি Colab বা Colab Enterprise এর মতো পাইথন ডেভেলপমেন্ট পরিবেশে এবং পাইথনের জন্য 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. [...]
যদি কোনও ব্যবহারকারী এই ধরণের প্রতিক্রিয়া পান, তাহলে তাদের আগ্রহের মুদ্রাগুলি অনুসন্ধান করার জন্য, সর্বশেষ বিনিময় হার আনতে এবং নিজেরাই যেকোনো রূপান্তর সম্পাদন করার জন্য প্রসঙ্গ পরিবর্তন করতে হবে।
আদর্শভাবে, একটি জেনারেটিভ মডেল পাইপলাইন ব্যবহারকারীর জন্য এই কাজগুলির কিছু বা সমস্ত পরিচালনা করতে পারে। পরবর্তী বিভাগে, আপনি জেনারেটিভ মডেলগুলি থেকে কাঠামোগত প্রতিক্রিয়া পাওয়ার জন্য কিছু সাধারণ সমাধান চেষ্টা করবেন যাতে আপনি বহিরাগত সিস্টেমগুলিকে কল করতে পারেন।
৪. সাধারণ সমাধানগুলি চেষ্টা করে দেখুন
যখন জেনারেটিভ মডেলের সাথে কাজ করার সময়, যেখানে আপনার বহিরাগত উৎস থেকে হালনাগাদ তথ্য বা ডেটার প্রয়োজন হয়, তখন আপনি একটি বহিরাগত 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 পরিষ্কার করার জন্য আরেকটি কল করতে পারি।
কিন্তু আরও একটি নির্ধারক উপায় আছে! আসুন জেনে নিই কিভাবে জেমিনিতে ফাংশন কলিং ব্যবহার করে বাহ্যিক পরিষেবাগুলিতে তথ্য অনুসন্ধান করতে হয় এবং শেষ ব্যবহারকারীদের কাছে প্রাসঙ্গিক প্রতিক্রিয়া জানাতে হয়।
৫. ফাংশন কলিং কীভাবে কাজ করে
প্যারামিটার এক্সট্রাকশন এবং ফাংশন কলিং শুরু করার আগে, আসুন ফাংশন কলিংয়ের ধাপগুলি এবং রানটাইমে কোন উপাদানগুলি ব্যবহৃত হয় তা দেখে নেওয়া যাক।

জেমিনি API-তে ব্যবহারকারীর ইনপুট
ব্যবহারকারীর কাছ থেকে প্রম্পটটি জেমিনি এপিআইতে পাঠানো হয়, এবং জেমিনি মডেলের সেই এপিআই কলে, ডেভেলপার একটি টুলের মধ্যে এক বা একাধিক ফাংশন ডিক্লেয়ারেশন সংজ্ঞায়িত করে যাতে জেমিনি মডেল জানতে পারে যে এটি কোন ফাংশনগুলিকে কল করতে পারে এবং কীভাবে সেগুলিকে কল করতে হয়।
জেমিনি এপিআই একটি ফাংশন কল প্রদান করে
ব্যবহারকারীর ইনপুট এবং প্রম্পটের বিষয়বস্তুর উপর ভিত্তি করে, জেমিনি স্ট্রাকচার্ড ডেটা সহ একটি ফাংশন কল প্রতিক্রিয়া প্রদান করবে যাতে কল করার জন্য ফাংশনের নাম এবং ব্যবহারের জন্য সংশ্লিষ্ট পরামিতি অন্তর্ভুক্ত থাকবে।
একটি API অনুরোধ করুন
তারপর, আপনি ফাংশনের নাম এবং প্যারামিটার ব্যবহার করে একটি বহিরাগত সিস্টেম বা API থেকে তথ্য পুনরুদ্ধারের জন্য একটি API অনুরোধ করবেন। এই API অনুরোধ এবং প্রতিক্রিয়া ডেভেলপার দ্বারা অ্যাপ্লিকেশন কোডে বাস্তবায়িত হয় এবং Gemini API এবং SDK এর সুযোগের বাইরে ঘটে। উদাহরণস্বরূপ, আপনি Python-এর requests লাইব্রেরি ব্যবহার করে একটি REST API কল করতে এবং একটি JSON প্রতিক্রিয়া পেতে পারেন। অথবা আপনি আপনার পছন্দের পদ্ধতি এবং ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ফাংশনটি কল করতে পারেন।
API রেসপন্সটি জেমিনিতে ফেরত দিন
অবশেষে, আপনি API প্রতিক্রিয়াটি জেমিনি মডেলে ফেরত পাঠাবেন যাতে এটি শেষ ব্যবহারকারীর প্রাথমিক প্রম্পটে একটি প্রতিক্রিয়া তৈরি করতে পারে অথবা যদি জেমিনি মডেল নির্ধারণ করে যে এর অতিরিক্ত তথ্যের প্রয়োজন হয় তবে অন্য একটি ফাংশন কল প্রতিক্রিয়া আহ্বান করতে পারে।
৬. আপনার API নির্বাচন করুন
এখন যেহেতু আপনি ফাংশন কলিংয়ের সামগ্রিক প্রবাহ এবং নির্দিষ্ট ধাপগুলি বুঝতে পেরেছেন, আপনি সর্বশেষ মুদ্রা বিনিময় হারগুলি আনার জন্য একটি জেনারেটিভ এআই পাইপলাইন তৈরি করবেন। প্রথমে, আমাদের কোন API টি তথ্যের উৎস হিসেবে ব্যবহার করতে চাই তা নির্বাচন করতে হবে।
আমাদের মুদ্রা বিনিময় অ্যাপের জন্য, আমরা বিশ্বব্যাপী বিনিময় হার সম্পর্কে সর্বশেষ তথ্য পেতে 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
}
}
যেহেতু জেমিনি-তে ফাংশন কলিং আসলে আপনার জন্য বহিরাগত API কল করে না, তাই আপনি কোন ধরণের API ব্যবহার করবেন তার উপর কোনও বিধিনিষেধ নেই! আপনি একটি ক্লাউড রান পরিষেবা, একটি ক্লাউড ফাংশন, একটি গুগল ক্লাউড পরিষেবাতে একটি API অনুরোধ, অথবা যেকোনো বহিরাগত REST API ব্যবহার করতে পারেন।
৭. একটি ফাংশন এবং টুল সংজ্ঞায়িত করুন
এখন যেহেতু আপনি ব্যবহারের জন্য একটি REST API নির্বাচন করেছেন, আমরা এখন একটি API স্পেসিফিকেশন সংজ্ঞায়িত করতে পারি এবং একটি টুলে ফাংশনটি নিবন্ধন করতে পারি।
নিশ্চিত করুন যে আপনি পাইথনের জন্য 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 এর কথা উল্লেখ করলে আমরা দেখতে পাচ্ছি যে এটি নিম্নলিখিত ইনপুট প্যারামিটারগুলি গ্রহণ করে:
প্যারামিটার | আদর্শ | বিবরণ |
| স্ট্রিং | যে মুদ্রা থেকে রূপান্তর করা হবে |
| স্ট্রিং | রূপান্তর করার জন্য মুদ্রা |
| স্ট্রিং | বিনিময় হার আনার তারিখ |
এই প্যারামিটারগুলি ব্যবহার করে, 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],
)
এখানে, আপনি একটি টুলের মধ্যে একটি ফাংশন ডিক্লারেশন ব্যবহার করছেন, তবে মনে রাখবেন যে আপনি একটি টুলে এক বা একাধিক ফাংশন ডিক্লারেশন নিবন্ধন করতে পারেন এবং মডেলটি রানটাইমে ব্যবহারের জন্য উপযুক্ত ফাংশন নির্বাচন করবে। পাইথনের জন্য জেমিনি SDK-তে FunctionDeclaration , Tool এবং সম্পর্কিত ক্লাস সম্পর্কে আরও বিস্তারিত জানার জন্য জেমিনি API-তে ফাংশন কলিং -এর ডকুমেন্টেশনটি দেখুন।
তুমি তোমার ফাংশন এবং টুল সংজ্ঞার কনফিগারেশন সম্পন্ন করেছ। পরবর্তী বিভাগে, আমরা এই টুল দিয়ে জেনারেটিভ মডেলটি কল করব এবং একটি ফাংশন কল ফিরে পাব যা আমরা REST API কল করতে ব্যবহার করতে পারি।
৮. একটি ফাংশন কল তৈরি করুন
এখন আপনি জেনারেটিভ মডেলটি প্রম্পট করতে পারেন এবং আপনার সংজ্ঞায়িত 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 অনুরোধ করার জন্য প্রতিক্রিয়ার তথ্য ব্যবহার করবেন।
৯. একটি API অনুরোধ করুন
মনে রাখবেন যে জেমিনি-তে ফাংশন কলিং আসলে আপনার জন্য বহিরাগত API কল করে না। বরং, আপনি আপনার পছন্দের যেকোনো ভাষা, লাইব্রেরি বা ফ্রেমওয়ার্ক ব্যবহার করতে পারেন!
এখানে আপনি পাইথনের requests লাইব্রেরি ব্যবহার করে এক্সচেঞ্জ রেট REST API কল করবেন।
আসুন উত্তরটি একটি পাইথন অভিধানে আনপ্যাক করি:
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 থেকে আজকের সর্বশেষ বিনিময় হারের তথ্য সহ আমাদের প্রতিক্রিয়া রয়েছে। পরবর্তী বিভাগে, আমরা এই তথ্যটি মডেলটিতে ফিরিয়ে দেব যাতে এটি ব্যবহারকারীর জন্য একটি প্রাসঙ্গিক প্রতিক্রিয়া তৈরি করতে পারে।
১০. একটি প্রতিক্রিয়া তৈরি করুন
অবশেষে, পরবর্তী কথোপকথনের মোড়ে মডেলটিতে ফাংশন প্রতিক্রিয়াটি প্রেরণ করে ব্যবহারকারীর জন্য একটি প্রতিক্রিয়া তৈরি করা যাক:
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.
১১. সম্পূর্ণ কোড উদাহরণ দেখুন
এই মুহুর্তে, আপনি আপনার পাইথন কোডটি ক্লাউড রান পরিষেবা, ক্লাউড ফাংশন, অথবা অন্য কোনও ক্লাউড পরিষেবা ব্যবহার করে একটি ব্যাকএন্ড 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
এই বাস্তবায়নে, আমরা জেনারেটিভ মডেলে দুটি অনুরোধ ব্যবহার করেছি: একটি ফাংশন কল তৈরি করার অনুরোধ এবং আরেকটি ফাংশন প্রতিক্রিয়া ফেরত দেওয়ার অনুরোধ। মনে রাখবেন যে এটি জেমিনি দিয়ে ফাংশন কল এবং ফাংশন প্রতিক্রিয়া পরিচালনা করার একমাত্র পদ্ধতি। আপনার প্রশ্নের জন্য আরও তথ্য পেতে আপনি অতিরিক্ত ফাংশন কলও করতে পারেন, অথবা চ্যাট এবং অ্যাসিঙ্ক্রোনাস পদ্ধতির সাথে ফাংশন কলিং ব্যবহার করতে পারেন।
অতিরিক্ত কোড নমুনার জন্য, Gemini-তে ফাংশন কলিংয়ের জন্য নমুনা নোটবুকটি দেখুন।
১২. অভিনন্দন
জেমিনি-তে ফাংশন কলিং ব্যবহার করে, আপনি সফলভাবে একটি জেনারেটিভ এআই পাইপলাইন তৈরি করেছেন যা ভার্টেক্স এআই জেমিনি এপিআই এবং পাইথনের সাথে ব্যবহার করে! ব্যবহারকারীরা বিনিময় হার সম্পর্কে জিজ্ঞাসা করতে পারেন, এবং সিস্টেমটি একটি বহিরাগত এপিআই থেকে সর্বশেষ ডেটা সংগ্রহ করবে এবং একটি উত্তর দেবে।
একজন এন্ড-ইউজারের কাছ থেকে প্রম্পট পেলে, জেমিনি-তে ফাংশন কলিং উপযুক্ত ফাংশন নির্বাচন, প্রম্পট থেকে প্যারামিটার বের করা এবং একটি স্ট্রাকচার্ড ডেটা অবজেক্ট ফেরত দেওয়ার কাজ করে যাতে আপনি একটি এক্সটার্নাল API কল করতে পারেন।
জেমিনিতে ফাংশন কলিংয়ের নকশাটি আপনাকে উভয় জগতের সেরাটি প্রদানের উদ্দেশ্যে তৈরি করা হয়েছে যাতে আপনি নির্ধারকভাবে প্যারামিটারগুলি বের করতে পারেন, একই সাথে সারসংক্ষেপ এবং কন্টেন্ট তৈরির কাজটি জেনারেটিভ মডেলের উপর ছেড়ে দেওয়া হয়। আপনার পাইপলাইনে থাকা অন্যান্য API এবং প্রম্পটগুলি চেষ্টা করে দেখতে দ্বিধা করবেন না এবং Vertex AI Gemini API এর সাথে সম্পর্কিত অন্যান্য কার্যকারিতা অন্বেষণ করতে পারেন।

পরিষ্কার কর
এই কোডল্যাবে ব্যবহৃত রিসোর্সের জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে আপনি নিম্নলিখিত পরিষ্কারকরণ সম্পাদন করতে পারেন:
- অপ্রয়োজনীয় গুগল ক্লাউড চার্জ এড়াতে, যদি আপনার প্রজেক্টের প্রয়োজন না হয় তবে গুগল ক্লাউড কনসোল ব্যবহার করে মুছে ফেলুন।
- যদি আপনি Vertex AI এর জন্য API গুলি নিষ্ক্রিয় করতে চান, তাহলে Vertex AI API পরিষেবা বিবরণ পৃষ্ঠায় যান এবং API নিষ্ক্রিয় করুন এবং নিশ্চিত করুন এ ক্লিক করুন।
আরও জানুন
এই নির্দেশিকা এবং সংস্থানগুলির সাহায্যে কথোপকথনমূলক AI এবং জেনারেটিভ AI সম্পর্কে শেখা চালিয়ে যান:
- জেমিনি মডেলের ওভারভিউ
- জেমিনিতে ফাংশন কলিংয়ের জন্য ডকুমেন্টেশন
- জেমিনি ভাষায় ফাংশন কলিংয়ের জন্য নমুনা নোটবুক
- মিথুন রাশির জন্য নমুনা নোটবুক
- গুগল ক্লাউডে জেনারেটিভ এআই
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।