프롬프트 최적화

이 문서에서는 일련의 프롬프트에 대한 시스템 명령어를 개선하여 프롬프트 성능을 자동으로 최적화하는 Vertex AI 프롬프트 옵티마이저 사용 방법을 설명합니다.

Vertex AI 프롬프트 옵티마이저를 사용하면 시스템 명령어나 개별 프롬프트를 수동으로 다시 작성하지 않고도 대규모로 프롬프트를 빠르게 개선할 수 있습니다. 이는 단일 모델용으로 작성된 시스템 명령어 및 프롬프트를 다른 모델에서 사용하려는 경우에 특히 유용합니다.

Vertex AI 프롬프트 옵티마이저는 지정된 평가 측정항목을 기준으로 샘플 프롬프트에 대한 모델의 응답을 평가하여 프롬프트를 개선하는 데 도움이 됩니다. Vertex AI 프롬프트 옵티마이저를 사용하려면 다음이 필요합니다.

  • 샘플 프롬프트 세트
  • 모든 샘플 프롬프트에서 사용되는 시스템 명령어
  • 샘플 프롬프트를 참조하는 프롬프트 템플릿

프롬프트 최적화 예시

예를 들어 요리에 대한 질문에 답하기 위해 문맥 정보를 참조하는 일련의 프롬프트에 대한 시스템 명령어를 최적화하려면 Vertex AI 프롬프트 옵티마이저를 사용할 수 있습니다. 이 작업을 완료하려면 다음과 유사한 입력을 준비합니다.

시스템 안내

You are a professional chef. Your goal is teaching how to cook healthy cooking recipes to your apprentice.

Given a question from your apprentice and some context, provide the correct answer to the question.
Use the context to return a single and correct answer with some explanation.

프롬프트 템플릿

Question: {input_question}
Facts: {input_context}

샘플 프롬프트

input_question input_context
건강에 해로운 화합물의 형성을 최소화하면서 풍미와 부드러움을 극대화하는 붉은 고기와 돼지고기 요리 기술에는 어떤 것이 있습니까? 붉은 살코기와 돼지고기는 안전을 위해 내부 온도를 화씨 145도(섭씨 63도)까지 익혀야 합니다. 레몬 주스나 식초와 같은 산성 재료에 고기를 재워두면 질긴 근육 섬유가 분해되어 부드러워집니다. 굽기와 팬에 굽기와 같은 고열 조리법은 맛있는 갈변과 캐러멜화를 생성할 수 있지만 유해한 화합물을 생성할 수 있는 탄화를 피하는 것이 중요합니다.
첨가당이나 인공 성분을 사용하지 않고도 단백질 쉐이크에 맛과 영양을 더하는 창의적인 방법에는 어떤 것이 있을까요? 시금치나 케일과 같은 잎이 많은 채소를 넣으면 맛을 크게 바꾸지 않고도 쉐이크의 영양가를 높일 수 있는 좋은 방법입니다. 일반 우유 대신 무가당 아몬드 밀크나 코코넛 워터를 사용하면 각각 은은한 단맛과 건강한 지방 또는 전해질을 보충할 수 있습니다. 쉐이크를 과도하게 블렌딩하면 실제로 뜨거워질 수 있다는 사실을 알고 계셨나요? 시원하고 상큼한 맛을 유지하려면 블렌딩 시간을 짧게 하고 필요하면 블렌더를 잠시 쉬게 하세요.

최적화의 작동 방식

입력을 준비한 후 최적화 모드, 평가 측정항목, 타겟 모델을 선택합니다.

  • 최적화 모드: Vertex AI 프롬프트 옵티마이저가 시스템 명령어를 최적화할지, 시스템 명령어에 추가할 샘플 프롬프트를 몇 개의 샷 예시로 선택할지, 아니면 둘 다 선택할지 지정합니다.
  • 평가 측정항목: Vertex AI 프롬프트 옵티마이저가 시스템 명령어를 최적화하거나 샘플 프롬프트를 선택하는 데 사용하는 측정항목입니다.
  • 타겟 모델: Vertex AI 프롬프트 옵티마이저가 시스템 명령어를 최적화하거나 사용할 샘플 프롬프트를 선택하는 Google 모델입니다.

Vertex AI 프롬프트 옵티마이저를 실행하면 샘플 프롬프트를 반복적으로 평가하고 시스템 명령어를 다시 작성하여 타겟 모델에 가장 적합한 평가 점수를 생성하는 버전을 찾는 커스텀 학습 작업을 실행하여 선택 항목에 따라 시스템 명령어를 최적화합니다.

작업이 끝나면 Vertex AI 프롬프트 옵티마이저는 평가 점수와 함께 최적화된 시스템 명령어를 출력합니다.

최적화된 시스템 명령어

As a highly skilled chef with a passion for healthy cooking, you love sharing your knowledge with
aspiring chefs. Today, a culinary intern approaches you with a question about healthy cooking. Given
the intern's question and some facts, provide a clear, concise, and informative answer that will help
the intern excel in their culinary journey.

지원되는 모델

다음 모델과 함께 사용할 수 있도록 시스템 명령어를 최적화할 수 있습니다.

지원되는 평가 측정항목

Vertex AI 프롬프트 옵티마이저는 커스텀 평가 측정항목을 지원하며 다음 평가 측정항목도 추가로 지원합니다.

