ফাংশন কলিং আপনার জন্য জেনারেটিভ মডেল থেকে স্ট্রাকচার্ড ডেটা আউটপুট পেতে সহজ করে তোলে। তারপরে আপনি এই আউটপুটগুলি ব্যবহার করে অন্যান্য API কল করতে এবং মডেলে প্রাসঙ্গিক প্রতিক্রিয়া ডেটা ফেরত দিতে পারেন। অন্য কথায়, ফাংশন কলিং আপনাকে জেনারেটিভ মডেলগুলিকে বাহ্যিক সিস্টেমের সাথে সংযুক্ত করতে সাহায্য করে যাতে তৈরি করা সামগ্রীতে সর্বাধিক আপ-টু-ডেট এবং সঠিক তথ্য অন্তর্ভুক্ত থাকে।
আপনি ফাংশন বর্ণনা সহ মিথুন মডেল প্রদান করতে পারেন. এগুলি এমন ফাংশন যা আপনি আপনার অ্যাপের ভাষায় লেখেন (অর্থাৎ, এগুলি Google ক্লাউড ফাংশন নয়)৷ মডেলটি আপনাকে একটি ফাংশন কল করতে এবং মডেলটিকে আপনার প্রশ্ন পরিচালনা করতে সহায়তা করার জন্য ফলাফলটি ফেরত পাঠাতে বলতে পারে।
আপনি যদি ইতিমধ্যে না করে থাকেন, আরও জানতে ফাংশন কলিংয়ের ভূমিকা দেখুন।
আলো নিয়ন্ত্রণের জন্য উদাহরণ API
কল্পনা করুন যে আপনার কাছে একটি অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (API) সহ একটি মৌলিক আলো নিয়ন্ত্রণ ব্যবস্থা রয়েছে এবং আপনি ব্যবহারকারীদের সাধারণ পাঠ্য অনুরোধের মাধ্যমে আলো নিয়ন্ত্রণ করার অনুমতি দিতে চান। আপনি ব্যবহারকারীদের কাছ থেকে আলো পরিবর্তনের অনুরোধগুলি ব্যাখ্যা করতে এবং আলোর মান সেট করতে API কলগুলিতে অনুবাদ করতে ফাংশন কলিং বৈশিষ্ট্যটি ব্যবহার করতে পারেন। এই কাল্পনিক আলো নিয়ন্ত্রণ ব্যবস্থা আপনাকে আলোর উজ্জ্বলতা নিয়ন্ত্রণ করতে দেয় এবং এর রঙের তাপমাত্রা, দুটি পৃথক পরামিতি হিসাবে সংজ্ঞায়িত করা হয়:
প্যারামিটার | টাইপ | প্রয়োজন | বর্ণনা |
---|---|---|---|
brightness | সংখ্যা | হ্যাঁ | 0 থেকে 100 পর্যন্ত আলোর স্তর। শূন্য বন্ধ এবং 100 হল সম্পূর্ণ উজ্জ্বলতা। |
colorTemperature | স্ট্রিং | হ্যাঁ | আলোর ফিক্সচারের রঙের তাপমাত্রা যা daylight , cool বা warm হতে পারে। |
সরলতার জন্য, এই কাল্পনিক আলো ব্যবস্থায় শুধুমাত্র একটি আলো রয়েছে, তাই ব্যবহারকারীকে একটি ঘর বা অবস্থান নির্দিষ্ট করতে হবে না। দিনের আলোর রঙের তাপমাত্রা ব্যবহার করে আলোর মাত্রা 50% এ পরিবর্তন করতে আপনি আলোক নিয়ন্ত্রণ API এ পাঠাতে পারেন এমন JSON অনুরোধের উদাহরণ এখানে রয়েছে:
{
"brightness": "50",
"colorTemperature": "daylight"
}
এই টিউটোরিয়ালটি আপনাকে দেখায় কিভাবে Gemini API-এর জন্য একটি ফাংশন কল সেট আপ করতে হয় যাতে ব্যবহারকারীদের আলোর অনুরোধগুলি ব্যাখ্যা করতে হয় এবং আলোর উজ্জ্বলতা এবং রঙের তাপমাত্রার মান নিয়ন্ত্রণ করতে API সেটিংসে তাদের ম্যাপ করতে হয়।
আপনি শুরু করার আগে: আপনার প্রকল্প এবং API কী সেট আপ করুন
Gemini API কল করার আগে, আপনাকে আপনার প্রকল্প সেট আপ করতে হবে এবং আপনার API কী কনফিগার করতে হবে।
আপনার API কী পান এবং সুরক্ষিত করুন
Gemini API কল করার জন্য আপনার একটি API কী প্রয়োজন। আপনার যদি ইতিমধ্যে একটি না থাকে তবে Google AI স্টুডিওতে একটি কী তৈরি করুন৷
আপনার API কী সুরক্ষিত রাখুন। আপনার কোডে সরাসরি API কী অন্তর্ভুক্ত করা উচিত নয় বা সংস্করণ নিয়ন্ত্রণ সিস্টেমে কী রয়েছে এমন ফাইল সংরক্ষণ করা উচিত নয়। পরিবর্তে, আপনার এটিকে আপনার প্রকল্পের রুট ডিরেক্টরিতে অবস্থিত একটি local.properties
ফাইলে সংরক্ষণ করা উচিত এবং এই ফাইলটিকে সংস্করণ নিয়ন্ত্রণ থেকে বাদ দেওয়া উচিত৷ প্রোডাকশন ডিপ্লোয়মেন্টের জন্য অ্যান্ড্রয়েডের জন্য সিক্রেটস গ্রেডল প্লাগইন ব্যবহার করুন আপনার API কীটিকে বিল্ড কনফিগারেশন ভেরিয়েবল হিসেবে পড়তে।
// Access your API key as a Build Configuration variable
val apiKey = BuildConfig.apiKey
এই টিউটোরিয়ালের সমস্ত স্নিপেট এই সেরা অনুশীলনটি ব্যবহার করে। এছাড়াও, আপনি যদি সিক্রেটস গ্রেডল প্লাগইনটির বাস্তবায়ন দেখতে চান তবে আপনি এই SDK-এর জন্য নমুনা অ্যাপটি পর্যালোচনা করতে পারেন বা Android স্টুডিওর সর্বশেষ প্রিভিউ ব্যবহার করতে পারেন যার একটি Gemini API স্টার্টার টেমপ্লেট রয়েছে (যাতে local.properties
ফাইল রয়েছে আপনাকে পেতে শুরু)।
আপনার প্রকল্পে SDK নির্ভরতা যোগ করুন
আপনার অ্যাপ্লিকেশন বিকাশ পরিবেশে, নিম্নলিখিতগুলি করুন:
আপনার মডিউলে (অ্যাপ্লিকেশন-লেভেল) গ্রেডল কনফিগারেশন ফাইল, অ্যান্ড্রয়েডের জন্য Google AI SDK-এর নির্ভরতা যোগ করুন:
কোটলিন
// add to <project>/<app-module>/build.gradle.kts dependencies { // ... other androidx dependencies // add the dependency for the Google AI client SDK for Android implementation("com.google.ai.client.generativeai:generativeai:0.7.0") }
জাভা
// add to <project>/<app-module>/build.gradle dependencies { // ... other androidx dependencies // add the dependency for the Google AI client SDK for Android implementation("com.google.ai.client.generativeai:generativeai:0.7.0") // Required for one-shot operations to use `ListenableFuture` from Guava Android implementation("com.google.guava:guava:31.0.1-android") // Required for streaming operations to use `Publisher` from Reactive Streams implementation("org.reactivestreams:reactive-streams:1.0.4") }
Gradle ফাইলগুলির সাথে আপনার Android প্রকল্প সিঙ্ক করুন।
একটি API ফাংশন সংজ্ঞায়িত করুন
একটি API অনুরোধ করে এমন একটি ফাংশন তৈরি করুন। এই ফাংশনটি আপনার অ্যাপ্লিকেশনের কোডের মধ্যে সংজ্ঞায়িত করা উচিত, তবে আপনার অ্যাপ্লিকেশনের বাইরে পরিষেবা বা API কল করতে পারে৷ Gemini API এই ফাংশনটিকে সরাসরি কল করে না , তাই আপনি আপনার অ্যাপ্লিকেশন কোডের মাধ্যমে কীভাবে এবং কখন এই ফাংশনটি কার্যকর করা হবে তা নিয়ন্ত্রণ করতে পারেন। প্রদর্শনের উদ্দেশ্যে, এই টিউটোরিয়ালটি একটি মক API ফাংশন সংজ্ঞায়িত করে যা শুধুমাত্র অনুরোধকৃত আলোর মানগুলি প্রদান করে:
suspend fun setLightValues(
brightness: Int,
colorTemp: String
): JSONObject {
// This mock API returns the requested lighting values
return JSONObject().apply {
put("brightness", brightness)
put("colorTemperature", colorTemp)
}
}
ফাংশন ঘোষণা তৈরি করুন
ফাংশন ঘোষণা তৈরি করুন যা আপনি জেনারেটিভ মডেলে পাস করবেন। আপনি যখন মডেলের দ্বারা ব্যবহারের জন্য একটি ফাংশন ঘোষণা করেন, তখন আপনার ফাংশন এবং প্যারামিটারের বিবরণে যতটা সম্ভব বিস্তারিত অন্তর্ভুক্ত করা উচিত। কোন ফাংশন নির্বাচন করতে হবে এবং ফাংশন কলের পরামিতিগুলির জন্য কীভাবে মান প্রদান করতে হবে তা নির্ধারণ করতে জেনারেটিভ মডেল এই তথ্য ব্যবহার করে। নিম্নলিখিত কোড দেখায় কিভাবে আলো নিয়ন্ত্রণ ফাংশন ঘোষণা করতে হয়:
val lightControlTool = defineFunction(
name = "setLightValues",
description = "Set the brightness and color temperature of a room light.",
Schema.int("brightness", "Light level from 0 to 100. Zero is off and 100" +
" is full brightness."),
Schema.str("colorTemperature", "Color temperature of the light fixture" +
" which can be `daylight`, `cool` or `warm`.")
) { brightness, colorTemp ->
// Call the function you declared above
setLightValues(brightness.toInt(), colorTemp)
}
মডেল ইনিশিয়ালাইজেশনের সময় ফাংশন ঘোষণা করুন
আপনি যখন একটি মডেলের সাথে ফাংশন কলিং ব্যবহার করতে চান, আপনি মডেল অবজেক্ট শুরু করার সময় আপনাকে অবশ্যই আপনার ফাংশন ঘোষণা প্রদান করতে হবে। আপনি মডেলের tools
প্যারামিটার সেট করে ফাংশন ঘোষণা করেন:
val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
// Access your API key as a Build Configuration variable
apiKey = BuildConfig.apiKey,
// Specify the function declaration.
tools = listOf(Tool(listOf(lightControlTool)))
)
একটি ফাংশন কল তৈরি করুন
একবার আপনি আপনার ফাংশন ঘোষণার সাথে মডেলটি শুরু করলে, আপনি সংজ্ঞায়িত ফাংশন সহ মডেলটিকে অনুরোধ করতে পারেন। আপনার চ্যাট প্রম্পটিং ( sendMessage()
) ব্যবহার করে ফাংশন কলিং ব্যবহার করা উচিত, যেহেতু ফাংশন কলিং সাধারণত পূর্ববর্তী প্রম্পট এবং প্রতিক্রিয়াগুলির প্রসঙ্গ থাকার ফলে উপকৃত হয়।
val chat = generativeModel.startChat()
val prompt = "Dim the lights so the room feels cozy and warm."
// 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)
}