ट्यूटोरियल: Gemini API का इस्तेमाल शुरू करना


इस ट्यूटोरियल में बताया गया है कि Dart के लिए Gemini API को कैसे ऐक्सेस किया जाए या Google के AI Dart SDK टूल की मदद से बनाया गया Flutter ऐप्लिकेशन. इस SDK टूल का इस्तेमाल तब किया जा सकता है, जब मुझे Gemini मॉडल को ऐक्सेस करने के लिए, सीधे REST API के साथ काम नहीं करना है.

इस ट्यूटोरियल में आप इन कामों को करने का तरीका जानेंगे:

इसके अलावा, इस ट्यूटोरियल में बेहतर इस्तेमाल के उदाहरणों (जैसे एम्बेड करना और टोकन गिनना) और विकल्प कॉन्टेंट जनरेट करने के तरीके को कंट्रोल करना.

ज़रूरी शर्तें

यह ट्यूटोरियल मानकर चलता है कि आप Dart के साथ ऐप्लिकेशन बनाने के बारे में जानते हैं.

इस ट्यूटोरियल को पूरा करने के लिए, पक्का करें कि आपका डेवलपमेंट एनवायरमेंट सही हो ये ज़रूरी शर्तें:

  • Dart 3.2.0 और उसके बाद के वर्शन

अपना प्रोजेक्ट सेट अप करना

Gemini API को कॉल करने से पहले, आपको अपना प्रोजेक्ट सेट अप करना होगा. इसमें ये शामिल हैं एपीआई पासकोड सेट अप करना, SDK टूल को अपने pub डिपेंडेंसी में SDK टूल जोड़ना, और शुरू करते हैं.

एपीआई पासकोड सेट अप करना

Gemini API का इस्तेमाल करने के लिए, आपको एपीआई पासकोड की ज़रूरत होगी. अगर आपके पास पहले से कोई AdSense खाता नहीं है, तो Google AI Studio में कोई पासकोड बनाएं.

एपीआई पासकोड पाएं

एपीआई पासकोड को सुरक्षित रखना

अपनी एपीआई कुंजी सुरक्षित रखें. हमारा सुझाव है कि आप इसमें सीधे अपने कोड में एपीआई पासकोड डालें या उन फ़ाइलों की जांच करें जिनमें पासकोड मौजूद है कंट्रोल सिस्टम. इसके बजाय, आपको एपीआई पासकोड के लिए सीक्रेट स्टोर का इस्तेमाल करना चाहिए.

इस ट्यूटोरियल के सभी स्निपेट को यह लगता है कि एपीआई पासकोड को ऐक्सेस करने के लिए, इसका इस्तेमाल किया जा रहा है: प्रोसेस एनवायरमेंट वैरिएबल. अगर आपको Flutter ऐप्लिकेशन बनाना है, तो String.fromEnvironment और --dart-define=API_KEY=$API_KEY को पास करें प्रोसेस के बाद से, एपीआई पासकोड के साथ कंपाइल करने के लिए flutter build या flutter run ऐप्लिकेशन इस्तेमाल करने पर, एनवायरमेंट अलग होगा.

SDK टूल का पैकेज इंस्टॉल करें

Gemini API को अपने ऐप्लिकेशन में इस्तेमाल करने के लिए, आपको add आपके Dart या Flutter ऐप्लिकेशन में google_generative_ai पैकेज:

Dart

dart pub add google_generative_ai

Flutter

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-1.5-flash मल्टीमोडल इनपुट के लिए है). इस गाइड में, हर विज्ञापन के लिए निर्देश लागू करने के लिए, इस्तेमाल के हर उदाहरण के लिए सुझाए गए मॉडल की सूची दी जानी चाहिए.

इस्तेमाल के सामान्य उदाहरण लागू करना

आपका प्रोजेक्ट सेट अप हो गया है. अब Gemini API का इस्तेमाल करके, इस्तेमाल के अलग-अलग उदाहरण लागू करें:

'बेहतर इस्तेमाल के उदाहरण' सेक्शन में, आपको Gemini API के बारे में जानकारी मिल सकती है और एम्बेड की जाने वाली परफ़ॉर्मेंस की जांच करें.

सिर्फ़ टेक्स्ट इनपुट से टेक्स्ट जनरेट करें

अगर प्रॉम्प्ट इनपुट में सिर्फ़ टेक्स्ट शामिल है, तो Gemini के 1.5 मॉडल या टेक्स्ट आउटपुट जनरेट करने के लिए, generateContent के साथ Gemini 1.0 Pro मॉडल:

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

टेक्स्ट और इमेज इनपुट से टेक्स्ट जनरेट करें (मल्टीमॉडल)

Gemini कई तरह के मॉडल उपलब्ध कराता है, जो मल्टीमोडल इनपुट को हैंडल कर सकते हैं (Gemini 1.5 मॉडल) ताकि आप दोनों टेक्स्ट इनपुट कर सकें और इमेज. कृपया प्रॉम्प्ट के लिए इमेज से जुड़ी ज़रूरी शर्तें.

अगर प्रॉम्प्ट वाले इनपुट में टेक्स्ट और इमेज, दोनों शामिल हैं, तो Gemini के 1.5 मॉडल का इस्तेमाल करें इसका इस्तेमाल करके, टेक्स्ट आउटपुट जनरेट करने के लिए generateContent तरीके का इस्तेमाल किया जा सकता है:

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

बार-बार होने वाली बातचीत (चैट) की सुविधा तैयार करें

