Google 검색으로 그라운딩

이 페이지에서는 공개적으로 사용 가능한 웹 데이터를 사용하는 Google 검색을 사용하여 모델의 응답을 그라운딩하는 방법을 설명합니다.

모델을 전 세계 지식, 다양한 주제 또는 인터넷의 최신 정보와 연결하려면 Google 검색으로 그라운딩을 사용하세요.

Google 검색을 이용한 그라운딩에서는 동적 검색이 지원되어 Google 검색으로 그라운딩된 대답을 생성하는 옵션이 제공됩니다. 따라서 동적 검색 구성에 따라 프롬프트에 최근 이벤트에 대한 지식이 필요한지 평가하고 Google 검색에 그라운딩을 사용 설정합니다. 자세한 내용은 동적 검색을 참고하세요.

Vertex AI의 모델 그라운딩에 대한 자세한 내용은 그라운딩 개요를 참조하세요.

지원되는 모델

이 섹션에는 검색을 통한 그라운딩을 지원하는 모델이 나와 있습니다. 각 모델이 근거 있는 대답을 생성하는 방식을 살펴보려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 이 표에 나열된 모델을 사용해 보세요.

  2. 접지 전환 버튼을 클릭하여 사용 설정 위치로 전환합니다.

모델 설명 모델 사용해 보기
Gemini 1.5 Pro
텍스트 입력만 Gemini 1.5 Pro 모델 사용해 보기
Gemini 1.5 Flash
텍스트 입력만 Gemini 1.5 Flash 모델 사용해 보기
Gemini 1.0 Pro
텍스트 입력만 Gemini 1.0 Pro 모델 사용해 보기
Gemini 2.0 Flash

텍스트, 코드, 이미지, 오디오, 동영상, 오디오가 포함된 동영상, PDF

동적 검색을 지원하지 않습니다. 자세한 내용은 고려사항을 참고하세요.

Gemini 2.0 Flash 모델 사용해 보기

지원 언어

지원되는 언어 목록은 언어를 참고하세요.

다음 안내에 따라 공개적으로 사용 가능한 웹 데이터로 모델을 그라운딩합니다.

동적 검색

요청에서 동적 검색을 사용하여 Google 검색 시 그라운딩을 해제할 경우를 선택할 수 있습니다. 이 기능은 Google 검색으로 그라운딩된 답변이 프롬프트에 필요하지 않고 지원되는 모델이 그라운딩 없이도 기존 지식을 기반으로 답변을 제공할 수 있는 경우에 유용합니다. 이렇게 하면 지연 시간, 품질, 비용을 더 효과적으로 관리할 수 있습니다.

요청에서 동적 검색 구성을 호출하기 전에 다음 용어를 이해하세요.

  • 예측 점수: 그라운딩된 답변을 요청하면 Vertex AI가 프롬프트에 예측 점수를 할당합니다. 예측 점수는 [0,1] 범위의 부동 소수점 값입니다. 값은 프롬프트가 Google 검색의 최신 정보로 답변을 그라운딩함으로써 이득을 얻을 수 있는지 여부에 따라 달라집니다. 따라서 웹의 최신 사실 데이터로 그라운딩된 답변이 필요한 프롬프트는 예측 점수가 더 높습니다. 모델에서 생성된 답변으로 충분한 프롬프트는 예측 점수가 더 낮습니다.

    다음은 몇 가지 프롬프트와 해당 예측 점수에 대한 예시입니다.

    프롬프트 예측 점수 의견
    "피오니에 대한 시를 만들어주세요" 0.13 모델이 기본 지식에 의존할 수 있고 답변에 그라운딩이 필요하지 않습니다.
    "2세 아이를 위한 장난감을 추천해주세요" 0.36 모델이 기본 지식에 의존할 수 있고 답변에 그라운딩이 필요하지 않습니다.
    "아시아식 과카몰리 레시피를 알려줄 수 있을까요?" 0.55 Google 검색은 그라운딩된 답변을 제공할 수 있지만 그라운딩이 엄격하게 필요하지는 않습니다. 모델 지식으로 충분할 수 있습니다.
    "Agent Builder란 무엇인가요? Agent Builder에서 그라운딩 비용은 어떻게 청구되나요?" 0.72 Google 검색으로 잘 그라운딩된 답변을 생성해야 합니다.
    "최근 F1 그랑프리 우승자는 누구인가요?" 0.97 Google 검색으로 잘 그라운딩된 답변을 생성해야 합니다.
  • 기준점: 요청에서 기준점이 포함된 동적 검색 구성을 지정할 수 있습니다. 기준점은 [0,1] 범위의 부동 소수점 값이며 기본값은 0.7입니다. 기준점 값이 0이면 응답이 항상 Google 검색에서 그라운딩됩니다. 다른 모든 기준점 값에는 다음이 적용됩니다.

    • 예측 점수가 기준점보다 크거나 같으면 답변이 Google 검색에서 그라운딩됩니다. 기준점이 낮으면 Google 검색의 그라운딩을 사용하여 생성된 답변이 포함되는 프롬프트가 증가합니다.
    • 예측 점수가 기준점보다 낮으면 모델이 여전히 답변을 생성할 수 있지만 Google 검색으로 그라운딩되지 않습니다.

