PaLM2 모델의 응답 그라운딩

데이터에 PaLM 그라운딩

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-bisonchat-bison 모델에서 그라운딩을 사용할 수 있습니다. 다음 예시에서는 text-bison 기반 모델을 사용합니다.

API를 사용하는 경우 예측을 호출할 때 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가 적용될 때 발생합니다. 강도는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 강도가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

    모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

  • MAX_OUTPUT_TOKENS: 응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

    응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

  • TOP_P: Top-P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 Top-P 값과 같아질 때까지 확률이 가장 높은 것부터(Top-K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 Top-P 값이 0.5이면 모델이 강도를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • TOP_K: Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 강도를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

    각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • 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 응답이 수신됩니다.

Console

Vertex AI Studio에서 모델을 그라운딩하려면 다음 안내를 수행합니다.

  1. Model Garden에서 Text Bison용 PaLM2 또는 Chat Bison용 PaLM2 모델 카드를 선택합니다.

    <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를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 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}")

다음 단계