BigQuery 데이터에 대한 Gemini 통계 확인

ABAP용 BigQuery AI 및 ML SDK를 사용하면 BigQuery에 저장된 엔터프라이즈 데이터에 Gemini 쿼리를 적용하고 ABAP 기반 상담사 또는 애플리케이션에서 결과를 가져올 수 있습니다. SDK를 사용하면 Gemini 모델을 사용하여 다음 작업을 할 수 있습니다.

  • BigQuery에서 텍스트 데이터로 통계 생성
  • BigQuery에서 이미지 또는 동영상 데이터로 통계 생성

BigQuery 함수 ML.GENERATE_TEXT를 사용하여 BigQuery 데이터 세트에 저장된 기업 데이터에 Gemini 기반 통계를 실행할 수 있습니다.

Vertex AI 모델의 엔드포인트를 나타내는 BigQuery ML에서 원격 모델을 만들어 Vertex AI의 Gemini 모델에 액세스할 수 있습니다. 사용할 Vertex AI 모델에 대한 원격 모델을 만든 후에는 원격 모델에 대해 BigQuery ML 함수를 실행하여 해당 모델의 기능에 액세스할 수 있습니다.

시작하기 전에

Gemini 모델과 함께 ABAP용 BigQuery AI 및 ML SDK를 사용하기 전에 사용자 또는 관리자가 다음 기본 요건을 완료했는지 확인합니다.

가격 책정

ABAP용 BigQuery AI 및 ML SDK는 무료로 제공됩니다. 하지만 다음과 같이 BigQuery 및 Vertex AI 플랫폼의 요금은 개발자가 부담합니다.

  • BigQuery ML: BigQuery에서 처리하는 데이터에 대한 비용이 발생합니다.
  • Vertex AI: 원격 모델로 표시되는 Vertex AI 서비스 호출 비용이 발생합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용합니다.

BigQuery 가격 책정에 대한 자세한 내용은 BigQuery 가격 책정 페이지를 참고하세요.

Vertex AI 가격 책정에 대한 자세한 내용은 Vertex AI 가격 책정 페이지를 참고하세요.

BigQuery에서 Gemini 쿼리 실행

이 섹션에서는 ABAP용 BigQuery AI 및 ML SDK를 사용하여 BigQuery의 엔터프라이즈 데이터에서 Gemini 기반 통계를 생성하는 방법을 설명합니다.

SDK와 함께 제공되는 ABAP 클래스 /GOOG/CL_BQ_GENERATIVE_MODEL를 사용하면 BigQuery 함수 ML.GENERATE_TEXT를 사용하여 Gemini 쿼리를 실행할 수 있습니다.

Gemini 쿼리 설정

SDK를 사용하여 다음과 같은 방법으로 Gemini 쿼리를 실행할 수 있습니다.

  • BigQuery에서 Gemini를 실행할 쿼리를 저장합니다. /GOOG/CL_BQ_QUERY 클래스를 사용하고 애플리케이션 로직에서 클래스를 인스턴스화할 때 저장된 쿼리 이름을 제공합니다.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_name  = 'SAVED_QUERY_NAME' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    다음을 바꿉니다.

    • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
    • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
    • SAVED_QUERY_NAME: BigQuery에 쿼리가 저장된 쿼리의 이름입니다.
  • 애플리케이션 로직에서 /GOOG/CL_BQ_QUERY 클래스를 인스턴스화할 때 Gemini를 호출하는 쿼리 텍스트를 전달합니다.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_text  = 'QUERY_TEXT' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    다음을 바꿉니다.

    • CLIENT_KEY: 인증 설정 중에 Google Cloud 인증을 위해 구성된 클라이언트 키입니다.
    • QUERY_LOCATION_ID: 쿼리가 저장되는 Google Cloud 위치입니다.
    • QUERY_TEXT: Gemini로 실행할 쿼리 텍스트입니다.

저장된 쿼리 이름 또는 직접 쿼리 텍스트로 /GOOG/CL_BQ_QUERY 클래스를 인스턴스화하면 클래스 내에 쿼리가 설정됩니다. 그런 다음 클래스 참조를 /GOOG/CL_BQ_GENERATIVE_MODEL ABAP 클래스에 입력으로 전달하여 쿼리를 호출할 수 있습니다.

BigQuery Gemini 호출자 클래스 인스턴스화

BigQuery 데이터 세트에서 Gemini 텍스트 및 멀티모달 모델을 호출하려면 /GOOG/CL_BQ_GENERATIVE_MODEL 클래스를 사용하세요.

