Gemini Grounding과 Vertex AI로 신뢰할 수 있는 생성형 AI 검색 시스템 구축
Vertex AI에서 Gemini Grounding으로 생성형 AI의 정확도를 높이세요. 이 튜토리얼에서 데이터 통합, 맞춤형 그라운딩, 그리고 W&B Weave 로깅을 학습하세요
이 글은 AI 번역 기사입니다. 오역이 의심되면 댓글로 알려주세요
Created on September 12|Last edited on September 12
Comment
정확하고 신뢰할 수 있는 모델 출력을 생성하는 일은 그 어느 때보다 중요합니다. 특히 사실 정확성과 원래 학습 분포에 포함되지 않은 정보에 크게 의존하는 생성형 AI 애플리케이션에서는 더욱 그렇습니다. Vertex AI의 Gemini 모델는 고급 그라운딩 기능을 통해 개발자가 응답을 검증된 출처에 앵커링하도록 하여, 생성형 AI 출력의 신뢰성과 정확성을 높일 수 있게 합니다.
이 튜토리얼에서는 Vertex AI에서 Gemini Grounding 프로세스를 살펴보며, Google Search 기반 그라운딩을 통합하고, 내부 데이터 소스를 연계하며, 로깅과 시각화를 위해 W&B Weave를 사용하는 방법을 보여드립니다. 이러한 도구를 통해 모델이 근거 있는 응답을 생성하도록 보장하는 동시에, 성능에 대한 유의미한 인사이트를 얻을 수 있습니다.
Jump to the tutorial

