AI 튜토리얼 질문에 유튜브 영상 푸터 자동 삽입: Gemini LLM·유튜브 검색 연동

발행: (2026년 6월 6일 PM 01:00 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

박준희

튜토리얼형 질문에 YouTube 영상 푸터 자동 첨부하기: gemini_llm_serviceyoutube_search_service 통합 로그

AI 튜토리얼 질문에 YouTube 영상 푸터를 자동으로 붙이는 기능을 개발하고 있습니다. 처음 생각은 간단했습니다. 질문과 관련된 YouTube 영상을 찾아 푸터로 표시하는 것이었습니다.

시도와 함정

첫 번째 접근 방식은 gemini_llm_service가 질문의 의도를 파악하고, 그 키워드로 youtube_search_service를 통해 영상을 검색하도록 하는 것이었습니다. 하지만 생각보다 어려웠습니다.

질문이 다소 모호할 때 gemini_llm_service가 무관한 키워드를 추출하곤 했습니다. 예를 들어 “Python으로 웹사이트를 만드는 방법”이라는 질문에 “website”라는 키워드만으로 검색하면 너무 일반적인 결과가 나옵니다.

# 초기 시도 코드 (개념)
from gemini_llm_service import GeminiLLM
from youtube_search_service import YouTubeSearch

gemini = GeminiLLM()
youtube = YouTubeSearch()

question = "Tell me how to build a simple website with Python"
keywords = gemini.extract_keywords(question) # 여기서 문제가 자주 발생

search_results = youtube.search(keywords)
# ... 영상 푸터 처리 로직 ...

Enter fullscreen mode

Exit fullscreen mode

이 과정에서 gemini_llm_service가 반환하는 키워드의 정확도가 낮아 youtube_search_service가 원하는 영상을 찾지 못하는 경우가 반복되었습니다. 이 부분만 해결하느라 약 3시간을 소비했습니다.

원인

궁극적인 문제는 gemini_llm_service가 질문의 맥락을 충분히 파악하지 못하고 지나치게 일반적인 키워드를 추출한다는 것이었습니다. 특히 튜토리얼형 질문에서는 키워드만으로 적절한 영상을 찾기가 어렵다는 것을 깨달았습니다.

해결책

그래서 프롬프트를 수정해 gemini_llm_service가 질문이 튜토리얼 요청임을 명확히 인식했을 때에만 구체적인 검색 키워드를 생성하도록 했습니다. 또한 youtube_search_service에 추가 필터링 로직을 구현해 검색 결과의 관련성을 높였습니다.

# 수정된 프롬프트 예시 (gemini_llm_service 내부)
prompt = f"""
You are an AI assistant that helps users find relevant YouTube tutorials.
Given the following user question, extract specific keywords that would be ideal for searching YouTube for a tutorial.
Focus on the core topic and any specific technologies or methods mentioned.
If the question is clearly a request for a tutorial, be more specific in your keyword extraction.

User Question: "{user_question}"
Keywords:
"""

# youtube_search_service에 튜토리얼에 적합한 영상을 필터링하는 로직 추가 (개념)
def search_and_filter_tutorials(query):
    results = youtube_search_service.search(query)
    # 튜토리얼 영상에 더 적합하도록 결과를 필터링하는 로직 (예: 영상 길이, 채널 정보)
    filtered_results = [video for video in results if is_likely_tutorial(video)]
    return filtered_results

def is_likely_tutorial(video):
    # 간단한 휴리스틱: 제목에 'tutorial', 'how to', 'guide'가 포함되거나
    # 설명에 관련 키워드가 많이 들어있거나 영상 길이가 적절할 경우
    title = video.get('title', '').lower()
    description = video.get('description', '').lower()
    duration = video.get('duration_seconds', 0)

    if any(keyword in title for keyword in ['tutorial', 'how to', 'guide']):
        return True
    if 'python' in description and 'web development' in description:  # 예시
        return True
    if 300 < duration < 3600:  # 5분~1시간 사이 영상
        return True
    return False

Enter fullscreen mode

Exit fullscreen mode

gemini_llm_serviceyoutube_search_service를 보다 긴밀히 연동하고, 각 서비스의 특성에 맞게 로직을 조정하면서 시스템이 훨씬 안정적으로 동작하기 시작했습니다.

결과

  • 튜토리얼형 질문에 대해 YouTube 영상 푸터를 자동으로 붙이는 기능을 성공적으로 구현했습니다.
  • gemini_llm_serviceyoutube_search_service의 통합을 통해 효율적인 검색 결과를 확보했습니다.
  • 사용자 질문의 맥락을 더 잘 이해함으로써 높은 관련성을 가진 YouTube 영상을 추천할 수 있게 되었습니다.

교훈 — 같은 함정을 피하기 위해

  • LLM 서비스에서 키워드를 추출할 때는 질문의 **‘맥락’**과 **‘의도’**를 충분히 고려한 프롬프트를 설계합니다.
  • 튜토리얼 요청과 같은 특정 유형의 질문에 대해서는 해당 유형에 맞는 키워드 생성 로직을 강화합니다.
  • 검색 서비스가 반환하는 결과의 **‘관련성’**을 높이기 위해 추가 필터링 로직을 도입합니다.
  • 두 개 이상의 서비스를 통합할 때는 각 서비스의 강점과 약점을 파악하고, 이를 보완하는 논리를 설계합니다.
0 조회
Back to Blog

관련 글

더 보기 »

모바일 한여름 열풍

!Cover image for Mobile Midsommer Madnesshttps://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploa...