LLM | GPT 4o API 실습 Beginning - 3. Video + Audio based QA
Openai의 Vision 및 Text용 API를 통해 GPT-4O(Omni Model)를 사용해보기 위한 튜토리얼
MY GPT 4o API Beginning Course
1. Image( multi modal)
2. Summary( Video + Audio)
👉 3. QA( Video + Audio based chat)
이번엔 비디오와 오디오에서 학습한 내용을 기반으로 LLM( GPT 4o)에게 질의 응답할 수 있도록 API를 구성한 Video + Audio 기반QA(챗) 실습 코드들이다.
실습1. Video based Q&A
:비디오 기반 Q&A
- resource
*앞 포스팅에서 진행했던 실습 예제와 동일한 Audio, Video 파일
- code
# .env file에서 환경변수(API key)가져와서 로드하기
from dotenv import load_dotenv
load_dotenv()
# 필요한 라이브러리 로드, OpenAI API와 상호 작용을 위한 클라이언트 라이브러리
from openai import OpenAI
# 이전에 사용했던 코드 재사용, *base64Frames 리스트는 비디오 프레임을 Base64 문자열로 변환한 값
from C04_Summary_Video import base64Frames
client = OpenAI() # OpenAI API에 연결하기 위해 클라이언트를 초기화합니다.
MODEL="gpt-4o" # 응답을 생성할 모델을 지정합니다 (실제 모델 이름이나 ID로 교체하세요).
# 답변받고자 하는 질문을 정의
QUESTION = "Question: Why do you emphasise the importance of demonstrating to really understand the capabilities of the Macintosh?"
# OpenAI 클라이언트 라이브러리(chat.completions.create() 메서드)를 사용하여 채팅 응답 생성
qa_visual_response = client.chat.completions.create(
# 이 요청에 대한 모델과 시스템, 사용자 메시지 지정
model=MODEL,
messages=[
{"role": "system", "content": "Use the video to answer the provided question. Respond in Markdown."},
{"role": "user", "content": [
"These are the frames from the video.",
*map(lambda x: {"type": "image_url", "image_url": {"url": f'data:image/jpg;base64,{x}', "detail": "low"}}, base64Frames),
QUESTION
],
}
],
# 사실적인 응답으로 설정
temperature=0,
)
# 생성된 채팅 응답의 내용(message.content 속성)을 마크다운 텍스트(system content)로 출력
print("\\n\\nVideo QA:\\n" + qa_visual_response.choices[0].message.content)
- result
GPT 4o API 실습2. Audio based Q&A
:오디오 기반 Q&A
- resource
*앞 포스팅에서 진행했던 실습 예제와 동일한 Audio, Video 파일
- code
# .env file에서 환경변수(API key)가져와서 로드하기
from dotenv import load_dotenv
load_dotenv()
# 필요한 라이브러리 로드, OpenAI API와 상호 작용을 위한 클라이언트 라이브러리
from openai import OpenAI
# 이전에 사용했던 코드 재사용, transcription - 오디오를 텍스트로 변환하는 함수
from C05_Summary_Audio import transcription
client = OpenAI() # OpenAI API에 연결하기 위해 클라이언트를 초기화
MODEL="gpt-4o" # 응답을 생성할 모델을 지정
# 답변받고자 하는 질문을 정의
QUESTION = "Question: Why do you emphasise the importance of demonstrating to really understand the capabilities of the Macintosh?"
# OpenAI 클라이언트 라이브러리(chat.completions.create() 메서드)를 사용하여 채팅 응답 생성
qa_audio_response = client.chat.completions.create(
# 이 요청에 대한 모델과 시스템, 사용자 메시지 지정
model=MODEL,
messages=[
{"role": "system", "content":"""Use the transcription to answer the provided question. Respond in Markdown."""},
{"role": "user", "content": f"The audio transcription is: {transcription.text}. \\n\\n {QUESTION}"},
],
temperature=0,
)
# 생성된 채팅 응답의 내용 출력
print("\\n\\nAudio QA:\\n" + qa_audio_response.choices[0].message.content)
- result
GPT 4o API 실습3. Audio &Video based Q&A
: 비디오 오디오 통합 Q&A
- resource
*앞 포스팅에서 진행했던 실습 예제와 동일한 Audio, Video 파일
- code
# .env 파일에서 환경변수(API key) 가져와서 로드하기
from dotenv import load_dotenv
load_dotenv()
# 필요한 라이브러리 로드
from openai import OpenAI # OpenAI API와 상호 작용을 위한 클라이언트 라이브러리
from C04_Summary_Video import base64Frames # 이전 코드 재사용, 비디오를 텍스트로 변환하는 함수
from C05_Summary_Audio import transcription # 이전 코드 재사용, 오디오를 텍스트로 변환하는 함수
client = OpenAI() # OpenAI API에 연결하기 위해 클라이언트를 초기화
MODEL="gpt-4o" # 응답을 생성할 모델을 지정
QUESTION = "Question: Why do you emphasise the importance of demonstrating to really understand the capabilities of the Macintosh?"
qa_both_response = client.chat.completions.create(
model=MODEL,
# C06_Summary_VideoAudio 예제와 같이 map()을 통해 Audio, Video 관련 내용을 함께 구성
messages=[
{
"role": "system",
"content":"""Use the video and transcription to answer the provided question."""
},
{
"role": "user",
"content": [
"These are the frames from the video.",
*map(
lambda x: {
"type": "image_url",
"image_url": {"url": f'data:image/jpg;base64,{x}', "detail": "low"}
},
base64Frames
),
{
"type": "text",
"text": f"The audio transcription is: {transcription.text}"
},
QUESTION
],
}
],
temperature=0,
)
print("\\n\\nBoth QA:\\n" + qa_both_response.choices[0].message.content)
- result
개인적으로 문과이고 개발자도 아닌 입장에서 코드를 이해하는 과정은 쉽지않다. 그래서 되도록 일단 실행해서 결과를 보고 그 내용을 최대한 반복할 수 있는 코드로 재구성해서, 개인적인 경험상 '익숙한' 내용을 받아 들일 수 있도록 하는 편이다.
모르는 내용도 읽을 수 있으면 생각하게되고 그 생각을 반복하게되면 이해하게되고 이해하게되면 재미있어지는 방식을 실험적으로 적용해보기 위해 3번의 포스팅으로 구성한 GPT 4o API 실습 내용 또한 기본 골격을 기반으로 매우 유사한 코드들을 조금씩만 수정하고 결과를 볼 수 있도록 하는 코드를 하나씩 쪼개서 구성한 후 다시 상세 주석을 추가하는 형태로 진행해봤다.
원래 랭그래프 LangGraph관련 실습 코드를 포스팅할 일정이었는데;;; 이번 OpenAI 발표 내용이 너무 인상적이어서 순서를 바꿔서,, 관련 실습 내용을 올려본다.