검색
검색
공개 노트 검색
회원가입로그인
나를 위해 일해주는 AI 에이전트 만들기

두번째 에이전트 - 유튜브 요약 에이전트

오늘은 로컬에서 무료로 작동하는 유튜브 요약 에이전트를 만들어 보겠습니다. 유튜브의 자막을 가져와서 이를 바탕으로 요약을 하는 방식입니다.

YouTube transcripts | 🦜️🔗 LangChain

langchain 의 유튜브 로더를 사용하겠습니다. 유튜브 로더는 youtube-transcript-api 라는 파이썬 패키지를 사용합니다. 유튜브의 자막을 가져오는 패키지입니다. 하지만 공식 API가 아닌 비공식 API 이기 때문에 나중에 중단될 수 도 있습니다. 유튜브에서는 자막을 스크랩하는 것을 원격 서버에서는 막아놨습니다. 하지만 개인 로컬 PC에서의 사용까지는 막지 않았기 때문에 사용할 수 있습니다.

vscode로 넘어가서 진행하겠습니다. 먼저 전에 만들었던 agent 라는 폴더에 ytsummary 라는 폴더를 만들겠습니다.

메뉴의 Terminal 에서 new terminal 을 선택하면 터미널 환경으로 이동할 수 있습니다.

이런 메시지가 표시될 수 있는데 이전 웹 에이전트를 만들 때 agent 폴더에 agent 라는 가상 환경을 만들었기 때문입니다. agent의 하위 폴더에서 터미널을 실행하면 가상 환경을 자동으로 활성화 해주는 것을 알 수 있습니다.

가상 환경 설정은 이전 편의 웹 요약 에이전트를 참고해 주세요.

만약 가상 환경 설정이 필요하지 않으시면 그냥 진행하셔도 괜찮습니다.

먼저 랭체인이 설치 되어 있지 않다면 설치합니다.

pip install langchain-core langchain langchain-community

자막을 가져오는 파이썬 패키지도 설치하겠습니다. 제목과 같은 추가적인 정보도 가져오기 위해서 pytube도 같이 설치하겠습니다.

pip install youtube-transcript-api pytube

app.py 에 다음과 같이 작성합니다.

from langchain_community.document_loaders import YoutubeLoader
  
loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=9OtKz7-95MY", add_video_info=True,
    # 시도할 언어 리스트 (영어, 한국어, 일본어, 중국어 간체, 중국어 번체)
    language=["en", "ko", "ja", "zh-Hans", "zh-Hant"],
)
docs = loader.load()
print(docs)

이 후 터미널에서 py app.py 로 실행합니다.

이런 식으로 리스트 안에 Document 객체가 들어있는 것을 확인할 수 있습니다. 예를 들어 첫번째 Document 의 page_content 에는 docs[0].page_content 와 같이 접근할 수 있습니다. 이제 이걸 요약하면 되겠죠. 또 제목에 접근을 하려면 docs[0].metadata.get("title") 과 같이 접근할 수 있습니다.

LLM (Groq) 설정 하기

LLM은 무료 사용량을 제공하는 Groq에서 라마 3.1 70B를 사용하겠습니다.

groq와 .env 파일에서 API를 관리하기 위한 python-dotenv를 설치하겠습니다.

pip install langchain-groq python-dotenv

app.py 에 다음과 같이 추가해 주세요.

import os

os.environ["USER_AGENT"] = "yt-agent"

from dotenv import load_dotenv

from langchain_groq import ChatGroq

from langchain_community.document_loaders import YoutubeLoader

load_dotenv()  # .env 파일에서 환경 변수를 로드합니다.
api_key = os.getenv("GROQ_API_KEY")

loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=9OtKz7-95MY",
    add_video_info=True,
    # 시도할 언어 리스트 (영어, 한국어, 일본어, 중국어 간체, 중국어 번체)
    language=["en", "ko", "ja", "zh-Hans", "zh-Hant"],
)

docs = loader.load()
# print(docs)

