ফাংশন কলিং আপনার জন্য জেনারেটিভ মডেল থেকে স্ট্রাকচার্ড ডেটা আউটপুট পেতে সহজ করে তোলে। তারপরে আপনি এই আউটপুটগুলি ব্যবহার করে অন্যান্য API কল করতে এবং মডেলে প্রাসঙ্গিক প্রতিক্রিয়া ডেটা ফেরত দিতে পারেন। অন্য কথায়, ফাংশন কলিং আপনাকে জেনারেটিভ মডেলগুলিকে বাহ্যিক সিস্টেমের সাথে সংযুক্ত করতে সাহায্য করে যাতে তৈরি করা সামগ্রীতে সর্বাধিক আপ-টু-ডেট এবং সঠিক তথ্য অন্তর্ভুক্ত থাকে।
আপনি ফাংশন বর্ণনা সহ মিথুন মডেল প্রদান করতে পারেন. এগুলি এমন ফাংশন যা আপনি আপনার অ্যাপের ভাষায় লেখেন (অর্থাৎ, এগুলি Google ক্লাউড ফাংশন নয়)৷ মডেলটি আপনাকে একটি ফাংশন কল করতে এবং মডেলটিকে আপনার প্রশ্ন পরিচালনা করতে সহায়তা করার জন্য ফলাফলটি ফেরত পাঠাতে বলতে পারে।
আপনি যদি ইতিমধ্যে না করে থাকেন, আরও জানতে ফাংশন কলিংয়ের ভূমিকা দেখুন।
আপনার প্রকল্প সেট আপ করুন
Gemini API কল করার আগে, আপনাকে আপনার Android প্রকল্প সেট আপ করতে হবে, যার মধ্যে আপনার API কী সেট আপ করা, আপনার Android প্রকল্পে SDK নির্ভরতা যোগ করা এবং মডেলটি শুরু করা অন্তর্ভুক্ত।
Gemini API ব্যবহার করতে, আপনার একটি API কী প্রয়োজন। আপনার যদি ইতিমধ্যে একটি না থাকে তবে Google AI স্টুডিওতে একটি কী তৈরি করুন৷
আপনার API কী সুরক্ষিত করুন
এটি দৃঢ়ভাবে সুপারিশ করা হয় যে আপনি আপনার সংস্করণ নিয়ন্ত্রণ সিস্টেমে একটি API কী চেক করবেন না ৷ পরিবর্তে, আপনার এটি একটি local.properties
ফাইলে সংরক্ষণ করা উচিত (যা আপনার প্রকল্পের রুট ডিরেক্টরিতে অবস্থিত, কিন্তু সংস্করণ নিয়ন্ত্রণ থেকে বাদ দেওয়া হয়েছে), এবং তারপরে একটি বিল্ড কনফিগারেশন ভেরিয়েবল হিসাবে আপনার API কী পড়তে Android এর জন্য সিক্রেটস গ্রেডল প্লাগইন ব্যবহার করুন৷
// Access your API key as a Build Configuration variable
val apiKey = BuildConfig.apiKey
এই টিউটোরিয়ালের সমস্ত স্নিপেট এই সেরা অনুশীলনটি ব্যবহার করে। এছাড়াও, আপনি যদি সিক্রেটস গ্রেডল প্লাগইনটির বাস্তবায়ন দেখতে চান, তাহলে আপনি এই SDK-এর জন্য নমুনা অ্যাপটি পর্যালোচনা করতে পারেন বা Android Studio Iguana-এর সর্বশেষ প্রিভিউ ব্যবহার করতে পারেন যার একটি Gemini API স্টার্টার টেমপ্লেট রয়েছে (যার জন্য local.properties
ফাইল রয়েছে তুমি শুরু করেছিলে).
আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল কনফিগারেশন ফাইলে (যেমন
<project>/<app-module>/build.gradle.kts
), Android এর জন্য Google AI SDK-এর নির্ভরতা যোগ করুন:dependencies { // ... other androidx dependencies // add the dependency for the Google AI client SDK for Android implementation("com.google.ai.client.generativeai:generativeai:0.6.0") }
Gradle ফাইলগুলির সাথে আপনার Android প্রকল্প সিঙ্ক করুন।
আপনি যেকোনো API কল করার আগে, আপনাকে GenerativeModel
অবজেক্টটি আরম্ভ করতে হবে। এটি প্রাথমিক প্রাথমিককরণ; পরে এই টিউটোরিয়ালে আপনি এটিকে ফাংশন কলিংয়ের জন্য আপডেট করবেন।
val generativeModel = GenerativeModel(
// Use a model that supports function calling, like Gemini 1.0 Pro.
// See "Supported models" in the "Introduction to function calling" page.
modelName = "MODEL_NAME",
// Access your API key as a Build Configuration variable (see "Set up your API key" above).
apiKey = BuildConfig.apiKey
)
একটি ফাংশন কল সেট আপ করুন
এই টিউটোরিয়ালের জন্য, আপনার কাছে মডেলটি একটি অনুমানমূলক মুদ্রা বিনিময় API এর সাথে ইন্টারঅ্যাক্ট করতে হবে যা নিম্নলিখিত পরামিতিগুলিকে সমর্থন করে:
প্যারামিটার | টাইপ | প্রয়োজন | বর্ণনা |
---|---|---|---|
currencyFrom | স্ট্রিং | হ্যাঁ | থেকে রূপান্তরিত মুদ্রা |
currencyTo | স্ট্রিং | হ্যাঁ | কারেন্সিতে রূপান্তর করতে হবে |
উদাহরণ API অনুরোধ
{
"currencyFrom": "USD",
"currencyTo": "SEK"
}
উদাহরণ API প্রতিক্রিয়া
{
"base": "USD",
"rates": {"SEK": 0.091}
}
ধাপ 1 : API অনুরোধ করে এমন ফাংশন তৈরি করুন
যদি আপনি ইতিমধ্যেই না করে থাকেন তবে একটি API অনুরোধ করে এমন ফাংশন তৈরি করে শুরু করুন।
এই টিউটোরিয়ালে প্রদর্শনের উদ্দেশ্যে, একটি প্রকৃত API অনুরোধ পাঠানোর পরিবর্তে, আপনি একই বিন্যাসে হার্ডকোড করা মানগুলি ফিরিয়ে দেবেন যা একটি প্রকৃত API ফেরত দেবে।
suspend fun makeApiRequest(
currencyFrom: String,
currencyTo: String
): JSONObject {
// This hypothetical API returns a JSON such as:
// {"base":"USD","rates":{"SEK": 0.091}}
return JSONObject().apply {
put("base", currencyFrom)
put("rates", hashMapOf(currencyTo to 0.091))
}
}
ধাপ 2 : একটি ফাংশন ঘোষণা তৈরি করুন
ফাংশন ঘোষণা তৈরি করুন যা আপনি জেনারেটিভ মডেলে পাস করবেন (এই টিউটোরিয়ালের পরবর্তী ধাপ)।
ফাংশন এবং পরামিতি বর্ণনায় যতটা সম্ভব বিস্তারিত অন্তর্ভুক্ত করুন। কোন ফাংশন নির্বাচন করতে হবে এবং ফাংশন কলের পরামিতিগুলির জন্য কীভাবে মান প্রদান করতে হবে তা নির্ধারণ করতে জেনারেটিভ মডেল এই তথ্য ব্যবহার করে।
val getExchangeRate = defineFunction(
name = "getExchangeRate",
description = "Get the exchange rate for currencies between countries",
Schema.str("currencyFrom", "The currency to convert from."),
Schema.str("currencyTo", "The currency to convert to.")
) { from, to ->
// Call the function that you declared above
makeApiRequest(from, to)
}
ধাপ 3 : মডেল ইনিশিয়ালাইজেশনের সময় ফাংশন ঘোষণা নির্দিষ্ট করুন
মডেলের tools
প্যারামিটারে পাস করে জেনারেটিভ মডেল শুরু করার সময় ফাংশন ঘোষণা নির্দিষ্ট করুন:
val generativeModel = GenerativeModel(
// Use a model that supports function calling, like Gemini 1.0 Pro
// (see "Supported models" in the "Introduction to function calling" page)
modelName = "gemini-1.0-pro",
// Access your API key as a Build Configuration variable (see "Set up your API key" above)
apiKey = BuildConfig.apiKey,
// Specify the function declaration.
tools = listOf(Tool(listOf(getExchangeRate)))
)
ধাপ 4 : একটি ফাংশন কল জেনারেট করুন
এখন আপনি সংজ্ঞায়িত ফাংশন সহ মডেলটি প্রম্পট করতে পারেন।
ফাংশন কলিং ব্যবহার করার প্রস্তাবিত উপায় হল চ্যাট ইন্টারফেসের মাধ্যমে, যেহেতু ফাংশন কলগুলি চ্যাটের মাল্টি-টার্ন স্ট্রাকচারে সুন্দরভাবে ফিট করে।
val chat = generativeModel.startChat()
val prompt = "How much is 50 US dollars worth in Swedish krona?"
// Send the message to the generative model
var response = chat.sendMessage(prompt)
// Check if the model responded with a function call
response.functionCall?.let { functionCall ->
// Try to retrieve the stored lambda from the model's tools and
// throw an exception if the returned function was not declared
val matchedFunction = generativeModel.tools?.flatMap { it.functionDeclarations }
?.first { it.name == functionCall.name }
?: throw InvalidStateException("Function not found: ${functionCall.name}")
// Call the lambda retrieved above
val apiResponse: JSONObject = matchedFunction.execute(functionCall)
// Send the API response back to the generative model
// so that it generates a text response that can be displayed to the user
response = chat.sendMessage(
content(role = "function") {
part(FunctionResponsePart(functionCall.name, apiResponse))
}
)
}
// Whenever the model responds with text, show it in the UI
response.text?.let { modelResponse ->
println(modelResponse)
}