측정항목 유형 사용 사례 측정항목 설명
모델 기반 요약 summarization_quality 참조할 텍스트 본문이 주어지면 질문에 답할 수 있는 모델의 능력을 설명합니다.
질의 응답 question_answering_correctness* 질문에 올바르게 답변하는 모델의 능력을 설명합니다.
question_answering_quality 참조할 텍스트 본문이 주어지면 질문에 답할 수 있는 모델의 능력을 설명합니다.
일관성 coherence 일관된 응답을 제공하는 모델의 기능을 설명하고 생성된 텍스트가 얼마나 논리적으로 작성되고 상식적인지 측정합니다.
안전 safety 모델의 안전 수준, 즉 응답에 안전하지 않은 텍스트가 포함되어 있는지 여부를 나타냅니다.
유창성 fluency 모델의 언어 숙련도를 설명합니다.
그라운딩 groundedness 입력 텍스트에만 포함된 정보를 제공하거나 참조하는 모델의 기능을 설명합니다.
컴퓨팅 기반 도구 사용 및 함수 호출 tool_call_valid* 유효한 도구 호출을 예측하는 모델의 기능을 설명합니다.
tool_name_match* 올바른 도구 이름으로 도구 호출을 예측하는 모델의 기능을 설명합니다. 첫 번째 도구 호출만 검사됩니다.
tool_parameter_key_match* 올바른 파라미터 이름으로 도구 호출을 예측하는 모델의 기능을 나타냅니다.
tool_parameter_kv_match* 올바른 파라미터 이름과 키 값으로 도구 호출을 예측하는 모델의 기능을 설명합니다.
일반 텍스트 생성 bleu* 한 자연어에서 다른 자연어로 번역된 예측 품질을 평가하는 알고리즘의 결과를 보유합니다. 예측의 품질은 예측 파라미터와 참조 파라미터 간의 일치를 기준으로 평가됩니다.
exact_match* 예측 파라미터가 참조 파라미터와 정확하게 일치하는지 계산합니다.
rouge_1* 제공된 예측 파라미터를 참조 파라미터와 비교하는 데 사용됩니다.
rouge_2*
rouge_l*
rouge_l_sum*

* question_answering_correctness 또는 계산 기반 평가를 사용하여 프롬프트를 최적화하려면 다음 중 하나를 실행해야 합니다.

  • 프롬프트에 대한 정답을 표시하는 변수를 프롬프트 템플릿에 추가합니다.
  • 프롬프트에 대한 정답이 없지만 이전에 Google 모델과 함께 프롬프트를 사용하여 타겟팅된 결과를 얻은 경우 정답을 추가하는 대신 구성source_model 파라미터를 추가할 수 있습니다. source_model 파라미터가 설정되면 Vertex AI는 소스 모델에서 샘플 프롬프트를 실행하여 정답을 생성합니다.

시작하기 전에

프롬프트 최적화

Vertex AI 프롬프트 옵티마이저 노트북을 실행하거나 Vertex AI API를 사용하여 프롬프트를 최적화할 수 있습니다. 프롬프트를 최적화하려면 Vertex AI 프롬프트 옵티마이저를 실행하는 데 사용할 방법을 선택한 다음 섹션에 자세히 설명된 단계를 완료합니다.

  1. 프롬프트 템플릿 및 시스템 명령어 만들기
  2. 샘플 프롬프트 준비하기
  3. 평가 측정항목 선택
  4. 구성 만들기
  5. 프롬프트 최적화 작업 실행
  6. 결과 분석 및 반복

프롬프트 템플릿 및 시스템 명령어 만들기

프롬프트 템플릿은 교체 가능한 변수를 통해 모든 프롬프트의 형식을 정의합니다. 프롬프트 템플릿을 사용하여 프롬프트를 최적화하는 경우 변수는 프롬프트 데이터 세트의 데이터로 대체됩니다.

프롬프트 템플릿 변수는 다음 요구사항을 충족해야 합니다.

  • 변수는 중괄호로 묶어야 합니다.
  • 변수 이름에는 공백을 포함할 수 없습니다.
  • 멀티모달 입력을 나타내는 변수에는 변수 뒤에 MIME_TYPE 문자열이 포함되어야 합니다.

    @@@MIME_TYPE
    

    타겟 모델에서 지원하는 이미지, 동영상, 오디오 또는 문서 MIME 유형으로 MIME_TYPE을 바꿉니다.

다음 방법 중 하나를 사용하여 프롬프트 템플릿과 시스템 명령어를 만듭니다.

노트북

노트북을 통해 Vertex AI 프롬프트 옵티마이저를 실행하려면 다음을 실행하여 시스템 명령어와 프롬프트 템플릿을 만듭니다.

  1. Colab Enterprise에서 Vertex AI 프롬프트 옵티마이저 노트북을 엽니다.

    Vertex AI 프롬프트 옵티마이저 노트북으로 이동

  2. 프롬프트 템플릿 및 시스템 명령어 만들기 섹션에서 다음을 수행합니다.

    1. SYSTEM_INSTRUCTION 필드에 시스템 명령어를 입력합니다. 예를 들면 다음과 같습니다.

      Based on the following images and articles respond to the questions.'\n' Be concise,
      and answer \"I don't know\" if the response cannot be found in the provided articles or images.
      
    2. PROMPT_TEMPLATE 필드에 프롬프트 템플릿을 입력합니다. 예를 들면 다음과 같습니다.

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}
      
    3. question_answering_correctness 또는 계산 기반 평가를 사용하여 프롬프트를 최적화하려면 다음 중 하나를 실행해야 합니다.

    • 프롬프트 템플릿에 {target} 변수를 추가하여 프롬프트의 정답을 표시합니다. 예를 들면 다음과 같습니다.

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}\n\n Answer: {target}
      
    • 프롬프트에 대한 정답이 없지만 이전에 Google 모델과 함께 프롬프트를 사용하고 타겟팅된 결과를 얻은 경우 정답을 추가하는 대신 구성source_model 파라미터를 추가할 수 있습니다. source_model 파라미터가 설정되면 Vertex AI 프롬프트 옵티마이저가 소스 모델에서 샘플 프롬프트를 실행하여 정답을 생성합니다.

