Gemini RAG 완전 분석 및 튜토리얼

채널 아이콘
Sam Witteveen 구독자 81,400명

요약

이 영상에서는 구글 Gemini API에 새롭게 추가된 File Search 도구를 활용해 자동화된 RAG(정보 보강 생성) 워크플로우를 구현하는 과정을 단계별로 설명합니다. 기본 UI 시연부터 TypeScript 예제 코드 분석, 커스텀 청킹·메타데이터 필터링 등 고급 활용법, 그리고 실제 법정 문서 및 YouTube 전사 자료를 RAG 처리해보는 사례를 다룹니다. 마지막으로 Agentic RAG 확장 가능성을 논의하며 RAG의 주요 응용 가치를 강조합니다.

주요 키워드

RAG File Search 임베딩 벡터 스토어 청킹 메타데이터 필터 Grounding Chunk Gen AI SDK Agentic RAG

하이라이트

  • 🔑 File Search 도구 출시: Gemini API 팀이 PDF·코드·로그·JSON 등 다양한 문서를 자동으로 청크(chunk)·임베딩해 벡터 스토어로 관리하는 내장 RAG 시스템을 공개했습니다.
  • ⚡️ 데모 앱 시연: 간단한 웹 UI로 파일을 업로드하면 자동으로 임베딩이 생성되고, 질문 시 벡터 검색을 통해 자연어 응답과 소스 청크별 인용(citations)을 손쉽게 확인할 수 있습니다.
  • 📌 기본 코드 예제: Gen AI SDK와 TypeScript를 사용해 파일 검색 스토어(store)를 생성·업로드하고, 단일 쿼리로 문서를 질의해 요약·메타데이터를 반환하는 과정을 보여줍니다.
  • 🌟 고급 활용법: 최대 토큰 수 설정, 중첩(overlap) 청킹, 사용자 정의 메타데이터(제목·URL·키워드) 적용, 다중 파일 입력 및 메타 필터링 사용법을 상세히 다룹니다.
  • 🚀 메타데이터 필터링: 제목 또는 URL 필터를 통해 수백 개의 문서 중 원하는 대상만 빠르게 선별해 검색 정확도를 높이는 방법을 소개합니다.
  • 🔍 근거(chunk) 추적: 응답에 포함된 grounding chunks·grounding supports를 활용해 결과의 출처를 투명하게 추적하고 검증하는 방법을 설명합니다.
  • 📈 비용·제한 안내: 최대 100MB 문서 업로드, 무료 tier 1GB 스토리지 제공, 임베딩 호출은 정상 요금, 스토리지 및 쿼리 임베딩 무료 등 현황을 정리했습니다.
  • 💡 Agentic RAG 전망: 에이전트가 인터넷 문서를 찾아 직접 File Search 스토어를 생성하고 다중 질문(multihop)으로 자체 RAG를 수행하는 확장 시나리오를 제시합니다.

용어 설명

RAG(정보 보강 생성)

외부 지식(문서, 데이터베이스 등)을 LLM 입력에 보강해 더 정확한 응답을 만드는 기법

File Search 도구

Gemini API 내장 RAG 기능으로, 다양한 파일을 업로드해 자동으로 청크·임베딩·벡터 스토어화하는 서비스

임베딩(embedding)

텍스트 청크를 고차원 벡터로 변환해 의미적 유사도를 계산하도록 돕는 기법

벡터 스토어(vector store)

임베딩된 벡터들을 저장·검색하는 데이터베이스로, 유사도 기반 검색에 사용

청킹(chunking)

긴 문서를 작은 조각(청크)으로 나눠 임베딩 및 검색 효율을 높이는 처리

메타데이터 필터링

각 청크에 제목, URL, 키워드 등을 붙여 검색 시 특정 속성으로 결과를 제한하는 기능

Grounding Chunk

LLM 응답 생성에 사용된 문서 청크들의 실제 내용과 범위를 나타내는 메타 정보

Agentic RAG

에이전트가 스스로 정보를 수집·업로드해 동적으로 RAG 워크플로우를 구성하는 확장 개념

[00:00:00] File Search 도구 개요

Gemini API에 도입된 새로운 File Search 도구의 전반적 기능을 소개합니다. PDF·코드·마크다운·로그·JSON 등 다양한 포맷 지원, 자동 청킹·임베딩·벡터 스토어 생성 과정을 개념적으로 설명합니다.

Gemini 3.0 출시를 기다리는 동안 Gemini API 팀이 새로운 파일 검색 도구를 소개했습니다. 이는 자동화된 RAG 시스템으로 PDF, 코드, 마크다운, 로그, JSON 등 다양한 문서를 업로드할 수 있습니다.
파일을 업로드하면 시스템이 파일 저장소를 프로비저닝하고, 파일을 처리하여 청크로 나누고, Gemini 임베딩 모델로 임베딩을 생성합니다. 쿼리 시에는 벡터 저장소 조회를 통해 관련 정보를 자연어로 응답하고 인용까지 제공합니다.
[00:01:06] 데모 앱 시연

간단한 웹 UI 예제로 파일 업로드→임베딩 처리→질의 응답 생성 과정을 직접 체험합니다. 결과 답변과 함께 grounding chunks를 인용 양식으로 확인하는 방법을 보여줍니다.

Gemini Build 도구를 사용한 데모 앱을 통해 실제 작동 방식을 보여줍니다. 파일을 업로드하면 임베딩 프로세스를 거쳐 파일 저장소에 저장되고, 질문 제안 기능도 제공합니다.
[00:02:09] 기본 코드 예제 분석

