Google AI Client SDK

SDK ของไคลเอ็นต์ AI ของ Google ช่วยให้คุณเรียกใช้ Gemini API และใช้กลุ่มโมเดล Gemini ได้โดยตรงจากแอป Android

ระดับที่ไม่มีค่าใช้จ่ายจะช่วยให้คุณทดสอบได้โดยไม่เสียค่าใช้จ่าย ดูรายละเอียดราคาอื่นๆ ได้ในคู่มือการกำหนดราคา

สถาปัตยกรรมการผสานรวม AI ของ Google
รูปที่ 1 สถาปัตยกรรมการผสานรวม AI ของ Google

เริ่มต้นใช้งาน

ก่อนที่จะโต้ตอบกับ Gemini API จากแอปโดยตรง คุณจะต้องทําสิ่งต่อไปนี้ก่อน ซึ่งรวมถึงทำความคุ้นเคยกับพรอมต์ รวมถึงสร้างคีย์ API และตั้งค่าแอปให้ใช้ SDK

ทดสอบพรอมต์

เริ่มต้นด้วยการสร้างต้นแบบพรอมต์ใน Google AI Studio

Google AI Studio เป็น IDE สําหรับการออกแบบพรอมต์และการสร้างต้นแบบ ซึ่งช่วยให้คุณอัปโหลดไฟล์เพื่อทดสอบพรอมต์ด้วยข้อความและรูปภาพ รวมถึงบันทึกพรอมต์เพื่อกลับมาดูในภายหลังได้

การสร้างพรอมต์ที่เหมาะสมสำหรับ Use Case ของคุณเป็นศิลปะมากกว่าวิทยาศาสตร์ ซึ่งทำให้การทดสอบมีความสําคัญ ดูข้อมูลเพิ่มเติมเกี่ยวกับการแจ้งได้ในเอกสารประกอบอย่างเป็นทางการของ AI ของ Google

Google AI Studio
รูปที่ 2 Google AI Studio

ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถขั้นสูงของ Google AI Studio ได้ที่คู่มือเริ่มใช้งาน Google AI Studio ฉบับย่อ

สร้างคีย์ API

เมื่อพอใจกับพรอมต์แล้ว ให้คลิกรับคีย์ API เพื่อสร้างคีย์ Gemini API คีย์จะรวมอยู่ในแอปพลิเคชัน ซึ่งใช้ได้กับการทดสอบและการสร้างต้นแบบ แต่ไม่แนะนำให้ใช้กับกรณีการใช้งานจริง

นอกจากนี้ หากต้องการป้องกันไม่ให้มีการคอมมิตคีย์ API ไปยังที่เก็บรีจิสทรีซอร์สโค้ด ให้ใช้ปลั๊กอิน gradle สำหรับข้อมูลลับ

เพิ่มการพึ่งพา Gradle

เพิ่มการพึ่งพา SDK ไคลเอ็นต์ Google AI ลงในแอป

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

สร้าง GenerativeModel

เริ่มต้นด้วยการสร้างอินสแตนซ์ GenerativeModel โดยระบุข้อมูลต่อไปนี้

  • ชื่อรุ่น: gemini-1.5-flash, gemini-1.5-pro หรือ gemini-1.0-pro
  • คีย์ API ที่สร้างขึ้นด้วย Google AI Studio

คุณอาจกำหนดพารามิเตอร์โมเดลและระบุค่าสำหรับ temperature, topK, topP และโทเค็นเอาต์พุตสูงสุด

นอกจากนี้ คุณยังกำหนดฟีเจอร์ด้านความปลอดภัยสำหรับหัวข้อต่อไปนี้ได้ด้วย

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

ใช้ SDK ของไคลเอ็นต์ Google AI ในแอป

เมื่อคุณมีคีย์ API และตั้งค่าแอปให้ใช้ SDK แล้ว คุณก็พร้อมที่จะโต้ตอบกับ Gemini API

สร้างข้อความ

หากต้องการสร้างคำตอบที่เป็นข้อความ ให้เรียกใช้ generateContent() พร้อมพรอมต์

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

โปรดทราบว่า generateContent() เป็นฟังก์ชัน suspend ซึ่งผสานรวมกับโค้ด Kotlin ที่มีอยู่ได้ดี

สร้างข้อความจากรูปภาพและสื่ออื่นๆ

นอกจากนี้ คุณยังสร้างข้อความจากพรอมต์ที่มีข้อความและรูปภาพหรือสื่ออื่นๆ ได้ด้วย เมื่อเรียกใช้ generateContent() คุณสามารถส่งสื่อเป็นข้อมูลในบรรทัด (ดังที่แสดงในตัวอย่างด้านล่าง)

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

แชทแบบหลายรอบ

นอกจากนี้ คุณยังรองรับการสนทนาแบบหลายรอบได้ด้วย เริ่มต้นใช้งานแชทด้วยฟังก์ชัน startChat() คุณระบุประวัติข้อความได้ (ไม่บังคับ) จากนั้นเรียกใช้ฟังก์ชัน sendMessage() เพื่อส่งข้อความแชท

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

สตรีมคำตอบ

คุณสามารถโต้ตอบได้เร็วขึ้นโดยไม่ต้องรอผลลัพธ์ทั้งหมดจากการสร้างโมเดล และใช้การสตรีมเพื่อจัดการผลลัพธ์บางส่วนแทน ใช้ generateContentStream() เพื่อสตรีมคำตอบ

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 มีเครื่องมือเพิ่มเติมที่จะช่วยคุณเริ่มต้นใช้งาน

  • เทมเพลตเริ่มต้นของ Gemini API: เทมเพลตเริ่มต้นนี้จะช่วยคุณสร้างคีย์ API จาก Android Studio โดยตรง และสร้างโปรเจ็กต์ที่มีข้อกำหนดเบื้องต้นของ Android ที่จําเป็นในการใช้ Gemini API
  • ตัวอย่าง Generative AI: ตัวอย่างนี้ช่วยให้คุณนําเข้า SDK ไคลเอ็นต์ Google AI สําหรับแอปตัวอย่าง Android ใน Android Studio ได้

ขั้นตอนถัดไป