Vertex AI trong Firebase

Để 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.

Vertex AI trong cấu trúc tích hợp Firebase
Hình 1. Vertex AI trong cấu trúc tích hợp Firebase.

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.

  1. 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.

  2. 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