Google AI 클라이언트 SDK

Google AI 클라이언트 SDK를 사용하면 Android 앱에서 직접 Gemini API를 호출하고 Gemini 모델 제품군을 사용할 수 있습니다.

무료 등급을 사용하면 무료로 실험할 수 있습니다. 다른 가격 책정 세부정보는 가격 책정 가이드를 참고하세요.

Google AI 통합 아키텍처
그림 1. Google AI 통합 아키텍처

시작하기

앱에서 Gemini API와 직접 상호작용하기 전에 메시지 표시를 숙지하고 API 키를 생성하고 SDK를 사용하도록 앱을 설정하는 등 몇 가지 작업을 먼저 해야 합니다.

프롬프트 실험

먼저 Google AI Studio에서 프롬프트의 프로토타입을 만듭니다.

Google AI 스튜디오는 프롬프트 설계 및 프로토타입 제작을 위한 IDE입니다. 파일을 업로드하여 텍스트와 이미지로 프롬프트를 테스트하고 나중에 다시 살펴볼 수 있도록 프롬프트를 저장할 수 있습니다.

사용 사례에 적합한 프롬프트를 만드는 것은 과학보다는 기술에 가깝기 때문에 실험이 중요합니다. 프롬프트에 관한 자세한 내용은 공식 Google AI 문서를 참고하세요.

Google AI Studio
그림 2. Google AI Studio

Google AI 스튜디오의 고급 기능에 관한 자세한 내용은 Google AI 스튜디오 빠른 시작을 참고하세요.

API 키 생성하기

메시지가 마음에 들면 API 키 가져오기를 클릭하여 Gemini API 키를 생성합니다. 키는 애플리케이션과 번들로 제공되며 이는 실험 및 프로토타입 제작에는 적합하지만 프로덕션 사용 사례에는 권장되지 않습니다.

또한 API 키가 소스 코드 저장소에 커밋되지 않도록 하려면 Secrets Gradle 플러그인을 사용하세요.

Gradle 종속 항목 추가

앱에 Google AI 클라이언트 SDK의 종속 항목을 추가합니다.

Kotlin

dependencies {
  [...]
 implementation("com.google.ai.client.generativeai:generativeai:0.7.0")
}

자바

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
  • Google AI Studio에서 생성된 API 키

원하는 경우 모델 매개변수를 정의하고 온도, 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),
  )
)

자바

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

앱에서 Google AI 클라이언트 SDK 사용

이제 API 키를 가져오고 SDK를 사용하도록 앱을 설정했으므로 Gemini API와 상호작용할 수 있습니다.

텍스트 생성

텍스트 응답을 생성하려면 프롬프트와 함께 generateContent()를 호출합니다.

Kotlin

scope.launch {
  val response = model.generateContent("Write a story about a green robot.")
}

자바

// 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()는 기존 Kotlin 코드와 잘 통합되는 suspend 함수입니다.

이미지 및 기타 미디어에서 텍스트 생성

텍스트와 이미지 또는 기타 미디어가 포함된 프롬프트에서 텍스트를 생성할 수도 있습니다. generateContent()를 호출할 때 미디어를 인라인 데이터로 전달할 수 있습니다(아래 예 참고).

Kotlin

scope.launch {
  val response = model.generateContent(
    content {
      image(bitmap)
      text("What is the object in this picture?")
    }
  )
}

자바

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

자바

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

자바

// 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 스튜디오

Android 스튜디오에서는 시작하는 데 도움이 되는 추가 도구를 제공합니다.

  • Gemini API 시작 템플릿: 이 시작 템플릿을 사용하면 Android 스튜디오에서 직접 API 키를 만들고 Gemini API를 사용하는 데 필요한 Android 종속 항목이 포함된 프로젝트를 생성할 수 있습니다.
  • 생성형 AI 샘플: 이 샘플을 사용하면 Android 스튜디오에서 Android용 Google AI 클라이언트 SDK 샘플 앱을 가져올 수 있습니다.

다음 단계

  • GitHub에서 Android용 Google AI 클라이언트 SDK 샘플 앱을 검토합니다.