TypeScript 기반 예제 코드로 Gen AI SDK 초기 설정, File Search 스토어 생성, 단일 문서 업로드 및 질의 흐름을 분석합니다. prompt 구성, 도구(tool) 지정, 응답 메타데이터 활용 방식을 설명합니다.

시스템은 전체 문서를 컨텍스트 윈도우에 로딩하지 않고, 쿼리만 로딩한 후 벡터 검색을 통해 관련 응답을 가져오는 방식으로 효율적으로 작동합니다.
시스템이 청크들을 조합하여 답변을 생성하고, 각 답변마다 소스 청크들을 제공하는 과정을 보여줍니다. 현대 i10에 대한 질문 예시를 통해 RAG 시스템의 동작을 설명합니다.
TypeScript로 구현된 코드 구조를 살펴보며, 서비스 부분에서 실제 Gemini API 호출이 어떻게 이루어지는지 분석합니다. 사용자에게 매뉴얼을 직접 읽으라고 하지 않도록 하는 프롬프트 설계를 강조합니다.
Gemini Flash를 사용한 샘플 질문 생성 기능을 설명합니다. 제품 매뉴얼을 기반으로 실용적인 질문들을 JSON 형태로 생성하는 프롬프트 구조와 RAG 저장소 활용 방법을 보여줍니다.
RAG 시스템의 핵심 장점을 요약합니다. 파일 업로드만으로 백엔드에서 임베딩과 벡터 저장소를 자동 처리하고, Gemini에 도구로 전달하는 간단한 구조임을 강조하며 실제 코드 예제로 넘어가겠다고 마무리합니다.
Gemini API의 파일 검색 도구 기능 소개와 다른 도구들과의 결합을 통한 고급 활용 방법을 설명합니다.
[00:06:04] 고급 코드 예제 분석

커스텀 청킹(토큰 수, 중첩), 메타데이터(제목·URL) 자동 추출, 다중 파일 업로드, 메타 필터링 등을 적용한 실전 예제를 다룹니다. 응답 필터링·멀티 홉 쿼리 구성 방법을 심층 설명합니다.

