টিউটোরিয়াল: Gemini API দিয়ে শুরু করুন


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

এই টিউটোরিয়ালে, আপনি নিম্নলিখিতগুলি কীভাবে করবেন তা শিখবেন:

তদতিরিক্ত, এই টিউটোরিয়ালটিতে উন্নত ব্যবহারের কেসগুলি (যেমন এম্বেডিং এবং গণনা টোকেন ) সম্পর্কিত বিভাগগুলি পাশাপাশি সামগ্রী উত্পাদন নিয়ন্ত্রণের বিকল্প রয়েছে।

পূর্বশর্ত

এই টিউটোরিয়ালটি ধরে নিয়েছে যে আপনি ডার্ট সহ বিল্ডিং অ্যাপ্লিকেশনগুলির সাথে পরিচিত।

এই টিউটোরিয়ালটি সম্পূর্ণ করতে, আপনার বিকাশের পরিবেশটি নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করেছে তা নিশ্চিত করুন:

  • ডার্ট 3.2.0+

আপনার প্রকল্প সেট আপ করুন

জেমিনি এপিআই কল করার আগে আপনাকে আপনার প্রকল্পটি সেট আপ করতে হবে, যার মধ্যে আপনার এপিআই কী সেট আপ করা, আপনার পাব নির্ভরতাগুলিতে এসডিকে যুক্ত করা এবং মডেলটি সূচনা করা অন্তর্ভুক্ত রয়েছে।

আপনার এপিআই কী সেট আপ করুন

জেমিনি এপিআই ব্যবহার করতে আপনার একটি এপিআই কী দরকার। আপনার যদি ইতিমধ্যে একটি না থাকে তবে গুগল এআই স্টুডিওতে একটি কী তৈরি করুন।

একটি API কী পান

আপনার এপিআই কীটি সুরক্ষিত করুন

আপনার এপিআই কীটি সুরক্ষিত রাখুন। আমরা দৃ strongly ়ভাবে সুপারিশ করি যে আপনি সরাসরি আপনার কোডে এপিআই কীটি অন্তর্ভুক্ত করবেন না , বা সংস্করণ নিয়ন্ত্রণ সিস্টেমে কী রয়েছে এমন ফাইলগুলি পরীক্ষা করুন। পরিবর্তে, আপনার এপিআই কীটির জন্য আপনার একটি সিক্রেটস স্টোর ব্যবহার করা উচিত।

এই টিউটোরিয়ালের সমস্ত স্নিপেটগুলি ধরে নিয়েছে যে আপনি আপনার এপিআই কীটি প্রক্রিয়া পরিবেশের পরিবর্তনশীল হিসাবে অ্যাক্সেস করছেন। আপনি flutter build flutter run ফ্লাটার অ্যাপ্লিকেশন বিকাশ করছেন তবে আপনি String.fromEnvironment ব্যবহার করতে পারেন --dart-define=API_KEY=$API_KEY .

এসডিকে প্যাকেজ ইনস্টল করুন

আপনার নিজের অ্যাপ্লিকেশনটিতে জেমিনি এপিআই ব্যবহার করতে, আপনাকে আপনার ডার্ট বা ফ্লটার অ্যাপে google_generative_ai প্যাকেজ add হবে:

ডার্ট

dart pub add google_generative_ai

ফ্লাটার

flutter pub add google_generative_ai

জেনারেটর মডেল আরম্ভ করুন

আপনি কোনও এপিআই কল করার আগে আপনাকে জেনারেটর মডেলটি আমদানি এবং সূচনা করতে হবে।

import 'dart:io';
import 'package:google_generative_ai/google_generative_ai.dart';

void main() async {

  // 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);
  }

  // The Gemini 1.5 models are versatile and work with most use cases
  final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
}

কোনও মডেল নির্দিষ্ট করার সময়, নিম্নলিখিতগুলি নোট করুন:

  • আপনার ব্যবহারের ক্ষেত্রে নির্দিষ্ট এমন একটি মডেল ব্যবহার করুন (উদাহরণস্বরূপ, gemini-pro-vision মাল্টিমোডাল ইনপুটটির জন্য)। এই গাইডের মধ্যে, প্রতিটি বাস্তবায়নের জন্য নির্দেশাবলী প্রতিটি ব্যবহারের ক্ষেত্রে প্রস্তাবিত মডেল তালিকাভুক্ত করে।

