Eğitim: Gemini API'yi kullanmaya başlama


Bu eğitimde, Go uygulamanız için Gemini API'ye nasıl erişileceği gösterilmektedir Google AI Go SDK'sı kullanılıyor.

Bu eğitimde aşağıdakileri nasıl yapacağınızı öğreneceksiniz:

Ek olarak, bu eğitimde gelişmiş kullanım alanlarıyla ilgili bölümler (ör. embeddings ve sayma jetonları) ve içerik oluşturmayı kontrol etme.

Ön koşullar

Bu eğitimde, DMAIC ve PDCA gibi Git.

Bu eğiticiyi tamamlamak için geliştirme ortamınızın gereksinimleri karşıladığından emin olun şu koşulları karşılamanız gerekir:

  • 1.20 ve üzeri sürümler

Projenizi oluşturun

Gemini API'yi çağırmadan önce, aşağıdakileri içeren projenizi ayarlamanız gerekir: API anahtarınızı oluşturma, SDK paketini yükleme ve modeli başlatma.

API anahtarınızı oluşturma

Gemini API'yi kullanmak için API anahtarına ihtiyacınız vardır. Henüz bir hesabınız yoksa Google AI Studio'da bir anahtar oluşturun.

API anahtarı alma

API anahtarınızın güvenliğini sağlayın

Sürümünüzde API anahtarı kontrol etmemeniz önerilir kontrol sistemi. Bunun yerine, API anahtarınız için bir gizli anahtar deposu kullanmanız gerekir.

Bu eğitimdeki tüm snippet'ler, API anahtarınıza bir ortam değişkenidir.

SDK paketini yükleyin

Gemini API'yi kendi uygulamanızda kullanmak için Go SDK'sını get gerekir paketiniz varsa:

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

Üretken modeli başlatma

API çağrısı yapabilmeniz için önce üretken modelimizdir.

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")

Bir model belirtirken aşağıdakilere dikkat edin:

  • Kullanım alanınıza özel bir model kullanın (örneğin, gemini-1.5-flash çok modlu giriş içindir). Bu kılavuzda, her bir her kullanım alanı için önerilen modelleri listeleyin.

Yaygın kullanım alanlarını hayata geçirin

Artık projeniz hazır olduğuna göre Gemini API'yi kullanarak farklı kullanım alanları vardır:

Gelişmiş kullanım alanları bölümünde, Gemini API hakkında bilgi edinebilirsiniz. ve yerleştirmeler.

Yalnızca metin girişinden metin oluştur

İstem girişi yalnızca metin içeriyorsa Gemini 1.5 modelini veya Metin çıkışı oluşturmak için generateContent kullanan Gemini 1.0 Pro modeli:

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

Metin ve resim girişlerinden metin oluşturma (çok modlu)

Gemini, çok modlu girişleri işleyebilecek çeşitli modeller sunar. (Gemini 1.5 modelleri) kullanır ve böylece hem metin hem de resim girebilirsiniz. Şunları yaptığınızdan emin olun: şurayı gözden geçirin: istemler için resim gereksinimleri.

İstem girişi hem metin hem de resim içeriyorsa Gemini 1.5 modelini kullanın metin çıkışı oluşturmak için generateContent yöntemini kullanın:

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

Çok dönüşlü görüşmeler (sohbet) oluşturun

Gemini'ı kullanarak birden fazla turne arasında serbest biçimli sohbetler gerçekleştirebilirsiniz. İlgili içeriği oluşturmak için kullanılan SDK, konuşmanın durumunu yöneterek süreci basitleştirir. Yani, GenerateContent ile görüşme geçmişini saklamanız gerekmez kendiniz.

Sohbet gibi çok yönlü bir sohbet başlatmak için Gemini 1.5 modelini veya Gemini 1.0 Pro modelini deneyin ve startChat() numaralı telefonu arayarak sohbeti başlatın. Ardından, yeni bir kullanıcı mesajı göndermek için sendMessage() öğesini kullanın. Bu mesaj mesajı ve sohbet geçmişindeki yanıtı gösterir.

Birrole sohbet:

  • user: İstemleri sağlayan roldür. Bu değer, SendMessage arama.

  • model: yanıtları sağlayan rol. Bu rol, şu durumlarda kullanılabilir: Mevcut history ile StartChat() aranıyor.

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

Daha hızlı etkileşimler için akışı kullanın