Gemini की मदद से, अलग-अलग मौकों पर फ़्रीफ़ॉर्म तरीके से बातचीत की जा सकती है. कॉन्टेंट बनाने SDK टूल, बातचीत की प्रोसेस को मैनेज करके इस प्रक्रिया को आसान बनाता है. यह प्रोसेस को आसान बनाता है generateContent के साथ, आपको बातचीत के इतिहास को सेव करने की ज़रूरत नहीं होती है खुद को बेहतर बनाएं.

कई चरणों में होने वाली बातचीत (जैसे, चैट) शुरू करने के लिए, Gemini के 1.5 मॉडल या Gemini 1.0 Pro मॉडल का इस्तेमाल करें और 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);

इस्तेमाल के बेहतर उदाहरण लागू करना

इस ट्यूटोरियल सहायता के पिछले सेक्शन में, इस्तेमाल के जिन सामान्य उदाहरणों के बारे में बताया गया है तो आपको Gemini API का इस्तेमाल करने में कोई दिक्कत नहीं है. इस सेक्शन में, कुछ ऐसी जिन्हें ज़्यादा बेहतर माना जा सकता है.

फ़ंक्शन कॉलिंग

फ़ंक्शन कॉलिंग की मदद से, स्ट्रक्चर्ड डेटा के आउटपुट आसानी से हासिल किए जा सकते हैं जनरेटिव मॉडल. इसके बाद, इन आउटपुट का इस्तेमाल करके अन्य एपीआई को कॉल किया जा सकता है और इन आउटपुट का इस्तेमाल किया जा सकता है मॉडल के लिए काम के रिस्पॉन्स डेटा का इस्तेमाल करती है. दूसरे शब्दों में, फ़ंक्शन कॉलिंग मदद करता है आप जनरेटिव मॉडल को बाहरी सिस्टम से जोड़ते हैं. इससे, जनरेट किया गया कॉन्टेंट में अप-टू-डेट और सटीक जानकारी होती है. ज़्यादा जानकारी के लिए इस लिंक पर जाएं फ़ंक्शन कॉलिंग का ट्यूटोरियल.

एम्बेड करने की सुविधा का इस्तेमाल करना

एम्बेड करना तकनीक का इस्तेमाल जानकारी दिखाने के लिए किया जाता है किसी अरे में फ़्लोटिंग पॉइंट नंबर की सूची के तौर पर. Gemini की मदद से, ये काम किए जा सकते हैं टेक्स्ट (शब्द, वाक्य, और टेक्स्ट के ब्लॉक) को वेक्टराइज़ किया गया होता है. इससे यह एम्बेड करना आसान हो जाता है. उदाहरण के लिए, दो टेक्स्ट जिनमें एक एक जैसी विषय-वस्तु या भावना के लिए, एम्बेड किए गए शब्द एक जैसे होने चाहिए. कोसाइन (cos) जैसी गणितीय तुलना तकनीकों के ज़रिए पहचाना जाता है.

embedContent तरीके के साथ embedding-001 मॉडल का इस्तेमाल करें (या batchEmbedContent तरीका). यह उदाहरण किसी सिंगल स्ट्रिंग के लिए एम्बेडिंग जनरेट करता है:

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

कॉन्टेंट जनरेट करने की प्रोसेस को कंट्रोल करने के विकल्प

मॉडल पैरामीटर कॉन्फ़िगर करके और इनका इस्तेमाल करके, कॉन्टेंट जनरेट होने की प्रोसेस को कंट्रोल किया जा सकता है सुरक्षा सेटिंग.

ध्यान दें कि किसी मॉडल अनुरोध के लिए generationConfig या safetySettings को पास करना तरीका (जैसे generateContent) कॉन्फ़िगरेशन ऑब्जेक्ट को पूरी तरह से ओवरराइड कर देगा getGenerativeModel में पास किए गए नाम से.

मॉडल पैरामीटर कॉन्फ़िगर करें

मॉडल को भेजे जाने वाले हर प्रॉम्प्ट में पैरामीटर की वैल्यू शामिल होती हैं. इनकी मदद से, यह तय किया जाता है कि तो मॉडल जवाब जनरेट करता है. मॉडल, GA4 प्रॉपर्टी के लिए अलग-अलग नतीजे जनरेट कर सकता है पैरामीटर वैल्यू अलग-अलग हैं. इसके बारे में ज़्यादा जानें मॉडल पैरामीटर. कॉन्फ़िगरेशन आपके मॉडल इंस्टेंस के लाइफ़टाइम तक बना रहता है.

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),
];

आगे क्या करना है

  • प्रॉम्प्ट डिज़ाइन ऐसे प्रॉम्प्ट बनाने की प्रोसेस है जो आपके काम के लैंग्वेज मॉडल से मिले रिस्पॉन्स. अच्छी तरह से स्ट्रक्चर किए गए प्रॉम्प्ट लिखना बहुत ज़रूरी है यह पक्का किया जा सकता है कि किसी भाषा के मॉडल से सही और अच्छी क्वालिटी के जवाब मिले हैं. प्रॉम्प्ट लिखने के सबसे सही तरीके जानें.

  • अलग-अलग कामों की ज़रूरतों को पूरा करने के लिए, Gemini कई तरह के मॉडल उपलब्ध कराता है मामलों, जैसे इनपुट प्रकार और जटिलता, चैट या अन्य डायलॉग लैंग्वेज टास्क, और साइज़ कंस्ट्रेंट. Gemini के उपलब्ध मॉडल के बारे में जानें.