SDK

노트북을 사용하지 않고 SDK를 통해 Vertex AI 프롬프트 옵티마이저를 실행하려면 다음을 실행하여 프롬프트 템플릿 및 시스템 명령어에 대한 텍스트 파일을 만듭니다.

  1. 시스템 명령어를 위한 텍스트 파일을 만듭니다.

  2. 텍스트 파일에서 시스템 명령어를 텍스트 파일에 정의합니다. 예를 들면 다음과 같습니다.

    Based on the following images and articles respond to the questions.'\n' Be concise, and answer \"I don't know\" if the response cannot be found in the provided articles or images.
    
  3. 프롬프트 템플릿용 텍스트 파일을 만듭니다.

  4. 텍스트 파일에서 하나 이상의 변수를 포함하는 프롬프트 템플릿을 정의합니다. 예를 들면 다음과 같습니다.

    Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}
    
  5. question_answering_correctness 또는 계산 기반 평가를 사용하여 프롬프트를 최적화하려면 다음 중 하나를 실행해야 합니다.

    • 프롬프트 템플릿에 {target} 변수를 추가하여 프롬프트의 정답을 표시합니다. 예를 들면 다음과 같습니다.

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}\n\n Answer: {target}
      
    • 프롬프트에 대한 정답이 없지만 이전에 Google 모델과 함께 프롬프트를 사용하고 타겟팅된 결과를 얻은 경우 정답을 추가하는 대신 구성source_model 파라미터를 추가할 수 있습니다. source_model 파라미터가 설정되면 Vertex AI 프롬프트 옵티마이저가 소스 모델에서 샘플 프롬프트를 실행하여 정답을 생성합니다.

샘플 프롬프트 준비하기

Vertex AI 프롬프트 옵티마이저에서 최상의 결과를 얻으려면 50~100개의 샘플 프롬프트를 사용합니다.

  • 이 도구는 5개의 샘플 프롬프트만으로도 여전히 효과적입니다.
  • 가장 좋은 샘플은 타겟 모델의 성능이 저조한 예시를 포함합니다.

샘플 프롬프트에는 프롬프트 템플릿의 변수를 대체하는 데이터가 포함되어 있습니다. JSONL 또는 CSV 파일을 사용하여 샘플 프롬프트를 저장할 수 있습니다.

JSONL 파일

  1. JSONL 파일을 만듭니다.
  2. JSONL 파일에서 각 변수를 대체하는 프롬프트 데이터를 추가합니다. 예를 들면 다음과 같습니다.

    {"article_1": "The marine life …", "image_1": "gs://path_to_image", "Question": "What are some most effective ways to reduce ocean pollution?", "target": "The articles and images don't answer this question."}
    
    {"article_1": "During the year …", "image_1": "gs://path_to_image", "Question": "Who was the president in 2023?", "target": "Joe Biden"}
    
  3. Cloud Storage 버킷에 JSONL 파일을 업로드합니다.

CSV 파일

  1. CSV 파일 만들기
  2. 첫 번째 행에 프롬프트 템플릿의 변수를 추가합니다.
  3. 다음 행에 각 변수를 대체하는 샘플 데이터를 추가합니다.
  4. Cloud Storage 버킷에 파일을 업로드합니다.

평가 측정항목 선택

Vertex AI 프롬프트 옵티마이저는 평가 측정항목을 사용하여 시스템 명령어를 최적화하고 샘플 프롬프트를 선택합니다.

지원되는 평가 측정항목 중에서 하나를 선택하거나 자체 커스텀 평가 측정항목을 정의합니다. 커스텀 측정항목은 표준 측정항목이 애플리케이션에 적합하지 않은 경우에 유용합니다. 여러 측정항목을 사용하여 프롬프트를 최적화할 수 있습니다. 하지만 Vertex AI 프롬프트 옵티마이저는 한 번에 하나의 커스텀 측정항목만 지원합니다. 예를 들어 커스텀 측정항목 및 bleu 측정항목을 사용하거나 bleu, rouge, summarization_quality 측정항목을 사용하여 Vertex AI 프롬프트 옵티마이저를 실행할 수 있지만, 한 번에 여러 커스텀 측정항목을 사용하여 Vertex AI 프롬프트 옵티마이저를 실행할 수는 없습니다.

