YouTube 데이터 API 없이 RAG를 위한 YouTube 스크립트 추출 (Python, 30줄)
요약
본 가이드는 YouTube Data API의 제약사항을 우회하여 RAG 시스템 구축에 필요한 스크립트를 추출하는 방법을 다룹니다. Apify와 같은 외부 스크래퍼를 사용하여 비디오 URL, 채널명 등 다양한 소스에서 타임스탬프가 포함된 스크립트 데이터를 가져옵니다. 이후 이 데이터를 적절한 크기로 분할하고 ChromaDB 같은 벡터 저장소에 로드하여 출처가 명확한 RAG 봇을 완성하는 과정을 설명합니다.
핵심 포인트
- YouTube Data API의 한계를 우회하는 방법 제시
- Apify를 활용해 다양한 소스에서 스크립트 추출 가능
- 스크립트를 타임스탬프 기반 청크로 분할하여 임베딩해야 함
- RAG 봇에 출처(URL, 시간)를 명시하여 신뢰도 향상
YouTube는 LLM(대규모 언어 모델)에 연결할 수 있는 최고의 지식 출처 중 하나입니다. 여기에는 컨퍼런스 강연, 튜토리얼, 제품 데모, 실적 발표 콜, 팟캐스트 등이 포함됩니다. 문제는 이 텍스트를 추출하는 것입니다.
공식 경로는 이것을 지원하지 않습니다. YouTube Data API의 captions.download 엔드포인트는 OAuth가 필요하며, 사용자가 소유한(또는 소유자가 제3자 기여를 허용한) 비디오에 대해서만 작동합니다. "경쟁사 채널 인덱싱"이나 "300개 컨퍼런스 강연을 기반으로 하는 RAG 봇 구축"과 같은 작업에는 막다른 길입니다. 일반적인 Python 우회 라이브러리는 YouTube가 내부 구조를 변경할 때마다 오작동하며, 수백 건의 요청만 보내도 서버 IP가 차단됩니다.
본 가이드에서는 호스팅된 스크립트 스크래퍼를 사용하여 스크립트를 타임스탬프가 찍힌 청크(chunk)로 변환하고 이를 벡터 저장소(vector store)에 로드하는 방법을 다룹니다. 각 청크는 비디오의 정확한 초 단위와 연결됩니다.
구축할 내용
YouTube URL / @채널명 / 재생목록 / 검색
│
▼
...
1단계 — 스크립트 가져오기 (get transcripts)
무료 Apify 계정을 만들고, API 토큰을 복사한 다음 클라이언트를 설치하세요:
pip install apify-client
export APIFY_TOKEN=<당신의 토큰>
YouTube Transcript Scraper는 비디오 링크, Shorts, @채널명, 재생목록 또는 일반 검색 키워드를 받습니다. 이 스크래퍼는 전체 텍스트와 타임스탬프가 찍힌 segments를 포함하여 비디오당 한 행을 반환합니다:
import os
from apify_client import ApifyClient
...
한 행은 다음과 같습니다 (축소되었으며, 값은 예시입니다):
{
"videoId": "zjkBMFhNj_g",
"title": "[1시간 강연] 대규모 언어 모델 소개",
...
가격은 스크립트당 부과됩니다 ($1,000개당 $3). 캡션이 없거나 비공개 또는 삭제된 비디오는 비용이 들지 않습니다. Apify의 무료 플랜 월간 크레딧으로는 수백 개의 비디오를 처리할 수 있으며, 이는 프로토타입을 만드는 데 충분합니다.
2단계 — 타임스탬프와 함께 청크 나누기 (chunk with timestamps)
하나의 영상 전체 스크립트를 하나의 벡터로 임베딩하지 마세요. 이를 약 300단어 단위의 오버랩(overlap)이 있는 창으로 분할하고, 각 창의 시작 시간을 유지하세요. &t=123s와 같은 딥 링크는 답변을 검증 가능하게 만듭니다:
CHUNK_WORDS, OVERLAP = 300, 50
def chunks(video):
...
Step 3 — 벡터 스토어에 로드하기
어떤 스토어도 작동합니다. 여기서는 설정이 필요 없는 Chroma를 사용했습니다:
import chromadb
col = chromadb.PersistentClient("yt_index").get_or_create_collection("talks")
...
발견된(hits) 결과를 모델에 "_답변은 발췌 내용에서만 하고 URL을 인용하세요"와 같은 지침과 함께 전달하면, 모든 채널에 대해 출처가 명시되고 타임스탬프가 정확한 RAG 봇이 완성됩니다.
보너스 — 에이전트가 직접 스크립트를 가져오게 하기 (MCP / LangChain)
사전에 인덱싱하는 대신, 에이전트에게 크롤러를 **도구(tool)**로 제공할 수 있습니다. 호스팅되는 Apify MCP 서버에 이 내용을 Claude Desktop, Cursor 또는 VS Code에 추가하세요:
{
"mcpServers": {
"apify": {
...
그런 다음 "@mkbhd의 최근 5개 영상을 요약하고 그가 추천하는 모든 제품을 목록으로 만드세요."라고 요청하세요.
LangChain에서는 한 줄로 끝납니다: ApifyActorsTool("murch1k/youtube-transcript-scraper")를 langchain-apify 패키지에서 가져옵니다.
실용적인 팁
- 언어: 선호도 순서대로 `
위의 다섯 가지 모두 Apify의 pay-per-result Actor입니다 (구독 필요 없음; Apify 무료 플랜의 월간 크레딧으로 테스트 실행 가능):
-
YouTube Transcript Scraper: 비디오, 채널 및 플레이리스트의 타임스탬프가 포함된 스크립트.
-
Career Site Jobs Scraper: Greenhouse, Lever, Ashby, Workday 및 4개 이상의 ATS에서 공개 채용 공고를 가져옵니다.
-
Google Trends Scraper: 시간 경과에 따른 관심도, 관련 검색어 및 주제.
-
Website Contact Details Extractor: 도메인당 이메일, 전화번호 및 소셜 미디어 정보를 추출합니다.
각 Actor별 Python, Node.js, LangChain 및 MCP 예제는 **GitHub의 apify-scrapers-pack**에 있습니다. 별점을 주시면 다른 사람들이 이 자료를 찾는 데 도움이 됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기