プロンプトを最適化する

このドキュメントでは、Vertex AI プロンプト オプティマイザーを使用して、一連のプロンプトのシステム指示を改善し、プロンプトのパフォーマンスを自動的に最適化する方法について説明します。

Vertex AI プロンプト オプティマイザーを使用すると、システム指示や個々のプロンプトを手動で書き換えることなく、プロンプトを迅速かつ大規模に改善できます。これは、1 つのモデル用に記述されたシステム指示とプロンプトを別のモデルで使用する場合などに便利です。

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
健康に悪い化合物の形成を最小限に抑えながら、赤身肉や豚肉の風味と柔らかさを最大限に引き出す調理方法を教えてください。 赤身肉と豚肉は、安全を確保するために内部温度を摂氏 63 度(華氏 145 度)にする必要があります。レモン汁や酢などの酸性成分で肉をマリネすると、硬い筋肉繊維が分解され、肉が柔らかくなります。グリルやフライパン焼きなどの高温調理方法では、おいしい焼き色やカラメル化を実現できますが、その場合、有害な化合物が発生する恐れのある焦げ付きを避けることが重要です。
添加糖類や人工添加物を使用せずに、プロテイン シェイクに風味と栄養を加える創造的な方法はありますか? ほうれん草やケールなどの葉物野菜を加えることで、味を大きく変えることなく、シェイクの栄養価を高めることができます。通常の牛乳の代わりに、無糖アーモンドミルクやココナッツ ウォーターを使用すると、それぞれ繊細な甘みと健康的な脂肪や電解質を加えることができます。シェイクを過度に混ぜると、温度が上昇する可能性があることをご存じですか?冷たくてさわやかに保つには、短時間でミキシングし、必要に応じてミキシングを中断します。

最適化の仕組み

入力を準備したら、最適化モード、評価指標、ターゲット モデルを選択します。

  • 最適化モード: 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_TYPE は、ターゲット モデルでサポートされている画像動画音声ドキュメントの MIME タイプに置き換えます。

次のいずれかの方法でプロンプト テンプレートとシステム指示を作成します。

ノートブック

ノートブックで Vertex AI プロンプト オプティマイザーを実行する場合は、次の手順でシステム指示とプロンプト テンプレートを作成します。

  1. Colab Enterprise で Vertex AI プロンプト オプティマイザー ノートブックを開きます。

    Vertex AI プロンプト オプティマイザー ノートブックに移動

  2. [Create a prompt template and system instructions] セクションで、次の操作を行います。

    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. テキスト ファイルで、1 つ以上の変数を含むプロンプト テンプレートを定義します。次に例を示します。

    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. JSONL ファイルを Cloud Storage バケットにアップロードします

CSV ファイル

  1. CSV ファイルを作成します。
  2. 最初の行に、プロンプト テンプレートの変数を追加します。
  3. 次の行に、各変数に代わるサンプルデータを追加します。
  4. CSV ファイルを Cloud Storage バケットにアップロードします

評価指標を選択する

Vertex AI プロンプト オプティマイザーは、評価指標を使用してシステム指示を最適化し、サンプル プロンプトを選択します。

