ফাংশন কলিং আপনার জন্য জেনারেটিভ মডেল থেকে স্ট্রাকচার্ড ডেটা আউটপুট পেতে সহজ করে তোলে। তারপরে আপনি এই আউটপুটগুলি ব্যবহার করে অন্যান্য API কল করতে এবং মডেলে প্রাসঙ্গিক প্রতিক্রিয়া ডেটা ফেরত দিতে পারেন। অন্য কথায়, ফাংশন কলিং আপনাকে জেনারেটিভ মডেলগুলিকে বাহ্যিক সিস্টেমের সাথে সংযুক্ত করতে সাহায্য করে যাতে তৈরি করা সামগ্রীতে সর্বাধিক আপ-টু-ডেট এবং সঠিক তথ্য অন্তর্ভুক্ত থাকে।
আপনি ফাংশন বর্ণনা সহ মিথুন মডেল প্রদান করতে পারেন. এগুলি এমন ফাংশন যা আপনি আপনার অ্যাপের ভাষায় লেখেন (অর্থাৎ, এগুলি Google ক্লাউড ফাংশন নয়)৷ মডেলটি আপনাকে একটি ফাংশন কল করতে এবং মডেলটিকে আপনার প্রশ্ন পরিচালনা করতে সহায়তা করার জন্য ফলাফলটি ফেরত পাঠাতে বলতে পারে।
আপনি যদি ইতিমধ্যে না করে থাকেন, আরও জানতে ফাংশন কলিংয়ের ভূমিকা দেখুন।
আপনার প্রকল্প সেট আপ করুন
Gemini API কল করার আগে, আপনাকে আপনার প্রকল্প সেট আপ করতে হবে, যার মধ্যে আপনার API কী সেট আপ করা, আপনার পাব নির্ভরতায় SDK যোগ করা এবং মডেলটি শুরু করা অন্তর্ভুক্ত।
Gemini API ব্যবহার করতে, আপনার একটি API কী প্রয়োজন। আপনার যদি ইতিমধ্যে একটি না থাকে তবে Google AI স্টুডিওতে একটি কী তৈরি করুন৷
আপনার API কী সুরক্ষিত করুন
আপনার API কী সুরক্ষিত রাখুন। আমরা দৃঢ়ভাবে সুপারিশ করছি যে আপনি সরাসরি আপনার কোডে API কী অন্তর্ভুক্ত করবেন না বা সংস্করণ নিয়ন্ত্রণ সিস্টেমে কী রয়েছে এমন ফাইলগুলি পরীক্ষা করুন৷ পরিবর্তে, আপনার API কী এর জন্য একটি গোপন স্টোর ব্যবহার করা উচিত।
এই টিউটোরিয়ালটি অনুমান করে যে আপনি একটি প্রক্রিয়া পরিবেশ পরিবর্তনশীল হিসাবে আপনার API কী অ্যাক্সেস করছেন। আপনি যদি একটি Flutter অ্যাপ তৈরি করেন, তাহলে আপনি String.fromEnvironment
ব্যবহার করতে পারেন এবং এপিআই কী দিয়ে কম্পাইল করতে flutter build
করতে --dart-define=API_KEY=$API_KEY
পাস flutter run
পারেন কারণ অ্যাপটি চালানোর সময় প্রক্রিয়া পরিবেশ ভিন্ন হবে। .
আপনার নিজের অ্যাপ্লিকেশনে Gemini API ব্যবহার করতে, আপনাকে আপনার ডার্ট বা ফ্লাটার অ্যাপে google_generative_ai
প্যাকেজ add
হবে:
ডার্ট
dart pub add google_generative_ai
ফ্লাটার
flutter pub add google_generative_ai
আপনি যেকোন API কল করার আগে, আপনাকে জেনারেটিভ মডেলটি আমদানি এবং আরম্ভ করতে হবে। এটি প্রাথমিক প্রাথমিককরণ; পরে এই টিউটোরিয়ালে আপনি এটিকে ফাংশন কলিংয়ের জন্য আপডেট করবেন।
import 'package:google_generative_ai/google_generative_ai.dart';
// Access your API key as an environment variable (see "Set up your API key" above)
final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('No \$API_KEY environment variable');
exit(1);
}
// Use a model that supports function calling, like Gemini 1.0 Pro.
// See "Supported models" in the "Introduction to function calling" page.
final model = GenerativeModel(model: 'MODEL_NAME', apiKey: apiKey);
একটি ফাংশন কল সেট আপ করুন
এই টিউটোরিয়ালের জন্য, আপনার কাছে মডেলটি একটি অনুমানমূলক মুদ্রা বিনিময় API এর সাথে ইন্টারঅ্যাক্ট করতে হবে যা নিম্নলিখিত পরামিতিগুলিকে সমর্থন করে:
প্যারামিটার | টাইপ | প্রয়োজন | বর্ণনা |
---|---|---|---|
currencyDate | স্ট্রিং | হ্যাঁ | বিনিময় হার আনার তারিখ (যেটি সর্বদা YYYY-MM-DD ফর্ম্যাটে বা একটি সময়কাল নির্দিষ্ট না থাকলে latest মান হতে হবে) |
currencyFrom | স্ট্রিং | হ্যাঁ | থেকে রূপান্তরিত মুদ্রা |
currencyTo | স্ট্রিং | না | কারেন্সিতে রূপান্তর করতে হবে |
উদাহরণ API অনুরোধ
{
"currencyDate": "2024-04-17",
"currencyFrom": "USD",
"currencyTo": "SEK"
}
উদাহরণ API প্রতিক্রিয়া
{
"base": "USD",
"date": "2024-04-17",
"rates": {"SEK": 0.091}
}
ধাপ 1 : API অনুরোধ করে এমন ফাংশন তৈরি করুন
যদি আপনি ইতিমধ্যেই না করে থাকেন তবে একটি API অনুরোধ করে এমন ফাংশন তৈরি করে শুরু করুন।
এই টিউটোরিয়ালে প্রদর্শনের উদ্দেশ্যে, একটি প্রকৃত API অনুরোধ পাঠানোর পরিবর্তে, আপনি একই বিন্যাসে হার্ডকোড করা মানগুলি ফিরিয়ে দেবেন যা একটি প্রকৃত API ফেরত দেবে।
Future<Map<String, Object?>> findExchangeRate(
Map<String, Object?> arguments,
) async =>
// This hypothetical API returns a JSON such as:
// {"base":"USD","date":"2024-04-17","rates":{"SEK": 0.091}}
{
'date': arguments['currencyDate'],
'base': arguments['currencyFrom'],
'rates': <String, Object?>{arguments['currencyTo'] as String: 0.091}
};
ধাপ 2 : একটি ফাংশন ঘোষণা তৈরি করুন
ফাংশন ঘোষণা তৈরি করুন যা আপনি জেনারেটিভ মডেলে পাস করবেন (এই টিউটোরিয়ালের পরবর্তী ধাপ)।
ফাংশন এবং পরামিতি বর্ণনায় যতটা সম্ভব বিস্তারিত অন্তর্ভুক্ত করুন। কোন ফাংশন নির্বাচন করতে হবে এবং ফাংশন কলের পরামিতিগুলির জন্য কীভাবে মান প্রদান করতে হবে তা নির্ধারণ করতে জেনারেটিভ মডেল এই তথ্য ব্যবহার করে।
final exchangeRateTool = FunctionDeclaration(
'findExchangeRate',
'Returns the exchange rate between currencies on given date.',
Schema(SchemaType.object, properties: {
'currencyDate': Schema(SchemaType.string,
description: 'A date in YYYY-MM-DD format or '
'the exact value "latest" if a time period is not specified.'),
'currencyFrom': Schema(SchemaType.string,
description: 'The currency code of the currency to convert from, '
'such as "USD".'),
'currencyTo': Schema(SchemaType.string,
description: 'The currency code of the currency to convert to, '
'such as "USD".')
}, requiredProperties: [
'currencyDate',
'currencyFrom'
]));
ধাপ 3 : মডেল ইনিশিয়ালাইজেশনের সময় ফাংশন ঘোষণা নির্দিষ্ট করুন
মডেলের tools
প্যারামিটারে পাস করে জেনারেটিভ মডেল শুরু করার সময় ফাংশন ঘোষণা নির্দিষ্ট করুন:
final model = GenerativeModel(
// Use a model that supports function calling, like Gemini 1.0 Pro
// See "Supported models" in the "Introduction to function calling" page.
model: 'gemini-1.0-pro',
apiKey: apiKey,
// Specify the function declaration.
tools: [
Tool(functionDeclarations: [exchangeRateTool])
],
);
ধাপ 4 : একটি ফাংশন কল জেনারেট করুন
এখন আপনি সংজ্ঞায়িত ফাংশন সহ মডেলটি প্রম্পট করতে পারেন।
ফাংশন কলিং ব্যবহার করার প্রস্তাবিত উপায় হল চ্যাট ইন্টারফেসের মাধ্যমে, যেহেতু ফাংশন কলগুলি চ্যাটের মাল্টি-টার্ন স্ট্রাকচারে সুন্দরভাবে ফিট করে।
final chat = model.startChat();
final prompt = 'How much is 50 US dollars worth in Swedish krona?';
// Send the message to the generative model.
var response = await chat.sendMessage(Content.text(prompt));
final functionCalls = response.functionCalls.toList();
// When the model response with a function call, invoke the function.
if (functionCalls.isNotEmpty) {
final functionCall = functionCalls.first;
final result = switch (functionCall.name) {
// Forward arguments to the hypothetical API.
'findExchangeRate' => await findExchangeRate(functionCall.args),
// Throw an exception if the model attempted to call a function that was
// not declared.
_ => throw UnimplementedError(
'Function not implemented: ${functionCall.name}')
};
// Send the response to the model so that it can use the result to generate
// text for the user.
response = await chat
.sendMessage(Content.functionResponse(functionCall.name, result));
}
// When the model responds with non-null text content, print it.
if (response.text case final text?) {
print(text);
}