GenAI 비디오 트랜스크립션과 채팅
GenAI 비디오 트랜스크립션과 채팅
Docker를 사용해 생성형 AI 비디오 분석 및 트랜스크립션 봇을 만들고 배포하는 방법을 배워볼게요.
출처: 문서
본문
개요
이 가이드는 GenAI Stack 과 관련된 일련의 기술을 사용해 비디오 트랜스크립션과 분석 프로젝트를 소개해요.
이 프로젝트가 보여주는 기술:
- Docker와 Docker Compose
- OpenAI
- Whisper
- 임베딩(Embeddings)
- 채팅 완성(Chat completions)
- Pinecone
- RAG(검색 증강 생성)
감사의 말: 이 가이드는 커뮤니티 기여예요. Docker는 이 가이드에 기여한 David Cardozo 님께 감사를 전해요.
사전 요구사항
- OpenAI API Key 가 있어야 해요.
참고: OpenAI는 타사 호스팅 서비스이며 요금 이 부과될 수 있어요.
- Pinecone API Key 가 있어야 해요.
- 최신 버전의 Docker Desktop 을 설치했어야 해요. Docker는 정기적으로 새 기능을 추가하므로 이 가이드의 일부 부분은 최신 버전의 Docker Desktop에서만 작동할 수 있어요.
- Git 클라이언트 가 있어야 해요. 이 섹션의 예제는 명령줄 기반 Git 클라이언트를 사용하지만, 어떤 클라이언트든 사용할 수 있어요.
어플리케이션 소개
이 어플리케이션은 비디오에서 오는 질문에 답할 수 있는 챗봇이에요. 또한 질문에 답하는 데 사용된 출처를 찾는 데 도움이 되는 비디오의 타임스탬프를 제공해요.
어플리케이션 가져오기 및 실행
샘플 어플리케이션의 리포지토리를 클론해주세요. 터미널에서 다음 명령을 실행해주세요.
$ git clone https://github.com/Davidnet/docker-genai.git
프로젝트에는 다음 디렉터리와 파일이 포함돼요:
├── docker-genai/
│ ├── docker-bot/
│ ├── yt-whisper/
│ ├── .env.example
│ ├── .gitignore
│ ├── LICENSE
│ ├── README.md
│ └── docker-compose.yaml
API 키를 지정해주세요. docker-genai 디렉터리에서 .env 라는 텍스트 파일을 만들고 내부에 API 키를 지정해주세요. 다음은 참고할 수 있는 .env.example 파일의 내용이에요.
#-------------------------------------------------------------------------
# OpenAI
#-------------------------------------------------------------------------
OPENAI_TOKEN=your-api-key # Replace your-api-key with your personal API key
#-------------------------------------------------------------------------
# Pinecone
#-------------------------------------------------------------------------
PINECONE_TOKEN=your-api-key # Replace your-api-key with your personal API key
어플리케이션을 빌드하고 실행해주세요. 터미널에서 docker-genai 디렉터리로 이동한 뒤 다음 명령을 실행해주세요.
$ docker compose up --build
Docker Compose는 docker-compose.yaml 파일에 정의된 서비스에 따라 어플리케이션을 빌드하고 실행해요. 어플리케이션이 실행 중일 때 터미널에서 2개 서비스의 로그를 볼 수 있어요.
로그에서 서비스가 포트 8503 과 8504 에 노출된 것을 볼 수 있어요.
두 서비스는 서로 보완적이에요.
yt-whisper 서비스는 포트 8503 에서 실행돼요. 이 서비스는 지식 데이터베이스에 보관하려는 비디오로 Pinecone 데이터베이스를 채워요. 다음 섹션에서 이 서비스를 살펴볼게요.
yt-whisper 서비스 사용하기
yt-whisper 서비스는 OpenAI Whisper 모델을 사용해 비디오의 트랜스크립션을 생성하고 Pinecone 데이터베이스에 저장하는 YouTube 비디오 처리 서비스예요. 다음 단계는 이 서비스를 사용하는 방법을 보여줘요.
브라우저를 열고 http://localhost:8503 에서 yt-whisper 서비스에 접근해주세요.
어플리케이션이 나타나면 Youtube URL 필드에 YouTube 비디오 URL을 지정하고 Submit 을 선택해주세요. 다음 예제는 https://www.youtube.com/watch?v=yaQZFhrW0fU 를 사용해요.
yt-whisper 서비스는 비디오의 오디오를 다운로드하고, Whisper로 이를 WebVTT( *.vtt ) 형식(다운로드 가능)으로 트랜스크립션한 다음, text-embedding-3-small 모델로 임베딩을 만들고, 마지막으로 그 임베딩을 Pinecone 데이터베이스에 업로드해요.
비디오를 처리한 후 웹 앱에 비디오 목록이 나타나 Pinecone에 어떤 비디오가 인덱싱됐는지 알려줘요. 또한 트랜스크립트를 다운로드하는 버튼도 제공해요.
이제 포트 8504 의 dockerbot 서비스에 접근해 비디오에 대해 질문할 수 있어요.
dockerbot 서비스 사용하기
dockerbot 서비스는 Pinecone 데이터베이스와 AI 모델을 모두 활용해 응답을 제공하는 질문·응답 서비스예요. 다음 단계는 이 서비스를 사용하는 방법을 보여줘요.
참고: dockerbot 서비스를 사용하기 전에 yt-whisper 서비스로 비디오를 하나 이상 처리해야 해요.
브라우저를 열고 http://localhost:8504 에서 서비스에 접근해주세요.
What do you want to know about your videos? 텍스트 상자에서 yt-whisper 서비스로 처리된 비디오에 대해 Dockerbot에게 질문해주세요. 다음 예제는 "What is a sugar cookie?"라고 질문해요.
그 질문에 대한 답은 이전 예제에서 처리된 비디오 https://www.youtube.com/watch?v=yaQZFhrW0fU 에 존재해요.
이 예제에서 Dockerbot은 질문에 답하고 답에 대한 추가 정보가 있을 수 있는 타임스탬프가 있는 비디오 링크를 제공해요.
dockerbot 서비스는 질문을 가져와 text-embedding-3-small 모델로 임베딩으로 바꾸고, Pinecone 데이터베이스를 쿼리해 유사한 임베딩을 찾은 다음, 그 컨텍스트를 gpt-4-turbo-preview 에 전달해 답을 생성해요.
첫 링크를 선택해 어떤 정보를 제공하는지 확인해주세요. 이전 예제에 기반해 https://www.youtube.com/watch?v=yaQZFhrW0fU&t=553s 를 선택해주세요.
예제 링크에서 "What is a sugar cookie?"라는 질문에 비디오의 해당 섹션이 완벽하게 답한다는 것을 볼 수 있어요.
어플리케이션 아키텍처 탐구
다음 이미지는 어플리케이션의 고수준 서비스 아키텍처를 보여주며, 다음을 포함해요:
- yt-whisper: Docker Compose가 실행하는 로컬 서비스로, 원격 OpenAI 및 Pinecone 서비스와 상호작용해요.
- dockerbot: Docker Compose가 실행하는 로컬 서비스로, 원격 OpenAI 및 Pinecone 서비스와 상호작용해요.
- OpenAI: 원격 타사 서비스.
- Pinecone: 원격 타사 서비스.
사용된 기술과 역할 탐구
Docker와 Docker Compose
어플리케이션은 Docker를 사용해 컨테이너에서 실행해 일관되고 격리된 환경을 제공해요. 이는 기본 시스템 차이와 무관하게 어플리케이션이 Docker 컨테이너 안에서 의도한 대로 동작한다는 것을 의미해요. Docker에 대해 더 알려면 컨테이너화 튜토리얼 을 참고하세요.
Docker Compose는 멀티 컨테이너 어플리케이션을 정의하고 실행하는 도구예요. Compose를 사용하면 docker compose up 이라는 단일 명령으로 이 어플리케이션을 쉽게 실행할 수 있어요. 자세한 내용은 Compose 개요 를 참고하세요.
OpenAI API
OpenAI API는 최첨단 AI와 머신러닝 기술로 유명한 LLM 서비스를 제공해요. 이 어플리케이션에서 OpenAI의 기술은 오디오에서 트랜스크립션을 생성(Whisper 모델 사용)하고, 텍스트 데이터용 임베딩을 만들며, 사용자 쿼리에 대한 응답을 생성(GPT와 채팅 완성 사용)하는 데 사용돼요. 자세한 내용은 openai.com 을 참고하세요.
Whisper
Whisper는 OpenAI가 개발한 자동 음성 인식 시스템으로, 구어를 텍스트로 트랜스크립션하도록 설계됐어요. 이 어플리케이션에서 Whisper는 YouTube 비디오의 오디오를 텍스트로 트랜스크립션해 비디오 콘텐츠의 추가 처리와 분석을 가능하게 해요. 자세한 내용은 Introducing Whisper 를 참고하세요.
임베딩
임베딩은 텍스트나 다른 데이터 타입의 수치적 표현으로, 머신러닝 알고리즘이 처리할 수 있는 방식으로 의미를 포착해요. 이 어플리케이션에서 임베딩은 비디오 트랜스크립션을 쿼리하고 사용자 입력과의 관련성을 분석할 수 있는 벡터 형식으로 변환해, 어플리케이션에서 효율적인 검색과 응답 생성을 가능하게 해요. 자세한 내용은 OpenAI의 Embeddings 문서를 참고하세요.
채팅 완성
이 어플리케이션에서 OpenAI API를 통해 활용되는 채팅 완성은 주어진 컨텍스트나 프롬프트에 기반해 대화형 응답을 생성하는 것을 의미해요. 어플리케이션에서는 비디오 트랜스크립션과 다른 입력에서 정보를 처리·통합해 사용자 쿼리에 지능적이고 컨텍스트를 아는 답을 제공해 챗봇의 대화형 능력을 향상시켜요. 자세한 내용은 OpenAI의 Chat Completions API 문서를 참고하세요.
Pinecone
Pinecone은 유사도 검색에 최적화된 벡터 데이터베이스 서비스로, 대규모 벡터 검색 어플리케이션을 구축·배포하는 데 사용돼요. 이 어플리케이션에서 Pinecone은 비디오 트랜스크립션의 임베딩을 저장·검색해 사용자 쿼리에 기반한 효율적이고 관련성 있는 검색 기능을 어플리케이션 안에서 가능하게 해요. 자세한 내용은 pincone.io 를 참고하세요.
RAG(검색 증강 생성)
Retrieval-Augmented Generation(RAG)은 정보 검색을 언어 모델과 결합해 검색된 문서나 데이터에 기반해 응답을 생성하는 기법이에요. RAG에서 시스템은 관련 정보를 검색하고(이 경우 비디오 트랜스크립션의 임베딩을 통해), 그다음 언어 모델을 사용해 검색된 데이터에 기반해 응답을 생성해요. 자세한 내용은 OpenAI의 RAG Question Answering with Pinecone 쿡북 을 참고하세요.
다음 단계
생성형 AI를 사용해 PDF 봇 어플리케이션 을 만드는 방법을 탐구하거나 GenAI Stack 리포지토리 에서 더 많은 GenAI 샘플을 확인해보세요.
더 알아보기 (Learn more)
- GenAI Stack
- OpenAI Whisper
- Pinecone
- RAG(검색 증강 생성)