RAG 시스템의 전체 프로세스를 설명합니다. 문서 업로드, 임베딩 모델을 통한 청킹, 벡터 스토어 저장 과정을 다룹니다.
쿼리 처리 과정을 상세히 설명합니다. Gemini API 호출부터 근거 지식 필요성 판단, 다중 쿼리 생성 및 벡터 검색, 최종 답변 생성까지의 전체 플로우를 다룹니다.
실제 코드 구현을 시작합니다. Gen AI SDK 설치, Google AI Studio 키 설정, 일리야 수츠케버의 법원 증언록 PDF를 예제로 사용하는 과정을 소개합니다.
Genai 클라이언트 생성과 파일 검색 스토어 설정 과정을 시연합니다. 벡터 스토어 생성 시 표시 이름 설정 방법과 생성된 스토어의 속성 확인 방법을 다룹니다.
파일 검색 저장소의 구조와 메타데이터에 대해 설명합니다. 실제 이름, 참조명, 마지막 업데이트 시간 등을 확인할 수 있으며, 저장소 관리의 중요성을 강조합니다.
파일 검색 저장소 관리의 핵심 개념을 설명합니다. 업로드된 원본 문서는 48시간 후 삭제되지만 파일 검색 저장소는 수동 삭제 전까지 유지되므로, 모든 저장소를 확인할 수 있는 기능이 필요합니다.
Gemini API 파일 검색의 가격 정책과 제한사항을 상세히 설명합니다. 문서당 100MB 제한, 티어별 저장소 용량(무료 1GB부터 10배씩 증가), 임베딩 호출 비용 정책 등을 다룹니다.
파일 업로드 과정을 실제 예시로 보여줍니다. 'Ilia testimony01'이라는 표시명으로 문서를 업로드하며, 단순 업로드가 아닌 청킹과 임베딩을 포함한 전체 처리 과정임을 설명합니다.
업로드 작업의 비동기적 특성과 상태 모니터링에 대해 설명합니다. UI 개발 시 완료 상태를 확인하는 기능의 필요성을 강조하며, 실제 업로드가 완료된 후 쿼리를 시작하는 과정을 보여줍니다.
프롬프트 설정과 도구 구성에 대해 설명하며, 마크다운 형식과 섹션별 구성을 원한다고 언급합니다.
파일 검색 도구의 중요성과 도구 타입 설정 방법을 설명하고, 표시 이름과 실제 긴 이름의 차이를 보여줍니다.
응답 결과 분석을 시작하며, 엘론 머스크 대 샘 올트만 케이스의 메타데이터가 반환된 것을 확인합니다.
법원 문서가 공개되어 PDF를 다운로드할 수 있게 된 배경과 샘 올트만에 대한 메모 내용을 설명합니다.
응답의 진실성을 검증하는 방법으로 근거 메타데이터를 소개하며, 각 후보의 응답에서 근거 정보를 확인할 수 있다고 설명합니다.
근거 메타데이터의 다양한 구성 요소들을 살펴보고, 파일 검색뿐만 아니라 구글 맵스, 웹 검색 등 여러 도구의 정보가 포함되어 있음을 확인합니다.
구체적인 근거 지원과 근거 청크 예시를 통해 답변이 어떤 세그먼트에서 도출되었는지 추적하는 방법을 보여줍니다.
원시 텍스트 형태의 문서 내용을 확인하며, 깔끔한 포맷이 아닌 실제 문서의 모습을 보여주고 검증 과정을 마무리합니다.
그라운딩 정보가 포함된 결과를 확인하고, 다른 청크 실행 및 그라운딩 정보 검토 방법을 설명합니다.
벡터 스토어 삭제를 위한 스크립트를 소개하고, 이름으로 특정 스토어를 삭제하거나 모든 스토어를 일괄 삭제하는 방법을 제시합니다.
고급 예제로 넘어가며, 문서 결합과 추가 기능들을 포함한 더 복잡한 시나리오를 소개합니다.
커스텀 청킹, 메타데이터 추가, 여러 파일 처리 등의 고급 기능들을 추가한다고 설명하고, 8개 비디오 대본을 사용한 새로운 벡터 스토어 생성을 시작합니다.
청킹 설정 방법을 설명하며, 청크당 최대 토큰 수 250개, 겹치는 토큰 50개로 설정하고 업로드 시 전달하는 과정을 안내합니다.
여러 마크다운 파일을 글로빙으로 처리하고, 각 파일의 구조(제목, URL, 타임스탬프, 대본)를 설명하며 제목과 URL 추출 함수의 필요성을 언급합니다.
메타데이터로 사용할 제목과 URL을 반환하는 간단한 함수를 만들고, 날짜나 Gemini Flash Light 모델을 활용한 메타데이터 자동 생성 등의 확장 가능성을 제안합니다.
작고 빠른 모델을 활용해 10개의 키워드 세트를 생성하고, 비디오를 새로운 모델, 제품, 기법, 튜토리얼 등으로 분류하는 방법을 설명합니다. 이를 통해 커스텀 메타데이터를 생성하여 나중에 검색에 활용할 수 있습니다.
업로드 함수를 생성하는 과정을 보여줍니다. 파일 경로에서 제목, URL, 파일명을 추출하고, 표시명과 청킹 구성을 설정한 후 커스텀 데이터로 제목, URL, 파일명을 포함시킵니다.
실제 업로드 과정을 실행하고, 파일 API를 통한 대안적 업로드 방법을 설명합니다. 벡터 스토어에 직접 업로드하는 대신 파일 스토어로 가져오는 방법도 소개합니다.
OpenAI가 출시한 브라우저 이름에 대한 질문으로 시스템을 테스트합니다. 마크다운 형식으로 간결하게 답변하도록 지시하며, 가장 가까운 타임스탬프를 반환하는 기능에 대해서도 언급합니다.
Atlas 브라우저에서 검색한 결과, 올바른 영상 대본과 URL, 타임스탬프를 포함한 그라운딩 데이터를 확인할 수 있으며, 이를 JSON 형식으로 반환받아 링크에 적용하면 영상의 특정 지점으로 바로 이동하는 기능을 구현할 수 있다고 설명합니다.
그라운딩 청크와 그라운딩 지원 기능을 통해 다양한 인용 출처와 심층적인 데이터를 얻을 수 있지만, 쿼리 관련 기능은 구글 검색용으로 한정되어 있어 실행한 쿼리 정보는 제공되지 않는다는 아쉬움을 표현합니다.
여러 영상을 대상으로 한 검색 예시를 보여주며, Sam이 Claude에 관해 만든 영상들에 대해 질문하면 올바른 URL과 제목, 설명을 제공하는 기능을 시연합니다.
메타데이터를 활용한 검색 방법을 설명하며, 특정 영상에 대한 질문 시 메타데이터 없이는 혼란스러워하지만, 제목이나 URL 필터를 제공하면 정확한 영상을 식별해서 답변할 수 있다는 것을 실제 예시로 보여줍니다.
Gemini API 호출 시 추가 지시사항 없이도 메타데이터를 활용한 문서 검색과 필터링 기능을 구현할 수 있다고 설명합니다.
수백 개의 텍스트 파일을 추가하고 날짜와 같은 메타데이터 필터를 활용해 시스템을 확장할 수 있는 방법을 소개합니다.
벡터 스토어의 문서 목록을 확인하고 전체 스토어를 삭제하는 방법을 보여주며 기본적인 관리 기능을 설명합니다.
[00:23:31] 결론 및 활용 방향

File Search 도구로 빠른 RAG 프로토타입 구축 이점을 정리합니다. 비용·제한 사항 안내 후 Agentic RAG 같은 고급 응용 시나리오를 제시하며 RAG의 미래 가치를 전망합니다.