목차
생성형 AI에서 그라운딩이란 무엇인가?Gemini Grounding 이해하기W&B Weave로 로깅하기튜토리얼: Vertex AI와 W&B Weave로 Gemini Grounding 구현하기개인 데이터로 그라운딩하기 결론
생성형 AI에서 그라운딩이란 무엇인가?
생성형 AI에서 그라운딩은 …의 과정입니다데이터 소스에 모델 출력을 앵커링하기 실시간 피드, 신뢰할 수 있는 지식 베이스, 특정 데이터세트와 같은 소스에 기반합니다. 이를 통해 생성된 콘텐츠가 정확하고 신뢰할 수 있으며 문맥에 적합해져, 환각이나 조작된 응답의 위험을 줄일 수 있습니다.
LLM에 그라운딩이 왜 중요할까요?
그라운딩이 없으면 AI 모델은 학습 데이터에만 의존하기 때문에 그럴듯하지만 틀린 답변인 ‘환각’이 발생할 수 있습니다. 그라운딩은 신뢰할 수 있는 출처를 참고하여 이러한 문제를 완화하고, AI 출력의 신뢰성을 높입니다. 이는 특히 다음과 같은 분야에서 매우 중요합니다. 의료 고객 지원과 사실 일관성이 최우선인 법률 자문 분야.
그라운딩은 어떻게 동작하나요?
그라운딩은 흔히 다음과 같은 기법을 사용합니다 검색 기반 증강 생성( RAG)외부 데이터베이스나 검색 엔진 등에서 컨텍스트를 검색해 사실 기반 출력을 생성합니다. 웹 그라운딩은 여기에 실시간 웹 데이터(예: Google Search)를 포함하고 독점 내부 문서에 직접 연결함으로써, 복잡한 필요를 없앱니다. 벡터 데이터베이스.
그라운딩의 실용적 활용 사례
그라운딩 방식은 애플리케이션의 목적과 데이터 가용성에 따라 달라집니다. Google의 Vertex AI 같은 도구를 사용하면 AI 모델이 웹 검색 결과나 엔터프라이즈 데이터 저장소를 통합할 수 있습니다. 이러한 접근 방식은 최신의 신뢰할 수 있는 정보로 보강된 응답을 생성하게 해 주어, 다양한 산업 분야의 애플리케이션에서 정확성과 신뢰성의 기준을 한층 높여 줍니다.
Gemini Grounding 이해하기
Gemini Grounding은 생성형 AI 모델을 신뢰할 수 있는 외부 데이터 소스에 연결해 응답의 정확성과 관련성을 강화합니다. Google Search와 같은 도구를 포함하고 사용자 정의 데이터세트 통합을 활성화함으로써, 이 접근 방식은 오류를 줄이고 출력의 신뢰성을 높여 사실 정확성과 신뢰성이 요구되는 애플리케이션에 적합합니다.
그라운딩 프로세스는 Google Search를 통해 웹 데이터를 활용하거나 Vertex AI에 저장된 내부 데이터세트를 통합할 수 있으며, 세밀한 이해에 적합한 Gemini 1.5 Pro, 저지연 응답에 적합한 Gemini 1.5 Flash, 그리고 Gemini 1.0 Pro 같은 Gemini 모델과 함께 작동합니다. 이러한 방식은 모델이 관련 정보를 동적으로 검색하거나 선별된 조직 데이터에 기반해 응답하도록 하여, 결과가 정확하면서도 특정 요구에 부합하도록 보장합니다. 이 접근 방식은 다양한 애플리케이션에서 사실 기반 출력을 제공하기 위한 간결하고 효율적인 해법을 제공합니다.
지원되는 모델 및 언어
Vertex AI의 그라운딩은 외부 데이터 소스를 통합해 응답 정확도를 높이도록 설계된 다양한 모델을 지원합니다. 복잡한 작업에 최적화된 Gemini 1.5 Pro 모델은 복잡한 검색 결과를 처리하고 미묘하고 정확한 응답을 제공할 수 있어 Google Search 그라운딩에 특히 적합합니다.
지연 시간이 중요한 시나리오에서는 Gemini 1.5 Flash 모델이 시간에 민감한 애플리케이션을 위해 빠른 응답을 제공하도록 설계되었습니다. 다만 복잡성보다 속도를 우선시하기 때문에 Google Search 그라운딩의 주된 선택지는 아닙니다. 기본 모델인 Gemini 1.0 Pro도 제공되며, 그라운딩을 지원합니다.
이들 모델은 영어, 스페인어, 일본어를 비롯한 여러 언어에서 Google Search를 통한 그라운딩을 지원합니다. Gemini 시리즈의 그라운딩 기능을 활용하면 다양한 언어와 지역 전반에서 적시에 관련성 높은 정보를 보장하여, 문맥에 맞는 정확한 응답을 제공하고 사용자 경험을 향상할 수 있습니다.
그라운딩 방법
그라운딩은 두 가지 방식으로 구현할 수 있습니다. 첫 번째 방법은 Google Search를 활용해 모델이 웹의 정보를 검색하고 반영하도록 하는 것입니다. 검색 결과에 그라운딩함으로써 모델은 최신성과 정확성을 갖춘 세밀한 답변을 생성하고, 해석 가능성을 높이기 위해 참조한 출처를 함께 제시할 수 있습니다. 두 번째 방법은 Vertex AI를 통해 개인 데이터를 통합하는 것입니다. Vertex AI Search 내 데이터 소스에 연결하면, 모델은 사용자별 또는 엔터프라이즈용으로 선별된 데이터 컬렉션을 활용해, 대상 애플리케이션에 정확하고 관련성 높은 응답을 생성할 수 있습니다.
이 튜토리얼에서는 Vertex AI API를 통해 그라운딩을 구현하는 방법을 다루며, 신뢰할 수 있고 시의성 있는 데이터 소스에 출력물을 앵커링하여 AI 모델의 성능을 최적화하는 방법을 보여줍니다.
W&B Weave로 로깅하기
AI 모델에 그라운딩을 도입하면 출력이 신뢰할 수 있는 데이터 소스에 앵커링되어 정확도가 향상됩니다. 다만 그라운딩의 해석 가능성을 보장하려면 프로세스의 다양한 측면을 모니터링하고 로깅하는 것이 중요합니다. 그라운딩에 사용된 URL을 추적하면 출처의 신뢰성을 검증하고 정보가 어떤 맥락에서 도출되었는지 파악할 수 있습니다. 또한 Vertex AI의 Gemini 모델에서 동적 검색 신뢰도 임계값을 추적하면 도움이 됩니다. 파인튜닝 모델이 생성한 지식과 그라운딩된 정보 간의 균형 이러한 파라미터를 로깅하면 그라운딩 메커니즘의 성능을 평가하고 잠재적인 문제를 식별하며, 모델의 신뢰성을 높이기 위한 근거 있는 조정을 수행할 수 있습니다.
Weave는 Weights & Biases 생태계의 로깅 도구로, 동적 검색 임계값, URL, 신뢰도 점수 같은 그라운딩 관련 파라미터를 포함해 핵심 함수의 입력과 출력 추적을 자동으로 수행합니다. Weave를 사용하면 다양한 조건에서 모델의 그라운딩 메커니즘이 어떻게 작동하는지 더 깊이 파악할 수 있어, 시스템을 튜닝하여 신뢰성을 향상시키는 데 큰 도움이 됩니다.
W&B Weave 사용 방법은 간단합니다:
- 먼저 Weave를 임포트합니다 import weave.
- 다음으로 다음 코드를 추가하여 Weave를 초기화합니다 weave.init("your_project_name") 설정에 추가합니다.
- 마지막으로 특정 함수의 입력과 출력을 로깅하려면 다음을 간단히 적용합니다 @weave.op 해당 함수들에 데코레이터를 적용합니다.
Weave 설정이 완료되면 각 그라운딩 요청과 응답을 손쉽게 캡처하여 모든 모델 출력에 연결된 소스와 신뢰도 점수에 대한 통찰을 얻을 수 있습니다. 이러한 지속적인 로깅 메커니즘은 그라운딩 파라미터를 정교화하고, 시간이 지날수록 모델의 일관성, 정확성, 신뢰성을 개선하기 위한 피드백 루프를 제공합니다.
튜토리얼: Vertex AI와 W&B Weave로 Gemini Grounding 구현하기
이 튜토리얼에서는 Vertex AI와 함께 Gemini Grounding을 구현하여 AI 모델 응답의 정확성과 신뢰성을 높이는 과정을 단계별로 안내합니다. Google Cloud 프로젝트를 설정하고, Google Search와 사용자 지정 데이터셋의 데이터를 통합하도록 Gemini 모델을 구성하며, 보다 사실적이고 문맥을 이해하는 응답을 위해 그라운딩을 활성화하는 방법을 배우게 됩니다.
또한 W&B Weave를 사용하여 모델 성능을 로깅하고 시각화하는 방법을 다루어, 모델의 그라운딩 프로세스를 세밀하게 추적하고 미세 조정할 수 있도록 하겠습니다.
Google Cloud 프로젝트를 설정하고 필요한 API를 활성화하세요.
먼저 Google Cloud 프로젝트 생성, 필요한 API 활성화, Google Cloud CLI 구성부터 시작해 Vertex AI 설정을 다룹니다. 이러한 기반을 통해 Vertex AI의 기능을 완전히 활용하는 데 필요한 도구와 권한을 갖추게 됩니다. 다음으로 Vertex AI 플랫폼을 통해 원하는 모델에 접근하고 사용하는 방법을 살펴봅니다. 여기에는 인증 설정, API 요청 전송, 모델 응답 처리 등이 포함됩니다.
이 튜토리얼을 마치면 Vertex Grounding을 워크플로에 매끄럽게 통합할 수 있는 지식을 갖추게 되어, 다양한 애플리케이션에서 뛰어난 성능을 최대한 활용할 수 있습니다. 코딩 프로세스를 향상하고, 고객 상호작용을 개선하며, 데이터에서 더 깊은 인사이트를 얻고자 한다면, 이 가이드는 오늘날 사용 가능한 가장 발전된 AI 모델 중 하나의 역량을 활용하도록 도와줄 것입니다.
Google Cloud에서 Vertex AI를 설정하려면 필요한 인프라와 권한을 갖추기 위한 몇 가지 핵심 단계를 거쳐야 합니다.
다음 단계로 시작해 보세요:
1단계: Google Cloud 프로젝트 만들기
먼저 새 프로젝트를 만들고 Google Cloud 콘솔. 프로젝트 선택기 페이지로 이동하여 기존 프로젝트를 선택하거나 새 프로젝트를 만드세요. Vertex AI 서비스를 사용하려면 프로젝트에 결제가 활성화되어 있어야 합니다. 아직 프로젝트를 만들지 않았다면 Google Cloud 검색창에 ‘create project’를 검색한 뒤, 첫 번째 결과를 클릭해 안내에 따라 손쉽게 프로젝트를 생성할 수 있습니다.

