PaLM 2 モデルのレスポンスの根拠づけを行う

このページでは、Google Cloud コンソールと Vertex AI API を使用して Vertex AI Search データストアへのモデル レスポンスを根拠づける方法について説明します。

始める前に

Vertex AI で生成 AI のモデルの根拠づけを行うには、いくつかの前提条件を満たす必要があります。その条件とは、Vertex AI Search データソースを作成すること、データストアの Enterprise エディションを有効にすること、Vertex AI Search でデータストアとアプリを紐付けることなどです。データソースは、Vertex AI で text-bisonchat-bison の根拠づけを行う基盤として機能します。

Vertex AI Search を使用すると、指定したデータに基づく高品質の検索やレコメンデーションを簡単に開始できます。Vertex AI Search の詳細については、Vertex AI Search の概要をご覧ください。

Vertex AI Search を有効にする

  1. Google Cloud コンソールで、[検索と会話] ページに移動します。

    検索と会話

  2. 利用規約を読んで同意し、[続行して API を有効にする] をクリックします。

Vertex AI Search でデータストアを作成する

モデルをソースデータにグラウンディングするには、データを準備して Vertex AI Search に保存する必要があります。これを行うには、Vertex AI Search でデータストアを作成する必要があります。

ゼロから始める場合は、Vertex AI Search への取り込み用にデータを準備する必要があります。開始するには、取り込むデータを準備するをご覧ください。取り込みには、データのサイズに応じて、数分から数時間かかることがあります。根拠づけには、非構造化データストアのみサポートされています。取り込むデータを準備したら、検索データストアを作成できます。データストアが正常に作成されたら、それに結びつける検索アプリを作成し、Enterprise エディションを有効にします。

text-bison モデルの根拠づけを行う

根拠づけは text-bison モデルと chat-bison モデルで使用できます。次の例では、text-bison 基盤モデルを使用します。

API を使用する場合は、predict の呼び出し時に text-bison の根拠づけを行います。これを行うには、オプションの groundingConfig を追加し、データストアの場所とデータストア ID を参照します。

