🤖AI

AI 튜토리얼 질문에 유튜브 영상 푸터 자동 첨부: gemini_llm_service & youtube_search_service 연동기

AI 튜토리얼 질문에 유튜브 영상 푸터를 자동으로 첨부하는 기능을 개발했습니다. Gemini LLM과 YouTube Search Service 연동 시 겪었던 문제점과 해결 과정을 공유합니다.

📅 2026년 5월 23일·📖 6분 읽기·👁 16

튜토리얼성 질문에 유튜브 영상 푸터 자동 첨부: gemini_llm_service & youtube_search_service 연동기

AI 튜토리얼 질문에 유튜브 영상 푸터를 자동으로 첨부하는 기능을 개발하게 됐어요. 처음엔 단순히 질문에 맞는 유튜브 영상을 찾아서 푸터로 보여주면 되겠다고 생각했죠.

시도와 함정

처음에는 gemini_llm_service에서 질문의 의도를 파악하고, 그 키워드를 가지고 youtube_search_service로 영상을 검색하는 방식으로 접근했어요. 그런데 이게 생각보다 쉽지 않더라고요.

질문이 좀 애매모호할 때, gemini_llm_service가 엉뚱한 키워드를 뽑아내는 경우가 많았어요. 예를 들어 "파이썬으로 웹사이트 만들기" 같은 질문에 "웹사이트"라는 키워드만 뽑아서 검색하면 너무 일반적인 영상만 나오는 식이었죠.

# 초기 시도 코드 (가상)
from gemini_llm_service import GeminiLLM
from youtube_search_service import YouTubeSearch

gemini = GeminiLLM() youtube = YouTubeSearch()

question = "파이썬으로 간단한 웹사이트 만드는 방법 알려줘" keywords = gemini.extract_keywords(question) # 여기서 문제가 자주 발생

search_results = youtube.search(keywords)

... 영상 푸터 처리 로직 ...

이 과정에서 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

이렇게 gemini_llm_serviceyoutube_search_service를 더 밀접하게 연동하고, 각 서비스의 특성에 맞게 로직을 조정하니 훨씬 안정적으로 동작하더라고요.

결과

  • 튜토리얼성 질문에 대해 YouTube 영상의 footer를 자동으로 첨부하는 기능 구현 완료.
  • gemini_llm_serviceyoutube_search_service 연동을 통해 효율적인 검색 결과 확보.
  • 사용자 질문의 맥락을 더 잘 이해하여 관련성 높은 유튜브 영상 추천 가능.

정리 — 같은 함정 안 빠지려면

  • [ ] LLM 서비스에서 키워드 추출 시, 질문의 '맥락'과 '의도'를 충분히 고려한 프롬프트 설계.
  • [ ] 튜토리얼성 질문처럼 특정 유형의 질문에는 해당 유형에 맞는 검색 키워드 생성 로직 강화.
  • [ ] 검색 서비스에서 반환되는 결과의 '관련성'을 높이기 위한 추가적인 필터링 로직 고려.
  • [ ] 두 개 이상의 서비스를 연동할 때는 각 서비스의 장단점을 파악하고 상호 보완적인 로직 설계.

태그

#Gemini LLM#YouTube Search Service#AI#튜토리얼#연동#개발기#프롬프트 엔지니어링

📨 박주니에게 한마디

스팸·악성 메시지 방지를 위해 구글 로그인 후 메시지를 보낼 수 있어요. 비공개로 전달되며, 운영자 외에는 볼 수 없습니다.

Google 로그인 후 메시지 남기기