다음 단계에 따라 커스텀 측정항목을 만듭니다.

  1. requirements.txt라는 텍스트 파일을 만듭니다.

  2. requirements.txt 파일에서 커스텀 평가 측정항목 함수에 필요한 라이브러리를 정의합니다. 모든 함수에는 functions-framework 패키지가 필요합니다.

    예를 들어 ROUGE-L을 계산하는 커스텀 측정항목의 requirements.txt 파일은 다음과 유사하게 보입니다.

    functions-framework==3.*
    rouge-score
    
  3. main.py라는 Python 파일을 만듭니다.

  4. main.py 파일에서 커스텀 평가 함수를 작성합니다. 함수는 다음을 허용해야 합니다.

    • HTTP POST 요청
    • LLM의 출력인 response와 프롬프트에 대한 정답인 target이 포함된 JSON 입력입니다.

    예를 들어 ROUGE-L을 계산하는 커스텀 측정항목의 main.py 파일은 다음과 유사하게 보입니다.

    from typing import Any
    import json
    import functions_framework
    from rouge_score import rouge_scorer
    
    # Register an HTTP function with the Functions Framework
    @functions_framework.http
    def main(request):
       request_json = request.get_json(silent=True)
       if not request_json:
           raise ValueError('Can not find request json.')
    
       """Extract 'response' and 'target' from the request payload. 'response'
       represents the model's response, while 'target' represents the ground
       truth response."""
       response = request_json['response']
       reference = request_json['target']
    
       # Compute ROUGE-L F-measure
       scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=True)
       scores = scorer.score(reference, response)
       final_score = scores['rougeL'].fmeasure
    
       # Return the custom score in the response
       return json.dumps({
           # The following key is the CUSTOM_METRIC_NAME that you pass to the job
           'custom_accuracy': final_score,
           # The following key is optional
           'explanation': 'ROUGE_L F-measure between reference and response',
       })
    
  5. gcloud functions deloy 명령어를 실행하여 커스텀 평가 함수를 Cloud Run 함수로 배포합니다.

    gcloud functions deploy FUNCTION_NAME \
       --project PROJECT_ID \
       --gen2 \
       --memory=2Gb \
       --concurrency=6 \
       --min-instances 6 \
       --region=REGION \
       --runtime="python310" \
       --source="." \
       --entry-point main \
       --trigger-http \
       --timeout=3600 \
       --quiet
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 커스텀 평가 측정항목의 이름입니다.
    • PROJECT_ID: 프로젝트 ID입니다.
    • REGION: 함수를 배포하려는 리전입니다.

구성 만들기

Vertex AI 프롬프트 옵티마이저 구성은 다음을 비롯하여 프롬프트 최적화 작업에 설정할 파라미터를 지정합니다.

  • 최적화 모드: Vertex AI 프롬프트 옵티마이저가 시스템 명령어를 최적화할지, 시스템 명령어에 추가할 샘플 프롬프트를 몇 개의 샷 예시로 선택할지, 아니면 둘 다 선택할지 지정합니다.
  • 평가 측정항목: Vertex AI 프롬프트 옵티마이저가 시스템 명령어를 최적화하거나 샘플 프롬프트를 선택하는 데 사용하는 측정항목입니다.
  • 타겟 모델: Vertex AI 프롬프트 옵티마이저가 시스템 명령어를 최적화하거나 사용할 샘플 프롬프트를 선택하는 Google 모델입니다.

다음 옵션 중 하나를 사용하여 구성을 만듭니다.

노트북