2단계: Vertex AI API 활성화
다음으로 프로젝트에서 Vertex AI API를 활성화합니다. Google Cloud 콘솔의 검색창에 “Vertex AI”를 입력하세요. 결과에서 Vertex AI를 선택하면 Vertex AI 대시보드로 이동합니다. “모든 추천 API 사용 설정” Vertex AI에 필요한 API를 활성화합니다. 이 과정은 완료까지 몇 분 정도 걸릴 수 있습니다.

3단계: Google Cloud CLI 설정
로컬 개발 환경에서 Google Cloud 서비스와 상호작용하려면 Google Cloud CLI를 설치해야 합니다. Google Cloud 문서에서 CLI를 다운로드하여 설치하세요설치가 완료되면 다음 명령을 실행하여 CLI를 초기화하세요 gcloud init 터미널에서 실행하세요. 이 명령은 프로젝트 선택과 설정 구성을 단계별로 안내합니다.
다음 명령을 실행하여 최신 도구와 기능을 사용할 수 있도록 CLI 구성 요소를 업데이트하세요:
gcloud components updategcloud components install beta
4단계: IAM 역할 구성
관리자는 적절한 IAM 역할이 할당되었는지 확인해야 합니다. 이러한 역할에는 다음이 포함됩니다:
- Vertex AI 사용자 또는 Vertex AI 관리자, 및
- 서비스 계정 사용자
Vertex AI를 어떤 용도로 어떻게 사용할지에 따라 다르지만, 이 튜토리얼에서는 Vertex AI 관리자와 서비스 계정 사용자 권한을 권장합니다.
이를 위해 Google Cloud 검색창에서 “IAM”을 검색하세요…

그다음 아래와 같이 보이는 사용자 계정 옆의 편집 버튼을 선택합니다:

…그리고 적절한 역할을 할당합니다:

개인 데이터로 그라운딩을 사용할 때만 Discovery Engine 관리자 권한이 필요합니다.
💡
5단계: Vertex AI에서 Gemini 모델 사용 설정
마지막 단계로 Vertex AI에서 Gemini 모델을 사용 설정해야 합니다. 이를 위해 Google Cloud console의 검색창에서 “vertex ai”를 검색한 뒤, 검색 결과에서 “Vertex AI”를 선택하여 Vertex AI 콘솔로 이동하세요:

다음으로 왼쪽 패널에서 “Model Garden”을 선택한 후, 사용 설정할 Gemini 모델을 선택하세요:

