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


इस ट्यूटोरियल में बताया गया है कि Google AI Swift SDK का इस्तेमाल करके, सीधे अपने Swift ऐप्लिकेशन से Gemini API को कैसे ऐक्सेस किया जा सकता है. अगर आपको अपने Swift ऐप्लिकेशन में Gemini के मॉडल ऐक्सेस करने के लिए, सीधे तौर पर REST API या Python जैसे सर्वर-साइड कोड के साथ काम नहीं करना है, तो इस SDK टूल का इस्तेमाल किया जा सकता है.

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

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

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

इस ट्यूटोरियल में हम यह मानकर चलते हैं कि आपको Swift ऐप्लिकेशन डेवलप करने के लिए Xcode का इस्तेमाल करना आता है.

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

  • Xcode 15.0 या इसके बाद का वर्शन
  • यह ज़रूरी है कि Swift ऐप्लिकेशन, iOS 15 या उसके बाद के वर्शन या macOS 12 या उसके बाद के वर्शन को टारगेट करे.

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

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

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

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

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

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

हमारा सुझाव है कि आप अपने वर्शन कंट्रोल सिस्टम में एपीआई पासकोड की जांच करें. दूसरा विकल्प यह है कि इसे किसी GenerativeAI-Info.plist फ़ाइल में सेव करें और फिर .plist फ़ाइल से एपीआई पासकोड पढ़ें. इस .plist फ़ाइल को अपने ऐप्लिकेशन के रूट फ़ोल्डर में ज़रूर डालें और वर्शन कंट्रोल से बाहर रखें.

एपीआई पासकोड को .plist फ़ाइल में सेव करने का तरीका जानने के लिए, ऐप्लिकेशन के सैंपल को देखें.

इस ट्यूटोरियल में दिए गए सभी स्निपेट को लगता है कि मांग पर उपलब्ध इस संसाधन .plist फ़ाइल से, एपीआई पासकोड को ऐक्सेस किया जा रहा है.

अपने प्रोजेक्ट में SDK टूल का पैकेज जोड़ें

अपने Swift ऐप्लिकेशन में Gemini API का इस्तेमाल करने के लिए, ऐप्लिकेशन में GoogleGenerativeAI पैकेज जोड़ें:

  1. Xcode में, प्रोजेक्ट नेविगेटर में अपने प्रोजेक्ट पर राइट क्लिक करें.

  2. संदर्भ मेन्यू से, पैकेज जोड़ें चुनें.

  3. पैकेज जोड़ें डायलॉग में, खोज बार में पैकेज यूआरएल चिपकाएं:

    https://github.com/google/generative-ai-swift
    
  4. पैकेज जोड़ें पर क्लिक करें. Xcode अब आपके प्रोजेक्ट में GoogleGenerativeAI पैकेज जोड़ देगा.

जनरेटिव मॉडल शुरू करें

एपीआई कॉल करने से पहले, आपको जनरेटिव मॉडल शुरू करना होगा.

  1. GoogleGenerativeAI मॉड्यूल इंपोर्ट करें:

    import GoogleGenerativeAI
    
  2. जनरेटिव मॉडल शुरू करें:

    // Access your API key from your on-demand resource .plist file
    // (see "Set up your API key" above)
    // The Gemini 1.5 models are versatile and work with most use cases
    let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)
    

मॉडल तय करते समय, इन बातों का ध्यान रखें:

  • उस मॉडल का इस्तेमाल करें जो आपके इस्तेमाल के उदाहरण के लिए खास हो. उदाहरण के लिए, gemini-1.5-flash मल्टीमॉडल इनपुट के लिए है. इस गाइड में, हर लागू करने के निर्देशों में, इस्तेमाल के हर उदाहरण के लिए सुझाए गए मॉडल की सूची दी गई है.

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

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

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

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

import GoogleGenerativeAI

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)

let prompt = "Write a story about a magic backpack."
let response = try await model.generateContent(prompt)
if let text = response.text {
  print(text)
}

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

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

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

import GoogleGenerativeAI

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)

let image1 = UIImage(...)
let image2 = UIImage(...)

let prompt = "What's different between these pictures?"