データストア ID がわからない場合は、次の操作を行います。

  1. Google Cloud コンソールで [Vertex AI Search] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。<a{: class="button button-primary" l10n-attrs-original-order="href,target,class,track-name,track-type" l10n-encrypted-href="BU2UnTd/bvXw0I31NoHStFtigmNHgUGOXn/QVSGplOhB4J1rwNxdLslXsSNCBkPOFvWIDj0tv6yobddHSWXSow==" target="console" track-name="consoleLink" track-type="tasks" }="">[データストア] ページに移動</a{:>
  2. データストアの名前をクリックします。
  3. データストアの [データ] ページで、データストア ID を取得します。

REST

Vertex AI API を使用してテキスト プロンプトをテストするには、パブリッシャー モデル エンドポイントに POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • PROMPT: プロンプトとは、レスポンスを受け取るために言語モデルに送信される自然言語リクエストです。プロンプトには、モデルを完了または続行するための質問、手順、コンテキスト情報、例、テキストを含めることができます(ここでは、プロンプトを引用符で囲まないでください)。
  • TEMPERATURE: 温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、topPtopK が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が 0 の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。

    モデルが返すレスポンスが一般的すぎたり、短すぎたり、フォールバック(代替)レスポンスが返ってきたりする場合は、Temperature を高くしてみてください。

  • MAX_OUTPUT_TOKENS: レスポンス内に生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。

    レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。

  • TOP_P: トップ P は、モデルが出力用にトークンを選択する方法を変更します。トークンは、確率の合計がトップ P 値に等しくなるまで、確率の高いもの(トップ K を参照)から低いものへと選択されます。たとえば、トークン A、B、C の確率が 0.3、0.2、0.1 であり、トップ P 値が 0.5 であるとします。この場合、モデルは温度を使用して A または B を次のトークンとして選択し、C は候補から除外します。

    ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。

  • TOP_K: トップ K は、モデルが出力用にトークンを選択する方法を変更します。トップ K が 1 の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。トップ K が 3 の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。

    トークン選択のそれぞれのステップで、最も高い確率を持つトップ K のトークンがサンプリングされます。その後、トークンはトップ P に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。

    ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。

  • SOURCE_TYPE: モデルの根拠となるデータソースのタイプ。Vertex AI Search のみがサポートされています。
  • VERTEX_AI_SEARCH_DATA_STORE: Vertex AI Search データストア ID パス。

    VERTEX_AI_SEARCH_DATA_STORE は次の形式を使用する必要があります。ロケーションとコレクションには、指定された値を使用します。形式: projects/{project_id}/locations/global/collections/default_collection/dataStores/{data_store_id}

    注: このデータストア ID パスのプロジェクト ID は、Vertex AI Search のプロジェクト ID です。

HTTP メソッドと URL:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict

リクエストの本文(JSON):

{
  "instances": [
    { "prompt": "PROMPT"}
  ],
  "parameters": {
    "temperature": TEMPERATURE,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "topP": TOP_P,
    "topK": TOP_K,
    "groundingConfig": {
      "sources": [
          {
              "type": "VERTEX_AI_SEARCH",
              "vertexAiSearchDatastore": "VERTEX_AI_SEARCH_DATA_STORE"
          }
      ]
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict"

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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

コンソール

Vertex AI Studio からモデルを根拠づけするには、次の手順に沿って操作します。

  1. Model Garden で [PaLM 2 for Text Bison] または [PaLM 2 for Chat Bison] モデルカードを選択します。

    <a{: class="button button-primary" l10n-attrs-original-order="href,target,class,track-name,track-type" l10n-encrypted-href="kDsq5VTi6ASK/vNFlrWmnltigmNHgUGOXn/QVSGplOi71dheYhG9dKuv3S+0ajmQkfzB9oP/Mo2x7xIe1klR5Wv+Luwn/kGU2mxRbPxpxolc9gBRk3QOdMg5rdH6ChX7" target="console" track-name="consoleLink" track-type="tasks" }="">Model Garden に移動</a{:>
  2. モデルカードから、[プロンプト設計で開く] をクリックします。Vertex AI Studio が開きます。
  3. パラメータ パネルから、[詳細] を選択します。
  4. [根拠づけを有効にする] オプションを切り替え、[カスタマイズ] を選択します。
  5. 根拠づけ元のプルダウンから、[Vertex AI Search] を選択します。
  6. コンテンツへの Vertex AI Search データストア パスを入力します。パスは projects/{project_id}/locations/global/collections/default_collection/dataStores/{data_store_id} の形式にする必要があります。
  7. プロンプトを入力して、[送信] をクリックします。

Python

Python をインストールまたは更新する方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

from typing import Optional

import vertexai
from vertexai.language_models import (
    GroundingSource,
    TextGenerationModel,
    TextGenerationResponse,
)

def grounding(
    project_id: str,
    location: str,
    data_store_location: Optional[str],
    data_store_id: Optional[str],
) -> TextGenerationResponse:
    """Grounding example with a Large Language Model"""

    vertexai.init(project=project_id, location=location)

    # TODO developer - override these parameters as needed:
    parameters = {
        "temperature": 0.7,  # Temperature controls the degree of randomness in token selection.
        "max_output_tokens": 256,  # Token limit determines the maximum amount of text output.
        "top_p": 0.8,  # Tokens are selected from most probable to least until the sum of their probabilities equals the top_p value.
        "top_k": 40,  # A top_k of 1 means the selected token is the most probable among all tokens.
    }

    model = TextGenerationModel.from_pretrained("text-bison@002")

    if data_store_id and data_store_location:
        # Use Vertex AI Search data store
        grounding_source = GroundingSource.VertexAISearch(
            data_store_id=data_store_id, location=data_store_location
        )
    else:
        # Use Google Search for grounding (Private Preview)
        grounding_source = GroundingSource.WebSearch()

    response = model.predict(
        "What are the price, available colors, and storage size options of a Pixel Tablet?",
        grounding_source=grounding_source,
        **parameters,
    )
    print(f"Response from Model: {response.text}")
    print(f"Grounding Metadata: {response.grounding_metadata}")

料金

PaLM 2 API と Vertex AI Search はそれぞれ個別に課金されます。

次のステップ