Google AI istemci SDK'sı

Google AI istemci SDK'sı, Gemini API'yi çağırmanıza ve Gemini model ailesini doğrudan Android uygulamanızda kullanmanıza olanak tanır.

Ücretsiz katman, ücretsiz denemeler yapmanıza olanak tanır. Diğer fiyatlandırma ayrıntıları için fiyatlandırma kılavuzuna bakın.

Google Yapay Zeka entegrasyon mimarisi
Şekil 1. Google AI entegrasyon mimarisi.

Başlarken

Gemini API ile doğrudan uygulamanızdan etkileşime geçmeden önce istemlerle ilgili bilgi edinme, API anahtarı oluşturma ve uygulamanızı SDK'yı kullanacak şekilde ayarlama gibi birkaç işlem yapmanız gerekir.

İstemlerle deneme yapma

Google AI Studio'da isteminizi prototipleyerek başlayın.

Google AI Studio, istem tasarımı ve prototip oluşturma için bir IDE'dir. Metin ve resim içeren istemleri test etmek için dosya yüklemenize ve daha sonra tekrar ziyaret etmek üzere istemleri kaydetmenize olanak tanır.

Kullanım alanınız için doğru istemi oluşturmak bilimden çok sanattır. Bu nedenle deneme yapmak çok önemlidir. İstemler hakkında daha fazla bilgiyi resmi Google Yapay Zeka dokümanlarında bulabilirsiniz.

Google AI Studio
Şekil 2. Google AI Studio

Google AI Studio'nun gelişmiş özellikleri hakkında daha fazla bilgi edinmek için Google AI Studio hızlı başlangıç kılavuzuna göz atın.

API anahtarınızı oluşturma

İsteminizle ilgili tüm koşulları karşıladığınızda Gemini API anahtarınızı oluşturmak için API anahtarı al'ı tıklayın. Anahtar, uygulamanızla birlikte paketlenir. Bu, deneme ve prototip oluşturma için uygundur ancak üretimde kullanım için önerilmez.

Ayrıca, API anahtarınızın kaynak kod deposunuza kaydetme işleminin yapılmasını önlemek için Gizli Bilgiler Gradle eklentisini kullanın.

Gradle bağımlılığını ekleme

Google AI istemci SDK'sının bağımlılığını uygulamanıza ekleyin:

Kotlin

dependencies {
  [...]
 implementation("com.google.ai.client.generativeai:generativeai:0.7.0")
}

Java

dependencies {
  [...]
  implementation("com.google.ai.client.generativeai:generativeai:0.7.0")

  // Required to use `ListenableFuture` from Guava Android for one-shot generation
  implementation("com.google.guava:guava:31.0.1-android")

  // Required to use `Publisher` from Reactive Streams for streaming operations
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

GenerativeModel oluşturma

Aşağıdakileri sağlayarak bir GenerativeModel örneği oluşturarak başlayın:

  • Model adı: gemini-1.5-flash, gemini-1.5-pro veya gemini-1.0-pro
  • Google AI Studio ile oluşturulan API anahtarınız.

İsteğe bağlı olarak model parametrelerini tanımlayabilir ve sıcaklık, en yüksek K, en yüksek P ve maksimum çıkış jetonları için değerler sağlayabilirsiniz.

Aşağıdaki konular için güvenlik özelliklerini de tanımlayabilirsiniz:

  • HARASSMENT
  • HATE_SPEECH
  • SEXUALLY_EXPLICIT
  • DANGEROUS_CONTENT

Kotlin

val model = GenerativeModel(
  model = "gemini-1.5-flash-001",
  apiKey = BuildConfig.apikey,
  generationConfig = generationConfig {
    temperature = 0.15f
    topK = 32
    topP = 1f
    maxOutputTokens = 4096
  },
  safetySettings = listOf(
    SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE),
    SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE),
    SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE),
    SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE),
  )
)

Java

GenerationConfig.Builder configBuilder = new GenerationConfig.Builder();
configBuilder.temperature = 0.15f;
configBuilder.topK = 32;
configBuilder.topP = 1f;
configBuilder.maxOutputTokens = 4096;

ArrayList<SafetySetting> safetySettings = new ArrayList();
safetySettings.add(new SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE));
safetySettings.add(new SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE));
safetySettings.add(new SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE));
safetySettings.add(new SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE));

GenerativeModel gm = new GenerativeModel(
    "gemini-1.5-flash-001",
    BuildConfig.apiKey,
    configBuilder.build(),
    safetySettings
);

Uygulamanızda Google AI istemci SDK'sını kullanma

API anahtarınız olduğu ve uygulamanızı SDK'yı kullanacak şekilde ayarladığınız için Gemini API ile etkileşime geçmeye hazırsınız.

Metin oluşturma

Metin yanıtı oluşturmak için isteminizle birlikte generateContent()'ü arayın.

Kotlin