TRY.
    DATA(lo_bq_generative_model) = NEW /goog/cl_bq_generative_model( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

CLIENT_KEY인증 설정 중에 Google Cloud 에 인증하기 위해 구성한 클라이언트 키로 바꿉니다.

Gemini 쿼리 실행

BigQuery 함수 ML.GENERATE_TEXT로 Gemini 쿼리를 실행하려면 /GOOG/CL_BQ_GENERATIVE_MODEL 클래스의 EXECUTE_QUERY 메서드를 사용하세요. 쿼리로 설정된 /GOOG/CL_BQ_QUERY 클래스의 객체가 메서드에 입력으로 전달됩니다.

lo_bq_generative_model->execute_query( io_query = lo_bq_query ).

LO_BQ_QUERY쿼리를 설정한 후 /GOOG/CL_BQ_QUERY 클래스의 참조입니다.

모델 생성 매개변수 재정의

BigQuery의 저장된 쿼리 또는 전달된 쿼리 텍스트에서 Gemini 모델 생성 매개변수를 정의할 수 있습니다. 하지만 ABAP 애플리케이션 로직에서 동일한 쿼리의 매개변수를 재정의해야 하는 경우 /GOOG/CL_BQ_GENERATIVE_MODEL 클래스의 SET_GENERATION_CONFIG 메서드를 사용할 수 있습니다. 초기 쿼리의 생성 매개변수는 이 메서드를 통해 전달된 매개변수로 재정의됩니다.

DATA lt_stop_sequences TYPE /goog/cl_bigquery_v2=>ty_t_string.
DATA lt_safety_settings TYPE /goog/cl_bq_generative_model=>ty_t_safety_settings.
DATA ls_safety_settings TYPE /goog/cl_bq_generative_model=>ty_safety_setting.

APPEND 'STOP_SEQUENCE' TO lt_stop_sequences.

ls_safety_settings-category = 'CATEGORY'.
ls_safety_settings-threshold = 'THRESHOLD'.

APPEND ls_safety_settings TO lt_safety_settings.

lo_bq_generative_model->set_generation_config( iv_temperature               = 'TEMPERATURE'
                               iv_top_p                     = 'TOP_P'
       iv_top_k                     = 'TOP_K'
       iv_max_output_tokens         = 'MAX_OUTPUT_TOKENS'
       iv_flatten_json_output       = 'IS_FLATTEN_JSON_OUTPUT'
       iv_ground_with_google_search = 'IS_GROUND_WITH_GOOGLE_SEARCH'
it_stop_sequences            = lt_stop_sequences
it_safety_settings           = lt_safety_settings ).

다음을 바꿉니다.

  • STOP_SEQUENCE: 지정한 문자열이 모델의 응답에 포함된 경우 이 문자열을 제거하는 값입니다.
  • CATEGORY: 응답을 필터링할 콘텐츠 안전 카테고리입니다. ML.GENERATE_TEXT입력 문법에서 안전 설정 인수의 가능한 값을 찾습니다.
  • THRESHOLD: 응답을 필터링하는 상응하는 차단 기준입니다. ML.GENERATE_TEXT입력 문법 아래에 있는 안전 설정 인수에서 가능한 값을 찾습니다.
  • TEMPERATURE: 토큰 선택에서 무작위성 수준을 제어하는 값입니다.
  • TOP_P: 모델이 출력용 토큰을 선택하는 방식을 변경하는 값입니다.
  • TOP_K: 모델이 출력용 토큰을 선택하는 방식을 변경하는 값입니다.
  • MAX_OUTPUT_TOKENS: 대답에서 생성될 수 있는 토큰의 최대 개수를 설정하는 값입니다.
  • IS_FLATTEN_JSON_OUTPUT: 함수로 반환된 JSON 콘텐츠가 개별 열로 파싱되는지 여부를 결정하는 불리언 값입니다.
  • IS_GROUND_WITH_GOOGLE_SEARCH: 응답을 생성할 때 Vertex AI 모델이 Google 검색으로 그라운딩을 사용할지 여부를 결정하는 불리언 값입니다.

Gemini 쿼리의 쿼리 결과 가져오기

Gemini 쿼리에 대해 BigQuery ML에서 처리된 응답을 수신하고 의미 있는 방식으로 표시하려면 /GOOG/CL_BQ_MODEL_RESPONSE 클래스를 사용하세요.

/GOOG/CL_BQ_MODEL_RESPONSE 클래스에서 캡처한 응답은 /GOOG/CL_BQ_GENERATIVE_MODEL 클래스의 메서드를 통해 이루어진 요청에 연결되므로 중간 결과를 저장하는 변수가 필요하지 않고 단일 문으로 응답에 직접 액세스할 수 있습니다.

텍스트 응답 가져오기

모델로부터 텍스트 응답을 수신하려면 GET_TEXT_RESPONSE 메서드를 사용합니다.

DATA(lt_bq_response) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                            )->get_text_response( ).

