SDK ứng dụng Google AI

SDK ứng dụng AI của Google cho phép bạn gọi Gemini API và sử dụng nhóm mô hình Gemini ngay trong ứng dụng Android.

Cấp miễn phí cho phép bạn thử nghiệm mà không mất phí. Để biết thông tin chi tiết khác về giá, hãy xem hướng dẫn về giá.

Cấu trúc tích hợp AI của Google
Hình 1. Cấu trúc tích hợp AI của Google.

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ư tạo khoá API và thiết lập ứng dụng để sử dụng SDK.

Thử nghiệm với lời nhắc

Bắt đầu bằng cách tạo nguyên mẫu câu lệnh trong Google AI Studio.

AI Studio của Google là một IDE để thiết kế câu lệnh và tạo nguyên mẫu. 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 mang tính nghệ thuật hơn là khoa học, vì vậy, việc thử nghiệm là rất quan trọng. Bạn có thể tìm hiểu thêm về lời nhắc trong tài liệu chính thức về AI của Google.

Google AI Studio
Hình 2. Google AI Studio

Để tìm hiểu thêm về các tính năng nâng cao của Google AI Studio, hãy xem bài viết Bắt đầu nhanh với Google AI Studio.

Tạo khoá API

Khi đã hài lòng với lời nhắc, hãy nhấp vào Lấy khoá API để tạo khoá Gemini API. Khoá sẽ được đóng gói cùng với ứng dụng của bạn. Điều này là bình thường đối với việc thử nghiệm và tạo bản mô hình, nhưng không nên dùng cho các trường hợp sử dụng công khai.

Ngoài ra, để tránh việc khoá API được chuyển vào kho lưu trữ mã nguồn, hãy sử dụng trình bổ trợ Secrets cho Gradle.

Thêm phần phụ thuộc Gradle

Thêm phần phụ thuộc cho SDK ứng dụng AI của Google vào ứng dụng của bạn:

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

Tạo một GenerativeModel

Bắt đầu bằng cách tạo bản sao GenerativeModel bằng cách cung cấp những thông tin sau:

  • Tên mô hình: gemini-1.5-flash, gemini-1.5-pro hoặc gemini-1.0-pro
  • Khoá API được tạo bằng Google AI Studio.

Bạn có thể tuỳ ý xác định các thông số mô hình và cung cấp giá trị cho nhiệt độ, topK, topPmã thông báo đầu ra tối đa.

Bạn cũng có thể xác định các tính năng an toàn cho các chủ đề sau:

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

Sử dụng SDK ứng dụng Google AI trong ứng dụng của bạn

Giờ đây, khi đã có khoá API và thiết lập ứng dụng để sử dụng SDK, bạn đã sẵn sàng tương tác với Gemini API.

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

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

Xin lưu ý rằng generateContent() là một hàm suspend, tích hợp tốt với mã Kotlin hiện có.

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

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

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

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

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 cung cấp các công cụ bổ sung để giúp bạn bắt đầu.

  • Mẫu khởi động Gemini API: Mẫu khởi động này giúp bạn tạo khoá API ngay trong Android Studio và tạo một dự án bao gồm các phần phụ thuộc Android cần thiết để sử dụng các API Gemini.
  • Mẫu AI tạo sinh: Mẫu này cho phép bạn nhập SDK ứng dụng Google AI cho ứng dụng mẫu Android trong Android Studio.

Các bước tiếp theo