Firebase'de Vertex AI

Gemini API'ye ve Gemini model ailesine doğrudan uygulamanızdan erişmek için Android için Firebase SDK'sındaki Vertex AI'ı kullanmanızı öneririz. Bu SDK, tam yığın uygulamalar geliştirip çalıştırmanıza yardımcı olan daha büyük Firebase platformunun bir parçasıdır.

Firebase entegrasyon mimarisinde Vertex AI
Şekil 1. Firebase entegrasyon mimarisinde Vertex AI

Google AI istemci SDK'sından geçiş yapma

Firebase SDK'sındaki Vertex AI, Google AI istemci SDK'sına benzer ancak Firebase SDK'sındaki Vertex AI, üretim kullanım alanları için kritik güvenlik seçenekleri ve diğer özellikleri sunar. Örneğin, Firebase'de Vertex AI'ı kullanırken aşağıdakileri de kullanabilirsiniz:

  • Gemini API'yi yetkisiz istemciler tarafından kötüye kullanıma karşı korumak için Firebase Uygulama Kontrolü

  • Uygulamanızın yeni bir sürümünü yayınlamanıza gerek kalmadan bulutta uygulamanızla ilgili değerleri (ör. model adları) dinamik olarak ayarlamak ve değiştirmek için Firebase Remote Config'i kullanın.

  • Gemini API'ye gönderdiğiniz istekte büyük medya dosyaları eklemek için Cloud Storage for Firebase.

Google AI istemci SDK'sını uygulamanıza entegre ettiyseniz Firebase'de Vertex AI'a geçebilirsiniz.

Başlarken

Gemini API ile doğrudan uygulamanızdan etkileşime geçmeden önce, istemlerle ilgili bilgi edinme ve Firebase ile uygulamanızı SDK'yı kullanacak şekilde ayarlama da dahil olmak üzere birkaç işlem yapmanız gerekir.

İstemlerle deneme yapma

Vertex AI Studio'da istemleri deneyebilirsiniz. Vertex 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 Firebase dokümanlarında bulabilirsiniz.

Firebase projesi oluşturma ve uygulamanızı Firebase'e bağlama

Uygulamanızdan Gemini API'yi çağırmaya hazır olduğunuzda Firebase'i ve SDK'yı uygulamanızda ayarlamak için Firebase'de Vertex AI başlangıç kılavuzundaki talimatları uygulayın. Başlangıç kılavuzu, bu kılavuzda yer alan tüm görevleri tamamlamanıza yardımcı olacaktır.

  1. Kullandıkça öde Blaze fiyatlandırma planını kullanma ve gerekli API'leri etkinleştirme dahil olmak üzere yeni veya mevcut bir Firebase projesi oluşturun.

  2. Uygulamanızı kaydettirme ve Firebase yapılandırma dosyanızı (google-services.json) uygulamanıza ekleme dahil olmak üzere uygulamanızı Firebase'e bağlayın.

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

Uygulama modülünüze aşağıdaki Gradle bağımlılığını ekleyin:

Kotlin

dependencies {
  ...
  implementation("com.google.firebase:firebase-vertexai:16.0.2")
}

Java

dependencies {

   [...]

   implementation("com.google.firebase:firebase-vertexai:16.0.2")

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

Vertex AI hizmetini ve üretken modeli başlatma

Bir GenerativeModel örneği oluşturarak ve model adını belirterek başlayın:

Kotlin

val generativeModel = Firebase.vertexAI.generativeModel("gemini-1.5-flash")

Java

GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel("gemini-1.5-flash");

Firebase'de Vertex AI ile kullanılabilen modeller hakkında daha fazla bilgiyi Firebase dokümanlarında bulabilirsiniz. Model parametrelerini yapılandırma hakkında da bilgi edinebilirsiniz.

Uygulamanızdan Gemini API ile etkileşim kurma

Firebase'i ve uygulamanızı SDK'yı kullanacak şekilde ayarladığınıza göre, uygulamanızdan 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

// Note: `generateContent()` is a `suspend` function, which integrates well
// with existing Kotlin code.

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

Java

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

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Content prompt = new Content.Builder()
    .addText("Write a story about a green robot.")
    .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
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);

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). Alternatif olarak, Firebase URL'leri için Cloud Storage'ı kullanarak isteklere büyük medya dosyaları ekleyebilirsiniz.

Kotlin

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

Java

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);

Content prompt = new Content.Builder()
        .addImage(bitmap)
        .addText("What developer tool is this mascot from?")
        .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
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 tur içeren 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 = generativeModel.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

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

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

// Create a new user message
Content.Builder messageBuilder = new Content.Builder();
messageBuilder.setRole("user");
messageBuilder.addText("How many paws are in my house?");

Content message = messageBuilder.build();

Publisher<GenerateContentResponse> streamingResponse =
        chat.sendMessageStream(message);

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

});

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

scope.launch {
  var outputContent = ""

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

Java

// Note that in Java the method `generateContentStream()` returns a
// Publisher from the Reactive Streams library.
// https://www.reactive-streams.org/

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
Content prompt = new Content.Builder()
        .addText("Write a story about a green robot.")
        .build();

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

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

Sonraki adımlar