Gemini API의 파일 검색 도구로 빠른 RAG 솔루션을 구축할 수 있지만, 복잡한 기능이 필요하면 처음부터 개발해야 한다고 한계를 언급합니다.
사용자가 문서를 직접 업로드하고 쿼리할 수 있는 기능을 빠르게 구현하고 좋은 결과를 얻을 수 있는 장점을 강조합니다.
자, 모든 사람이 Gemini 3.0 출시를
기다리고 있는 동안, Gemini API 팀에서
이번 주에 정말 멋진 새로운
기능을 소개했습니다. 이것은 기본적으로
자동화된 또는 내장된 RAG
시스템으로, Gemini API와 함께
사용할 수 있습니다. 이것은 실제로 파일
검색 도구라고 불립니다. 이것이 실제로
하는 일은 기본적으로 다양한
종류의 문서를 업로드할 수 있게
해주는 것입니다. PDF든,
코드든, 텍스트 마크다운
파일이든, 심지어 로그와 JSON
파일 같은 것들까지요. 그리고 이것은
파일 저장소를 프로비저닝하고
실제로 파일들을 처리하고 청크로 나누어
임베딩을 수행한 다음
기본적으로 Gemini를 호출하고
이 벡터 저장소를
실제 Gemini API와 함께 사용하기 위한 근거로
RAG 데이터베이스를 제공하는 시스템을 줍니다.
여기서 이것이 실제로
어떻게 작동하는지 보면
파일 검색이라고 부르고 있습니다. 왜
Gemini RAG 같은 이름으로
부르지 않는지 잘 모르겠지만, 근본적으로 이것은
정말로 간소화된 전체 RAG
프로세스입니다. 작동 방식은
몇 가지 파일을 업로드하고
파일 저장소의 일부가 되는
방식으로 업로드합니다. 이 파일들이
업로드되면, 분할되고
청크로 나뉘고, 각 청크는
Gemini 임베딩 모델을 사용해서
임베딩이 만들어집니다. 그리고
쿼리 시간에 기본적으로
이 파일 검색 도구를 전달하여 Gemini API를
호출하면, 백엔드에서
쿼리를 임베딩하고, 벡터 저장소
조회를 수행하고, 관련
정보를 가져와서 자연어
응답으로 만들고, 심지어
UI 등에서 실제로 사용할 수 있도록
사용자에게 반환할 수 있는
인용 세트까지 제공합니다. 실제로
Gemini Build 종류의 바이브 코딩 도구를 사용해서
이것의 데모 앱을 만들었고
여기서 확인할 수 있습니다.
기본적으로 업로드를 위해 클릭하거나
예제 중 하나를 사용할 수 있습니다.
이 경우에는 여기 있는 예제를
사용하겠습니다. 왜냐하면 이 다음에
코드를 사용한 간단한 버전과
더 고급 버전 모두를 살펴볼 예정이기 때문입니다.
실제로 내부에서 무슨 일이
벌어지고 있는지의 세부사항을
보여드리겠습니다. 하지만 보시다시피
여기 나오면, 이것을 업로드하면
임베딩 세트를 생성하는
프로세스를 거치고, 쿼리를 실행할 때
벡터 조회를 할 수 있도록
이 파일 저장소에 함께 결합됩니다.
쿼리도 임베딩됩니다. 그리고
처리가 완료되면,
여기에 문서가 있는 것을 볼 수 있습니다.
물어볼 수 있는 몇 가지 질문도
제안해줍니다. 그 제안들 중
일부를 클릭할 수 있습니다. 실제로
잠시 후에 이것의 코드를
살펴보겠습니다.
보시다시피 전체 문서를
컨텍스트 윈도우에 로딩하지 않습니다.
우리의 쿼리만 로딩하고 특정 수의
응답을 받아오기 위해 나갑니다.
백엔드에서 받아온 응답들을
청크들을 가져와서 조합합니다.
보시다시피 시스템이 실행되어
실제로 답변을 제공해주고 있습니다.
그리고 그 위에 각각에 대해
실제로 소스 청크들을 볼 수 있습니다.
따라서 원한다면 여기서 특정 부분을
하이라이트하거나 그런 기능들을 위해
추가적인 코드를 작성해야 할 것입니다.
하지만 우리가 볼 수 있는 것은
이것이 원시 시스템이 실제로
얻어내서 여기 답변을 만들 때
다섯 개의 소스로 사용하는 것입니다.
지금 저는 현대 i10이 뭔지도
사실 모르거든요.
그럼 그것이 무엇인지 물어봅시다.
이것으로부터 그것이 무엇인지 알 수 있습니다.
시스템이 그 자동차에 대한 정보를
찾아서 알아낼 수 있었습니다.
여기로 와서 실제 소스들을
볼 수 있습니다. 만약 그들이
어떻게 이것을 구현했는지 코드를 보고 싶다면
꽤 좋은데, 실제로 여기로 와서
이 코드를 볼 수 있거든요.
아이콘들은 별로 중요하지 않고
우리가 관심 있는 것은 여기 서비스 부분에서
내려가서 실제 Gemini 호출을 보는 것입니다.
보시다시피 이 경우에는
기본적으로 TypeScript 파일입니다.
실제로 여기에 무엇이 있는지 보고 싶다면
우리의 쿼리를 가져와서
거기에 추가할 것입니다. 사용자에게
매뉴얼을 읽으라고 하지 말라는 내용이요.
뭔가의 매뉴얼에 관한 RAG 시스템이
매뉴얼에서 답을 찾으라고 말한다면
좀 당황스러울 수 있거든요.
기본적으로 관련 섹션을
정확히 찾아내라고 말하는 것입니다.
그것이 들어가는 실제 프롬프트에
추가되는 내용입니다. 그리고
만약 그들이 어떻게 실제
샘플 질문들을 생성하는지 알고 싶다면
그에 대한 프롬프트도 여기에 있습니다.
이 두 경우 모두에 대해 Gemini Flash를
사용하고 있습니다. 종종 사람들은
이런 종류의 제안 프롬프트 기능에는
Gemini Flashlight를 사용합니다.
하지만 여기서 제안 프롬프트를 위해
일부 제품에 대한 사용자
매뉴얼들이 제공된다고 볼 수 있습니다.
커버 페이지를 기반으로 각 매뉴얼이
어떤 제품에 대한 것인지 파악하세요.
추측하거나 환각하지 마세요.
그다음 각 제품에 대해 짧고 실용적인
네 가지 질문을 영어로 생성하세요.
그리고 실제로 시스템이
그 질문들을 JSON 배열 객체로
반환하라고 지시하고 있음을 볼 수 있습니다.
실제 JSON이 어떻게 되어야 하는지
예시들을 가지고 있습니다. 그리고 여기서
두 쿼리 모두에 대해 실제 RAG 저장소 이름이
여기에 제공되고 있음을 볼 수 있습니다.
그래서 그것은 임베딩된 청크들을
가지고 있고, 등등 이 과정을 거쳐갑니다.
가장 간단한 수준에서 우리가 볼 수 있는 것은
이것에 복잡한 것이 많지 않다는 것입니다.
정말로 파일을 업로드하기만 하면 됩니다.
백엔드에서 임베딩을 처리해주고
백엔드에서 벡터 저장소도 처리해줍니다.
그리고 우리는 Gemini를 호출하여
기본적으로 이것을 Gemini가 사용할 도구로
전달하기만 하면 됩니다. 따라서
가장 좋은 방법은 들어가서
코드 예제를 살펴보고 가장 간단한 예제와
할 수 있는 것들을 보면서,
동시에 다른 도구들과 결합해서
더 고급 예제를 만들어보는 방법도
살펴보겠습니다. 자, 시작해봅시다.
코드로 들어가기 전에,
실제로 어떤 일이 일어나는지
먼저 살펴보겠습니다. 고수준 프로세스를 보면,
기본적으로 인덱싱을 통해
문서를 파일 스토리지에 업로드합니다.
이 과정이 완료되면,
임베딩 모델을 거치게 됩니다.
문서들이 청크로 나뉘어지는데,
이 설정도 조정할 수 있습니다.
고급 코드 과정에서 보여드리겠습니다.
이 과정을 마치면,
벡터 스토어에 저장되고
실제로 사용할 수 있게 됩니다.
쿼리 시점에서는
사용자가 Gemini API를 호출하거나
우리 앱이 Gemini API를 호출합니다.
그러면 질문에 답하기 위해
근거 지식이 필요한지 판단합니다.
필요하지 않다면,
일반 Gemini로 답변합니다.
필요하다면, 실제 RAG 부분으로 가서
몇 개의 쿼리를 생성합니다.
하나일 수도, 여러 개일 수도 있습니다.
각 쿼리에 대해
임베딩이 수행됩니다.
그리고 데이터베이스나 벡터 스토어로
전달되어 가장 관련성 높은 청크를
가져옵니다.
여러 쿼리가 있다면,
멀티홉 답변을 위해 이 과정이
여러 번 반복될 수 있습니다.
실제로 여기서 여러 쿼리를
수행할 것입니다.
그리고 모든 결과를 Gemini로
다시 가져와서 원래 쿼리와 결합해
최종 답변을 생성합니다.
코드로 들어가서
실제 코드로 어떻게 구현되는지 보겠습니다.
먼저 최신 버전의
Gen AI SDK가 설치되어 있는지 확인해야 합니다.
그리고 여기에
Google AI Studio 키가 있어야 합니다.
이 경우에는
기본적으로 PDF 파일을 가져옵니다.
실제로 가져오는 것은
법원 문서입니다. 이번 주에 나온 것으로
실제로는 일리야 수츠케버의
증언록인 것 같습니다.
그가 샘 알트만을 며칠간
해고하게 된 배경과
그런 결정을 내린 이유 등에 대해
이야기했습니다. 이것은
엘론 머스크와 OpenAI 또는 샘 알트만 간의
진행 중인 소송의 일부인 것 같습니다.
다른 사람들의 해석에만 의존하지 말고
직접 살펴보고 싶었습니다.
하지만 꽤 길어서
특정 질문들을 해보고
답변을 확인한 다음
근거 문서나 인용문을
살펴보겠습니다.
문서를 준비했으니
먼저 Genai 클라이언트를 만들겠습니다.
그리고 이 파일 검색 스토어를
설정하겠습니다. 이것이 기본적으로
우리의 벡터 스토어입니다.
표시 이름을 설정할 수 있는데,
여기서는 SAM basic이라고 했습니다.
생성되고 나면 타임스탬프와
표시 이름을 확인할 수 있습니다.
실제 기본 이름과
파일 검색 저장소에서 참조되는 이름을 볼 수 있습니다.
그리고 마지막 업데이트도 확인할 수 있죠.
정말 중요한 점 중 하나는
모든 파일 검색 저장소를
확인할 수 있어야 한다는 겁니다.
업로드한 원본 문서들은
48시간 후에 삭제되지만
파일 검색 저장소는 직접 삭제할 때까지 유지됩니다.
그래서 언제든지
계정에 있는 모든 파일 검색 저장소를
확인할 수 있어야 합니다.
지금 보시면 목록을 출력하고 있는데
기본적으로 하나만 있습니다.
나중에 마지막 부분에서
이를 삭제하는 방법을 보여드리겠습니다.
그래야 계속 비용을 지불하지 않아도 되거든요.
가격과 속도 제한에 대해 말씀드리면
문서당 최대 파일 크기는
100메가바이트입니다.
무료 티어를 사용하면
파일 검색 저장소를 1GB까지 사용할 수 있고
티어 1 등에서는 10배씩 늘어납니다.
그 다음은 다시 10배, 또 그 다음도 10배죠.
이에 대한 가격은 상당히
합리적입니다.
실제로 업로드할 때
임베딩 호출에 대해서만
Gemini 임베딩의 정상 가격으로 비용을 지불합니다.
즉, 벡터 저장소 스토리지는
현재로서는 무료인 것 같습니다.
향후에 바뀔지는 모르겠지만요.
그리고 쿼리 시점의
실제 임베딩도 무료입니다.
마지막으로
다른 Gemini API 호출과 마찬가지로
일반 토큰에 대해서만 요금이 청구됩니다.
좋습니다. 파일 검색 저장소가 설정되면
실제로 무언가를 업로드하고 싶을 겁니다.
여기서 이 문서를
업로드하고 있는 것을 볼 수 있습니다.
표시 이름을
Ilia testimony01로 설정했습니다.
이를 전달하고 실제 파일 검색 저장소 이름도 전달합니다.
여기서 볼 수 있는 것이 바로 그것입니다.
우리가 업로드할 곳이죠.
나중에 고급 예제에서
여러 문서 업로드 방법을 보여드리겠습니다.
여기서 이를 시작하면
단순한 업로드 이상의
작업이 진행됩니다.
업로드하고 가져오고 처리하는 과정에서
청킹, 임베딩 등이
수행됩니다.
그래서 이 작업을 다시 받고
무엇이 진행되고 있는지 볼 수 있습니다.
언제든지 완료되었는지 확인할 수 있죠.
이를 위한 UI를 만든다면
해야 할 일 중 하나는
완료되었는지 확인하는 것입니다.
그리고 아마 완료되지 않았다면
'대기 중'이라고 표시하고
완료되면 '완료'라고
출력하면 됩니다.
이 경우 업로드가 꽤 빨리 됐고
이제 완료되었습니다.
이 시점에서 수집과
실제 벡터 저장소 임베딩 설정 등이
모두 완료된 겁니다.
이제 호출만 하면 되고
여기서 볼 수 있듯이
'이 문서에 대해 알려줘'라고
시작하겠습니다.
프롬프트에 몇 가지 내용을 추가했습니다.
다른 예시에서 보여드린 것처럼
기본적으로 마크다운 형식으로 반환되기를 원합니다.
섹션과 불렛포인트 형식으로 말이죠.
그래서 사용자 프롬프트에
이런 내용을 추가하고 있습니다.
여기서 정말 중요한 것은
기본적으로 도구들을 갖고 있다는 것입니다.
도구 목록이 있고
전달하는 것이 도구 타입입니다.
파일 검색 타입의 파일 검색이고
실제 이름을 전달하고 있습니다.
기억하세요, 이것은
표시 이름이 아닙니다.
긴 이름입니다.
마우스를 올려보면
실제로 Sam basic luh 등등으로 되어 있는 것을 볼 수 있습니다.
그러면 응답을 받게 됩니다.
response.text를 출력할 수 있고
실제로 이렇게 메타데이터로
반환해 주는 것을 볼 수 있습니다.
문서 앞부분에서
누가 발언하고 있는지,
증언 날짜,
엘론 머스크 대 샘 올트만 사건 등의
정보가 있습니다.
기밀성이 고도 기밀로 표시되어 있고
제가 온라인에서 본 바로는
실제로 법원 문서에
공개되었습니다.
그래서 누구나 다운로드할 수 있어서
제가 PDF를 구한 것입니다.
그리고 간단한 요약이나
무슨 일이 일어나고 있는지 볼 수 있습니다.
이것은 모두 제가 샘 올트만에 대해
작성한 메모에 관한 것입니다.
많은 내용이 들어있고
다른 사람들의 의견과
반응도 있습니다.
이것이 사실인지 어떻게 알 수 있을까요?
여기 와서 이 메타데이터를 볼 수 있습니다.
각 후보에 대한 응답의 일부로
근거가 된 메타데이터를 받습니다.
이 경우 스크롤해서 보면
문서의 많은 부분이 있지만
근거 청크들도 있습니다.
답변을 준 부분들을 볼 수 있고
어떤 청크들을 참조하는지
확인할 수 있습니다.
이것을 보여드리기 위해
실제로 들어가서
딕셔너리 키들을 볼 수 있습니다.
근거 메타데이터가
파일 검색 도구만을 위한 것이 아니라
구글 맵스 관련 것들,
웹 검색과 관련된
다양한 것들이 있습니다.
우리가 관심 있는 것은
근거 청크들과 근거 지원들입니다.
여기 와서 보면
네 번째 근거 지원과
근거 청크들을 볼 수 있고
여기 근거 지원이 있습니다.
기본적으로 세그먼트가 있고
어디서 나온 것인지 알 수 있습니다.
해당 근거 청크를 보면
대응하는 근거 청크에서
실제 답변이 어디서 나오는지
볼 수 있습니다.
여기 원시 텍스트가 있습니다.
이 텍스트에는 이런 줄들이 있고
실제로 문서가 어떤지 볼 수 있습니다.
깔끔하게 포맷된 문서나
그런 것이 아닙니다.
실제로 무슨 일이 일어나고 있는지 볼 수 있고
다시 돌아와서 확인할 수 있습니다.
모든 그라운딩과 그런 정보들을
다 담고 있는 걸 볼 수 있죠. 이제 만약
다른 청크를 실행하고 싶다면, 내가 뭘 본 걸까요?
이번 건은 여러분이 직접 실행해보시면 됩니다.
돌아오는 답변도 확인할 수 있고
그라운딩이나 그런 부분도 살펴볼 수 있죠.
자, 마지막으로 이것을 삭제하고
기본적으로 스토어를 제거하려면
작은 스크립트를 준비해뒀습니다.
여러분 키의 모든 스토어를
삭제할 겁니다. 이름으로 스토어를
가져올 수도 있고, 이런 것들 중 하나
를 할 수 있는 방법이죠. 그리고 그 하나만
삭제할 수도 있습니다. 아니면 이 경우처럼
반복해서 모든 스토어를
삭제하는 방법도 있죠. 자, 이제
좀 더 고급 예제를 살펴보죠. 문서에서
몇 가지를 결합하고
다른 것들도 함께 처리하는
방법을 보겠습니다. 네, 이 예제는
좀 더 고급스럽습니다. 우리가
이전에 없던 몇 가지
기능들을 추가해볼 겁니다.
주로 커스텀 청킹, 메타데이터 추가,
여러 파일 처리 같은 것들이죠.
시작은 똑같습니다. 여기서 제가
한 일은 제 최근 8개 비디오의
대본 세트를 가져온 것입니다.
보시다시피 꽤 다양한 주제들입니다.
그게 바로 제가 목표로 한 것이었죠.
이번엔 새로운 벡터 스토어를 만들겠습니다.
Sam YouTube 대본 벡터 스토어라고
부르겠습니다. 이걸 보시면
확실히 잘 만들어진 걸 볼 수 있고
그런 것들이 있죠. 그리고 목록을
불러서 뭐가 있는지 확인할 수 있습니다.
좋습니다. 다음으로는 업로드를 위한
청킹 설정을 해야 합니다.
청킹은 기본적으로 설정으로 전달됩니다.
현재로서는 그렇게 많은 옵션이 없습니다.
미래에는 변경될 수도 있지만, 여기서
청크당 최대 토큰 수를
250으로 설정할 수 있습니다.
이 경우 겹치는 토큰을 50으로
설정할 수 있죠. 그리고 업로드할 때
기본적으로 전달할 겁니다.
좋습니다. 여러 파일을 처리할 때는
대본 폴더를 글로빙할 겁니다.
보시다시피 각각의 경로가
마크다운 파일인 경로를 가지고 있습니다.
우리가 원하는 것은 그 중 하나의
마크다운 파일을 보면
기본적으로 첫 번째 줄이 제목이고
두 번째 줄이 URL인 대본이 있고
나머지는 타임스탬프와
대본 내용이 들어가는 구조죠.
보시다시피 여기서는 제목과 URL을
추출하는 정말 간단한
함수를 만들고 있습니다.
이것은 기본적으로 뭔가를 전달하면
제목과 URL을
반환해서 메타데이터로 사용할 겁니다.
날짜 같은 것들도 추가할 수 있죠.
적용할 수 있는 메타데이터가 정말 많습니다.
실제로 전체 기사를
Gemini Flash Light 모델에 전달해서
메타데이터를 만들어달라고 요청하는
다른 함수를 만들 수도 있습니다.
실제로 전체 기사를
Gemini Flash Light 모델에 전달해서
메타데이터를 생성하도록 하는
함수도 만들 수 있죠.
그래서 제가 과거에 해봤던 좋은 방법은
이런 정말 작고 빠른 모델들을 사용해서
10개의 키워드 세트를 요청하는 것입니다
다양한 정보를 얻기 위해서요
원하는 것들을 얻어내고
분류 작업도 할 수 있습니다
예를 들어 이 비디오가
새로운 모델, 새로운 제품,
기법, 튜토리얼 같은 것에
관한 것인지 말이죠
이렇게 하면 정말 잘 작동해서
커스텀 메타데이터를 많이 얻을 수 있고
나중에 검색할 때 사용할 수 있습니다
예를 들어, 튜토리얼만
검색하고 싶거나
OCR 모델에 관한 비디오만
검색하고 싶을 때 말이죠
그리고 제대로 작동하는지 테스트하기 위해
제목, URL, 파일명을
반환하도록 하겠습니다
보시다시피 잘 작동합니다
목록을 확인하고 출력해보면
데이터가 제대로 들어가 있는 걸 볼 수 있습니다
좋습니다. 다음으로
업로드 함수를 만들어보겠습니다
여기서는 기본적으로 파일 경로를 전달합니다
거기서 제목, URL을 추출하고
파일명을 얻은 다음 이것들을 전달합니다
보시다시피
표시명을 제목으로 설정하고
청킹 구성은
앞서 정의한 청킹 구성을 사용합니다
그리고
커스텀 데이터는
지금은 기본적으로
제목, URL, 파일명을 사용합니다
앞서 말했듯이
실제로는 키워드나
다른 것들을 메타데이터로
많이 포함할 수 있습니다
매번 진행하면서
업로드가 완료되었는지 확인합니다
완료되면
업로드 및 인덱싱이 완료되었다고 출력합니다
이제 실행해보면
보시다시피 진행되면서
각 문서를 업로드합니다
원한다면 파일 API에
업로드할 수도 있습니다
이것은 다른 API입니다
벡터 스토어에 직접 올리는 게 아니라
이 시점에서 실제로
가져올 수 있습니다. 따라서
이것과 매우 유사한 작업을 할 수 있지만
파일 검색 스토어에 업로드하는 대신
파일 스토어로
가져오는 것입니다
이미 파일이 업로드되어 있다면 말이죠
좋습니다. 이 경우
테스트해보고 어떻게 되는지 보겠습니다
여기서 기본적으로 OpenAI가 출시한
브라우저의 이름이 무엇인지 묻고 있습니다
프롬프트를 전달하고
마크다운으로 반환하라는
지시사항도 함께 전달합니다. 간결하게요
여기서 실제로 할 수 있는 것 중 하나는
이것과 함께 실험해볼 수 있는데
실제로 가장 가까운 타임스탬프를
반환하도록 할 수 있습니다
진행되면서 보시겠지만
정답을 꽤 쉽게 맞춥니다
그 문서들을 살펴보면서
다음을 찾아낼 수 있습니다
Atlas가 브라우저의 이름입니다. 그리고
실제로 근거로 삼고 있는 그라운딩 데이터를 보면
올바른 영상 대본을 찾았다는 걸 알 수 있습니다.
문제없죠. URL도 포함되어 있고요.
이 대본과 타임스탬프까지
여기에 들어있습니다. 그래서 실제로
타임스탬프를 반환하는 결과를 얻을 수 있고
JSON 형식이나 비슷한 형태로
요청할 수도 있습니다. 그런 다음
그걸 초 단위 시간으로 변환하고
링크에 전달해서 누군가 클릭하면
실제로 그 내용이 논의된 영상의
정확한 지점으로 이동하게 할 수 있습니다.
영상에서 이 내용을 다룬 부분 말이죠.
이것도 우리가 살펴볼 수 있는 방법입니다.
모든 인용 출처를 보고 싶다면요.
보시는 것처럼
다음 내용을 살펴보면 이런
다양한 인용 출처들이 있죠. 논의되고 있는 부분들
그리고 이전과 마찬가지로
제가 보여드리는 건 실제로
여기 안에 여러 가지가 있다는 것입니다.
그라운딩 청크와 그라운딩 지원을 얻죠.
안타깝게도 쿼리 관련 기능은
구글 검색용인 것 같습니다.
이걸 위한 게 아니라요. 그래서
실제로 실행한 쿼리들과
그런 것들을 반환해준다면 좋을 텐데
몇 개나 있었는지도요.
하지만 그라운딩 청크와
그라운딩 지원을 보면
우리가 방금 전에 살펴본 것보다
훨씬 더 심층적인 내용을
얻을 수 있습니다. 맞죠. 이제
이것도 보여드리기 위해서
다음과 같은 것도 할 수 있습니다.
여러 영상에 대해 질문하는 거죠.
8개 중 2개는 Claude 스킬에 관한 것이고 하나는 Haiku에 관한 것이었습니다.
실제로 Sam이 Claude에 대해 만든 영상이 뭐가 있냐고
URL을 달라고 요청하면
올바른 URL들을 반환하고
영상 제목들과
그에 대한 간단한 설명까지
제공해줍니다. 여기서 살펴보죠.
만약 메타데이터를 사용해서
검색을 하고 싶다면 어떨까요?
여기서 기본적으로 이렇게 말하고 있습니다.
Sam이 이 영상에서 뭘 말하고 있나요?
자, 이 영상이라는 것은
8개 영상 중 어느 것이든 될 수 있습니다.
만약 메타데이터를 제공하지 않는다면
혼란스러워할 것이고
어떤 영상을 말하는 건지 모르겠다고
대답할 겁니다.
하지만 제목과 일치하는 메타 필터를 전달하고
이 제목을 넣어주면 이제
아, 이 영상을 말하는 거구나 하고
파악해서 필터링해줍니다.
또 다른 좋은 예는
URL로만 검색하고 싶을 때입니다.
보시는 것처럼
여기 URL은 Claude 스킬에 관한 것이었습니다.
그래서 그걸 복사해뒀죠. 그리고
이제 똑같은 질문을 합니다. Sam이 이 영상에서
뭘 말하고 있나요?
하지만 이번에는 메타데이터가
URL 필터로 전달되었습니다.
그리고 확실히
Claude 스킬에 관한 내용을 얻습니다.
그에 대한 분석도 얻죠.
이런 것들을 가지고
실험해볼 수 있다는 걸 기억하세요.
추가 지시사항을 넣지 않았지만
이것은 여러분이
Gemini API 호출 시 하는 것처럼
할 수 있는 기능입니다. 보시다시피
우리는 이제 기본적으로
여러 문서를 가지게 되었습니다.
메타데이터도 있고, 이 메타데이터를 기반으로
응답을 필터링할 수 있습니다.
이제 여기에 수백 개의
다른 텍스트 파일들을 넣어서
정말 확장할 수 있습니다.
그러면 시스템이 검색하고
날짜를 메타 필터로 사용하는 것과
같은 기능들을 넣을 수 있습니다.
좋습니다. 마지막으로
벡터 스토어에 있는 문서들을
실제로 확인해서 무엇이 있는지
볼 수 있도록 목록을 출력할 수 있습니다.
그리고 마지막으로 실제로
모든 것을 삭제하려면
우리 스토어를 삭제하기만 하면
기본적으로 모든 것이 제거됩니다.
이 영상을 통해 Gemini API의
파일 검색 도구를 사용해서
매우 빠른 RAG 솔루션을 구축하고
테스트할 수 있다는 것을
보여드렸기를 바랍니다. 물론
가장 화려한 RAG 솔루션은
아닙니다. 당연히 많은
다른 기능들을 원한다면
처음부터 구축해야 할
필요가 있습니다. 하지만 사용자가
직접 많은 문서들을
업로드하고 이를 쿼리할 수 있는
기능을 정말 빠르게 구현하고 싶다면
이것은 매우 빠르게 시작할 수 있고
정말 좋은 결과를 얻을 수 있습니다.
어쨌든, RAG에 대한 더 많은
내용에 관심이 있다면 댓글로
알려주세요. 저는 RAG 관련
작업을 오랫동안 하지 않다가
최근 업무 때문에 다시
돌아오고 있습니다. 그리고 이것은
정말로 오늘날 LLM을 사용하는
핵심 애플리케이션 중 하나입니다.
특히 에이전틱 RAG 같은 것들 말이죠.
그리고 이것을 사용해서
에이전트가 나가서 검색하고
인터넷에서 문서를 찾으면서
자체 RAG를 구축하는 모습을 상상할 수 있습니다.
이런 문서들을 업로드하고
자체 RAG를 만들어서
나중에 스스로 질문하는데
사용할 수 있습니다.
어쨌든, 항상 그렇듯이 어떻게 생각하시는지 댓글로 알려주세요. 이 영상이 유용했다면 좋아요와 구독을 눌러주시고, 다음 영상에서 뵙겠습니다.