[Day 9] OpenAI o1 ๋ฐ ๊ฐ๋ฐ์๋ฅผ ์ํ ์๋ก์ด ๋๊ตฌ
์๋ณธ ๊ฒ์๊ธ: https://velog.io/@euisuk-chung/Day-9-OpenAI-o1-and-dev-tools
์๋ ํ์ธ์! ์ค๋์ 12 Days of OpenAI ์๋ฆฌ์ฆ์ ์ํ ๋ฒ์งธ ๋ ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค!
์ค๋์ ChatGPT์ ์ถ๊ฐ๋ ๊ฐ๋ ฅํ ์๋ก์ด ๊ธฐ๋ฅ์ธ โOpenAI o1 ๋ฐ ๊ฐ๋ฐ์๋ฅผ ์ํ ์๋ก์ด ๋๊ตฌโ๋ฅผ ์๊ฐํฉ๋๋ค.
๋ธ๋ก๊ทธ ์์ฑ ์์ ์๋ ์์์ด ์ ์ฌ๋ผ์์ง๋ง, ํ์ฌ๋ ๋ค์ ์ ์ ๊ณต๊ฐ๋ ๊ฒ ํ์ธํ์ต๋๋ค. (๋ด๊ฐ ์ฌ์ดํด์ ๊ทธ๋ฐ๊ฐ? ใ
ใ
)
๋ค์ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค:
- ๋งํฌ: https://youtu.be/14leJ1fg4Pw
OpenAI o1 ๋ฐ ๊ฐ๋ฐ์๋ฅผ ์ํ ์๋ก์ด ๋๊ตฌ ์๊ฐ
OpenAI๋ AI ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฐ๋ฐ์๋ค์ ์ํด ๋์ฑ ๊ฐ๋ ฅํ ๋ชจ๋ธ๊ณผ ์ ์ฐํ ๋๊ตฌ๋ค์ ๊ณต๊ฐํ์ต๋๋ค. ์ด๋ฒ ์ ๋ฐ์ดํธ๋ ์ฑ๋ฅ, ์ฌ์ฉ์ ๋ง์ถคํ, ๋น์ฉ ํจ์จ์ฑ์ ๊ฐ์ ํ๋ ๋ฐ ์ค์ ์ ๋์์ผ๋ฉฐ, ์ฃผ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- o1 ๋ชจ๋ธ API: ํจ์ ํธ์ถ, ๊ฐ๋ฐ์ ๋ฉ์์ง, ๊ตฌ์กฐํ๋ ์ถ๋ ฅ, ๋น์ ๊ธฐ๋ฅ ์ถ๊ฐ (๋งํฌ)
- WebRTC ์ง์ ๋ฐ ์ค์๊ฐ API ์ ๋ฐ์ดํธ: GPT-4o ์ค๋์ค์ 60% ๊ฐ๊ฒฉ ์ธํ ๋ฐ GPT-4o mini ์ง์ (๋งํฌ)
- Preference Fine-Tuning์ ํตํ ๋ชจ๋ธ ๋ง์ถคํ ๊ธฐ๋ฅ: ์ฌ์ฉ์์ ์ ํธ๋์ ๋ฐ๋ผ ๋ชจ๋ธ์ ์กฐ์ ํ๋ ์๋ก์ด ๊ธฐ๋ฒ(๋งํฌ)
- Go ๋ฐ Java SDK์ ๋ฒ ํ ์ถ์ (๋งํฌ)
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ๋์ฑ ๋น ๋ฅด๊ฒ ํ์ ์ ์ธ ์ ํ์ ๋ง๋ค๊ณ , ๋ค์ํ ๋๋ฉ์ธ์์ AI ํ์ฉ์ ํ์ฅํ ์ ์๊ฒ ๋์์ต๋๋ค.
1. OpenAI o1: ์๋ก์ด ๊ณ ์ฑ๋ฅ ์ถ๋ก ๋ชจ๋ธ
OpenAI o1์ ๋ณต์กํ ๋ค๋จ๊ณ ์์ ์ ๋์ ์ ํ๋๋ก ์ฒ๋ฆฌํ ์ ์๋ ์ถ๋ก ๋ชจ๋ธ๋ก, ์ด์ API์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
o1 ๋ชจ๋ธ์ ์ด์ ์ ์ถ์๋ o1-preview์ ์ ์ ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ผ๋ก, ๊ณ ๊ฐ ์ง์ ์๋ํ, ๊ณต๊ธ๋ง ์์ฌ ๊ฒฐ์ ์ต์ ํ, ๋ณต์กํ ๊ธ์ต ํธ๋ ๋ ์์ธก๊ณผ ๊ฐ์ ์์ด์ ํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. (o1-preview๋ฅผ ๊ฐ์ ํ o1-2024-12-17
๋ฒ์ ์ด ๋ฐํ)
(์ฐธ๊ณ ) o1 explained
OpenAI๋ ์ต๊ทผ ์๋ก์ด AI ๋ชจ๋ธ์ธ o1์ ๋ฐํํ์ต๋๋ค. ์ด ๋ชจ๋ธ์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก โ์ฌ๊ณ ์ ์ฌ์ฌ(chain of thought)โ์ ์์ฑํ์ฌ ์ฌ์ธต์ ์ธ ์ถ๋ก ์ ์ํํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ํ, ์ฝ๋ฉ, ๊ณผํ์ ์ถ๋ก ๋ฑ์์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํ๋ฉฐ, ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
- ์ถ๋ก ํ ํฐ(reasoning token)์ ๋ชจ๋ธ์ด ๋ด๋ถ์ ์ผ๋ก ์์ฑํ๋ โ์๊ฐโ์ ์ํ ํน๋ณํ ํ ํฐ์ ๋๋ค.
- ์ด๋ฌํ ์ถ๋ก ํ ํฐ์ ํ์ฉํ์ฌ ๋ชจ๋ธ์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ถ์ํ๊ณ , ์ต์ข ์๋ต์ ์์ฑํ๊ธฐ ์ ์ ์ฌ์ธต์ ์ธ ์ฌ๊ณ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋ธ์ ์ถ๋ก ๋ฅ๋ ฅ์ด ํฅ์๋๋ฉฐ, ๋ณต์กํ ๋ฌธ์ ์ ๋ํ ์ ํํ ๋ต๋ณ์ ๋์ถํ ์ ์์ต๋๋ค.
- ์ถ๋ ฅ ํ ํฐ(output token)์ ๋ชจ๋ธ์ด ์ต์ข ์ ์ผ๋ก ์์ฑํ๋ ์๋ต์ ๊ตฌ์ฑ ์์์ ๋๋ค.
- o1 ๋ชจ๋ธ์ ์๋ต์ ์์ฑํ๊ธฐ ์ ์ ๋ด๋ถ์ ์ผ๋ก ์ถ๋ก ํ ํฐ์ ํ์ฉํ์ฌ ์ฌ์ธต์ ์ธ ์ฌ๊ณ ๊ณผ์ ์ ๊ฑฐ์น๋ฏ๋ก, ์ต์ข ์ถ๋ ฅ ํ ํฐ์ ํ์ง๊ณผ ์ ํ์ฑ์ด ํฅ์๋ฉ๋๋ค.์ด๋ฌํ ๊ณผ์ ์ ๋ชจ๋ธ์ด ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์์ด ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ๋๋ก ๋์ต๋๋ค.
์๋๋ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ์ฐธ๊ณ ์ด๋ฏธ์ง์ ๋๋ค:
Image Reference: reasoning model, Gรถkhan Gerdan (Medium Post)
Image Reference: Token Outputs, ArtificialAnlys (X Post)
์ด๋ฒ API ๋ฆด๋ฆฌ์ค๋ ํจ์ ํธ์ถ, ๊ฐ๋ฐ์ ๋ฉ์์ง, ๊ตฌ์กฐํ๋ ์ถ๋ ฅ, ๋น์ ๊ธฐ๋ฅ์ ์ง์ํ์ฌ ๊ฐ๋ฐ์๋ค์ด ๋ณด๋ค ์ ์ฐํ๊ณ ๊ฐ๋ ฅํ AI ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์ต๋๋ค. (English Explanation is from OpenAI Blog Post)
- ํจ์ ํธ์ถ(Function Calling): o1 ๋ชจ๋ธ์ ์ธ๋ถ API๋ ๋ฐ์ดํฐ ์์ค์์ ์ํธ์์ฉ์ ํตํด ๋์ฑ ๋ณต์กํ ์์ ์ ์๋ํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฑ๋ด์ด ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๋ค์ํ API๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. (Seamlessly connect o1 to external data and APIs.)
-
๊ตฌ์กฐํ๋ ์ถ๋ ฅ(Structured Outputs): JSON Schema์ ๊ฐ์ ๋ง์ถคํ ํ์์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ์ ์์ด, ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํตํฉ์ด ํจ์ฌ ๋ ์์ํด์ก์ต๋๋ค. ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉ์ด ๊ฐํธํฉ๋๋ค. (Generate responses that reliably adhere to your custom JSON Schema.)
-
์๋์ฒ๋ผ ์ํ๋ ์ถ๋ ฅ ์คํค๋ง๋ฅผ ์ ์ํด์ฃผ๋ฉด,
-
ํด๋น ์กฐ๊ฑด์ ๋ง๊ฒ ์ถ๋ ฅ์ด ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค:
-
- ๊ฐ๋ฐ์ ๋ฉ์์ง(Developer Messages): ๋ชจ๋ธ์ ํ๋, ๋งํฌ, ์คํ์ผ์ ์ธ๋ถ์ ์ผ๋ก ์ค์ ํ ์ ์์ด, ๋ค์ํ ์ปจํ ์คํธ์ ๋ง๊ฒ ๋ชจ๋ธ์ ์ถ๋ ฅ์ ๋ง์ถคํํ ์ ์์ต๋๋ค. (Specify instructions or context for the model to follow, such as defining tone, style and other behavioral guidance.)
-
๋น์ ๊ธฐ๋ฅ(Vision Capabilities): ์ด๋ฏธ์ง ๊ธฐ๋ฐ ์ถ๋ก ์ด ๊ฐ๋ฅํด์ ธ ๊ณผํ, ์๋ฃ, ์ ์กฐ, ์ฝ๋ฉ ๋ฑ ๋ค์ํ ์ฐ์ ๋ถ์ผ์์ ํ์ฉํ ์ ์์ต๋๋ค. (Reason over images to unlock many more applications in science, manufacturing, or coding, where visual inputs matter.)
-
์๋ฅผ ๋ค์ด, ํ ์คํธ ์์์ ์ค์บํ๊ณ ์ค๋ฅ๋ฅผ ์๋์ผ๋ก ๊ฒ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
-
์ด๋ฒ ๋ฐ๋ชจ์์๋ ์ธ๊ธ ์ ๊ณ ์์์ ์๋ชป๋ ์์๊ณผ ํ์ค ๊ณต์ ๊ฐ์ ์๋์ผ๋ก ์ฐพ์์ฃผ์์ผ๋ฉฐ, ์์์ ์ฌ๋ฌ ํ์ด์ง์์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํด ์ ํํ ๊ณ์ฐ์ ์ํํ์ต๋๋ค. (Function ๊ธฐ๋ฅ ์ฌ์ฉ)
-
์ด ๊ธฐ๋ฅ์ ๋ฌธ์ ์ฒ๋ฆฌ, ์๊ฐ์ ๊ฒํ , ์ค๋ฅ ๊ฒ์ถ ๋ฑ ๋ค์ํ ์ค๋ฌด์ ์ฆ์ ์ ์ฉํ ์ ์์ต๋๋ค.
-
- ๋ฎ์ ์ง์ฐ ์๊ฐ(Lower latency): ํ๊ท ์ ์ผ๋ก o1-preview๋ณด๋ค 60% ์ ์ ํ ํฐ์ ์ฌ์ฉํ๋ฉด์๋ ๋น ๋ฅด๊ณ ์ ํํ ์๋ต์ ์ ๊ณตํฉ๋๋ค. ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํจ์จ์ ์ผ๋ก ์๋ํฉ๋๋ค. (o1 uses on average 60% fewer reasoning tokens than o1-preview for a given request.)
์ถ๊ฐ๋ก, reasoning_effort
API ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ๋ชจ๋ธ์ ์ถ๋ก ์์ค์ ์ ์ดํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ถ๋ก ์ ๊น์ด๋ฅผ ์กฐ์ ํจ์ผ๋ก์จ ๋น ๋ฅธ ์๋ต์ด ํ์ํ ๊ฒฝ์ฐ์ ๋ณต์กํ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค.
๋ฒค์น๋งํฌ ์ฑ๋ฅ:
-
o1-2024-12-17
์ ๋ค์ํ ๋ฒค์น๋งํฌ ํ ์คํธ์์ ์ด์ ๋ชจ๋ธ์ ๋ฅ๊ฐํ๋ ์ฑ๋ฅ์ ๊ธฐ๋กํ๋ฉฐ, ํนํ ์ํ, ์ฝ๋ฉ ๋ฐ ์๊ฐ์ ์์ญ์์ ํฐ ๊ฐ์ ์ ๋ณด์์ต๋๋ค. -
๊ฐ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๋ํด์๋ ํ ์คํธ๋ฅผ ์ํํด๋ณด์๋ค๊ณ ํฉ๋๋ค.
์ ํ์์ SO๋ Strcutured Output์ ์ค์๋ง์*
์ด๋ฌํ ์ฑ๋ฅ ๊ฐ์ ์ ํตํด o1 ๋ชจ๋ธ์ ๋ณต์กํ ์ง์ ๊ธฐ๋ฐ ์์ ๊ณผ ์ค์๊ฐ ์๋ฎฌ๋ ์ด์ , ์ฝ๋ฉ ๋ฐ ํ์ ์ฐ๊ตฌ์ ํ์ฉ๋ ์ ์์ต๋๋ค. ์์ผ๋ก ๋ค์ํ ๋ถ์ผ์ AI ๊ฐ๋ฐ์ ์ค์ํ ๋๊ตฌ๋ก ์๋ฆฌ์ก์ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
2. ์ค์๊ฐ API ๊ฐ์
์ค์๊ฐ API๋ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ๋ฐํ์ผ๋ก ์ธํฐ๋ํฐ๋ธํ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ์์ฑ ๋น์
, ์ค์๊ฐ ๋ฒ์ญ๊ธฐ
, ๊ฐ์ ํํฐ
์ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : ์ค์๊ฐ API(https://platform.openai.com/docs/guides/realtime)
WebRTC ์ง์
WebRTC(Web Real-Time Communication, ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฌ์ดํธ๊ฐ ์ค๊ฐ์ ์์ด ๋ธ๋ผ์ฐ์ ๊ฐ์ ์ค๋์ค๋ ์์ ๋ฏธ๋์ด๋ฅผ ํฌ์ฐฉํ๊ณ ๋ง์๋๋ก ์คํธ๋ฆผ ํ ๋ฟ ์๋๋ผ, ์์์ ๋ฐ์ดํฐ๋ ๊ตํํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ) ์ง์์ ํตํด ์ค์๊ฐ ์์ฑ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ฑ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ถ์ฒ : ์ค์๊ฐ API(https://platform.openai.com/docs/guides/realtime)
๋ธ๋ผ์ฐ์ , ๋ชจ๋ฐ์ผ, IoT ๋๋ฐ์ด์ค ๋ฑ ๋ค์ํ ํ๊ฒฝ์์ ์ค์๊ฐ ์์ฑ ์ํธ์์ฉ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. WebRTC๋ ์ฐ๊ฒฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉด์๋ ์์ ์ ์ธ ์์ฑ ์คํธ๋ฆฌ๋ฐ์ ์ง์ํฉ๋๋ค.
(์ฐธ๊ณ ) ๋ณธ ๋ธ๋ก๊ทธ์ ๋ฐ๋ชจ ์ฝ๋๋ OpenAI ๋ธ๋ก๊ทธ์ Demo ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์์์ Demo ์ฝ๋๋ ์ด๋ฏธ์ง๋ก ์ฒจ๋ถ๋๋ฆฝ๋๋ค.
์ ์ฝ๋๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๋ฉด HTML ๊ธฐ๋ฐ WebRTC(Web Real-Time Communication) ์ฝ๋๋ก, PeerConnection(Peer-to-Peer) ์ฐ๊ฒฐ์ ํตํด ์ค๊ฐ ์๋ฒ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
-
๋ํ, ๋ค๋ฅธ ๋ฐ๋ชจ์์๋ โ์๊ธฐ ์ฌ์ด ์ฅ๋๊ฐโ์ WebRTC๋ฅผ ์ ์ฉํ ์ํ ํ๋์จ์ด ์ฅ์น๋ฅผ ๋ถ์ฐฉํ์ฌ ์ค์๊ฐ ๋ํ ๊ฐ๋ฅํ ์ธํ์ ๋ง๋ค์์ต๋๋ค ใ ใ (์ปค์ฝ)
-
์ฌ์ด ์ธํ๋ ๋์ ํฌ๊ธฐ์ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํด AI ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐ๋์์ผ๋ฉฐ, ๊ฐ๋จํ ์ค์ ๋ง์ผ๋ก๋ ๋ํํ ๊ธฐ๋ฅ์ ์๋์ํฌ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ๋ก๋ ์จ์ด๋ฌ๋ธ ๋๋ฐ์ด์ค, ๊ฐ์ ์ฉ AI ๋น์, ์ค๋งํธ ์นด๋ฉ๋ผ ๋ฑ ๋ค์ํ ํ๋์จ์ด ํ์ฉ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
-
์์ ์ฝ๋ (JavaScript):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
async function createRealtimeSession(localStream, remoteAudioEl, token) {
const pc = new RTCPeerConnection();
pc.ontrack = e => remoteAudioEl.srcObject = e.streams[0];
pc.addTrack(localStream.getTracks()[0]);
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
const resp = await fetch('https://api.openai.com/v1/realtime', {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/sdp' },
body: offer.sdp
});
await pc.setRemoteDescription({ type: 'answer', sdp: await resp.text() });
return pc;
}
์๋ก์ด GPT-4o ๋ฐ GPT-4o mini ์ค์๊ฐ ์ค๋ ์ท ๋ฒ์
OpenAI๋ gpt-4o๋ฅผ gpt-4o-realtime-preview-2024-12-17
์ผ๋ก ์ค์๊ฐ API ๋ฒ ํ ๋ฒ์ ์ผ๋ก ์ถ์ํ์ต๋๋ค.
- ์ด ์ ๋ฐ์ดํธ๋ ๊ฐ์ ๋ ์์ฑ ํ์ง, ํนํ ์ซ์ ์ ๋ ฅ์ ์ ๋ขฐ์ฑ์ ๋์ด๊ณ , ๋น์ฉ์ ์ ๊ฐํฉ๋๋ค.
- ํจ์จ์ฑ ๊ฐ์ ๋๋ถ์ ์ค๋์ค ํ ํฐ ๊ฐ๊ฒฉ์
60%
๋ฎ์ถฐ ์ ๋ ฅ ํ ํฐ๋น$40/1M
, ์ถ๋ ฅ ํ ํฐ๋น$80/1M
์ผ๋ก ์ธํํ์ต๋๋ค. - ์บ์๋ ์ค๋์ค ์
๋ ฅ ๋น์ฉ์ 87.5% ๊ฐ์ํด ์
๋ ฅ ํ ํฐ๋น
$2.50/1M
์ผ๋ก ๋ฎ์์ก์ต๋๋ค.
๋ํ GPT-4o mini๋ฅผ gpt-4o-mini-realtime-preview-2024-12-17
์ผ๋ก ์ค์๊ฐ API ๋ฒ ํ์ ์ถ๊ฐํ์ต๋๋ค.
- GPT-4o mini๋ ๊ฐ์ฅ ๋น์ฉ ํจ์จ์ ์ธ ์ํ ๋ชจ๋ธ๋ก, GPT-4o์ ๋์ผํ ํ๋ถํ ์์ฑ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- GPT-4o mini์ ์ค๋์ค ๊ฐ๊ฒฉ์ ์
๋ ฅ ํ ํฐ๋น
$10/1M
, ์ถ๋ ฅ ํ ํฐ๋น$20/1M
์ ๋๋ค. - ํ
์คํธ ํ ํฐ ๊ฐ๊ฒฉ์ ์
๋ ฅ ํ ํฐ๋น
$0.60/1M
, ์ถ๋ ฅ ํ ํฐ๋น$2.40/1M
์ผ๋ก ์ค์ ๋์์ผ๋ฉฐ, ์บ์๋ ์ค๋์ค ๋ฐ ํ ์คํธ ๋ชจ๋ ํ ํฐ๋น$0.30/1M
์ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
์ด ์ค๋
์ท์ ์ค์๊ฐ API์ Chat Completions API์์ ๊ฐ๊ฐ gpt-4o-audio-preview-2024-12-17
๋ฐ gpt-4o-mini-audio-preview-2024-12-17
์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
์๋ต ์ ์ด ๊ธฐ๋ฅ ๊ฐํ
OpenAI๋ ์ค์๊ฐ API๋ฅผ ํตํด ๋ฐ์ด๋ ์์ฑ ๊ธฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ค์ ๊ธฐ๋ฅ์ ์ถ์ํ์ต๋๋ค:
- ๋์ ์ธ๋ถ ์๋ต ์ฒ๋ฆฌ: ์ฌ์ฉ์ ์์ฑ ์ํธ์์ฉ์ ๋ฐฉํดํ์ง ์๊ณ ์ฝํ ์ธ ๋ถ๋ฅ๋ ๋ชจ๋๋ ์ด์ ๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์คํํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ์ ๋ ฅ ์ปจํ ์คํธ: ๋ชจ๋ธ ์ ๋ ฅ์ผ๋ก ํฌํจํ ๋ํ๋ฅผ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ๋ง์ง๋ง ๋ฐ์ธ๋ง ํ์ธํ๊ฑฐ๋ ๊ณผ๊ฑฐ ์๋ต์ ๋ค์ ํ์ฉํ ์ ์์ต๋๋ค.
- ์๋ต ํ์ด๋ฐ ์ ์ด: ์๋ฒ ์ธก ์์ฑ ํ๋ ๊ฐ์ง(VAD)๋ฅผ ์ฌ์ฉํ์ฌ ์๋ต์ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ์ง ์๊ณ , ๊ณ์ ์ธ๋ถ ์ ๋ณด ๋ฑ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ ํ ์๋์ผ๋ก ์์ฑ ์๋ต์ ์์ํ ์ ์์ต๋๋ค.
- ์ธ์ ๊ธธ์ด ์ฆ๊ฐ: ์ต๋ ์ธ์ ๊ธธ์ด๊ฐ 15๋ถ์์ 30๋ถ์ผ๋ก ๋์ด๋ฌ์ต๋๋ค.
3. Preference Fine-Tuning: ์ฌ์ฉ์ ๋ง์ถค ๋ชจ๋ธ ํ์ต
Preference Fine-Tuning์ ์ฃผ๊ด์ ์ธ ํ๊ฐ ์์ ์ ํนํ๋ ์๋ก์ด ๋ชจ๋ธ ํ์ต ๊ธฐ๋ฒ์ ๋๋ค.
- ๊ธฐ์กด์
Supervised Fine-Tuning
๊ณผPreference Fine-Tuning
์ ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด์ ์ ๊ฐ์ง๋๋ค.
Supervised Fine-Tuning
- ๋ชฉํ
- Supervised Fine-Tuning์ ๋ช ํํ ์ ๋ต์ด ์๋ ์์ ์์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ์์ ํ์ตํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, ๊ธฐ๊ณ ๋ฒ์ญ, ์ฝ๋ ํฌ๋งทํ , ๋๋ ์ํ ๋ฌธ์ ํ์ด์ฒ๋ผ ์ ๋ต์ด ๋ช ํํ๊ฒ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
- ํ์ต ๋ฐ์ดํฐ
- ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ํด ๋ช ์์ ์ธ ์ถ๋ ฅ ์ ๋ต์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ์ ์ด ํ์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์์ด ๋ฌธ์ฅ์ ์ ๋ ฅํ๋ฉด ๋ฒ์ญ๋ ํ๊ตญ์ด ๋ฌธ์ฅ์ ์ถ๋ ฅํ๋ ๋ฐ์ดํฐ์์ด ํ์ํฉ๋๋ค.
- ์ ์ฉ ๋ถ์ผ
- ๋ฒ์ญ ์์คํ : ์์ด-ํ๊ตญ์ด ๋ฒ์ญ, ์ฝ๋ ๋ณํ(์: Python์์ Java๋ก ๋ณํ).
- ์ ํํ ๋ต๋ณ์ ์๊ตฌํ๋ QA ์์คํ .
- ์ํ ๊ณต์ ๊ณ์ฐ๊ธฐ ๋ฑ.
Preference Fine-Tuning
-
๋ชฉํ
- Preference Fine-Tuning์ ์ฌ์ฉ์์ ์ ํธ๋๋ฅผ ๋ชจ๋ธ์ ๋ฐ์ํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
- ์ฃผ์ด์ง ์ฌ๋ฌ ์ถ๋ ฅ ์ค์์ ์ ํธํ๋ ์๋ต๊ณผ ๊ทธ๋ ์ง ์์ ์๋ต์ ๋ชจ๋ธ์ด ํ์ตํ๋๋ก ํ์ฌ ๋ ๋ฐ๋์งํ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํฉ๋๋ค.
- ์ด๋ ์ฐฝ์์ ๊ธ์ฐ๊ธฐ, ์ฝํ ์ธ ํํฐ๋ง ๋ฑ ์ฃผ๊ด์ ํ๋จ์ด ์ค์ํ ์์ ์์ ์ ์ฉํฉ๋๋ค.
-
ํ์ต ๋ฐ์ดํฐ
- A/B ํ ์คํธ ํ์์ผ๋ก ์ ํธํ๋ ์ถ๋ ฅ(A)๊ณผ ๋น์ ํธํ๋ ์ถ๋ ฅ(B)์ ์ง์ง์ด ํ์ต ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
-
๋ชจ๋ธ์ A์ B์ ์ฐจ์ด์ ์ ํ์ตํ์ฌ ์ ํธ๋ ๊ธฐ๋ฐ ์ถ๋ ฅ์ ์์ฑํ๋๋ก ์กฐ์ ๋ฉ๋๋ค.
-
์ ์ฉ ๋ถ์ผ
- ์ฐฝ์์ ๊ธ์ฐ๊ธฐ: ๋ ๋งค๋๋ฝ๊ณ ์ธ๊ฐ์ ์ธ ๋ฌธ์ฒด๋ก ๊ธ์ ์์ฑ.
- ์์ฝ ์์ : ์ฌ์ฉ์์ ์๊ตฌ์ ๋ง๋ ์ ๋ณด๋ฅผ ๊ฐ์กฐํ๋ ์์ฝ.
- ๊ณ ๊ฐ ์ง์: ๊ณ ๊ฐ์ ํค๊ณผ ์คํ์ผ์ ๋ง์ถ ๋ต๋ณ ์์ฑ.
- ์ฝํ ์ธ ํํฐ๋ง: ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ถ์ ํฉํ ์ฝํ ์ธ ๋ฅผ ์ ๊ฑฐ.
์ฐจ์ด์
- Supervised Fine-Tuning์ ์ ๋ต์ด ๋ช ํํ ์ ์๋ ์์ ์ ์ ํฉํ๋ฉฐ, ๋ชจ๋ธ์ ์ถ๋ ฅ ์ ํ๋๋ฅผ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- Preference Fine-Tuning์ ์ ๋ต์ด ์๋ โ์ ํธโ๋ฅผ ๋ฐ์ํ๋ ๊ฒ์ด ํต์ฌ์ผ๋ก, ๊ฒฐ๊ณผ๋ฌผ์ ์ฃผ๊ด์ ํ์ง์ ๋์ด๊ณ , ์ฌ์ฉ์ ์๊ตฌ์ ๋ง์ถ ์ถ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
-
์ ๋ฆฌ
ํน์ง Supervised Fine-Tuning Preference Fine-Tuning ๋ชฉํ ์ ๋ต ์ถ๋ ฅ์ ํ์ต ์ ํธํ๋ ์ถ๋ ฅ์ ๊ฐํํ๊ณ ๋น์ ํธ ์ถ๋ ฅ ๊ฐ์ ํ์ต ๋ฐ์ดํฐ ์ ๋ ฅ-์ถ๋ ฅ ์ ์ ํธ/๋น์ ํธ ์๋ต ์ (A/B ํ ์คํธ ๋ฑ) ์ฃผ์ ์ ์ฉ ๋ถ์ผ ์ฝ๋ ํฌ๋งท, ์ ๋ต์ด ๋ช ํํ ์์ ์ฐฝ์์ ๊ธ์ฐ๊ธฐ, ์์ฝ ๋ฑ ์ฃผ๊ด์ ํ๊ฐ ์์ -
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์ ์ ํธ์ ๋ง๊ฒ ๋ชจ๋ธ์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ด ์ฐฝ์์ ์ธ ๊ธ์ฐ๊ธฐ, ์์ฝ, ๋ฒ์ญ ๋ฑ์์ ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์๋ค๊ณ ๊ฐ์กฐํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, Rogo AI(https://rogo.ai/)๋ ๊ธ์ต ๋ถ์๊ฐ๋ฅผ ์ํ AI ์ด์์คํดํธ๋ฅผ ๊ตฌ์ถํ๋ฉด์
Preference Fine-Tuning
์ ํ์ฉํ์ต๋๋ค. Rogo AI์ ๋ชฉํ๋ ์ฌ์ฉ์์ ์ง์ ๋ด์ฉ์ ์ฌ์์ฑ ๋ฐ ๋ฆฌํฉํฐ๋งํด ๋์ฑ ์ ํํ๊ณ ์ ์๋ฏธํ ๋ต๋ณ์ ์ ๊ณตํ๋ ๊ฒ์ด์์ต๋๋ค. -
์ด๊ธฐ์๋ Supervised Fine-Tuning์ ์๋ํ์ง๋ง, ์ฑ๋ฅ์ด ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๋์ด์์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ฌ๋ Preference Fine-Tuning์ ์ ์ฉํ ๊ฒฐ๊ณผ, ๋ด๋ถ ๋ฒค์น๋งํฌ ์ ํ๋๊ฐ 75%์์ 80% ์ด์์ผ๋ก ๊ฐ์ ๋์์ต๋๋ค.
- ์ด ์ฌ๋ก๋ฅผ ํตํด Preference Fine-Tuning์ด ์ฌ์ฉ์ ํผ๋๋ฐฑ์ด ์ค์ํ ๋ถ์ผ์์ ํฐ ํจ๊ณผ๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ๊ณ ๊ฐ ์ง์, ์นดํผ๋ผ์ดํ , ์ฐฝ์์ ๊ธ์ฐ๊ธฐ ๋ฑ ๋ค์ํ ์์ญ์์์ ํ์ฉ์ด ๊ธฐ๋๋ฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, Rogo AI(https://rogo.ai/)๋ ๊ธ์ต ๋ถ์๊ฐ๋ฅผ ์ํ AI ์ด์์คํดํธ๋ฅผ ๊ตฌ์ถํ๋ฉด์
4. Go ๋ฐ Java SDK ๋ฒ ํ ์ถ์
OpenAI๋ Python, Node.js์ ์ด์ด Go์ Java๋ฅผ ์ง์ํ๋ ๊ณต์ SDK๋ฅผ ์๋กญ๊ฒ ๋ฐํํ์ต๋๋ค.
- Go SDK: ๋์์ฑ ์ฒ๋ฆฌ์ ํ์ฅ์ฑ์ด ๋ฐ์ด๋, ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ต์ ํ๋์์ต๋๋ค.
- Java SDK: ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ฐ๋ ฅํ ํ์ ์์คํ ๊ณผ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Go SDK ๊ฐ๋จํ ์์:
๋ค์์ Go SDK๋ฅผ ์ฌ์ฉํด AI ๋ชจ๋ธ๊ณผ ์ํธ์์ฉํ๋ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๋๋ค. ์ด ์ฝ๋๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์คํธ๋ฅผ ๋ฐํ์ผ๋ก ํ์ด์ฟ ๋ฅผ ์์ฑํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main
import (
"context"
"fmt"
"github.com/openai/go-openai"
)
func main() {
client := openai.NewClient()
ctx := context.Background()
prompt := "Write me a haiku about Golang."
completion, err := client.Chat.Completions.New(ctx, openai.ChatCompletionNewParams{
Messages: openai.F([]openai.ChatCompletionMessageParamUnion{
openai.UserMessage(prompt),
}),
Model: openai.F(openai.ChatModelGPT4o),
})
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Generated Haiku:", completion.Choices[0].Message.Content)
}
Java SDK ๊ฐ๋จํ ์์:
Java SDK๋ฅผ ํ์ฉํด ๊ฐ๋จํ ์ฑ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ์์ ์ ๋๋ค. ์ฌ์ฉ์์ ์ง๋ฌธ์ AI๊ฐ ์๋ต์ ๋ฐํํฉ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import com.openai.api.OpenAi;
import com.openai.api.models.ChatCompletion;
import com.openai.api.models.ChatCompletionMessage;
import java.util.Arrays;
public class OpenAIExample {
public static void main(String[] args) {
OpenAi openAi = new OpenAi(System.getenv("OPENAI_API_KEY"));
ChatCompletion completion = openAi.chatCompletions().create(
chatCompletion -> chatCompletion
.model("gpt-4o")
.messages(Arrays.asList(
new ChatCompletionMessage("user", "Explain the concept of multithreading in Java.")))
);
System.out.println("Response: " + completion.choices().get(0).message().content());
}
}
์ด์ ๋ค์ํ ์ธ์ด ํ๊ฒฝ์์ OpenAI์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์์ฝ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค. ์์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ์๋ค์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์์ผ๋ฉฐ, ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ , ๋ํํ ์ฑ๋ด ๋ฑ ์ฌ๋ฌ ํ์ฉ ์ฌ๋ก์ ์ ์ฉํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ด๋ฒ ์ ๋ฐ์ดํธ๋ฅผ ํตํด OpenAI๋ AI ๊ฐ๋ฐ์๋ค์๊ฒ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ์๋ก์ด o1 ๋ชจ๋ธ, WebRTC ๊ธฐ๋ฐ ์ค์๊ฐ API, Preference Fine-Tuning, Go ๋ฐ Java SDK ๊ฐ์ ์ ํตํด ๋ค์ํ ํ์ ์ AI ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค.
๋ ๋ง์ ์ ๋ณด์ ๊ฐ์ด๋๋ OpenAI API ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค. OpenAI์ ์ด๋ฌํ ๋ ธ๋ ฅ์ AI ๊ฐ๋ฐ์ ๋ฌธํฑ์ ๋ฎ์ถ๊ณ , ์๋ก์ด ๊ธฐ์ ๋์ ์ ๋์ฑ ๊ฐ์ํํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ 2024 DevDay์ ์ ํ๋ธ ์์๋ ์ฌ๋ ธ๋ค๊ณ ํ๋๊ตฐ์!! ๊ทธ๊ฒ๋ ๋ฆฌ๋ทฐํ๋ฌ ๊ฐ์ผ๊ฒ ์ต๋๋ค!! ๊ทธ๋ผ ์ด๋ง!! ์ด์ด์ด๐โโ๏ธ
๋ด์ผ๋ ๊ธฐ๋ํด์ฃผ์ธ์!