모델을 선택한 후 “Enable” 버튼을 클릭하면 모델이 사용 설정됩니다!
필수 라이브러리 설치
다음 패키지들을 설치하세요:
pip install vertexai==1.71.1 google-cloud-aiplatform==1.72.0 google-auth==2.21.0 google-auth-oauthlib==1.0.0 wandb weave
Gemini Web Grounding로 추론 실행하기
좋아요, 이제 웹 검색 그라운딩과 함께 Gemini를 실행할 수 있도록 코드를 살펴볼 준비가 되었습니다. 다음은 그라운딩과 Gemini 1.5 Pro로 추론을 실행하는 코드입니다:
import vertexaifrom vertexai.generative_models import (GenerationConfig,GenerativeModel,Tool,)from google.cloud.aiplatform_v1beta1.types import tool as tool_typesimport jsonimport weaveweave.init("gemini_grounding")# Initialize Vertex AI with your project detailsPROJECT_ID = "dsports-6ab79"LOCATION = "us-central1"vertexai.init(project=PROJECT_ID, location=LOCATION)# Define your threshold for dynamic retrievalDYNAMIC_THRESHOLD = 0.68 # Adjust this value as needed@weave.opdef perform_inference_with_grounding(prompt):# Initialize the Gemini modelmodel = GenerativeModel("gemini-1.5-pro-002")# Set up dynamic retrieval config with a threshold for Google Search groundingdynamic_retrieval_config = tool_types.DynamicRetrievalConfig(mode=tool_types.DynamicRetrievalConfig.Mode.MODE_DYNAMIC,dynamic_threshold=DYNAMIC_THRESHOLD)# Configure GoogleSearchRetrieval with dynamic retrieval configgoogle_search_retrieval = tool_types.GoogleSearchRetrieval(dynamic_retrieval_config=dynamic_retrieval_config)# Create the Tool using the google_search_retrievalraw_tool = tool_types.Tool(google_search_retrieval=google_search_retrieval)# Create the Tool object using _from_gapic methodtool = Tool._from_gapic(raw_tool=raw_tool)# Generate content with groundingresponse = model.generate_content(prompt,tools=[tool],generation_config=GenerationConfig(temperature=0.0,),)# Structure metadata and collect output textoutput_texts = []flat_metadata = []prediction_score = None # Initialize prediction score variable# Loop over all candidates in the responseif response and response.candidates:for candidate in response.candidates:output_text = "".join(part.text for part in candidate.content.parts)output_texts.append(output_text)# Extract grounding datagrounding_chunks = candidate.grounding_metadata.grounding_chunksgrounding_supports = candidate.grounding_metadata.grounding_supports# Retrieve prediction score if available# prediction_score = candidate.grounding_metadata.retrieval_metadata.get("googleSearchDynamicRetrievalScore")prediction_score = 0.0if candidate.grounding_metadata.retrieval_metadata:prediction_score = candidate.grounding_metadata.retrieval_metadata.google_search_dynamic_retrieval_scorefor support in grounding_supports:# For each segment, create a flat structure with source detailsfor i, index in enumerate(support.grounding_chunk_indices):source_info = grounding_chunks[index].webflat_metadata.append({"text_segment": support.segment.text,"source_title": source_info.title,"source_url": source_info.uri,"confidence": support.confidence_scores[i]})return output_texts, flat_metadata, prediction_score# Example usageprompt = "what is a fibonacci sequence?"output_texts, flat_metadata, prediction_score = perform_inference_with_grounding(prompt)# Print output texts, structured flat metadata, and prediction score as JSONprint("Output Texts:")print(json.dumps(output_texts, indent=2))print("\nFlat Metadata:")print(json.dumps(flat_metadata, indent=2))print("\nPrediction Score:")print(prediction_score)
이 코드는 Vertex AI 기반 생성 모델을 초기화하고, 동적 검색 임계값에 따라 Google Search를 사용해 응답을 그라운딩하도록 구성합니다. 프롬프트에 대한 응답을 생성할 때, 예측된 검색 점수(해당 임계값으로 판단)가 그라운딩이 유익하다고 나타나면 모델은 외부 정보 출처를 참조합니다.
The confidence 응답 메타데이터에서 각 그라운딩 소스에 부여되는 점수는 해당 소스의 정확성과 관련성에 대한 모델의 추정치를 반영합니다. 높은 신뢰도 점수는 해당 정보가 프롬프트에 특히 관련 있다고 모델이 판단함을 의미하며, 이를 통해 응답의 신뢰성과 신빙성을 개선하는 데 도움이 됩니다.
또한, prediction_score 그라운딩의 필요성에 대한 모델의 추정치를 포착하여, 그라운딩된 응답의 효과성과 정확성에 대한 통찰을 제공합니다. 이 설정을 통해 출력 텍스트, 출처, 각 신뢰도 점수를 W&B Weave로 평가하고 로깅하여 추가 성능 분석을 수행할 수 있습니다.
그라운딩 프로세스와 모델 성능을 W&B Weave에 로깅하기
W&B Weave는 그라운딩 프로세스를 로깅하고 추적하는 데 사용되며, 워크플로 전반에 걸쳐 모델 입력, 출력, 메타데이터를 모니터링할 수 있도록 해줍니다.
Weave 초기화하기 weave.init("gemini_grounding") 코드의 시작 부분에서 모든 작업을 “gemini_grounding” 프로젝트에 저장하도록 보장하여, 시간 경과에 따른 그라운딩 동학을 손쉽게 시각화하고 분석할 수 있게 합니다. 또한 다음을 표시함으로써 perform_inference_with_grounding 함수와 함께 @weave.op각 호출은 Weave에 자동으로 캡처되며, 입력 프롬프트, 생성된 응답, 예측 점수, 그리고 각 소스의 신뢰도 점수를 포함한 그라운딩 메타데이터가 기록됩니다. 이러한 통합을 통해 그라운딩이 얼마나 자주 트리거되는지와 응답 품질 향상에 얼마나 효과적인지를 세부적으로 추적할 수 있어, 임계값 조정과 모델 성능 미세 조정에 도움이 됩니다.