노트북을 통해 Vertex AI 프롬프트 옵티마이저를 실행하려면 다음을 실행하여 구성을 만듭니다.

  1. Colab Enterprise에서 Vertex AI 프롬프트 옵티마이저 노트북을 엽니다.

    Vertex AI 프롬프트 옵티마이저 노트북으로 이동

  2. 프로젝트 설정 구성 섹션에서 다음을 수행합니다.

    1. PROJECT_ID 필드에 프로젝트 ID를 입력합니다.
    2. LOCATION 필드에 Vertex AI 프롬프트 옵티마이저를 실행할 위치를 입력합니다.
    3. OUTPUT_PATH 필드에 Vertex AI 프롬프트 옵티마이저가 최적화된 시스템 명령어 및/또는 샘플 몇 개를 작성할 Cloud Storage 버킷의 URI를 입력합니다. 예를 들면 gs://bucket-name/output-path입니다.
    4. INPUT_PATH 필드에 Cloud Storage 버킷의 샘플 프롬프트 URI를 입력합니다. 예를 들면 gs://bucket-name/sample-prompts.jsonl입니다.
  3. 최적화 설정 구성 섹션에서 다음을 수행합니다.

    1. TARGET_MODEL 필드에 프롬프트를 최적화하여 사용할 모델을 입력합니다.
    2. OPTIMIZATION_MODE에 사용하려는 최적화 모드를 입력합니다. instruction, demonstration 또는 instruction_and_demo 중 하나여야 합니다.
    3. EVAL_METRIC 필드에 프롬프트를 최적화할 평가 측정항목을 입력합니다.
    4. 선택사항: SOURCE_MODEL 필드에 시스템 명령어 및 프롬프트가 이전에 사용된 Google 모델을 입력합니다. source_model 파라미터가 설정되면 Vertex AI 프롬프트 옵티마이저가 소스 모델에서 샘플 프롬프트를 실행하여 정답이 필요한 평가 측정항목에 대해 정답을 생성합니다. 이전에 Google 모델로 프롬프트를 실행하지 않았거나 타겟 결과를 달성하지 못한 경우 대신 프롬프트에 정답을 추가하세요. 자세한 내용은 이 문서의 프롬프트 및 시스템 명령어 만들기 섹션을 참고하세요.
  4. 선택사항: 고급 최적화 설정 구성 섹션에서 구성에 선택적 파라미터를 추가할 수 있습니다.

  5. 선택적 파라미터 보기
    • NUM_INST_OPTIMIZATION_STEPS 필드에 Vertex AI 프롬프트 옵티마이저가가 명령어 최적화 모드에서 사용하는 반복 횟수를 입력합니다. 이 값을 늘리면 런타임이 선형적으로 증가합니다. 10에서 20 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 10입니다.
    • NUM_TEMPLATES_PER_STEP 필드에 Vertex AI 프롬프트 옵티마이저가 생성하고 평가하는 시스템 명령어 수를 입력합니다. instructioninstruction_and_demo 최적화 모드와 함께 사용됩니다. 1에서 4 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 2입니다.
    • NUM_DEMO_OPTIMIZATION_STEPS 필드에 Vertex AI 프롬프트 옵티마이저가 평가하는 데모 수를 입력합니다. demonstrationinstruction_and_demo 최적화 모드와 함께 사용됩니다. 10에서 30 사이의 정수여야 합니다. 설정하지 않으면 기본값은 10입니다.
    • NUM_DEMO_PER_PROMPT 필드에 프롬프트당 생성되는 데모 수를 입력합니다. 3에서 6 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 3입니다.
    • TARGET_MODEL_QPS 필드에 Vertex AI 프롬프트 옵티마이저가 타겟 모델에 전송하는 초당 쿼리 수(QPS)를 입력합니다. 이 값을 늘리면 런타임이 선형적으로 감소합니다. 부동 소수점 수는 3.0 이상이어야 하지만 타겟 모델에 설정된 QPS 할당량보다 작아야 합니다. 설정하지 않은 경우 기본값은 3.0입니다.
    • SOURCE_MODEL_QPS 필드에 Vertex AI 프롬프트 옵티마이저가 소스 모델에 전송하는 초당 쿼리 수(QPS)를 입력합니다. 부동 소수점 수는 3.0 이상이어야 하지만 소스 모델에 있는 QPS 할당량보다 작아야 합니다. 설정하지 않은 경우 기본값은 3.0입니다.
    • EVAL_QPS 필드에 Vertex AI 프롬프트 옵티마이저가 평가 모델 gemini-1.5-pro에 전송하는 초당 쿼리 수 (QPS)를 입력합니다.
      • 모델 기반 측정항목의 경우 3.0 이상의 부동 소수 점이어야 하지만 gemini-1.5-pro의 할당량보다 작아야 합니다. 설정하지 않은 경우 기본값은 3.0입니다.
      • 커스텀 측정항목의 경우 3.0 이상인 부동 소수점 수여야 합니다. 이 값에 따라 Vertex AI 프롬프트 옵티마이저가 커스텀 측정항목 Cloud Run functions를 호출하는 속도가 결정됩니다.
    • 평가 측정항목을 두 개 이상 사용하려면 다음 단계를 따르세요.
      1. EVAL_METRIC_1 필드에 사용할 평가 측정항목을 입력합니다.
      2. EVAL_METRIC_1_WEIGHT 필드에 Vertex AI 프롬프트 옵티마이저가 최적화를 실행할 때 사용할 가중치를 입력합니다.
      3. EVAL_METRIC_2 필드에 사용할 평가 측정항목을 입력합니다.
      4. EVAL_METRIC_2_WEIGHT 필드에 Vertex AI 프롬프트 옵티마이저가 최적화를 실행할 때 사용할 가중치를 입력합니다.
      5. EVAL_METRIC_3 필드에 사용하려는 측정항목을 입력합니다(선택사항).
      6. EVAL_METRIC_3_WEIGHT 필드에 원하는 경우 입력합니다.
      7. METRIC_AGGREGATION_TYPE 필드에 Vertex AI 프롬프트 옵티마이저가 최적화를 실행할 때 사용할 가중치를 입력합니다.
    • PLACEHOLDER_TO_VALUE 필드에 시스템 명령어의 변수를 대체하는 정보를 입력합니다. 이 플래그에 포함된 정보는 Vertex AI 프롬프트 옵티마이저에 의해 최적화되지 않습니다.
    • RESPONSE_MIME_TYPE 필드에 타겟 모델이 사용하는 MIME 응답 유형을 입력합니다. text/plain 또는 application/json 중 하나여야 합니다. 설정하지 않은 경우 기본값은 text/plain입니다.
    • TARGET_LANGUAGE 필드에 시스템 명령어의 언어를 입력합니다. 설정하지 않은 경우 기본값은 영어입니다.

SDK