비즈니스 요구에 적합한 올바른 기준점을 찾으려면 발생할 것으로 예상되는 쿼리 대표 집합을 만들 수 있습니다. 그런 다음 응답의 예측 점수에 따라 쿼리를 정렬하고 사용 사례에 적합한 기준점을 선택할 수 있습니다.

고려사항

  • Google 검색으로 그라운딩을 사용하려면 Google 추천 검색어를 사용 설정해야 합니다. 자세한 내용은 Google 추천 검색어를 참조하세요.

  • 최상의 결과를 얻으려면 강도 0.0을 사용하세요. 이 구성의 설정 방법을 자세히 알아보려면 모델 참조의 Gemini API 요청 본문을 참조하세요.

  • Google 검색으로 그라운딩하는 경우 하루에 쿼리가 1백만 개로 제한됩니다. 더 많은 쿼리가 필요한 경우 Google Cloud 지원팀에 문의하세요.

  • Gemini 1.0 및 Gemini 1.5 모델만 동적 검색을 지원합니다. Gemini 2.0 모델은 동적 검색을 지원하지 않습니다.

콘솔

Vertex AI Studio에서 Google 검색으로 그라운딩 기능을 사용하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Vertex AI Studio 페이지로 이동합니다.

    Vertex AI Studio로 이동

  2. 자유 형식 탭을 클릭합니다.
  3. 측면 패널에서 모델 대답 그라운딩 전환 버튼을 클릭합니다.
  4. 맞춤설정을 클릭하고 Google 검색을 소스로 설정합니다.
  5. 텍스트 상자에 프롬프트를 입력하고 제출을 클릭합니다.

이제 프롬프트 응답이 Google 검색에 반영됩니다.

Node.js

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

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

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

  • LOCATION: 요청을 처리하는 리전입니다.

  • PROJECT_ID: 프로젝트 ID입니다.

  • MODEL_ID: 멀티모달 모델의 모델 ID입니다. Gemini 1.0 및 Gemini 1.5 모델만 동적 검색을 지원합니다. Gemini 2.0 모델은 동적 검색을 지원하지 않습니다.

  • TEXT: 프롬프트에 포함할 텍스트 안내입니다.

  • DYNAMIC_THRESHOLD: 동적 검색 구성을 호출하기 위한 기준점을 설정하는 선택적인 필드입니다. [0,1] 범위의 부동 소수점 값입니다. dynamicThreshold 필드를 설정하지 않으면 기준점 값이 기본적으로 0.7로 설정됩니다.

  const {VertexAI} = require('@google-cloud/vertexai');

  // Initialize Vertex with your Cloud project and location
  const vertex_ai = new VertexAI({project: PROJECT_ID, location: LOCATION});
  const model = MODEL_ID;

  // Instantiate the models
  const generativeModel = vertex_ai.preview.getGenerativeModel({
    model: model,
    generationConfig: {
      'maxOutputTokens': 8192,
      'temperature': 1,
      'topP': 0.95,
    },
    safetySettings: [
      {
        'category': 'HARM_CATEGORY_HATE_SPEECH',
        'threshold': 'OFF',
      },
      {
        'category': 'HARM_CATEGORY_DANGEROUS_CONTENT',
        'threshold': 'OFF',
      },
      {
        'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
        'threshold': 'OFF',
      },
      {
        'category': 'HARM_CATEGORY_HARASSMENT',
        'threshold': 'OFF',
      }
    ],
    tools: [
      {
        googleSearchRetrieval: {
          dynamicRetrievalConfig: {
              mode: "MODE_DYNAMIC",
              dynamicThreshold: DYNAMIC_THRESHOLD
          }
        },
      },
    ],
  });

  async function generateContent() {
    const req = {
      contents: [
        {role: 'user', parts: [{text: `TEXT`}]}
      ],
    };

    const streamingResp = await generativeModel.generateContentStream(req);

    for await (const item of streamingResp.stream) {
      process.stdout.write('stream chunk: ' + JSON.stringify(item) + '\n');
    }

    process.stdout.write('aggregated response: ' + JSON.stringify(await streamingResp.response));
  }

  generateContent();

