이번 추석연휴가 지나가기 전
'만들면서 배우는 나만의 인공지능 서비스' 책을 참고하여
독학으로 진행해본 파이썬 프로젝트 : <유튜브 콘텐츠 분석 및 챗봇 만들기>
이 프로젝트를 통해 다음과 같은 내용을 익힐 수 있다.
이 모든 과정은 파이썬 코딩으로 진행!
실습 영상은 소탐대실 채널의 초코파이같은 간식류에 쇠고기, 돼지고기는 어디에 함유된 것인지 그 원인을 밝히는 내용의 컨텐츠이다. (흥미롭)
대체 어디에 소가 들어가는 걸까?라는 제목의 영상을 학습해서
챗봇형태로 질의응답을 하는 파이썬 프로젝트를 진행해보자!
# 유튜브 자막 정보 가져오기
!pip install youtube-transcript-api
# 비디오 아이디 가져오는 함수 정의
def get_video_id(video_url):
video_id = video_url.split('v=')[1][:11]
return video_id
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import TextFormatter
import textwrap
# 학습할 동영상 URL 입력
video_url = "https://www.youtube.com/watch?v=X6YwQc8jMQE"
video_id = get_video_id(video_url)
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ko'])
text_formatter = TextFormatter() # SRT 형식으로 출력 지정
text_formatted = text_formatter.format_transcript(transcript)
# text 전체 출력
text_info = text_formatted.replace("\n", " ") # 개행문자 제거
# text 일부 출력
shorten_text_info = textwrap.shorten(text_info, 150 ,placeholder=' [..이하 생략..]')
영상의 자막이 텍스트로 잘 변환되었다.
OpenAI 접속사이트(https://platform.openai.com)
개인적으로만 사용하는 토이프로젝트 수준이라면
발급받은 키를 코드상에서 그대로 입력하여 사용해도 괜찮지만
공유 및 확장성을 고려한다면
보안을 위해 환경변수 설정을 통해 토큰을 별도로 입력해주는 것이 바람직하다.
환경변수 설정하는 방법을 시도했는데, 어쩐 이유인지 잘 안되어서
차선책으로 코드를 직접 입력하는 방법으로 토큰을 입력하는 방법으로 해결하였다.
💡 Chat Completions API에서 함수 호출 단계
1. 사용자 입력과 함수 정보를 Chat Completions API 모델로 보내기
2. 모델이 사용자의 입력에 따라 함수 호출을 위한 응답(JSON 객체)이나 일반 응답을 생성
3. 함수 호출을 위한 응답일 경우 JSON객체의 구문을 분석하고, 인수가 있는 경우 인수를 사용해 함수 호출
4. 함수 호출 결과를 기존 메시지에 추가해 Chat Completions API 모델로 다시 보내고 응답 결과를 사용자에게 표시
pip install openai
import openai
def answer_from_given_info(question_info, prompt):
# 입력 정보에 기반해 답변 요청
user_content = f"{prompt} 다음 내용을 바탕으로 질문에 답해 줘. {question_info}"
messages = [ {'role': 'user', 'content': user_content} ]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
#max_tokens=500,
stop = ["."],
temperature=0.2 )
return response['choices'][0]['message']['content'] # 응답 결과 반환
openai.api_key='발급받은 키 입력'
이제 몇가지 질문을 통해, 제대로 학습이 되었는지 검증을 해보자😎
💥 참고로 영상에 의하면
돼지고기(젤라틴)는 마시멜로우에, 쇠고기는 우지라는 소기름이 빵부분에 들어가며 빵처럼 부드러운 식감이 아닌 바삭하고 부스러지는 식감을 낼 때 포함되는 것
question_info = text_info # 자막을 가져온 내용을 학습 데이터로 사용
prompt = "초코파이에는 왜 쇠고기가 들어가나요?" # 질문
response = answer_from_given_info(question_info, prompt)
print(response)
#초코파이에는 소고기가 들어가는 이유는 풍미와 식감을 더해주기 위해서입니다
영상에 다음과 같은 멘트가 실제로 나온다.
정확하다. 다음 질문을 던져보자
이 부분은 '우지'라는 답변을 기대한 질문인데 다소 정확도가 아쉬운 답변이었다. 혹시 우지라는 개념이 학습이 된 것은 맞을까? 다른 질문을 던져보자.
우지에 대한 개념은 있다. 다시 한번 다르게 질문을 해볼까?
이럴수가. 갑자기 또 안들어간다고 한다🤣
4살 아이를 학습하는 것 같은 기분이 들었다.
API 파트에서 결제하는 것 때문에 좀 헤매었는데, 책에 있는 샘플 코드 덕분에 그래도 비교적 간단하게 파이썬 프로젝트의 결과물을 내볼 수 있었다.
다음 실습에서는 이 파이썬 프로젝트를 좀 더 발전시켜서 웹앱으로 챗봇 ui를 만들어 사용의 편의성을 높인 형태로 제작해봐야겠다.