Grounding API와 함께 Weave를 사용하면 시스템이 소스를 어떻게 검색하고 최종 결과를 생성하는지 손쉽게 파악할 수 있습니다. 또한 Weave는 소스 URL을 직접 클릭해 추가로 확인할 수 있는 편리한 UI도 제공합니다!
개인 데이터로 그라운딩하기
이제 웹 검색 데이터로 모델 쿼리를 성공적으로 그라운딩했으므로, 내부 데이터 소스를 활용해 그라운딩하는 시스템도 구축할 수 있습니다. 이 방식은 Google Cloud에 저장된 커스텀 데이터를 통합하여 모델의 정확한 응답 생성 능력을 강화합니다. 독점 정보를 포함함으로써 모델은 조직의 특정 요구에 더욱 정렬되며, 큐레이션된 데이터에 근거한 맥락적으로 적절한 응답을 제공할 수 있습니다.
먼저 시작하려면 Google Cloud에서 몇 가지 다른 API를 활성화해야 합니다. 첫 단계로, Google Cloud console에서 Vertex AI Agent Builder를 검색해 활성화하세요.
1단계: Vertex AI Agent Builder 활성화

이제 ‘Enable’ 버튼을 선택하세요.

2단계: 데이터 스토어 만들기
다음으로, 메인 Agent Builder 화면이 표시되며, 왼쪽의 “data sources” 패널을 선택할 수 있습니다:

이것을 클릭하면 다음 화면이 표시되며, 여기에서 데이터스토어를 생성할 수 있습니다.

이제 여러 가능한 데이터 소스를 격자 형태로 보여주는 화면이 표시됩니다. 이 튜토리얼에서는 “Cloud Storage” 옵션을 선택하세요.

다음으로 Google Cloud Storage 버킷을 선택해야 합니다. 이 프로젝트에서는 “Unstructured Documents” 옵션으로 새 버킷을 생성하겠습니다. 새 버킷을 만들려면 화면 하단의 Browse 버튼을 클릭하세요.

다음으로, 아래에 표시된 폴더 만들기 아이콘을 클릭하세요.

버튼을 클릭한 후에는 버킷의 이름을 지정할 수 있습니다. 저는 제 버킷 이름을 ‘로 하겠습니다.gemini_grounding'그리고 영역은 그대로 두세요'global‘.’ 필요한 정보를 모두 입력한 후 ‘Create’를 클릭하세요. 데이터 소스를 생성하고 나면 Agent Builder 콘솔의 데이터 소스 목록에서 확인할 수 있습니다.

데이터 소스 이름을 클릭하면 나중에 필요할 데이터 스토어 ID와 같은 추가 정보를 확인할 수 있습니다.