scope.launch {
  val response = model.generateContent("Write a story about a green robot.")
}

Java

// In Java, create a GenerativeModelFutures from the GenerativeModel.
// generateContent() returns a ListenableFuture.
// Learn more:
// https://developer.android.com/develop/background-work/background-tasks/asynchronous/listenablefuture

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Content content = new Content.Builder()
      .addText("Write a story about a green robot.")
      .build();
Executor executor = // ...

ListenableFuture<GenerateContentResponse> response = model.generateContent(content);

Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
      @Override
      public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
      }

      @Override
      public void onFailure(Throwable t) {
        t.printStackTrace();
      }
}, executor);

generateContent()'ün, mevcut Kotlin koduyla iyi entegre olan bir suspend işlevi olduğunu unutmayın.

Resimlerden ve diğer medyalardan metin oluşturma

Metin ve resim ya da diğer medya öğelerini içeren bir istemden de metin oluşturabilirsiniz. generateContent() işlevini çağırırken medyayı satır içi veri olarak iletebilirsiniz (aşağıdaki örnekte gösterildiği gibi).

Kotlin

scope.launch {
  val response = model.generateContent(
    content {
      image(bitmap)
      text("What is the object in this picture?")
    }
  )
}

Java

Content content = new Content.Builder()
     .addImage(bitmap)
     .addText("What is the object in this picture?")
     .build();

Executor executor = // ...

ListenableFuture<GenerateContentResponse> response = model.generateContent(content);

Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
      @Override
      public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
      }

      @Override
      public void onFailure(Throwable t) {
        t.printStackTrace();
      }
}, executor);

Çoklu turlu sohbet

Birden fazla katılımcının yer aldığı sohbetleri de destekleyebilirsiniz. startChat() işleviyle sohbet başlatın. İsterseniz bir mesaj geçmişi de sağlayabilirsiniz. Ardından sohbet mesajı göndermek için sendMessage() işlevini çağırın.

Kotlin

val chat = model.startChat(
    history = listOf(
        content(role = "user") { text("Hello, I have 2 dogs in my house.") },
        content(role = "model") { text("Great to meet you. What would you like to know?") }
    )
)

scope.launch {
   val response = chat.sendMessage("How many paws are in my house?")
}

Java

Content.Builder userContentBuilder = new Content.Builder();
userContentBuilder.setRole("user");
userContentBuilder.addText("Hello, I have 2 dogs in my house.");
Content userContent = userContentBuilder.build();

// (Optional) create message history
Content.Builder modelContentBuilder = new Content.Builder();
modelContentBuilder.setRole("model");
modelContentBuilder.addText("Great to meet you. What would you like to know?");
Content modelContent = userContentBuilder.build();

List<Content> history = Arrays.asList(userContent, modelContent);

// Initialize the chat
ChatFutures chat = model.startChat(history);

Content.Builder userMessageBuilder = new Content.Builder();
userMessageBuilder.setRole("user");
userMessageBuilder.addText("How many paws are in my house?");
Content userMessage = userMessageBuilder.build();

Executor executor = // ...

ListenableFuture<GenerateContentResponse> response = chat.sendMessage(userMessage);

Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Yanıtı akış şeklinde gösterme

Model oluşturma işleminin sonucunun tamamını beklemek yerine kısmi sonuçları işlemek için akış özelliğini kullanarak daha hızlı etkileşimler elde edebilirsiniz. Yanıtları akış şeklinde yayınlamak için generateContentStream() simgesini kullanın.

Kotlin

someScope.launch {
  var outputContent = ""
  
  generativeModel.generateContentStream(inputContent)
    .collect { response ->
      outputContent += response.text
    }
}

Java

// In Java, the method generateContentStream() returns a Publisher
// from the Reactive Streams library.
// https://www.reactive-streams.org/

Publisher<GenerateContentResponse> streamingResponse =
    model.generateContentStream(content);

StringBuilder outputContent = new StringBuilder();

streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
  @Override
  public void onNext(GenerateContentResponse generateContentResponse) {
    String chunk = generateContentResponse.getText();
    outputContent.append(chunk);
  }

    @Override
    public void onComplete() {
        // ...
    }

    @Override
    public void onError(Throwable t) {
        t.printStackTrace();
    }

    @Override
    public void onSubscribe(Subscription s) {
       s.request(Long.MAX_VALUE);  // Request all messages
 }
});

Android Studio

Android Studio, başlangıçta size yardımcı olacak ek araçlar sağlar.

  • Gemini API başlangıç şablonu: Bu başlangıç şablonu, doğrudan Android Studio'dan API anahtarı oluşturmanıza yardımcı olur ve Gemini API'leri kullanmak için gerekli Android bağımlılıkları içeren bir proje oluşturur.
  • Üretken yapay zeka örneği: Bu örnek, Android için Google AI istemci SDK'sını Android Studio'ya aktarmanıza olanak tanır.

Sonraki adımlar