쿼리 작업 상태 가져오기

BigQuery의 각 쿼리는 쿼리 작업으로 실행됩니다. 쿼리 작업의 상태를 가져오려면 GET_QUERY_JOB_STATUS 메서드를 사용합니다.

lo_bq_generative_model->execute_query( io_query = lo_bq_query
                     )->get_query_job_status(
IMPORTING ev_job_complete          = DATA(lv_job_complete)
  ev_job_creation_reason   = DATA(lv_job_creation_reason)
  ev_job_id                = DATA(lv_job_id)
  ev_query_id              = DATA(lv_query_id)
  ev_total_bytes_processed = DATA(lv_total_bytes_processed)
  ev_total_rows            = DATA(lv_total_rows) ).

이 메서드는 다음과 같은 작업 상태 측정항목을 반환합니다.

  • 쿼리가 완료되었는지 여부
  • 작업이 생성된 이유
  • 쿼리를 실행하기 위해 생성된 작업에 대한 참조
  • 쿼리의 자동 생성 ID
  • 이 쿼리에 대해 처리된 총 바이트 수입니다.
  • 전체 쿼리 결과 집합의 총 행 수입니다.

쿼리 작업 오류 가져오기

오류가 있는 경우 가져오려면 GET_QUERY_JOB_ERRORS 메서드를 사용합니다.

DATA(lt_query_job_errors) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                 )->get_query_job_errors( ).

완료 이유 가져오기

모델이 각 행의 토큰 생성을 중지한 이유를 확인하려면 GET_FINISH_REASON 메서드를 사용합니다.

DATA(lt_finish_reason) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                              )->get_finish_reason( ).

사용량 메타데이터 가져오기

각 행에 대해 생성된 응답에 관한 사용 메타데이터를 가져오려면 GET_USAGE_METADATA 메서드를 사용하세요 .

DATA(lt_usage_metadata) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_usage_metadata( ).

사용량 메타데이터는 다음 측정항목으로 구성됩니다.

  • 행의 응답에서 총 토큰 수
  • 입력 프롬프트의 토큰 수
  • 총 토큰 수

안전 등급 확인

응답의 안전 등급을 가져오려면 GET_SAFETY_RATING 메서드를 사용합니다. 응답의 안전 등급을 가져오려면 입력 쿼리에서 안전 등급을 모델 생성 매개변수로 설정해야 합니다.

DATA(lt_safety_ratings) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_safety_rating( ).

전체 응답 표 가져오기

실행한 Gemini 쿼리의 전체 응답 표를 가져오려면 GET_RESPONSE_TABLE 메서드를 사용하세요.

lo_bq_model_response->get_response_table(
IMPORTING et_bqml_response              = DATA(lt_bqml_response)
                  et_bqml_response_flatten_json = DATA(lt_bqml_response_flatten_json)
                  et_bqml_response_grounding    = DATA(lt_bqml_response_grounding) ).

쿼리에 설정된 생성 매개변수를 기반으로 하나의 응답 테이블만 채워집니다.

  • 입력 쿼리에서 매개변수 FLATTEN_JSON_OUTPUTTRUE로 설정되지 않은 경우 ET_BQML_RESPONSE가 채워집니다.
  • ET_BQML_RESPONSE_FLATTEN_JSON는 입력 쿼리에서 매개변수 FLATTEN_JSON_OUTPUTTRUE로 설정되면 채워집니다.
  • ET_BQML_RESPONSE_GROUNDING는 입력 쿼리에서 매개변수 FLATTEN_JSON_OUTPUTTRUE로 설정되고 입력 쿼리에서 매개변수 GROUNDING_WITH_GOOGLE_SEARCHTRUE로 설정된 경우 채워집니다.

접지 소스 가져오기

모델이 응답을 생성하는 데 사용한 그라운딩 소스를 나열하려면 GET_GROUNDING_SOURCE 메서드를 사용합니다.

DATA(lt_query_grounding_sources) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                        )->get_grounding_source( ).