3단계: Storage 버킷에 데이터 업로드하기
이제 스토리지 버킷을 만들었으니, 여기에 데이터를 업로드할 준비가 되었습니다.
이 튜토리얼에서는 데이터 소스로 Github의 W&B Weave 문서 일부를 사용하겠습니다. 아래 코드는 데이터를 다운로드하고, 모든 파일을 다음 형식으로 변환합니다. .txt 형식으로 변환하고 스토리지 버킷에 업로드합니다. 모든 파일을 전부 해당 형식으로 변환해야 하는지는 확신이 서지 않습니다만, .txt 형식이 이런 시스템에 반드시 최선의 모범 사례인 것은 아니지만, 우리 목적에는 앞서 스토리지 형식으로 선택한 “비정형 문서” 모드와 잘 맞습니다. 아래 코드는 Weave 문서를 다운로드한 다음, 우리 버킷에 업로드합니다.
참고로, 다음을 변경해야 합니다 BUCKET_NAME 그리고 PROJECT_ID 각자 사용하는 버킷 이름과 Google Cloud 프로젝트 ID로 변경하세요.
💡
import osimport subprocessfrom google.cloud import storageimport time# Set your Google Cloud project details and bucket namePROJECT_ID = "dsports-6ab79"BUCKET_NAME = "groundinggemini"# Initialize the Cloud Storage clientstorage_client = storage.Client(project=PROJECT_ID)bucket = storage_client.bucket(BUCKET_NAME)def download_weave_docs(repo_dir="weave_docs", retries=3):"""Download Weave documentation using sparse checkout with shallow clone and retry logic."""success = Falseattempt = 0while not success and attempt < retries:attempt += 1print(f"Attempt {attempt} to download Weave documentation...")if not os.path.exists(repo_dir):os.makedirs(repo_dir)try:# Initialize the Git repository with sparse checkoutsubprocess.run(["git", "init"], cwd=repo_dir, check=True)subprocess.run(["git", "remote", "add", "origin", "https://github.com/wandb/weave.git"], cwd=repo_dir, check=True)subprocess.run(["git", "config", "core.sparseCheckout", "true"], cwd=repo_dir, check=True)subprocess.run(["git", "sparse-checkout", "set", "docs/docs/guides/tracking"], cwd=repo_dir, check=True)# Use a shallow clone by fetching only the latest commitsubprocess.run(["git", "fetch", "--depth", "1", "origin", "master"], cwd=repo_dir, check=True)subprocess.run(["git", "checkout", "master"], cwd=repo_dir, check=True)success = Trueprint("Weave documentation downloaded.")except subprocess.CalledProcessError:print("Download failed, retrying...")time.sleep(3) # Wait a bit before retrying# Clean up any partial downloads to start freshsubprocess.run(["rm", "-rf", repo_dir])if not success:raise Exception("Failed to download Weave documentation after multiple attempts.")def convert_to_text(filepath):"""Attempts to read any file and save it as a .txt file."""txt_filepath = f"{filepath}.txt"try:# Try reading as plain textwith open(filepath, 'r', encoding='utf-8') as file:text_content = file.read()except (UnicodeDecodeError, IOError):# Log and skip files that can't be read as text (e.g., binary files)print(f"Skipping unsupported or binary file: {filepath}")return None# Save the read content to a .txt filewith open(txt_filepath, 'w', encoding='utf-8') as txt_file:txt_file.write(text_content)return txt_filepathdef upload_to_gcs(txt_filepath):"""Uploads a .txt file to the specified Google Cloud Storage bucket."""blob_name = os.path.basename(txt_filepath) # Use filename as blob nameblob = bucket.blob(blob_name)blob.upload_from_filename(txt_filepath)print(f"Uploaded {txt_filepath} to gs://{BUCKET_NAME}/{blob_name}")# Step 1: Download Weave docsdownload_weave_docs()# Step 2: Define the directory containing the downloaded filesdocuments_dir = "weave_docs/docs/docs/guides/tracking" # Path to the downloaded Weave documentation# Step 3: Process each document in the specified directoryfor filename in os.listdir(documents_dir):filepath = os.path.join(documents_dir, filename)if os.path.isfile(filepath):txt_filepath = convert_to_text(filepath) # Attempt to convert to .txtif txt_filepath:upload_to_gcs(txt_filepath) # Upload the .txt file to Cloud Storageos.remove(txt_filepath) # Optionally, delete the .txt file after uploading
이 Python 스크립트는 문서를 다운로드해 Google Cloud Storage에 업로드하는 과정을 자동화합니다.
먼저 지정한 프로젝트 ID와 버킷 이름으로 Google Cloud Storage 클라이언트를 초기화합니다. 그런 다음 스크립트는 필요한 Weave 문서 디렉터리만 받기 위해 스파스 체크아웃과 얕은 클론을 사용해 다운로드하며, 필요하면 최대 세 번까지 재시도합니다. 변환된 각 파일은 지정된 Google Cloud Storage 버킷에 업로드되고, 원본 .txt 업로드에 성공하면 파일은 삭제됩니다. 이 설정을 통해 Google Cloud Storage에 선별된 문서 저장소가 생성되며, 이후 모델이 질의에 응답할 때 참조할 수 있습니다.
그라운딩에 필요한 문서를 가져오기 위해, 코드에는 다음과 같은 함수가 포함되어 있습니다 download_weave_docs, 이 함수는 Git 명령을 사용해 Weave GitHub 문서 저장소의 특정 섹션만 클론합니다. “스파스 체크아웃”을 수행하여 전체 저장소를 클론하지 않고 필요한 파일만 가져오므로 처리 속도가 더 빠르고 효율적입니다. 또한 재시도 메커니즘이 포함되어 있어 네트워크 또는 클론 문제에 대비하고, 필요한 문서에 안정적으로 액세스할 수 있도록 보장합니다.
다운로드가 완료되면 문서 파일이 다음으로 변환됩니다 .txt Vertex AI의 비정형 문서 처리 요구사항과 호환되는 형식으로 변환됩니다. The convert_to_text 함수는 다운로드된 각 파일을 읽어 다음에 저장합니다 .txt 형식으로 변환되며, 바이너리처럼 읽을 수 없거나 호환되지 않는 파일은 건너뛰어 오류를 우아하게 처리합니다. 이를 통해 그라운딩에 사용할 수 있는 텍스트 파일만 업로드되도록 보장합니다.
마지막 단계는 다음을 업로드하는 것입니다 .txt 파일을 Google Cloud Storage에 업로드합니다. The upload_to_gcs 함수는 변환된 각 파일을 지정된 스토리지 버킷에 업로드하며, 클라우드에서 객체 이름으로 파일 이름을 사용합니다. 업로드가 성공할 때마다 로컬 `.txt` 파일을 삭제하여 저장 공간을 효율적으로 관리할 수 있습니다. 이 모든 설정을 통해 Google Cloud Storage 버킷이 Vertex AI가 그라운딩된 응답을 위해 액세스할 수 있는 구조화된 데이터 소스로 준비되며, 모델의 답변을 맥락적으로 관련 있고 조직 특화된 정보로 풍부하게 만듭니다.
4단계: Storage 버킷을 Agent Builder에 연결하기
이제 데이터 스토어로 이동하면 우리가 앞서 생성했던 방금 업로드한 데이터를 추가하려면 “Import Data” 버튼을 클릭하면 됩니다. 이전 스크린샷에 표시된 ‘Import Data’ 버튼을 누르고 “Cloud Storage” 옵션을 선택하세요.

