Google Vertex AI Search (이전에는 Generative AI App BuilderEnterprise Search로 알려짐)는 Google Cloud에서 제공하는 Vertex AI 머신러닝 플랫폼의 일부입니다. Vertex AI Search를 사용하면 조직이 고객과 직원을 위한 생성형 AI 기반 검색 엔진을 빠르게 구축할 수 있습니다. 이는 의미론적 검색을 포함한 다양한 Google Search 기술을 기반으로 하며, 자연어 처리 및 머신러닝 기술을 사용하여 콘텐츠 내 관계와 사용자 쿼리 입력의 의도를 추론함으로써 기존 키워드 기반 검색 기술보다 더 관련성 높은 결과를 제공합니다. Vertex AI Search는 또한 사용자가 검색하는 방식을 이해하는 Google의 전문성을 활용하고 콘텐츠 관련성을 고려하여 표시된 결과를 정렬합니다.
Vertex AI SearchGoogle Cloud Console과 엔터프라이즈 워크플로우 통합을 위한 API를 통해 사용할 수 있습니다.
이 노트북은 Vertex AI Search를 구성하고 Vertex AI Search retriever를 사용하는 방법을 보여줍니다. Vertex AI Search retriever는 Python client library를 캡슐화하고 이를 사용하여 Search Service API에 액세스합니다. 모든 VertexAISearchRetriever 기능 및 구성에 대한 자세한 문서는 API reference를 참조하세요.

Integration details

Setup

Installation

Vertex AI Search retriever를 사용하려면 langchain-google-communitygoogle-cloud-discoveryengine 패키지를 설치해야 합니다.
pip install -qU langchain-google-community google-cloud-discoveryengine

Google Cloud 및 Vertex AI Search 액세스 구성

Vertex AI Search는 2023년 8월부터 허용 목록 없이 일반적으로 사용 가능합니다. retriever를 사용하기 전에 다음 단계를 완료해야 합니다:

검색 엔진 생성 및 비구조화 데이터 저장소 채우기

Vertex AI Search API 액세스를 위한 자격 증명 설정

Vertex AI Search retriever에서 사용하는 Vertex AI Search client libraries는 프로그래밍 방식으로 Google Cloud에 인증하기 위한 높은 수준의 언어 지원을 제공합니다. Client libraries는 Application Default Credentials (ADC)를 지원합니다. 라이브러리는 정의된 위치 집합에서 자격 증명을 찾고 해당 자격 증명을 사용하여 API에 대한 요청을 인증합니다. ADC를 사용하면 애플리케이션 코드를 수정할 필요 없이 로컬 개발 또는 프로덕션과 같은 다양한 환경에서 애플리케이션에 자격 증명을 사용할 수 있습니다. Google Colab에서 실행하는 경우 google.colab.google.auth로 인증하고, 그렇지 않으면 지원되는 방법 중 하나를 따라 Application Default Credentials가 올바르게 설정되었는지 확인하세요.
import sys

if "google.colab" in sys.modules:
    from google.colab import auth as google_auth

    google_auth.authenticate_user()

Vertex AI Search retriever 구성 및 사용

Vertex AI Search retriever는 langchain_google_community.VertexAISearchRetriever 클래스에 구현되어 있습니다. get_relevant_documents 메서드는 각 문서의 page_content 필드가 문서 콘텐츠로 채워진 langchain.schema.Document 문서 목록을 반환합니다. Vertex AI Search에서 사용되는 데이터 유형(웹사이트, 구조화 또는 비구조화)에 따라 page_content 필드는 다음과 같이 채워집니다:
  • 고급 인덱싱이 있는 웹사이트: 쿼리와 일치하는 extractive answer. metadata 필드는 세그먼트 또는 답변이 추출된 문서의 메타데이터(있는 경우)로 채워집니다.
  • 비구조화 데이터 소스: 쿼리와 일치하는 extractive segment 또는 extractive answer. metadata 필드는 세그먼트 또는 답변이 추출된 문서의 메타데이터(있는 경우)로 채워집니다.
  • 구조화 데이터 소스: 구조화 데이터 소스에서 반환된 모든 필드를 포함하는 문자열 json. metadata 필드는 문서의 메타데이터(있는 경우)로 채워집니다.

Extractive answers & extractive segments

extractive answer는 각 검색 결과와 함께 반환되는 그대로의 텍스트입니다. 원본 문서에서 직접 추출됩니다. extractive answer는 일반적으로 웹 페이지 상단 근처에 표시되어 최종 사용자에게 쿼리와 문맥적으로 관련된 간단한 답변을 제공합니다. extractive answer는 웹사이트 및 비구조화 검색에 사용할 수 있습니다. extractive segment는 각 검색 결과와 함께 반환되는 그대로의 텍스트입니다. extractive segment는 일반적으로 extractive answer보다 더 자세합니다. extractive segment는 쿼리에 대한 답변으로 표시될 수 있으며, 후처리 작업을 수행하고 대규모 언어 모델의 입력으로 사용하여 답변이나 새로운 텍스트를 생성할 수 있습니다. extractive segment는 비구조화 검색에 사용할 수 있습니다. extractive segment 및 extractive answer에 대한 자세한 내용은 제품 문서를 참조하세요. 참고: extractive segment를 사용하려면 Enterprise edition 기능이 활성화되어 있어야 합니다. retriever 인스턴스를 생성할 때 액세스할 데이터 저장소와 자연어 쿼리가 처리되는 방식을 제어하는 여러 매개변수를 지정할 수 있으며, 여기에는 extractive answer 및 segment에 대한 구성이 포함됩니다.