サポートされている評価指標のいずれかを選択するか、独自のカスタム評価指標を定義します。カスタム指標は、標準指標がアプリケーションに適していない場合に役立ちます。複数の指標を使用してプロンプトを最適化できます。ただし、Vertex AI プロンプト オプティマイザーでサポートされるカスタム指標は 1 度に 1 つだけです。たとえば、カスタム指標と bleu 指標、または bleurougesummarization_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. [Configure project settings] セクションで、次の操作を行います。

    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. [Configure optimization settings] セクションで、次の操作を行います。

    1. [TARGET_MODEL] フィールドに、プロンプトの最適化に使用するモデルを入力します。
    2. [OPTIMIZATION_MODE] に、使用する最適化モードを入力します。instructiondemonstrationinstruction_and_demo のいずれかにする必要があります。
    3. [EVAL_METRIC] フィールドに、プロンプトの最適化に使用する評価指標を入力します。
    4. 省略可: [SOURCE_MODEL] フィールドに、システム指示とプロンプトで以前に使用した Google モデルを入力します。source_model パラメータが設定されている場合、Vertex AI プロンプト オプティマイザーは、ソースモデルでサンプル プロンプトを実行して、グラウンド トゥルース レスポンスを必要とする評価指標用にグラウンド トゥルース レスポンスを生成します。以前に Google モデルでプロンプトを実行していなかった場合や、目標結果が達成されなかった場合は、代わりにグラウンド トゥルース レスポンスをプロンプトに追加します。詳細については、このドキュメントのプロンプトとシステム指示を作成するをご覧ください。
  4. 省略可: [Configure advanced optimization settings] セクションで、任意のパラメータを構成に追加できます。

  5. オプション パラメータを表示する
    • [NUM_INST_OPTIMIZATION_STEPS] フィールドに、Vertex AI プロンプト オプティマイザーが指示の最適化モードで使用する反復処理の回数を入力します。この値を増やすと、ランタイムが比例して増加します。1020 の整数を指定してください。設定しなかった場合、デフォルトで 10 が使用されます。
    • [NUM_TEMPLATES_PER_STEP] フィールドに、Vertex AI プロンプト オプティマイザーが生成して評価するシステム指示の数を入力します。instructioninstruction_and_demo の最適化モードで使用されます。14 の整数を指定してください。設定しなかった場合、デフォルトで 2 が使用されます。
    • [NUM_DEMO_OPTIMIZATION_STEPS] フィールドに、Vertex AI プロンプト オプティマイザーが評価するデモの数を入力します。demonstrationinstruction_and_demo の最適化モードで使用されます。1030 の整数を指定してください。設定しなかった場合、デフォルトで 10 が使用されます。
    • [NUM_DEMO_PER_PROMPT] フィールドに、プロンプトごとに生成されるデモの数を入力します。36 の整数を指定してください。設定しなかった場合、デフォルトで 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 関数を呼び出す頻度が決まります。
    • 複数の評価指標を使用する場合は、次のようにします。
      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/plainapplication/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: 指定するパラメータは、使用する評価指標の数と、指標が標準かカスタムかによって異なります。

      単一の標準指標

      サポートされている評価指標を 1 つだけ使用する場合は、次のパラメータを使用します。

       "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_sumweighted_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_sumweighted_average のいずれかにする必要があります。設定しなかった場合、デフォルトで weighted_sum が使用されます。
      • CUSTOM_METRIC_NAME: final_score に対応するキーで定義された指標名。例: custom_accuracy
      • FUNCTION_NAME: 前にデプロイした Cloud Run 関数の名前。
    • OPTIMIZATION_MODE: 最適化モード。instructiondemonstrationinstruction_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 プロンプト オプティマイザーが指示の最適化モードで使用する反復処理の数。この値を増やすと、ランタイムが比例して増加します。1020 の整数を指定してください。設定しなかった場合、デフォルトで 10 が使用されます。
        • NUM_TEMPLATES_PER_STEP: Vertex AI プロンプト オプティマイザーが生成して評価するシステム指示の数。instructioninstruction_and_demo の最適化モードで使用されます。14 の整数を指定してください。設定しなかった場合、デフォルトで 2 が使用されます。
        • NUM_DEMO_OPTIMIZATION_STEPS: Vertex AI プロンプト オプティマイザーが評価するデモの数。demonstrationinstruction_and_demo の最適化モードで使用されます。1030 の整数を指定してください。設定しなかった場合、デフォルトで 10 が使用されます。
        • NUM_DEMO_PER_PROMPT: プロンプトごとに生成されるデモの数。36 の整数を指定してください。設定しなかった場合、デフォルトで 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 関数を呼び出す頻度が決まります。
        • SOURCE_MODEL_QPS: Vertex AI プロンプト オプティマイザーがソースモデルに送信する秒間クエリ数(QPS)。3.0 以上の浮動小数点数で、ソースモデルの QPS 割り当てより小さい値にする必要があります。設定しなかった場合、デフォルトで 3.0 が使用されます。
      • その他のパラメータ:

        • RESPONSE_MIME_TYPE: ターゲット モデルが使用する MIME レスポンス タイプtext/plainapplication/json のいずれかにする必要があります。設定しなかった場合、デフォルトで text/plain が使用されます。
        • TARGET_LANGUAGE: システム指示の言語。設定しなかった場合、デフォルトで英語が使用されます。
        • PLACEHOLDER_TO_CONTENT: システム指示の変数に代わる情報。このフラグに含まれる情報は、Vertex AI プロンプト オプティマイザーによって最適化されません。
        • DATA_LIMIT: 検証に使用されるデータの量。この値に比例してランタイムが増加します。5100 の整数を指定してください。設定しなかった場合、デフォルトで 100 が使用されます。
  3. JSON ファイルを Cloud Storage バケットにアップロードします

プロンプト オプティマイザーを実行する

次のいずれかの方法で Vertex AI プロンプト オプティマイザーを実行します。

ノートブック

次の手順で、ノートブックから Vertex AI プロンプト オプティマイザーを実行します。

  1. Colab Enterprise で Vertex AI プロンプト オプティマイザー ノートブックを開きます。

    Vertex AI プロンプト オプティマイザー ノートブックに移動

  2. [Run prompt optimizer] セクションで、play_circle [Run cell] をクリックします。

    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. [Inspect the results] セクションで、次の操作を行います。

    1. [RESULT_PATH] フィールドに、Vertex AI プロンプト オプティマイザーの結果の書き込み先として構成した Cloud Storage バケットの URI を追加します。例: gs://bucket-name/output-path

    2. [play_circle Run cell] をクリックします。

コンソール

  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 ファイルを表示します。

次のステップ