다음으로, 앞서 생성한 스토리지 버킷을 선택하고 “Unstructured documents”를 선택한 뒤 “import”를 클릭하세요.

이제 Google Cloud가 데이터를 가져오며, 성공 메시지가 표시될 것입니다:

5단계: Agent Builder 앱 만들기
좋아요, 이제 Gemini API로 우리 데이터를 검색하기 전에 Agent Builder 앱을 만들어야 합니다.Agent Builder 콘솔로 이동한 다음 ‘Apps’ 패널을 선택하고 “Create a new app”을 클릭하세요.

다음으로, 선택하세요 “검색유형을 선택하고 앱의 이름과 리전을 입력하세요:

사용하겠습니다 us-central1 내 리전의 경우:

사용자 문서를 Gemini API와 함께 사용하려면 Agent Builder에서 “enterprise mode”를 활성화할 필요가 없습니다. Gemini API는 Vertex AI Search를 통해 그라운딩에 자체 데이터를 사용할 수 있도록 지원합니다.
💡
데이터스토어를 설정하고 관련 문서로 채워두었으므로, 이제 업로드한 데이터에서 직접 근거 기반 정보를 검색하도록 Gemini API와의 ��합 코드를 작성할 준비가 되었습니다. 이 방식은 Gemini 모델의 그라운딩 기능을 활용해 선별된 내부 데이터를 참조하게 함으로써, Google Cloud Storage에 있는 정보와 맥락적으로 정합된 응답을 생성하도록 합니다.
우리 코드는 Vertex AI 내에서 Gemini 모델을 초기화하고, 그라운딩에 Vertex AI Search를 사용하도록 모델을 설정합니다. 이 그라운딩 과정은 모델이 응답을 생성할 때 일반 웹 데이터 대신, 또는 그에 더해 우리 데이터스토어를 참조하여 내부 데이터를 활용할 수 있게 합니다. 이러한 구성은 독점 정보나 특정 조직 지식에 기반한 응답이 필요한 작업에 특히 유용합니다. 구성이 완료되면 모델에 프롬프트를 보내고, 그에 대한 응답으로 Google Cloud Storage 버킷의 근거 데이터로 보강된 결과를 받게 됩니다.
코드는 다음과 같습니다:
import vertexaifrom vertexai.preview.generative_models import (GenerationConfig,GenerativeModel,Tool,grounding,)import jsonimport weaveweave.init("gemini_vertex_search_grounding")# Initialize Vertex AI with your project detailsPROJECT_ID = "dsports-6ab79"DATA_STORE_ID = "gemini-grounding_1731397909128"LOCATION = "us-central1"vertexai.init(project=PROJECT_ID, location=LOCATION)@weave.opdef perform_vertex_search_inference(prompt):# Initialize the Gemini modelmodel = GenerativeModel("gemini-1.5-pro-002")# Set up the Vertex AI Search grounding tooltool = Tool.from_retrieval(grounding.Retrieval(grounding.VertexAISearch(datastore=DATA_STORE_ID,project=PROJECT_ID,location="global",)))# Generate content with groundingresponse = model.generate_content(prompt,tools=[tool],generation_config=GenerationConfig(temperature=0.0,),)# Structure metadata and collect output textoutput_texts = []flat_metadata = []# Loop over all candidates in the responseif response and response.candidates:for candidate in response.candidates:# Get content parts and join themcontent_text = candidate.content.text if hasattr(candidate.content, 'text') else ""output_texts.append(content_text)# Extract grounding metadataif hasattr(candidate, 'grounding_metadata'):grounding_chunks = candidate.grounding_metadata.grounding_chunksgrounding_supports = candidate.grounding_metadata.grounding_supportsfor support in grounding_supports:# For each segment, create a flat structure with source detailsfor i, chunk_idx in enumerate(support.grounding_chunk_indices):chunk = grounding_chunks[chunk_idx]# Check if chunk has retrieved_contextif hasattr(chunk, 'retrieved_context'):source_info = chunk.retrieved_contextflat_metadata.append({"text_segment": support.segment.text,"source_uri": source_info.uri,"source_title": source_info.title,"confidence": support.confidence_scores[i] if hasattr(support, 'confidence_scores') else None})return output_texts, flat_metadata# Example usagedef run_vertex_search_query(prompt):output_texts, flat_metadata = perform_vertex_search_inference(prompt)# Print results in the same format as the exampleprint("Model Response:")for text in output_texts:print(text)print("\nRetrieval Queries:", prompt)if flat_metadata:print("\nGrounding Metadata:")print(json.dumps(flat_metadata, indent=2))return output_texts, flat_metadata# Example queryprompt = "What is wandb weave?"results = run_vertex_search_query(prompt)
위 코드 스니펫으로 Vertex AI 내의 내부 데이터 스토어를 검색하도록 Gemini 모델을 구성했습니다. The DATA_STORE_ID 이 설정에서 는 우리가 생성하고 관련 문서로 채운 특정 Google Cloud 데이터 스토어를 가리킵니다. 이 ID를 통해 Gemini 모델은 내부 데이터 소스에 접근해 정보를 검색할 수 있으며, 웹 기반 데이터에만 의존하지 않고 업로드한 콘텐츠를 근거로 응답을 생성합니다.
코드에서는 프로젝트와 리전을 지정해 Vertex AI를 초기화한 뒤, Vertex AI의 Tool.from_retrieval 메서드로, Vertex AI Search를 그라운딩 도구로 통합합니다. 이 구성은 모델이 Google Cloud Storage의 사용자 지정 데이터를 참조하도록 보장하며, 질의에 대한 응답을 보완하거나 안내하는 데 해당 데이터를 사용합니다. 이렇게 하면 프롬프트를 보냈을 때 모델이 일반적인 답변만 생성하는 것이 아니라, 데이터 스토어에서 구체적이고 관련성 높은 세부 정보를 검색하여, 응답이 매우 맥락적이고 저장된 정보와 정합되도록 만듭니다.
각 프롬프트마다 perform_vertex_search_inference 함수는 모델의 응답을 처리합니다. 생성된 콘텐츠, 그라운딩 메타데이터, 그리고 소스 URI와 검색된 데이터 세그먼트의 신뢰 점수 등 기타 관련 세부 정보를 수집합니다. 이 구조화된 정보는 모델이 참조한 특정 문서와 섹션, 그리고 각 세그먼트에 대한 신뢰 수준을 함께 보여 주어, 그라운딩된 응답의 투명성과 추적 가능성을 보장합니다.
Weave가 환경에 통합되면, 각 호출마다 perform_vertex_search_inference 함수 호출이 자동으로 기록되어 그라운딩 과정의 전체 이력이 보존됩니다. 이를 통해 @weave.op 함수에 대해, 그리고 Weave를 다음으로 초기화합니다 weave.init("gemini_vertex_search_grounding")각 입력 프롬프트, 응답, 그리고 그라운딩 소스, 신뢰 점수, 데이터 세그먼트와 같은 관련 메타데이터가 모두 Weave 대시보드에 기록됩니다.
이 로깅 설정을 통해 시간이 지남에 따라 모델이 내부 데이터 스토어와 어떻게 상호작용하는지 시각화할 수 있어, 접근한 정보의 관련성과 그라운딩된 응답의 일관성을 더 쉽게 분석할 수 있습니다!
위 스크립트를 실행한 뒤, Weave에 다음과 같은 데이터가 기록된 것을 확인할 수 있습니다:

