ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot에서 Google Vertex AI Gemini 연동하기
    📖 개발 공부 2025. 3. 16. 21:46

    최근 프로젝트에서 Gemini 모델을 Spring Boot에 연동하는 작업을 진행했다.

    이 과정에서 Google Cloud Vertex AI에서 제공하는 java-vertexai 라이브러리를 활용했다.

     

    연동을 진행하면서 Gemini API 요청 시 다양한 옵션을 활용하여 원하는 방식으로 LLM을 제어할 수 있다는 점을 알게 되었다.

     

    이 글에서는 Gemini 모델을 연동하는 과정과 함께 주요 설정값들을 정리해보려고 한다.

    Google Cloud Vertex AI란

    Google Cloud Vertex AI는 머신러닝(ML) 모델의 개발, 학습, 배포를 손쉽게 수행할 수 있도록 지원하는 통합 AI 플랫폼이다.

    Vertex AI를 사용하면 다음과 같은 작업을 수행할 수 있다.

    • AutoML 모델 학습 및 배포
    • 사전 학습된 LLM(대형 언어 모델) 활용
    • MLOps 파이프라인 구축
    • 벡터 검색(Matching Engine) 지원

    이번 프로젝트에서는 LLM(Gemini)과의 연동을 다루었다.

    Gemini 연동 과정

    인증 설정

    우선, 스프링부트에서 Google Cloud API를 사용하기 위해 서비스 계정(Service Account) 인증이 필요하다.

     

    환경 변수 설정

    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"
    

     

    application.yml 설정

    vertex:
      ai:
        gemini:
          project-id: ${GEMINI_PROJECT_ID}
          location: ${GEMINI_PROJECT_LOCATION}
    

    LLM 모델을 선택하는 로직

    Vertex AI에서 제공하는 Gemini 모델은 Gemini Pro, Gemini Flash 등 다양한 버전이 존재한다.

    이 모델을 유연하게 선택할 수 있도록 각 모델을 Bean으로 등록한 후, 클라이언트 요청에 따라 적절한 모델을 가져오는 방식으로 구성했다.

    private fun getLLMModel(
        model: LLMBasedTask.LLMModelType,
    ): GenerativeModel {
        return when (model) {
            LLMBasedTask.LLMModelType.GEMINI_1_5_PRO -> geminiModelPro
            LLMBasedTask.LLMModelType.GEMINI_1_5_FLASH -> geminiModelFlash
        }
    }
    

    Gemini API 호출하기

    선택된 LLM 모델을 사용해 Gemini API를 호출하는 방식은 다음과 같다.

    val response = llmModel.generateContentAsync(prompt)
    

     

    추가적으로, 모델의 동작 방식과 필터링, 도구 연동 등의 설정을 적용하여 API를 호출할 수 있다.

    val response = generativeModel
        .withGenerationConfig(TODO())  // LLM 생성 설정
        .withSafetySettings(TODO())  // 안전 필터링 설정
        .withTools(TODO())  // 외부 API 연동
        .withSystemInstruction(TODO())  // 시스템 지침 적용
        .generateContentAsync(prompt)
    
    

     

    각 설정 옵션을 정리해보겠다.

    Gemini API 설정 옵션

    withGenerationConfig(generationConfig)

     

    이 옵션을 활용하면 모델의 창의성, 응답 길이, 샘플링 방식 등을 조정할 수 있다.

    val generationConfig = GenerationConfig.newBuilder()
        .setTemperature(0.7)  // 창의성 조정 (낮을수록 보수적, 높을수록 창의적)
        .setMaxOutputTokens(500)  // 최대 출력 길이
        .setTopP(0.8)  // 확률 분포 기반 샘플링
        .setTopK(40)  // 상위 k개 단어에서 선택
        .build()
    
    • temperature: 모델의 창의성을 조정 (낮을수록 보수적인 답변, 높을수록 창의적인 답변)
    • maxOutputTokens: 응답의 최대 길이 제한
    • topP: 확률 분포 기반 샘플링 (0.8 → 80% 확률로 상위 단어 선택)
    • topK: 가장 가능성 높은 k개 후보 중 하나 선택

    withSafetySettings(safeSettings)

     

    AI가 혐오 발언, 폭력적인 표현, 위험한 정보를 포함한 응답을 생성하지 않도록 차단할 수 있다.

    val safetySettings = listOf(
        SafetySetting.newBuilder()
            .setCategory(HarmCategory.HARM_CATEGORY_HATE_SPEECH) // 혐오 발언 필터링
            .setThreshold(HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE) // 중간 위험도 이상 차단
            .build(),
        SafetySetting.newBuilder()
            .setCategory(HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT) // 위험한 정보 필터링
            .setThreshold(HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE)
            .build(),
        SafetySetting.newBuilder()
            .setCategory(HarmCategory.HARM_CATEGORY_HARASSMENT) // 괴롭힘 필터링
            .setThreshold(HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE)
            .build()
    )
    

    withTools()

    AI가 외부 도구(API, 데이터베이스 등)와 연동하여 결과를 보완할 수 있다.

    val tools = listOf(
        Tool.newBuilder()
            .setName("weather_api")
            .setDescription("현재 날씨를 조회하는 API")
            .build()
    )
    

     

    활용 예시

    • AI가 실시간 날씨 데이터를 제공하도록 설정
    • 특정 데이터베이스를 조회하여 응답을 생성

    withSystemInstruction()

    • AI의 응답 스타일을 사전 정의하여 특정 형식으로 답변하도록 유도할 수 있다.
    val systemInstruction = SystemInstruction.newBuilder()
        .setText("답변을 공식적이고 상세하게 작성하세요.")
        .build()
    

     

    활용 예시

    • JSON 형식으로 응답하도록 설정
    • 기술 문서 스타일로 응답

     

    이번 프로젝트에서는 Spring Boot 애플리케이션에서 Google Cloud Vertex AI의 Gemini 모델을 연동하는 방법을 정리했다.

    요약

    1. Gemini 모델 연동을 위해 java-vertexai 라이브러리를 사용했다.
    2. API 요청 시 원하는 모델(Gemini Pro, Flash)을 동적으로 선택할 수 있도록 구현했다.
    3. 다양한 설정값(생성 방식, 안전 설정, 도구 연동, 응답 스타일)을 활용해 LLM을 제어할 수 있었다.

    이렇게 스프링 부트에 Vertex AI Gemini를 활용하여 LLM 기반 서비스를 구축할 수 있다!

    반응형

    댓글

Designed by Tistory.