Varsayılan olarak model, oluşturma işleminin tamamını tamamladıktan sonra bir yanıt döndürür. bahsedeceğim. Tüm sürecin tamamını beklemeden, daha hızlı işlevi görür ve bunun yerine kısmi sonuçları işlemek için akış kullanılır.

Aşağıdaki örnekte, Metin ve resim girişinden metin oluşturmak için GenerateContentStream yöntemi tıklayın.

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
}

Yalnızca metin girişi ve sohbet kullanım alanları için de benzer bir yaklaşım kullanabilirsiniz.

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)

Gelişmiş kullanım alanları uygulayın

Bu eğiticinin önceki bölümünde açıklanan yaygın kullanım alanları, rahatlıkla kullanabilirsiniz. Bu bölümde, yaygın olarak kullanılan alanlardır.

Yerleştirmeleri kullanma

Yerleştirme, bilgileri temsil etmek için kullanılan bir tekniktir bir dizideki kayan nokta sayısının listesi olarak gösterir. Gemini ile kendinizi Vektörelleştirilmiş biçimdeki metin (kelimeler, cümleler ve metin blokları) ve ayırt etmek için daha kolay bir yöntem sunabilir. Örneğin, aynı bilgileri paylaşan iki benzer konuların veya duyguların benzer yerleştirmelere sahip olması gerekir. kosinüs benzerliği gibi matematiksel karşılaştırma teknikleriyle belirlenir.

embedding-001 modelini EmbedContent yöntemiyle kullanın (veya BatchEmbedContent yöntemi). Aşağıdaki örnek tek bir dize için bir yerleştirme oluşturur:

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)

İşlev çağırma

İşlev çağrısı, üretken modeller. Ardından bu çıkışları kullanarak diğer API'leri çağırabilir ve yanıt verilerini modele uygun hale getirmemize yardımcı olur. Başka bir deyişle, işlev çağrısı üretken modelleri harici sistemlere bağlarsınız. Böylece, en güncel ve doğru bilgileri içerir. Daha fazla bilgi: işlev çağrısı eğiticisi.

Jetonları say

Uzun istemler kullanırken jetonları göndermeden önce jetonları saymak faydalı olabilir. olabileceğini unutmayın. Aşağıdaki örneklerde CountTokens() özelliğinin nasıl kullanılacağı gösterilmektedir örnek olarak verelim:

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

İçerik oluşturmayı kontrol etme seçenekleri

İçerik oluşturma sürecini, model parametrelerini yapılandırarak ve aşağıdakileri kullanarak kontrol edebilirsiniz. güvenlik ayarlarına gidin.

Model parametrelerini yapılandırma

Modele gönderdiğiniz her istem, model bir yanıt oluşturur. Model, arama sonuçları sayfası için farklı parametre değerleri. Daha fazla bilgi: Model parametreleri. Yapılandırma model örneğinizin ömrü boyunca korunur.

// ...

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

// ...

Güvenlik ayarlarını kullan

Böyle yanıtlar alma olasılığını ayarlamak için güvenlik ayarlarını kullanabilirsiniz: zararlı olarak kabul edilebilir. Varsayılan olarak güvenlik ayarları, orta uzunluktaki içerikleri engeller ve/veya tüm boyutlarda güvenli olmayan içerik olma ihtimalinin yüksek olması. Öğren Güvenlik ayarları hakkında daha fazla bilgi edinin.

Aşağıda, bir güvenlik ayarını nasıl yapacağınız açıklanmaktadır:

// ...

// 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,
  },
}

// ...

Ayrıca, birden fazla güvenlik ayarı da belirleyebilirsiniz:

// ...

// 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,
  },
}

// ...

Sırada ne var?

  • İstem tasarımı, istenen sonuca ulaştıran istemler oluşturma sürecidir. temel yanıtları oluşturuyor. İyi yapılandırılmış istemler yazmak, dil modelinden doğru ve yüksek kaliteli yanıtlar vermenin bir parçasıdır. İstem yazmayla ilgili en iyi uygulamalar hakkında bilgi edinin.

  • Gemini, farklı kullanım ihtiyaçlarını karşılamak için çeşitli model varyasyonları sunar. (ör. giriş türleri ve karmaşıklık, sohbet ya da diğer iletişim ve boyut kısıtlamalarına sahip olabilirsiniz. Mevcut Gemini modelleri hakkında bilgi edinin.