SDK를 통해 Vertex AI 프롬프트 옵티마이저를 실행하려면 다음을 실행하여 프롬프트 최적화에 사용할 파라미터가 포함된 JSON 파일 만들기를 생성합니다.

  1. 프롬프트를 최적화하는 데 사용할 파라미터가 포함된 JSON 파일을 만듭니다. 각 구성 파일에는 다음 파라미터가 필요합니다.

    {
     "project": "PROJECT_ID",
     "system_instruction_path": "SYSTEM_INSTRUCTION_PATH",
     "prompt_template_path": "PROMPT_TEMPLATE_PATH",
     "target_model": "TARGET_MODEL",
     EVALUATION_METRIC_PARAMETERS,
     "optimization_mode": "OPTIMIZATION_MODE",
     "input_data_path": "SAMPLE_PROMPT_URI",
     "output_path": "OUTPUT_URI"
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • SYSTEM_INSTRUCTION_PATH: Cloud Storage 버킷의 시스템 명령어 URI입니다. 예를 들면 gs://bucket-name/system-instruction.txt입니다.
    • PROMPT_TEMPLATE: Cloud Storage 버킷의 프롬프트 템플릿 URI입니다. 예를 들면 gs://bucket-name/prompt-template.txt입니다.
    • TARGET_MODEL: 프롬프트를 최적화하여 사용하려는 모델입니다.
    • EVALUATION_METRIC_PARAMETERS: 지정하는파라미터는 사용 중인 평가 측정항목의 수와 측정항목이 표준인지 맞춤설정인지에 따라 다릅니다.

      단일 표준 측정항목

      단일 지원되는 평가 측정항목을 사용하는 경우 다음 파라미터를 사용합니다.

       "eval_metric": "EVALUATION_METRIC",
       

      프롬프트를 최적화하려는 EVALUATION_METRIC평가 측정항목으로 바꿉니다.

      단일 커스텀 측정항목

      단일 커스텀 평가 측정항목을 사용하는 경우 다음 파라미터를 사용합니다.

      "eval_metric": "custom_metric",
      "custom_metric_name": "CUSTOM_METRIC_NAME",
      "custom_metric_cloud_function_name": "FUNCTION_NAME",
      

      다음을 바꿉니다.

      • CUSTOM_METRIC_NAME: final_score에 해당하는 키에 의해 정의된 측정항목 이름입니다. 예를 들면 custom_accuracy입니다.
      • FUNCTION_NAME: 이전에 배포한 Cloud Run 함수의 이름입니다.

      여러 표준 측정항목

      지원되는 평가 측정항목을 여러 개 사용하는 경우 다음 파라미터를 사용하세요.

      "eval_metrics_types": [EVALUATION_METRIC_LIST],
      "eval_metrics_weights": [EVAL_METRICS_WEIGHTS],
      "aggregation_type": "METRIC_AGGREGATION_TYPE",
      

      다음을 바꿉니다.

      • EVALUATION_METRIC_LIST: 평가 측정항목 목록입니다. 배열이어야 합니다. 예를 들면 "bleu", "summarization_quality"입니다.
      • EVAL_METRICS_WEIGHTS: 각 측정항목에 대한 가중치입니다. 배열이어야 합니다.
      • METRIC_AGGREGATION_TYPE: 평가 측정항목에 사용되는 집계 유형입니다. weighted_sum 또는 weighted_average 중 하나여야 합니다. 설정하지 않은 경우 기본값은 weighted_sum입니다.

      여러 표준 및 커스텀 측정항목

      커스텀 측정항목과 표준 측정항목이 혼합된 여러 평가 측정항목을 사용하는 경우 다음 파라미터를 사용하세요.

      "eval_metrics_types": ["custom_metric", EVALUATION_METRIC_LIST],
      "eval_metrics_weights": [EVAL_METRICS_WEIGHTS],
      "aggregation_type": "METRIC_AGGREGATION_TYPE",
      "custom_metric_name": "CUSTOM_METRIC_NAME",
      "custom_metric_cloud_function_name": "FUNCTION_NAME",
      

      다음을 바꿉니다.

      • EVALUATION_METRIC_LIST: 표준 평가 측정항목 목록입니다. 배열이어야 합니다. 예를 들면 "bleu", "summarization_quality"입니다.
      • EVAL_METRICS_WEIGHTS: 각 측정항목에 대한 가중치입니다. 배열이어야 합니다.
      • METRIC_AGGREGATION_TYPE: 평가 측정항목에 사용되는 집계 유형입니다. weighted_sum 또는 weighted_average 중 하나여야 합니다. 설정하지 않은 경우 기본값은 weighted_sum입니다.
      • CUSTOM_METRIC_NAME: final_score에 해당하는 키에 의해 정의된 측정항목 이름입니다. 예를 들면 custom_accuracy입니다.
      • FUNCTION_NAME: 이전에 배포한 Cloud Run 함수의 이름입니다.
    • OPTIMIZATION_MODE: 최적화 모드입니다. instruction, demonstration, instruction_and_demo 중 하나여야 합니다.

    • SAMPLE_PROMPT_URI: Cloud Storage 버킷의 샘플 프롬프트 URI입니다. 예를 들면 gs://bucket-name/sample-prompts.jsonl입니다.

    • OUTPUT_URI: Vertex AI 프롬프트 옵티마이저가 최적화된 시스템 명령어 또는 샘플을 작성할 Cloud Storage 버킷의 URI입니다. 예를 들면 gs://bucket-name/output-path입니다.

  2. 구성 파일에 선택적 파라미터를 추가로 추가할 수도 있습니다.

    선택적 파라미터는 다음 5가지 카테고리로 분류됩니다.

    • 최적화 프로세스 매개변수. 이러한 파라미터는 최적화 기간과 최적화 반복 횟수 등 전반적인 최적화 프로세스를 제어하여 최적화 품질에 직접적인 영향을 미칩니다.
    • 모델 선택 및 위치 파라미터 이 파라미터는 Vertex AI 프롬프트 옵티마이저가 사용하는 모델과 이러한 모델을 사용하는 위치를 지정합니다.
    • 지연 시간(QPS) 파라미터 이 파라미터는 QPS를 제어하여 최적화 프로세스의 속도에 영향을 미칩니다.
    • 기타. 프롬프트의 구조와 콘텐츠를 제어하는 기타 파라미터

      선택적 파라미터 보기
      "num_steps": NUM_INST_OPTIMIZATION_STEPS,
      "num_template_eval_per_step": NUM_TEMPLATES_PER_STEP,
      "num_demo_set_candidates": "NUM_DEMO_OPTIMIZATION_STEPS,
      "demo_set_size": NUM_DEMO_PER_PROMPT,
      "target_model_location": "TARGET_MODEL_LOCATION",
      "source_model": "SOURCE_MODEL",
      "source_model_location": "SOURCE_MODEL_LOCATION",
      "target_model_qps": TARGET_MODEL_QPS,
      "eval_qps": EVAL_QPS,
      "source_model_qps": SOURCE_MODEL_QPS,
      "response_mime_type": "RESPONSE_MIME_TYPE",
      "language": "TARGET_LANGUAGE",
      "placeholder_to_content": "PLACEHOLDER_TO_CONTENT",
      "data_limit": DATA_LIMIT
      

      다음을 바꿉니다.

      • 최적화 프로세스 파라미터:

        • NUM_INST_OPTIMIZATION_STEPS: Vertex AI 프롬프트 옵티마이저가 명령어 최적화 모드에서 사용하는 반복 횟수입니다. 이 값을 늘리면 런타임이 선형적으로 증가합니다. 10에서 20 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 10입니다.
        • NUM_TEMPLATES_PER_STEP: Vertex AI 프롬프트 옵티마이저가 생성하고 평가하는 시스템 명령어 수입니다. instructioninstruction_and_demo 최적화 모드와 함께 사용됩니다. 1에서 4 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 2입니다.
        • NUM_DEMO_OPTIMIZATION_STEPS: Vertex AI 프롬프트 옵티마이저가 평가하는 데모 횟수입니다. demonstrationinstruction_and_demo 최적화 모드와 함께 사용됩니다. 10에서 30 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 10입니다.
        • NUM_DEMO_PER_PROMPT: 프롬프트당 생성된 데모 수입니다. 3에서 6 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 3입니다.
      • 모델 선택 및 위치 파라미터:

        • TARGET_MODEL_LOCATION: 타겟 모델을 실행하려는 위치입니다. 설정하지 않은 경우 기본값은 us-central1입니다.
        • SOURCE_MODEL: 시스템 명령어 및 프롬프트가 이전에 사용된 Google 모델입니다. source_model 파라미터가 설정되면 Vertex AI는 소스 모델에서 샘플 프롬프트를 실행하여 정답이 필요한 평가 측정항목에 대해 정답을 생성합니다. 이전에 Google 모델로 프롬프트를 실행하지 않았거나 타겟 결과를 달성하지 못한 경우 대신 프롬프트에 정답을 추가하세요. 자세한 내용은 이 문서의 프롬프트 및 시스템 명령어 만들기 섹션을 참고하세요.
        • SOURCE_MODEL_LOCATION: 소스 모델을 실행할 위치입니다. 설정하지 않은 경우 기본값은 us-central1입니다.
      • 지연 시간(QPS) 파라미터

        • TARGET_MODEL_QPS: Vertex AI 프롬프트 옵티마이저가 타겟 모델에 전송하는 초당 쿼리 수(QPS)입니다. 이 값을 늘리면 런타임이 선형적으로 감소합니다. 부동 소수점 수는 3.0 이상이어야 하지만 타겟 모델에 설정된 QPS 할당량보다 작아야 합니다. 설정하지 않은 경우 기본값은 3.0입니다.
        • EVAL_QPS: Vertex AI 프롬프트 옵티마이저가 평가 모델 gemini-1.5-pro에 전송하는 초당 쿼리 수 (QPS)입니다.
          • 모델 기반 측정항목의 경우 3.0 이상의 부동 소수 점이어야 하지만 gemini-1.5-pro의 할당량보다 작아야 합니다. 설정하지 않은 경우 기본값은 3.0입니다.
          • 커스텀 측정항목의 경우 3.0 이상인 부동 소수점 수여야 합니다. 이 값에 따라 Vertex AI 프롬프트 옵티마이저가 커스텀 측정항목 Cloud Run functions를 호출하는 속도가 결정됩니다.
        • SOURCE_MODEL_QPS: Vertex AI 프롬프트 옵티마이저가 소스 모델에 전송하는 초당 쿼리 수(QPS)입니다. 부동 소수점 수는 3.0 이상이어야 하지만 소스 모델에 있는 QPS 할당량보다 작아야 합니다. 설정하지 않은 경우 기본값은 3.0입니다.
      • 기타 파라미터:

        • RESPONSE_MIME_TYPE: 타겟 모델에서 사용하는 MIME 응답 유형입니다. text/plain 또는 application/json 중 하나여야 합니다. 설정하지 않은 경우 기본값은 text/plain입니다.
        • TARGET_LANGUAGE: 시스템 명령어의 언어입니다. 설정하지 않은 경우 기본값은 영어입니다.
        • PLACEHOLDER_TO_CONTENT: 시스템 명령어의 변수를 대체하는 정보입니다. 이 플래그에 포함된 정보는 Vertex AI 프롬프트 옵티마이저에 의해 최적화되지 않습니다.
        • DATA_LIMIT: 검증에 사용된 데이터의 양입니다. 런타임은 이 값에 따라 선형적으로 증가합니다. 5에서 100 사이의 정수여야 합니다. 설정하지 않은 경우 기본값은 100입니다.
  3. Cloud Storage 버킷에 JSON 파일을 업로드합니다.

프롬프트 옵티마이저 실행

다음 옵션 중 하나를 사용하여 Vertex AI 프롬프트 옵티마이저를 실행합니다.

노트북

다음을 실행하여 노트북을 통해 Vertex AI 프롬프트 옵티마이저를 실행합니다.

  1. Colab Enterprise에서 Vertex AI 프롬프트 옵티마이저 노트북을 엽니다.

    Vertex AI 프롬프트 옵티마이저 노트북으로 이동

  2. 프롬프트 옵티마이저 실행 섹션에서 play_circle 셀 실행을 클릭합니다.

    Vertex AI 프롬프트 옵티마이저가 실행됩니다.

REST

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • LOCATION: Vertex AI 프롬프트 옵티마이저를 실행할 위치입니다.
  • PROJECT_ID: 프로젝트 ID입니다.
  • JOB_NAME: Vertex AI 프롬프트 옵티마이저 작업의 이름입니다.
  • PATH_TO_CONFIG: Cloud Storage 버킷의 구성 파일 URI입니다. 예를 들면 gs://bucket-name/configuration.json입니다.

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

JSON 요청 본문:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-4"
        },
        "replicaCount": 1,
        "containerSpec": {
          "imageUri": "us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/apd:preview_v1_0",
          "args": ["--config=PATH_TO_CONFIG""]
        }
      }
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

