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