Python용 Vertex AI SDK

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참조 문서를 확인하세요.

import vertexai

from vertexai.generative_models import (
    GenerationConfig,
    GenerativeModel,
    Tool,
    grounding,
)

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-001")

# Use Google Search for grounding
tool = Tool.from_google_search_retrieval(
    grounding.GoogleSearchRetrieval(
        # Optional: For Dynamic Retrieval
        dynamic_retrieval_config=grounding.DynamicRetrievalConfig(
            dynamic_threshold=0.7,
        )
    )
)

prompt = "When is the next total solar eclipse in US?"
response = model.generate_content(
    prompt,
    tools=[tool],
    generation_config=GenerationConfig(
        temperature=0.0,
    ),
)

print(response.text)
# Example response:
# The next total solar eclipse visible from the contiguous United States will be on **August 23, 2044**.

REST

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

  • LOCATION: 요청을 처리하는 리전입니다.
  • PROJECT_ID: 프로젝트 ID
  • MODEL_ID: 멀티모달 모델의 모델 ID입니다. Gemini 1.0 및 Gemini 1.5 모델만 동적 검색을 지원합니다. Gemini 2.0 모델은 동적 검색을 지원하지 않습니다.
  • TEXT: 프롬프트에 포함할 텍스트 안내입니다.
  • DYNAMIC_THRESHOLD: 동적 검색 구성을 호출하기 위한 기준점을 설정하는 선택적인 필드입니다. [0,1] 범위의 부동 소수점 값입니다. dynamicThreshold 필드를 설정하지 않으면 기준점 값이 기본적으로 0.7로 설정됩니다.

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent

JSON 요청 본문:

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }],
  "tools": [{
    "googleSearchRetrieval": {
      "dynamicRetrievalConfig": {
        "mode": "MODE_DYNAMIC",
        "dynamicThreshold": DYNAMIC_THRESHOLD
      }
    }
  }],
  "model": "projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
   "candidates": [
     {
       "content": {
         "role": "model",
         "parts": [
           {
             "text": "Chicago weather changes rapidly, so layers let you adjust easily. Consider a base layer, a warm mid-layer (sweater-fleece), and a weatherproof outer layer."
           }
         ]
       },
       "finishReason": "STOP",
       "safetyRatings":[
       "..."
    ],
       "groundingMetadata": {
         "webSearchQueries": [
           "What's the weather in Chicago this weekend?"
         ],
         "searchEntryPoint": {
            "renderedContent": "....................."
         }
         "groundingSupports": [
            {
              "segment": {
                "startIndex": 0,
                "endIndex": 65,
                "text": "Chicago weather changes rapidly, so layers let you adjust easily."
              },
              "groundingChunkIndices": [
                0
              ],
              "confidenceScores": [
                0.99
              ]
            },
          ]
          "retrievalMetadata": {
              "webDynamicRetrievalScore": 0.96879
            }
       }
     }
   ],
   "usageMetadata": { "..."
   }
 }

응답 이해하기

모델 프롬프트가 Vertex AI 스튜디오 또는 API에서 Google 검색에 성공적으로 그라운딩하면 응답에 소스 링크 (웹 URL)가 있는 메타데이터가 포함됩니다. 그러나 이 메타데이터가 제공되지 않을 수 있는 몇 가지 이유가 있으며 프롬프트 응답이 그라운딩되지 않을 수 있습니다. 이러한 이유로는 모델 응답 내의 소스 관련성이 낮거나 정보가 불완전한 경우가 포함됩니다.

인용

인용은 표시해 주시기 바랍니다. 이는 사용자가 게시자로부터 받은 응답을 직접 검증하는 데 도움을 주며, 추가 학습의 기회를 제공합니다.

Google 검색 소스의 응답에 대한 인용은 인라인 및 집계 방식으로 모두 표시되어야 합니다. 이를 수행하는 방법에 대한 추천 항목으로 다음 이미지를 참조하세요.

인용 예시

대체 검색 엔진 옵션 사용

고객이 Google 검색을 통한 기반 검색을 사용한다고 해서 고객이 대체 검색엔진 옵션을 제공하거나, 대체 검색 옵션을 고객 애플리케이션의 기본 옵션으로 지정하거나, 고객 애플리케이션에 자체 또는 서드 파티 검색 추천 또는 검색 결과를 표시하는 것을 막을 수는 없습니다. 단, 이러한 Google 이외의 검색 서비스 또는 관련 검색 결과가 기반 검색 결과 및 검색 추천과 별도로 표시되고 Google에서 제공하는 결과에 기인한다고 합리적으로 간주되거나 혼동되어서는 안 됩니다.

다음 단계