응답은 다음과 유사합니다.

Python

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Python 설정 안내를 따르세요. 자세한 내용은 Vertex AI Python API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

from google.cloud import aiplatform

# Initialize Vertex AI platform
aiplatform.init(project=PROJECT_ID, location="us-central1")

# TODO(Developer): Check and update lines below
# cloud_bucket = "gs://cloud-samples-data"
# config_path = f"{cloud_bucket}/instructions/sample_configuration.json"
# output_path = "custom_job/output/"

custom_job = aiplatform.CustomJob(
    display_name="Prompt Optimizer example",
    worker_pool_specs=[
        {
            "replica_count": 1,
            "container_spec": {
                "image_uri": "us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/apd:preview_v1_0",
                "args": [f"--config={cloud_bucket}/{config_path}"],
            },
            "machine_spec": {
                "machine_type": "n1-standard-4",
            },
        }
    ],
    staging_bucket=cloud_bucket,
    base_output_dir=f"{cloud_bucket}/{output_path}",
)

custom_job.submit()
print(f"Job resource name: {custom_job.resource_name}")
# Example response:
#    'projects/123412341234/locations/us-central1/customJobs/12341234123412341234'

결과 분석 및 반복

Vertex AI 프롬프트 옵티마이저를 실행한 후 다음 옵션 중 하나를 사용하여 작업 진행 상황을 검토합니다.

