Gemini API'ye ve Gemini model ailesine doğrudan uygulamanızdan erişmek için Android için Firebase'de Vertex AI SDK'sını kullanmanızı öneririz. Bu SDK, tam yığın uygulamalar oluşturmanıza ve çalıştırmanıza yardımcı olan daha büyük Firebase platformunun bir parçasıdır.
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.
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.
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 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 = 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
- GitHub'daki Firebase'de Vertex AI örnek uygulamasını inceleyin.
- Gemini API'yi yetkisiz istemciler tarafından kötüye kullanımdan korumak için Firebase Uygulama Kontrolü'nü ayarlama da dahil olmak üzere üretime hazırlanma hakkında düşünmeye başlayın.
- Firebase'de Vertex AI hakkında daha fazla bilgi edinmek için Firebase belgelerine göz atın.