let response = try await model.generateContent(prompt, image1, image2)
if let text = response.text {
  print(text)
}

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

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

बार-बार होने वाली बातचीत (जैसे, चैट) शुरू करने के लिए, Gemini के 1.5 मॉडल या Gemini 1.0 Pro मॉडल का इस्तेमाल करें. इसके बाद, startChat() पर कॉल करके चैट शुरू करें. इसके बाद, उपयोगकर्ता को नया मैसेज भेजने के लिए sendMessage() का इस्तेमाल करें. इसमें मैसेज के साथ-साथ चैट के इतिहास में जवाब भी शामिल हो जाएगा.

किसी बातचीत के कॉन्टेंट से जुड़े role के लिए, ये दो विकल्प हो सकते हैं:

  • user: वह भूमिका जो प्रॉम्प्ट देती है. यह वैल्यू sendMessage कॉल के लिए डिफ़ॉल्ट तौर पर सेट है.

  • model: वह भूमिका जो जवाब देती है. मौजूदा history के साथ startChat() को कॉल करते समय, इस भूमिका का इस्तेमाल किया जा सकता है.

import GoogleGenerativeAI

let config = GenerationConfig(
  maxOutputTokens: 100
)

// The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
  generationConfig: config
)

let history = [
  ModelContent(role: "user", parts: "Hello, I have 2 dogs in my house."),
  ModelContent(role: "model", parts: "Great to meet you. What would you like to know?"),
]

// Initialize the chat
let chat = model.startChat(history: history)
let response = try await chat.sendMessage("How many paws are in my house?")
if let text = response.text {
  print(text)
}

तेज़ी से इंटरैक्शन करने के लिए स्ट्रीमिंग का इस्तेमाल करें

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

इस उदाहरण में बताया गया है कि टेक्स्ट और इमेज इनपुट प्रॉम्प्ट से टेक्स्ट जनरेट करने के लिए, generateContentStream तरीके की मदद से स्ट्रीमिंग कैसे लागू की जाए.

import GoogleGenerativeAI

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)

let image1 = UIImage(named: "")!
let image2 = UIImage(named: "")!

let prompt = "What's different between these pictures?"
var fullResponse = ""
let contentStream = model.generateContentStream(prompt, image1, image2)
for try await chunk in contentStream {
  if let text = chunk.text {
    print(text)
    fullResponse += text
  }
}
print(fullResponse)

सिर्फ़ टेक्स्ट इनपुट और चैट के इस्तेमाल के लिए, इसी तरीके का इस्तेमाल किया जा सकता है.

// Use streaming with text-only input
let contentStream = model.generateContentStream(prompt)
// Use streaming with multi-turn conversations (like chat)
let responseStream = chat.sendMessageStream(message)

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

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

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

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

टोकन गिनें

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

// For text-only input
let response = try await model.countTokens("Why is the sky blue?")
print(response.totalTokens)
// For text-and-image input (multi-modal)
let response = try await model.countTokens(prompt, image1, image2)
print(response.totalTokens)
// For multi-turn conversations (like chat)
let chat = model.startChat()
let history = chat.history
let message = try ModelContent(role: "user", "Why is the sky blue?")
let contents = history + [message]
let response = try await model.countTokens(contents)
print(response.totalTokens)

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

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

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

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

let config = GenerationConfig(
  temperature: 0.9,
  topP: 0.1,
  topK: 16,
  maxOutputTokens: 200,
  stopSequences: ["red"]
)

// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
  generationConfig: config
)

सुरक्षा सेटिंग का इस्तेमाल करना

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

यहां एक सुरक्षा सेटिंग सेट करने का तरीका बताया गया है:

// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
  safetySettings: [
    SafetySetting(harmCategory: .harassment, threshold: .blockOnlyHigh)
  ]
)

आप एक से ज़्यादा सुरक्षा सेटिंग भी सेट कर सकते हैं:

let harassmentSafety = SafetySetting(harmCategory: .harassment, threshold: .blockOnlyHigh)
let hateSpeechSafety = SafetySetting(harmCategory: .hateSpeech, threshold: .blockMediumAndAbove)

// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
    safetySettings: [harassmentSafety, hateSpeechSafety]
)

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

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

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