결론
Vertex AI의 Gemini 모델과 같은 도구를 통해 생성형 AI 출력에 그라운딩을 적용하는 것은 AI 기반 상호작용에서 정확성, 신뢰성, 맥락적 적합성을 보장하는 획기적인 진전입니다. 웹 검색과 내부 데이터 저장소를 통합함으로써, 이들 시스템은 정적인 학습 데이터의 한계를 넘어 동적이고 검증 가능한 응답을 제공합니다.
이 튜토리얼은 정밀함이 요구되는 다양한 산업 분야에서 강력한 AI 모델과 혁신적인 그라운딩 방법을 결합하는 일이 이제는 얼마나 큰 잠재력을 지니며, 또 얼마나 쉬워졌는지를 보여줍니다. 개발자가 이러한 기능을 활용하면 사용자 신뢰를 높일 뿐만 아니라, 더 정교하고 투명한 AI 애플리케이션을 위한 기반을 마련하여 생성형 AI의 새로운 표준을 제시할 수 있습니다. 튜토리얼이 유익하셨길 바랍니다!
Building an LLM Python debugger agent with the new Claude 3.5 Sonnet
Building a AI powered coding agent with Claude 3.5 Sonnet!
How to train and evaluate an LLM router
This tutorial explores LLM routers, inspired by the RouteLLM paper, covering training, evaluation, and practical use cases for managing LLMs effectively.
Training a KANFormer: KAN's Are All You Need?
We will dive into a new experimental architecture, replacing the MLP layers in transformers with KAN layers!
Building a real-time answer engine with Llama 3.1 405B and W&B Weave
Infusing llama 3.1 405B with internet search capabilities!!
Add a comment