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


इस ट्यूटोरियल में बताया गया है कि Go के लिए Gemini API को कैसे ऐक्सेस किया जा सकता है Google AI Go SDK टूल का इस्तेमाल करने वाला ऐप्लिकेशन.

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

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

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

यह ट्यूटोरियल मानता है कि आप जाएं.

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

  • 1.20 से ज़्यादा इंस्टॉल करें

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

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

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

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

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

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

हमारा सुझाव है कि आप अपने वर्शन में एपीआई पासकोड की जांच करें कंट्रोल सिस्टम पर काम करते हैं. इसके बजाय, आपको एपीआई पासकोड के लिए सीक्रेट स्टोर का इस्तेमाल करना चाहिए.

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

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

Gemini API को अपने ऐप्लिकेशन में इस्तेमाल करने के लिए, आपको Go SDK टूल को get करना होगा पैकेज:

go get github.com/google/generative-ai-go

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

कोई भी एपीआई कॉल करने से पहले, आपको जनरेटिव मॉडल.

import "github.com/google/generative-ai-go/genai"
import "google.golang.org/api/option"

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// The Gemini 1.5 models are versatile and work with most use cases
model := client.GenerativeModel("gemini-1.5-flash")

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

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

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

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

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

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

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

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
model := client.GenerativeModel("gemini-1.5-flash")
resp, err := model.GenerateContent(ctx, genai.Text("Write a story about a magic backpack."))
if err != nil {
  log.Fatal(err)
}

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

के साथ

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

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

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
model := client.GenerativeModel("gemini-1.5-flash")

imgData1, err := os.ReadFile(pathToImage1)
if err != nil {
  log.Fatal(err)
}

imgData2, err := os.ReadFile(pathToImage1)
if err != nil {
  log.Fatal(err)
}

prompt := []genai.Part{
  genai.ImageData("jpeg", imgData1),
  genai.ImageData("jpeg", imgData2),
  genai.Text("What's different between these two pictures?"),
}
resp, err := model.GenerateContent(ctx, prompt...)

if err != nil {
  log.Fatal(err)
}

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

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

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

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

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

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

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
model := client.GenerativeModel("gemini-1.5-flash")
// Initialize the chat
cs := model.StartChat()
cs.History = []*genai.Content{
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Hello, I have 2 dogs in my house."),
    },
    Role: "user",
  },
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Great to meet you. What would you like to know?"),
    },
    Role: "model",
  },
}

resp, err := cs.SendMessage(ctx, genai.Text("How many paws are in my house?"))
if err != nil {
  log.Fatal(err)
}

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

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

नीचे दिया गया उदाहरण, टेक्स्ट और इमेज इनपुट से टेक्स्ट जनरेट करने का GenerateContentStream तरीका प्रॉम्प्ट.

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
model := client.GenerativeModel("gemini-1.5-flash")

imageBytes, err := os.ReadFile(pathToImage)

img := genai.ImageData("jpeg", imageBytes)
prompt := genai.Text("Tell me a story about this animal")
iter := model.GenerateContentStream(ctx, img, prompt)

for {
  resp, err := iter.Next()
  if err == iterator.Done {
    break
  }
  if err != nil {
    log.Fatal(err)
  }

  // ... print resp
}

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

prompt := genai.Text("Tell me a story about a lumberjack and his giant ox")
iter := model.GenerateContentStream(ctx, prompt)
prompt := genai.Text("And how do you feel about that?")
iter := cs.SendMessageStream(ctx, prompt)

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

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

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

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

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

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()
// For embeddings, use the embedding-001 model
em := client.EmbeddingModel("embedding-001")
res, err := em.EmbedContent(ctx, genai.Text("The quick brown fox jumps over the lazy dog."))

if err != nil {
  panic(err)
}
fmt.Println(res.Embedding.Values)

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

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

टोकन गिनें

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

// For text-only input
text := "Parrots can be green and live a long time."
resp, err := model.CountTokens(ctx, genai.Text(text))
if err != nil {
  log.Fatal(err)
}
fmt.Println(resp.TotalTokens)
// For text-and-image input (multimodal)
text := "Parrots can be green and live a long time."
imageBytes, err := os.ReadFile(pathToImage)
if err != nil {
  log.Fatal(err)
}

resp, err := model.CountTokens(
    ctx,
    genai.Text(text),
    genai.ImageData("png", imageBytes))
  if err != nil {
    log.Fatal(err)
}
fmt.Println(resp.TotalTokens)

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

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

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

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

// ...

// The Gemini 1.5 models are versatile and work with most use cases
model := client.GenerativeModel("gemini-1.5-flash")

// Configure model parameters by invoking Set* methods on the model.
model.SetTemperature(0.9)
model.SetTopK(1)

// ...

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

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

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

// ...

// The Gemini 1.5 models are versatile and work with most use cases
model := client.GenerativeModel("gemini-1.5-flash")

model.SafetySettings = []*genai.SafetySetting{
  {
    Category:  genai.HarmCategoryHarassment,
    Threshold: genai.HarmBlockOnlyHigh,
  },
}

// ...

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

// ...

// The Gemini 1.5 models are versatile and work with most use cases
model := client.GenerativeModel("gemini-1.5-flash")

model.SafetySettings = []*genai.SafetySetting{
  {
    Category:  genai.HarmCategoryHarassment,
    Threshold: genai.HarmBlockOnlyHigh,
  },
  {
    Category:  genai.HarmCategoryHateSpeech,
    Threshold: genai.HarmBlockMediumAndAbove,
  },
}

// ...

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

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

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