Để truy cập trực tiếp vào API Gemini và bộ mô hình Gemini từ ứng dụng, bạn nên sử dụng Vertex AI trong SDK Firebase dành cho Android. SDK này là một phần của nền tảng Firebase lớn hơn, giúp bạn xây dựng và chạy các ứng dụng toàn stack.
Di chuyển từ SDK ứng dụng Google AI
Vertex AI trong SDK Firebase tương tự như SDK ứng dụng Google AI, nhưng Vertex AI trong SDK Firebase cung cấp các tuỳ chọn bảo mật quan trọng và các tính năng khác cho các trường hợp sử dụng chính thức. Ví dụ: khi sử dụng Vertex AI trong Firebase, bạn cũng có thể sử dụng những tính năng sau:
Kiểm tra ứng dụng Firebase để bảo vệ Gemini API khỏi hành vi sử dụng sai cách của các ứng dụng không được uỷ quyền.
Cấu hình từ xa Firebase để tự động đặt và thay đổi các giá trị cho ứng dụng của bạn trên đám mây (ví dụ: tên mô hình) mà không cần phát hành phiên bản mới của ứng dụng.
Cloud Storage cho Firebase để đưa các tệp phương tiện lớn vào yêu cầu của bạn cho API Gemini.
Nếu đã tích hợp SDK ứng dụng AI của Google vào ứng dụng, bạn có thể Di chuyển sang Vertex AI trong Firebase.
Bắt đầu
Trước khi tương tác trực tiếp với API Gemini từ ứng dụng, trước tiên, bạn cần làm một số việc, bao gồm làm quen với lời nhắc cũng như thiết lập Firebase và ứng dụng để sử dụng SDK.
Thử nghiệm với lời nhắc
Bạn có thể thử nghiệm với các câu lệnh trong Vertex AI Studio. Vertex AI Studio là một IDE để thiết kế và tạo nguyên mẫu nhanh. Công cụ này cho phép bạn tải tệp lên để kiểm thử câu lệnh bằng văn bản và hình ảnh, đồng thời lưu câu lệnh để xem lại sau.
Việc tạo câu lệnh phù hợp cho trường hợp sử dụng của bạn là một nghệ thuật hơn là khoa học, điều này khiến việc thử nghiệm trở nên quan trọng. Bạn có thể tìm hiểu thêm về lời nhắc trong tài liệu về Firebase.
Thiết lập dự án Firebase và kết nối ứng dụng với Firebase
Khi bạn đã sẵn sàng gọi API Gemini từ ứng dụng, hãy làm theo hướng dẫn trong Hướng dẫn bắt đầu sử dụng Vertex AI trong Firebase để thiết lập Firebase và SDK trong ứng dụng. Hướng dẫn bắt đầu sẽ giúp bạn thực hiện tất cả các nhiệm vụ sau trong hướng dẫn này.
Thiết lập một dự án Firebase mới hoặc hiện có, bao gồm cả việc sử dụng gói giá linh hoạt Blaze theo mức dùng và bật các API bắt buộc.
Kết nối ứng dụng với Firebase, bao gồm cả việc đăng ký ứng dụng và thêm tệp cấu hình Firebase (
google-services.json
) vào ứng dụng.
Thêm phần phụ thuộc Gradle
Thêm phần phụ thuộc Gradle sau vào mô-đun ứng dụng:
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") }
Khởi chạy dịch vụ Vertex AI và mô hình tạo sinh
Bắt đầu bằng cách tạo bản sao GenerativeModel
và chỉ định tên mô hình:
Kotlin
val generativeModel = Firebase.vertexAI.generativeModel("gemini-1.5-flash")
Java
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel("gemini-1.5-flash");
Trong tài liệu về Firebase, bạn có thể tìm hiểu thêm về các mô hình hiện có để sử dụng với Vertex AI trong Firebase. Bạn cũng có thể tìm hiểu về cách định cấu hình các tham số mô hình.
Tương tác với Gemini API từ ứng dụng
Giờ đây, khi đã thiết lập Firebase và ứng dụng để sử dụng SDK, bạn đã sẵn sàng tương tác với API Gemini từ ứng dụng của mình.
Tạo văn bản
Để tạo câu trả lời dạng văn bản, hãy gọi generateContent()
bằng câu lệnh của bạ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);
Tạo văn bản từ hình ảnh và nội dung nghe nhìn khác
Bạn cũng có thể tạo văn bản từ một câu lệnh bao gồm văn bản cùng với hình ảnh hoặc nội dung nghe nhìn khác. Khi gọi generateContent()
, bạn có thể truyền nội dung nghe nhìn dưới dạng dữ liệu cùng dòng (như trong ví dụ bên dưới). Ngoài ra, bạn có thể thêm các tệp phương tiện lớn vào một yêu cầu bằng cách sử dụng Cloud Storage cho URL Firebase.
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);
Cuộc trò chuyện nhiều lượt
Bạn cũng có thể hỗ trợ các cuộc trò chuyện nhiều lượt. Khởi tạo cuộc trò chuyện bằng hàm startChat()
. Bạn có thể cung cấp nhật ký tin nhắn (không bắt buộc). Sau đó, gọi hàm sendMessage()
để gửi tin nhắn trò chuyệ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); } });
Truyền trực tuyến phản hồi
Bạn có thể đạt được các lượt tương tác nhanh hơn bằng cách không chờ toàn bộ kết quả từ quá trình tạo mô hình, mà thay vào đó, hãy sử dụng tính năng truyền trực tuyến để xử lý một phần kết quả. Sử dụng generateContentStream()
để truyền trực tuyến phản hồi.
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); } });
Các bước tiếp theo
- Xem lại ứng dụng mẫu Vertex AI trong Firebase trên GitHub.
- Hãy bắt đầu suy nghĩ về việc chuẩn bị cho bản phát hành chính thức, bao gồm cả việc thiết lập tính năng Kiểm tra ứng dụng Firebase để bảo vệ Gemini API khỏi hành vi sử dụng sai trái của các ứng dụng không được uỷ quyền.
- Tìm hiểu thêm về Vertex AI trong Firebase trong tài liệu về Firebase.