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)
OpenAI, Spring Update(May 13, 2024) 이후, 유뷰브와 뉴스 등 온라인 미디어는 말 그대로 충격의 도가니탕이다. 발표와 시연 영상들이 복붙에 복붙에 복붙으로 바이럴? 콘텐츠처럼 퍼지고 있다. 나 또한 믿기지 않는 시연에 한 동안 그냥 충격으로 멍했던 것 같다. 그리고 관련 코드를 찾아 바로 GPT 4o API 실습을 진행해보았다.
실습 환경설정
01) root폴더에 api key 및 깃헙 설정 파일을 추가한다
.env 파일 작성
OPENAI_API_KEY=OpenAI에서발급받은API키
.gitignore 작성
참조 링크 - https://docs.github.com/ko/get-started/getting-started-with-git/ignoring-files
02) 로컬에 있는 다른 프로젝트관련 패키지 의존성 충돌을 피하기 위해 별도 가상환경 설정하고 실행한다.
가상환경 생성
python -m venv 내가정하고싶은가상환경이름
가상환경 실행
mac - source 내가정하고싶은가상환경이름/bin/activate
win - 내가정하고싶은가상환경이름\bin\activate
03) 의존 패키지 설치
pip install -U openai opencv-python moviepy python-dotenv
GPT 4o API 실습1. 기본 채팅 구성
- code
# dotenv 패키지에서 load_dotenv 함수 로드
from dotenv import load_dotenv
# .env라는 파일로부터 환경변수를 불러오는 함수 실행
load_dotenv()
# OpenAI 패키지 추가
from openai import OpenAI
# OpenAI 클라이언트 생성
client = OpenAI()
# 사용할 채팅 모델 지정
MODEL="gpt-4o"
# OpenAI API를 사용하여 반환된 채팅 응답을 저장하기 위한 'completion' 객체를 생성
completion = client.chat.completions.create(
model=MODEL, # 사용할 모델
messages=[ # 시간순으로 메시지 객체를 배열로 전달
{"role": "system", "content": "You are a helpful assistant. Help me with my math homework!"},
{"role": "user", "content": "Hello! Could you solve 2+2?"}
]
)
# 채팅봇의 응답을'choices' 속성에서 첫 번째 선택사항을 가져와 출력
print("Assistant: " + completion.choices[0].message.content)
- result
GPT 4o API 실습2. 멀티 모달 - 로컬
: 로컬에 있는 이미지를 인식한 후 해석한 후 수학 문제 풀기
- resource
- code
# 환경변수 로딩
from dotenv import load_dotenv
load_dotenv()
# 이미지 처리 라이브러리와 OpenAI 라이브러리 불러오기
from openai import OpenAI
import base64
client = OpenAI() # OpenAI 클라이언트 초기화
MODEL="gpt-4o" # 모델 지정
IMAGE_PATH = "resource/triangle.png" # 이미지 경로 지정
# 함수 정의: 이미지 파일을 base64로 인코딩하는 함수
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# 이미지 인코딩
base64_image = encode_image(IMAGE_PATH)
# 대화형 요청(챗창과 유사) 생성.
# system과 user의 역할이 있고, 각각 메시지를 담고 있음.
# user의 메시지 중 삼각형 이미지가 첨부됨.
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "You are a helpful assistant that responds in Markdown. Help me with my math homework!"},
{"role": "user", "content": [
{"type": "text", "text": "What's the area of the triangle?"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}
}
]}
],
temperature=0.0,
)
# 응답 출력
print(response.choices[0].message.content)
- result
GPT 4o API 실습3. 멀티 모달 - 온라인
: 온라인(url)에 있는 이미지를 인식한 후 수학 문제 풀기
- resource
- code
# 환경변수 로딩
from dotenv import load_dotenv
load_dotenv()
# 이미지 처리 라이브러리와 OpenAI 라이브러리 불러오기
from openai import OpenAI
client = OpenAI()
MODEL="gpt-4o"
# 클라이언트를 사용하여 대화를 생성
# system과 user의 역할이 있고, 각각 메시지를 담고 있음
# 시스템의 메시지를 제공하여 챗봇의 역할을 정의
# user의 메시지에 핵심 질문과 함께 삼각형의 이미지가 있는 URL을 제공
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "You are a helpful assistant that responds in Markdown. Help me with my math homework!"},
{"role": "user", "content": [
{"type": "text", "text": "What's the area of the triangle?"},
{"type": "image_url", "image_url": {"url": "<https://github.com/normalstory/gpt4o_beginning/blob/main/resource/triangle_note.png?raw=true>"}
}
]}
],
temperature=0.0,
)
# 응답 출력
print(response.choices[0].message.content)
- result
개인적으로 수학에 대한 풀이 과정도 놀라웠지만.. 이미지를 인식하고 해석하는 부분에 있어서는 충격적이었다. 첫 이미지는 구글 슬라이드로 작성했었지만 두 번째 이미지는 포스트잇 위에 손으로 그리고 주변까지 포함한 이미지를 첨부음에도 너무 잘 인식하고 문제를 풀어줬기 때문이다.
ChatGPT의 등장과 함께 영어 교육 시장이 큰 변화가 일고 있는 것으로 알고 있다. 그동안 산수도 잘 못하던 LLM이.. 이제 상당히 많이 업데이트 된 것 같다. 아니, 그보다.. 단순히 발전의 문제가 아닌, 보편화 되었다. 조만간 다른 llm들도 상향 평준화될 것이 분명한데.. 이를 통해 이번엔 수학 관련 제품 시장에서의 큰 변화가 예상된다.
'새로워지기 > 마흔의 생활코딩' 카테고리의 다른 글
LLM | GPT 4o API 실습 Beginning - 3. Video + Audio based QA (0) | 2024.05.15 |
---|---|
LLM | GPT 4o API 실습 Beginning - 2. Summarization( Video + Audio) (0) | 2024.05.15 |
LangGraph - 실습 1. Agent Executor (0) | 2024.05.13 |
LLM 관련, my study flow (0) | 2024.05.13 |
LangGraph - 1. 개요 (0) | 2024.05.09 |
댓글