필수 매개변수

  • project_id - Google Cloud Project ID.
  • location_id - 데이터 저장소의 위치.
    • global (기본값)
    • us
    • eu
다음 중 하나:
  • search_engine_id - 사용하려는 검색 앱의 ID. (Blended Search에 필요)
  • data_store_id - 사용하려는 데이터 저장소의 ID.
project_id, search_engine_iddata_store_id 매개변수는 retriever의 생성자에서 명시적으로 제공하거나 환경 변수 - PROJECT_ID, SEARCH_ENGINE_IDDATA_STORE_ID를 통해 제공할 수 있습니다. 다음을 포함한 여러 선택적 매개변수를 구성할 수도 있습니다:
  • max_documents - extractive segment 또는 extractive answer를 제공하는 데 사용되는 최대 문서 수
  • get_extractive_answers - 기본적으로 retriever는 extractive segment를 반환하도록 구성됩니다.
    • extractive answer를 반환하려면 이 필드를 True로 설정합니다. 이는 engine_data_type0(비구조화)으로 설정된 경우에만 사용됩니다.
  • max_extractive_answer_count - 각 검색 결과에서 반환되는 최대 extractive answer 수.
    • 최대 5개의 답변이 반환됩니다. 이는 engine_data_type0(비구조화)으로 설정된 경우에만 사용됩니다.
  • max_extractive_segment_count - 각 검색 결과에서 반환되는 최대 extractive segment 수.
    • 현재 하나의 세그먼트가 반환됩니다. 이는 engine_data_type0(비구조화)으로 설정된 경우에만 사용됩니다.
  • filter - 데이터 저장소의 문서와 연결된 메타데이터를 기반으로 한 검색 결과의 필터 표현식.
  • query_expansion_condition - 쿼리 확장이 발생해야 하는 조건을 결정하는 사양.
    • 0 - 지정되지 않은 쿼리 확장 조건. 이 경우 서버 동작은 기본적으로 비활성화됩니다.
    • 1 - 쿼리 확장 비활성화. SearchResponse.total_size가 0이더라도 정확한 검색 쿼리만 사용됩니다.
    • 2 - Search API에서 구축한 자동 쿼리 확장.
  • engine_data_type - Vertex AI Search 데이터 유형 정의
    • 0 - 비구조화 데이터
    • 1 - 구조화 데이터
    • 2 - 웹사이트 데이터
    • 3 - Blended search

GoogleCloudEnterpriseSearchRetriever 마이그레이션 가이드

이전 버전에서는 이 retriever를 GoogleCloudEnterpriseSearchRetriever라고 불렀습니다. 새 retriever로 업데이트하려면 다음과 같이 변경하세요:
  • import 변경: from langchain.retrievers import GoogleCloudEnterpriseSearchRetriever -> from langchain_google_community import VertexAISearchRetriever.
  • 모든 클래스 참조 변경: GoogleCloudEnterpriseSearchRetriever -> VertexAISearchRetriever.
참고: retriever를 사용할 때 개별 쿼리에서 자동 추적을 받으려면 아래 주석을 해제하여 LangSmith API 키를 설정할 수도 있습니다:
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"

Instantiation

extractive segment가 있는 비구조화 데이터용 retriever 구성 및 사용

from langchain_google_community import (
    VertexAIMultiTurnSearchRetriever,
    VertexAISearchRetriever,
)

PROJECT_ID = "<YOUR PROJECT ID>"  # Set to your Project ID
LOCATION_ID = "<YOUR LOCATION>"  # Set to your data store location
SEARCH_ENGINE_ID = "<YOUR SEARCH APP ID>"  # Set to your search app ID
DATA_STORE_ID = "<YOUR DATA STORE ID>"  # Set to your data store ID
retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
)
query = "What are Alphabet's Other Bets?"

result = retriever.invoke(query)
for doc in result:
    print(doc)

extractive answer가 있는 비구조화 데이터용 retriever 구성 및 사용

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
    max_extractive_answer_count=3,
    get_extractive_answers=True,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

구조화 데이터용 retriever 구성 및 사용

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
    engine_data_type=1,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

Advanced Website Indexing이 있는 웹사이트 데이터용 retriever 구성 및 사용

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    max_documents=3,
    max_extractive_answer_count=3,
    get_extractive_answers=True,
    engine_data_type=2,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

blended 데이터용 retriever 구성 및 사용

retriever = VertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    search_engine_id=SEARCH_ENGINE_ID,
    max_documents=3,
    engine_data_type=3,
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

다중 턴 검색용 retriever 구성 및 사용

Search with follow-ups는 생성형 AI 모델을 기반으로 하며 일반 비구조화 데이터 검색과 다릅니다.
retriever = VertexAIMultiTurnSearchRetriever(
    project_id=PROJECT_ID, location_id=LOCATION_ID, data_store_id=DATA_STORE_ID
)

result = retriever.invoke(query)
for doc in result:
    print(doc)

Usage

위의 예제에 따라 invoke를 사용하여 단일 쿼리를 실행합니다.

API reference

모든 VertexAISearchRetriever 기능 및 구성에 대한 자세한 문서는 API reference를 참조하세요.
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I