সাধারণ ব্যবহারের ক্ষেত্রে প্রয়োগ করুন

এখন আপনার প্রকল্পটি সেট আপ হয়েছে, আপনি বিভিন্ন ব্যবহারের ক্ষেত্রে বাস্তবায়নের জন্য জেমিনি এপিআই ব্যবহার করে অন্বেষণ করতে পারেন:

অ্যাডভান্সড ইউজ কেস বিভাগে, আপনি জেমিনি এপিআই এবং এম্বেডিং সম্পর্কে তথ্য পেতে পারেন।

কেবল পাঠ্য-ইনপুট থেকে পাঠ্য তৈরি করুন

যখন প্রম্পট ইনপুটটিতে কেবল পাঠ্য অন্তর্ভুক্ত থাকে, তখন পাঠ্য আউটপুট উত্পন্ন করতে generateContent সহ একটি মিথুন 1.5 মডেল বা জেমিনি 1.0 প্রো মডেল ব্যবহার করুন:

import 'dart:io';

import 'package:google_generative_ai/google_generative_ai.dart';

void main() async {
  // 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);
  }
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
  final content = [Content.text('Write a story about a magic backpack.')];
  final response = await model.generateContent(content);
  print(response.text);
}

পাঠ্য এবং চিত্র ইনপুট থেকে পাঠ্য উত্পন্ন করুন (মাল্টিমোডাল)

জেমিনি বিভিন্ন মডেল সরবরাহ করে যা মাল্টিমোডাল ইনপুট (জেমিনি 1.5 মডেল এবং জেমিনি 1.0 প্রো ভিশন) পরিচালনা করতে পারে যাতে আপনি পাঠ্য এবং চিত্র উভয়ই ইনপুট করতে পারেন। প্রম্পটগুলির জন্য চিত্রের প্রয়োজনীয়তাগুলি পর্যালোচনা করার বিষয়টি নিশ্চিত করুন।

যখন প্রম্পট ইনপুটটিতে পাঠ্য এবং চিত্র উভয়ই অন্তর্ভুক্ত থাকে, তখন পাঠ্য আউটপুট উত্পন্ন করার জন্য generateContent পদ্ধতির সাথে একটি জেমিনি 1.5 মডেল বা জেমিনি 1.0 প্রো ভিশন মডেল ব্যবহার করুন:

import 'dart:io';

import 'package:google_generative_ai/google_generative_ai.dart';

void main() async {
  // 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);
  }
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
  final (firstImage, secondImage) = await (
    File('image0.jpg').readAsBytes(),
    File('image1.jpg').readAsBytes()
  ).wait;
  final prompt = TextPart("What's different between these pictures?");
  final imageParts = [
    DataPart('image/jpeg', firstImage),
    DataPart('image/jpeg', secondImage),
  ];
  final response = await model.generateContent([
    Content.multi([prompt, ...imageParts])
  ]);
  print(response.text);
}

মাল্টি-টার্ন কথোপকথন (চ্যাট) তৈরি করুন

জেমিনি ব্যবহার করে আপনি একাধিক টার্ন জুড়ে ফ্রিফর্ম কথোপকথন তৈরি করতে পারেন। এসডিকে কথোপকথনের অবস্থা পরিচালনা করে প্রক্রিয়াটিকে সহজতর করে, তাই generateContent বিপরীতে, আপনাকে কথোপকথনের ইতিহাস নিজেই সঞ্চয় করতে হবে না।

একটি মাল্টি-টার্ন কথোপকথন (চ্যাটের মতো) তৈরি করতে, একটি জেমিনি 1.5 মডেল বা জেমিনি 1.0 প্রো মডেল ব্যবহার করুন এবং startChat() কল করে চ্যাটটি আরম্ভ করুন। তারপরে একটি নতুন ব্যবহারকারী বার্তা প্রেরণের জন্য sendMessage() ব্যবহার করুন, যা চ্যাটের ইতিহাসের বার্তা এবং প্রতিক্রিয়াও সংযোজন করবে।

কথোপকথনে সামগ্রীর সাথে যুক্ত role জন্য দুটি সম্ভাব্য বিকল্প রয়েছে:

  • user : ভূমিকা যা প্রম্পট সরবরাহ করে। এই মানটি sendMessage কলগুলির জন্য ডিফল্ট, এবং যদি অন্য কোনও ভূমিকা পাস হয় তবে ফাংশনটি একটি ব্যতিক্রম ছুঁড়ে ফেলবে।

  • model : ভূমিকা যা প্রতিক্রিয়া সরবরাহ করে। বিদ্যমান history সাথে startChat() কল করার সময় এই ভূমিকাটি ব্যবহার করা যেতে পারে।

