이 문서에서는 ABAP용 Vertex AI SDK를 사용하여 Anthropic Claude 모델을 호출하여 텍스트 및 멀티모달 입력에 대한 대답을 생성하는 방법을 설명합니다. Claude 모델은 텍스트, 이미지, 문서를 비롯한 여러 입력 모드를 허용합니다. 다음과 같은 사용 사례에 Claude 모델을 사용할 수 있습니다.
- 자유 형식 텍스트 요약
- 미디어 애셋 설명 또는 해석
- 언어 간 번역
생성형 모델을 사용하여 AI 중심 기능을 빌드하는 데는 머신러닝(ML) 전문 지식이 필요하지 않습니다. 대규모 데이터 세트를 수집하거나 모델을 학습시킬 필요가 없습니다. 첫 번째 프로그램을 시작하려면 모델이 수행하기를 원하는 작업을 몇 문장으로 설명하기만 하면 됩니다. ABAP용 Vertex AI SDK는 SAP 환경에서 Claude 모델에 액세스할 수 있는 ABAP 클래스와 메서드를 제공합니다.
시작하기 전에
Claude 모델과 함께 ABAP용 Vertex AI SDK를 사용하기 전에 사용자 또는 관리자가 다음 기본 요건을 완료했는지 확인합니다.
- Google Cloud 프로젝트에서 Vertex AI API를 사용 설정합니다.
- Google Cloud 프로젝트의 Model Garden에서 지원되는 Claude 모델을 사용 설정했습니다.
- SAP 환경에 ABAP용 Vertex AI SDK를 설치했습니다.
- Vertex AI API에 액세스하도록 인증을 설정합니다.
- 모델 생성 매개변수를 구성합니다.
Claude에 요청 보내기
이 섹션에서는 ABAP용 Vertex AI SDK를 사용하여 Vertex AI API를 통해 Claude 모델에 요청을 보내는 방법을 설명합니다.
Claude 멀티모달 호출자 클래스 인스턴스화
텍스트 또는 멀티모달 프롬프트를 사용하여 Claude 텍스트 및 멀티모달 모델을 호출하려면 /GOOG/CL_MODEL_CLAUDE
클래스를 사용하면 됩니다.
모델 생성 매개변수에 구성된 모델 키를 전달하여 클래스를 인스턴스화합니다.
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
MODEL_KEY
를 모델 생성 매개변수에 구성된 모델 키 이름으로 바꿉니다.
프롬프트로 콘텐츠 생성
모델에 텍스트 프롬프트를 제공하여 콘텐츠를 생성하려면 GENERATE_CONTENT
메서드를 사용하면 됩니다.
lo_model->generate_content( 'PROMPT' ).
PROMPT
를 텍스트 프롬프트로 바꿉니다.
모델에 시스템 요청 사항 제공
텍스트 기반 시스템 안내를 모델에 전달하려면 SET_SYSTEM_INSTRUCTIONS
메서드를 사용하면 됩니다.
lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).
SYSTEM_INSTRUCTIONS
를 모델에 대한 시스템 프롬프트로 바꿉니다.
모델에 대한 생성 구성 설정
/GOOG/AI_CONFIG
테이블에서 모델에 대한 생성 구성을 유지합니다.
특정 호출에 대한 생성 구성을 재정의하려면 SET_GENERATION_CONFIG
메서드를 사용하면 됩니다.
생성 속성에 대한 가져오기 매개변수가 설정된 경우 전달된 매개변수 값이 적용됩니다.
lo_model->set_generation_config(
iv_temperature = 'TEMPERATURE'
iv_top_p = 'TOP_P'
iv_top_k = 'TOP_K'
iv_max_output_tokens = 'MAX_OUTPUT_TOKENS' ).
다음을 바꿉니다.
TEMPERATURE
: 무작위성 온도TOP_P
: Top-P 샘플링TOP_K
: Top-K 샘플링MAX_OUTPUT_TOKENS
: 메시지당 최대 출력 토큰 수
이러한 매개변수에 대한 자세한 내용은 모델 생성 매개변수 구성을 참고하세요.
모델에 멀티모달 입력 전달
텍스트, 이미지 또는 문서일 수 있는 멀티모달 입력을 사용하여 Gemini 모델을 호출할 수 있습니다. 이미지 및 PDF의 입력을 원시 데이터로 전달할 수 있습니다. PDF의 경우 PDF에 공개적으로 액세스할 수 있다면 URI를 제공할 수도 있습니다.
다음 표에는 지원되는 MIME 유형이 나열되어 있습니다.
미디어 유형 | 지원되는 MIME 유형 |
---|---|
이미지 |
|
문서 |
|
원시 데이터 설정
모델에 파일의 원시 데이터를 입력으로 제공하려면 해당 MIME 유형과 함께 SET_INLINE_DATA
메서드를 사용할 수 있습니다.
lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'RAW_DATA'
iv_type = 'base64' ).
다음을 바꿉니다.
MIME_TYPE
: 원시 데이터의 IANA 표준 MIME 유형입니다. 기본적으로 MIME 유형은image/jpeg
으로 설정됩니다.RAW_DATA
: 프롬프트에서 인라인에 포함할 이미지 또는 PDF의 Base64 인코딩 원시 데이터입니다.
/GOOG/CL_MODEL_CLAUDE
클래스의 동일한 인스턴스로 모델 입력에서 파일의 원시 데이터를 지우려면 CLEAR_INLINE_DATA
메서드를 사용하면 됩니다.
lo_model->clear_inline_data( ).
텍스트 프롬프트의 토큰 수 계산
프롬프트로 모델을 호출하기 전에 텍스트 프롬프트에 있는 토큰 수를 계산하려면 COUNT_TOKENS
메서드를 사용하면 됩니다.
DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text = 'PROMPT'
iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
)->get_total_tokens( ).
다음을 바꿉니다.
중지 시퀀스 추가
stop_sequence
는 Claude가 응답에서 이러한 문자열을 발견하면 생성을 중지하도록 지시하는 문자열 집합입니다. 기본적으로 Claude에게 '이 시퀀스를 생성하면 즉시 생성을 중지해'라고 말하는 명령입니다.
다음 코드 샘플에는 stop_sequence
이 포함되어 있지 않습니다.
lv_prompt = 'Generate a JSON object representing a person with a name, email, and phone number'.
lv_response = lo_model->generate_content( lv_prompt )->get_text( ).
이 코드 샘플은 다음과 같은 응답을 반환합니다.
{
"name": "Dana A",
"email": "dana@example.com",
"phoneNumber": "800-555-0199"
}
다음 코드 샘플에는 stop_sequence
이 포함되어 있습니다.
DATA: lt_stop_sequences TYPE TABLE OF STRING.
lv_prompt = 'Generate a JSON object representing a person with a name, email, and phone number'.
APPEND '}' to lt_stop_sequences.
lv_response = lo_model->set_stop_sequence( lt_stop_sequences
)->generate_content( lv_prompt
)->get_text( ).
이 코드 샘플은 다음과 같은 응답을 반환합니다.
다음은 이름, 이메일, 전화번호가 있는 사람을 나타내는 JSON 객체입니다.
{
"name": "Dana A",
"email": "dana@example.com",
"phoneNumber": "800-555-0199"
출력에는 }
중지 시퀀스가 포함되지 않습니다. 이를 JSON으로 파싱하려면 닫는 }
를 추가해야 합니다.
Claude 모델이 대답을 제공하면 stop_reason
속성은 모델이 텍스트 생성을 중지한 이유를 나타냅니다.
중지 이유를 가져오려면 다음 코드 샘플을 사용하면 됩니다.
lv_stop_reason = lo_model->set_stop_sequence( lt_stop_sequences
)->generate_content( lv_prompt
)->get_stop_reason( ).
예 추가
퓨샷 프롬프팅은 모델에 작은 예시 세트를 제공하여 출력을 안내하는 효과적인 전략입니다. 대화 기록을 사용하여 Claude에게 이러한 예시를 제공하면 됩니다.
예를 들어 Claude를 사용하여 트윗 감정을 분석하려면 먼저 '이 트윗의 감정을 분석해 줘'라고 요청한 다음 결과 출력을 확인합니다.
lv_prompt = 'The Burger was delicious and my taste buds were on fire, too yummy!'
lv_system_instruction = 'Please do the sentiment analysis of the review'.
lv_response = lo_model->set_system_instructions( lv_system_instructions
)->generate_text( lv_prompt
)->get_text( ).
출력:
# Sentiment Analysis
This tweet expresses a strongly positive sentiment:
- Words like "delicious" and "yummy" directly convey enjoyment
- The phrase "taste buds were on fire" is used positively to indicate intense flavor enjoyment
- The exclamation mark adds enthusiasm
- "too yummy" emphasizes the exceptional quality
Overall, this is a very positive tweet expressing high satisfaction with the burger.
포괄적인 대답도 유용하지만 수많은 트윗의 자동 감정 분석에는 Claude의 더 간결한 출력이 더 적합합니다. Claude의 대답을 POSITIVE, NEUTRAL, NEGATIVE와 같은 단어 또는 1, 0, -1과 같은 숫자 값으로 표준화할 수 있습니다.
lv_prompt = 'The Burger was delicious and my taste buds were on fire, too yummy!'.
lv_response = lo_model->add_examples( iv_input = |Unpopular opinion: Pickles are disgusting. Don't hate me|
iv_output = |NEGATIVE|
)->add_examples( iv_input = |I think my love for burgers might be getting out of hand. I just bought a burger sticker for my crocs|
iv_output = |POSITIVE|
)->add_examples( iv_input = |Seriously why would anyone ever eat a brugers? Those things are unhealthy!|
iv_output = |NEGATIVE|
)->generate_content( lv_prompt
)->get_text( ).
출력:
POSITIVE
어시스턴트 텍스트 설정
매우 구체적인 출력을 얻기 위한 또 다른 일반적인 전략은 '클로드의 입에 단어를 넣어주는 것'입니다. 클로드에게 user
메시지만 제공하는 대신 클로드가 출력을 생성할 때 사용하는 assistant
메시지를 제공할 수도 있습니다.
assistant
메시지를 제공하면 Claude는 마지막 assistant
토큰부터 대화를 계속합니다. user
메시지로 시작해야 합니다.
lv_prompt = 'The fourth nearest planet to sun is: A) Mercury B) Venus C) Mars D ) Andromeda'.
lv_assistant_text = 'The answer is:'.
lv_response = lo_model->set_assistant_text( lv_instruction
)->generate_content( lv_prompt
)->get_text( ).
이 코드 스니펫은 C) Mars
출력을 보여줍니다.
Anthropic 버전 설정
anthropic_version
매개변수를 설정할 수 있습니다.
기본적으로 이 매개변수의 설정값은 vertex-2023-10-16
입니다. 지원되는 다른 Anthropic 버전에 액세스하려면 값만 변경하면 됩니다.
Anthropic 버전을 변경해야 하는 경우 SET_ANTHROPIC_VERSION
메서드를 사용하면 됩니다.
lo_model->set_anthropic_version( 'ANTHROPIC_VERSION' ).
ANTHROPIC_VERSION
을 사용할 Anthropic 버전으로 바꿉니다.
자세한 내용은 Anthropic 문서를 참고하세요.
Claude에서 응답 수신
모델에서 처리된 응답을 수신하고 ABAP 개발자에게 의미 있는 방식으로 표시하기 위해 SDK는 /GOOG/CL_RESPONSE_CLAUDE
클래스를 제공합니다.
/GOOG/CL_RESPONSE_CLAUDE
클래스에서 캡처한 응답은 /GOOG/CL_MODEL_CLAUDE
클래스의 메서드를 통해 이루어진 요청에 연결되므로 중간 결과를 저장하는 변수가 필요하지 않고 단일 문으로 응답에 직접 액세스할 수 있습니다.
텍스트 응답 가져오기
모델로부터 텍스트 응답을 수신하려면 GET_TEXT
메서드를 사용하면 됩니다.
DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
)->get_text( ).
PROMPT
를 텍스트 프롬프트로 바꿉니다.
요청 프롬프트의 토큰 수 가져오기
모델에 대한 입력 프롬프트의 토큰 수를 수신하려면 GET_PROMPT_TOKEN_COUNT
메서드를 사용하면 됩니다.
DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
)->get_prompt_token_count( ).
PROMPT
를 텍스트 프롬프트로 바꿉니다.
모델의 대답에 포함된 토큰 수 가져오기
모델로부터 응답에 포함된 토큰 수를 수신하려면 GET_CANDIDATES_TOKEN_COUNT
메서드를 사용하면 됩니다.
DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
)->get_candidates_token_count( ).
PROMPT
를 텍스트 프롬프트로 바꿉니다.
총 토큰 수 가져오기 (요청 및 응답)
요청과 응답을 모두 포함하는 집계 토큰 수를 확인하려면 GET_TOTAL_TOKEN_COUNT
메서드를 사용하면 됩니다.
DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
)->get_total_token_count( ).
PROMPT
를 텍스트 프롬프트로 바꿉니다.
중지 이유 가져오기
모델에서 응답 생성을 차단한 이유를 수신하려면 GET_STOP_REASON
메서드를 사용하면 됩니다.
DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
)->get_stop_reason( ).
Replace PROMPT with your text prompt.
PROMPT
를 텍스트 프롬프트로 바꿉니다.
코드 샘플
다음 코드 샘플은 다양한 유형의 입력에 대한 응답을 생성하기 위해 Claude 모델을 호출하는 방법을 보여줍니다.
텍스트 기반 생성
다음 코드 샘플은 시스템 지침과 함께 텍스트 프롬프트에서 응답을 생성하는 방법을 보여줍니다. 시스템 안내는 선택사항이며 프롬프트와 함께 전달하여 모델이 특정 방식으로 동작하도록 지시할 수 있습니다.
코드 샘플
DATA:
lv_instruction TYPE string,
lv_prompt TYPE string.
lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
)->generate_content( lv_prompt
)->get_text( ).
IF lv_response IS NOT INITIAL.
cl_demo_output=>display( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
다음을 바꿉니다.
MODEL_KEY
: 모델 생성 매개변수에 구성된 모델 키 이름입니다.PROMPT
: 텍스트 프롬프트입니다.SYSTEM_INSTRUCTIONS
: 모델에 대한 시스템 안내입니다.
멀티모달 생성
다음 코드 샘플은 텍스트와 이미지 같은 멀티모달 입력에서 응답을 생성하는 방법을 보여줍니다. 입력을 base64 인코딩된 문자열로 제공합니다. 시스템 안내는 선택사항이며 프롬프트와 함께 전달하여 모델이 특정 방식으로 동작하도록 지시할 수 있습니다.
코드 샘플
DATA:
lv_instruction TYPE string,
lv_prompt TYPE string.
lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
)->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'INLINE_DATA'
)->generate_content( lv_prompt
)->get_text( ).
IF lv_response IS NOT INITIAL.
cl_demo_output=>display( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
다음을 바꿉니다.
MODEL_KEY
: 모델 생성 매개변수에 구성된 모델 키 이름입니다.PROMPT
: 텍스트 프롬프트입니다.SYSTEM_INSTRUCTIONS
: 모델에 대한 시스템 안내입니다.MIME_TYPE
: 파일 데이터의 IANA 표준 MIME 유형입니다. 기본적으로 MIME 유형은application/pdf
으로 설정됩니다.INLINE_DATA
: 프롬프트에서 인라인에 포함할 이미지 또는 PDF의 Base64 인코딩 원시 데이터입니다.
프롬프트의 토큰 수 및 청구 가능한 문자 수 확인
프롬프트로 모델을 호출하기 전에 프롬프트의 토큰 수를 확인하는 것이 좋습니다.
이를 통해 프롬프트와 사용에 대해 충분한 정보를 바탕으로 결정을 내릴 수 있습니다. count-tokens 엔드포인트는 무료입니다. 다음 코드 샘플은 실제로 API를 호출하기 전에 이러한 숫자를 찾는 방법을 보여줍니다.
코드 샘플
DATA:
lv_prompt TYPE string.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
)->get_total_tokens( ).
IF lv_total_tokens IS NOT INITIAL.
cl_demo_output=>display( 'Total Tokens -' && lv_total_tokens ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
다음을 바꿉니다.
PROMPT
: 텍스트 프롬프트입니다.MODEL_KEY
: 모델 생성 매개변수에 구성된 모델 키 이름입니다.
다음 단계
- ABAP SDK for Google Cloud의 온프레미스 또는 모든 클라우드 버전으로 애플리케이션 개발을 알아보세요.
- Cloud 포럼의 커뮤니티에서 ABAP용 Vertex AI SDK에 대해 질문하고 논의하세요.