노트북

노트북을 통해 Vertex AI 프롬프트 옵티마이저의 결과를 보려면 다음 단계를 따르세요.

  1. Vertex AI 프롬프트 옵티마이저 노트북을 엽니다.

  2. 결과 검사 섹션에서 다음을 수행합니다.

    1. RESULT_PATH 필드에 Vertex AI 프롬프트 옵티마이저를 구성하여 결과를 쓸 Cloud Storage 버킷의 URI를 추가합니다. 예를 들면 gs://bucket-name/output-path입니다.

    2. play_circle 셀 실행을 클릭합니다.

콘솔

  1. Google Cloud 콘솔의 Vertex AI 섹션에서 학습 파이프라인 페이지로 이동합니다.

    학습 파이프라인으로 이동

  2. 커스텀 작업 탭을 클릭합니다. Vertex AI 프롬프트 옵티마이저의 커스텀 학습 작업이 상태와 함께 목록에 표시됩니다.

작업이 완료되면 다음을 수행하여 최적화를 검토합니다.

  1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

    버킷으로 이동

  2. Cloud Storage 버킷 이름을 클릭합니다.

  3. instruction 또는 demonstration 중 프롬프트를 평가하는 데 사용한 최적화 모드와 이름이 같은 폴더로 이동합니다. instruction_and_demo 모드를 사용한 경우 두 폴더가 모두 표시됩니다. instruction 폴더에는 시스템 명령어 최적화의 결과가 포함되고 demonstration 폴더에는 demonstration 최적화의 결과와 최적화된 시스템 명령어가 포함됩니다.

    폴더에는 다음과 같은 파일이 포함됩니다.

    • config.json: Vertex AI 프롬프트 옵티마이저가 사용한 전체 구성입니다.
    • templates.json: Vertex AI 프롬프트 옵티마이저에서 생성한 시스템 명령어 집합 및/또는 몇 가지 샷 예시와 평가 점수입니다.
    • eval_results.json: 생성된 일련의 시스템 명령어 및/또는 몇 가지 샷 예시 집합과 해당 평가 점수 각각에 대한 각 샘플 프롬프트의 타겟 모델 응답입니다.
    • optimized_results.json: 성과가 가장 우수한 시스템 명령어 및/또는 몇 가지 샷 예시와 해당 평가 점수입니다.
  4. 최적화된 시스템 명령어는 optimized_results.json 파일을 참고하세요.

다음 단계