import 'dart:io';

import 'package:google_generative_ai/google_generative_ai.dart';

Future<void> main() async {
  // 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);
  }
  // The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
  final model = GenerativeModel(
      model: 'gemini-1.5-flash',
      apiKey: apiKey,
      generationConfig: GenerationConfig(maxOutputTokens: 100));
  // Initialize the chat
  final chat = model.startChat(history: [
    Content.text('Hello, I have 2 dogs in my house.'),
    Content.model([TextPart('Great to meet you. What would you like to know?')])
  ]);
  var content = Content.text('How many paws are in my house?');
  var response = await chat.sendMessage(content);
  print(response.text);
}

দ্রুত মিথস্ক্রিয়া জন্য স্ট্রিমিং ব্যবহার করুন

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

নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে একটি পাঠ্য-চিত্র ইনপুট প্রম্পট থেকে পাঠ্য তৈরি করতে generateContentStream পদ্ধতির সাথে স্ট্রিমিং প্রয়োগ করা যায়।

// ...

final response = model.generateContentStream([
  Content.multi([prompt, ...imageParts])
]);
await for (final chunk in response) {
  print(chunk.text);
}

// ...

আপনি কেবল পাঠ্য-ইনপুট এবং চ্যাট ব্যবহারের ক্ষেত্রে অনুরূপ পদ্ধতির ব্যবহার করতে পারেন।

// Use streaming with text-only input
final response = model.generateContentStream(content);
// Use streaming with multi-turn conversations (like chat)
final response = chat.sendMessageStream(content);

উন্নত ব্যবহারের কেসগুলি প্রয়োগ করুন

এই টিউটোরিয়ালটির পূর্ববর্তী বিভাগে বর্ণিত সাধারণ ব্যবহারের কেসগুলি আপনাকে জেমিনি এপিআই ব্যবহারে স্বাচ্ছন্দ্য বোধ করতে সহায়তা করে। এই বিভাগটি এমন কিছু ব্যবহারের ক্ষেত্রে বর্ণনা করে যা আরও উন্নত হিসাবে বিবেচিত হতে পারে।

ফাংশন কলিং

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

এম্বেডিং ব্যবহার করুন

এম্বেডিং একটি অ্যারেতে ভাসমান পয়েন্ট সংখ্যার তালিকা হিসাবে তথ্য উপস্থাপনের জন্য ব্যবহৃত একটি কৌশল। জেমিনি দিয়ে, আপনি একটি ভেক্টরাইজড আকারে পাঠ্য (শব্দ, বাক্য এবং পাঠ্যের ব্লক) উপস্থাপন করতে পারেন, যা এম্বেডিংগুলির তুলনা করা এবং বিপরীতে করা সহজ করে তোলে। উদাহরণস্বরূপ, দুটি পাঠ্য যা অনুরূপ বিষয় বা অনুভূতির ভাগ করে নেয় এমন একই এম্বেডিং থাকতে হবে, যা গাণিতিক তুলনা কৌশল যেমন কোসাইন মিলের মতো চিহ্নিত করা যেতে পারে।

এম্বেডিংগুলি তৈরি করতে embedContent পদ্ধতি (বা batchEmbedContent পদ্ধতি) সহ embedding-001 মডেলটি ব্যবহার করুন। নিম্নলিখিত উদাহরণটি একটি একক স্ট্রিংয়ের জন্য এম্বেডিং উত্পন্ন করে:

final model = GenerativeModel(model: 'embedding-001', apiKey: apiKey);
final content = Content.text('The quick brown fox jumps over the lazy dog.');
final result = await model.embedContent(content);
print(result.embedding.values);

টোকেন গণনা করুন

দীর্ঘ প্রম্পটগুলি ব্যবহার করার সময়, মডেলটিতে কোনও সামগ্রী প্রেরণের আগে টোকেনগুলি গণনা করা কার্যকর হতে পারে। নিম্নলিখিত উদাহরণগুলি বিভিন্ন ব্যবহারের ক্ষেত্রে কীভাবে countTokens() ব্যবহার করতে হয় তা দেখায়:

// For text-only input
final tokenCount = await model.countTokens(Content.text(prompt));
print('Token count: ${tokenCount.totalTokens}');
// For text-and-image input (multimodal)
final tokenCount = await model.countTokens([
  Content.multi([prompt, ...imageParts])
]);
print('Token count: ${tokenCount.totalTokens}');
// For multi-turn conversations (like chat)
final prompt = Content.text(message);
final allContent = [...chat.history, prompt];
final tokenCount = await model.countTokens(allContent);
print('Token count: ${tokenCount.totalTokens}');

বিষয়বস্তু জেনারেশন নিয়ন্ত্রণ করার বিকল্পগুলি

আপনি মডেল পরামিতিগুলি কনফিগার করে এবং সুরক্ষা সেটিংস ব্যবহার করে সামগ্রী প্রজন্মকে নিয়ন্ত্রণ করতে পারেন।

নোট করুন যে কোনও মডেল অনুরোধ পদ্ধতিতে ( generateContent মতো) generationConfig বা safetySettings পাস করা getGenerativeModel পাস করা একই নামের সাথে কনফিগারেশন অবজেক্টটিকে পুরোপুরি ওভাররাইড করবে।

মডেল পরামিতিগুলি কনফিগার করুন

আপনি মডেলটিতে প্রেরণ করা প্রতিটি প্রম্পটে প্যারামিটার মানগুলি অন্তর্ভুক্ত করে যা মডেল কীভাবে প্রতিক্রিয়া তৈরি করে তা নিয়ন্ত্রণ করে। মডেলটি বিভিন্ন প্যারামিটার মানগুলির জন্য বিভিন্ন ফলাফল তৈরি করতে পারে। মডেল পরামিতি সম্পর্কে আরও জানুন। কনফিগারেশনটি আপনার মডেল উদাহরণের আজীবন বজায় রাখা হয়।

final generationConfig = GenerationConfig(
  stopSequences: ["red"],
  maxOutputTokens: 200,
  temperature: 0.9,
  topP: 0.1,
  topK: 16,
);
final model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  model: 'gemini-1.5-flash',
  apiKey: apiKey,
  generationConfig: generationConfig,
);

সুরক্ষা সেটিংস ব্যবহার করুন

ক্ষতিকারক হিসাবে বিবেচিত হতে পারে এমন প্রতিক্রিয়া পাওয়ার সম্ভাবনা সামঞ্জস্য করতে আপনি সুরক্ষা সেটিংস ব্যবহার করতে পারেন। ডিফল্টরূপে, সুরক্ষা সেটিংস সমস্ত মাত্রায় অনিরাপদ সামগ্রী হওয়ার মাঝারি এবং/অথবা উচ্চ সম্ভাবনা সহ সামগ্রীগুলি ব্লক করে। সুরক্ষা সেটিংস সম্পর্কে আরও জানুন।

কীভাবে একটি সুরক্ষা সেটিং সেট করবেন তা এখানে:

final safetySettings = [
  SafetySetting(HarmCategory.harassment, HarmBlockThreshold.high)
];
final model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  model: 'gemini-1.5-flash',
  apiKey: apiKey,
  safetySettings: safetySettings,
);

আপনি একাধিক সুরক্ষা সেটিং সেট করতে পারেন:

final safetySettings = [
  SafetySetting(HarmCategory.harassment, HarmBlockThreshold.high),
  SafetySetting(HarmCategory.hateSpeech, HarmBlockThreshold.high),
];

এরপর কি

  • প্রম্পট ডিজাইন হ'ল প্রম্পট তৈরির প্রক্রিয়া যা ভাষার মডেলগুলি থেকে কাঙ্ক্ষিত প্রতিক্রিয়া প্রকাশ করে। ভাল কাঠামোগত প্রম্পটগুলি লেখা কোনও ভাষার মডেল থেকে সঠিক, উচ্চ মানের প্রতিক্রিয়া নিশ্চিত করার একটি অপরিহার্য অঙ্গ। প্রম্পট লেখার জন্য সেরা অনুশীলন সম্পর্কে শিখুন।

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

  • জেমিনি হারের সীমা বৃদ্ধির জন্য অনুরোধ করার জন্য বিকল্পগুলি সরবরাহ করে। মিথুন প্রো মডেলগুলির জন্য হারের সীমা প্রতি মিনিটে 60 টি অনুরোধ (আরপিএম)।