llm = ChatGroq(
    model="llama-3.1-70b-versatile",
)

messages = [
    (
        f"Your task is to summarize the content to bullet points. Answer in Korean language.\n\n===content\n{docs[0].page_content}\n==="
    ),
]
ai_msg = llm.invoke(messages)
print(docs[0].metadata.get("title", "No title found"))
print(ai_msg.content)

ytsummary 폴더에 .env 파일을 만들고 groq의 api 키를 입력해 주세요.

https://console.groq.com/keys 에서 만들 수 있습니다. env 파일과 키는 git 저장소나 공개된 웹 및 장소에 노출되지 않도록 주의합니다.

GROQ_API_KEY=당신의_API_키

이제 터미널에서 py app.py 을 실행해 봅시다.

이렇게 유튜브 요약 에이전트가 완성되었습니다!

이제 사용하기 편리하게 웹 UI를 만들어 주는 streamlit 을 사용해 보겠습니다.

pip install streamlit

우리가 작성한 app.py 파일을 ChatGPT나 Claude 를 활용해서 스트림릿 코드로 바꿔달라고 하면 됩니다.

web.py 에 다음과 같이 작성해 주세요.

import streamlit as st
import os
from dotenv import load_dotenv
from langchain_groq import ChatGroq
from langchain_community.document_loaders import YoutubeLoader

# .env 파일에서 환경 변수를 로드합니다.
load_dotenv()
api_key = os.getenv("GROQ_API_KEY")

# Streamlit 앱 시작
st.title("YouTube Video Summarizer")

# URL 입력
youtube_url = st.text_input("Enter YouTube URL:", "")

# 요약 버튼 추가
if st.button("Summarize"):
    if youtube_url:
        os.environ["USER_AGENT"] = "yt-agent"

        # YouTubeLoader 사용하여 비디오 정보 로드
        loader = YoutubeLoader.from_youtube_url(
            youtube_url,
            add_video_info=True,
            # 시도할 언어 리스트 (영어, 한국어, 일본어, 중국어 간체, 중국어 번체)
            language=["en", "ko", "ja", "zh-Hans", "zh-Hant"],
        )

        docs = loader.load()

        if docs:
            # 제목 표시
            video_title = docs[0].metadata.get("title", "No title found")
            st.subheader(f"{video_title}")

            # ChatGroq 모델 초기화
            llm = ChatGroq(
                model="llama-3.1-70b-versatile",
            )

            # 메시지 작성 및 요약 요청
            messages = [
                (
                    f"Your task is to summarize the content to bullet points. Answer in Korean language.\n\n===content\n{docs[0].page_content}\n==="
                ),
            ]
            ai_msg = llm.invoke(messages)

            # 요약된 내용 출력
            st.write("### Summary:")
            st.write(ai_msg.content)
    else:
        st.warning("Please enter a valid YouTube URL.")

이제 터미널에서 streamlit run web.py 로 실행합니다.

다음과 같이 웹에서 작동하는 유튜브 요약 에이전트를 만들었습니다!

bat 파일 만들기

사용하기 쉽게 bat 파일을 만들어 놓고 사용하겠습니다.

ytsummary.bat 파일을 만들고 다음과 같이 작성하겠습니다.

call C:\agent\agent\Scripts\activate
cd C:\agent\ytsummary
streamlit run web.py

call 부분은 가상환경을 활성화 하는 부분입니다. 가상환경이 설치된 경로로 바꿔주시면 됩니다. 만약 가상 환경을 사용하지 않으면 이 줄을 지우면 됩니다.

그 다음은 ytsummary로 이동해서 streamlit 을 실행하는 부분입니다. 역시 경로를 맞게 수정해 주시면 됩니다.

이제 이 파일을 바탕 화면 등에 두고 실행해서 편하게 사용할 수 있습니다.

역시 막힐 경우 ChatGPT나 퍼플렉시티를 활용해서 문제를 해결해 주세요.

감사합니다!


공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기