OpenAI o1: 개발자가 알아야 할 것
2024년 9월, OpenAI는 o1 시리즈라고 불리는 최신 독점 Large Language Models (LLMs) 시리즈를 소개했습니다. o1 시리즈를 OpenAI의 이전 최강 모델인 GPT-4o와 구별하는 주요 특징은 사용자를 위한 최종 답변을 생성하기 전에 문제를 숙고할 수 있는 능력입니다. 이는 o1 모델들이 문제를 더 작은 구성 요소로 분해하고 단계별 방식으로 해결하도록 훈련되었다는 뜻이며, 이 과정은 일반적으로 chain-of-thought reasoning이라고 불립니다.
이 글에서는 개발자의 관점에서 o1 시리즈에 대해 이야기하며, 이러한 모델들이 정교한 사용 사례에 어떻게 구현될 수 있는지 살펴보겠습니다. 그 전에, o1 모델이 무엇인지, GPT-4o와 비교해 성능이 어떤지, 그리고 OpenAI가 이 시리즈와 함께 도입한 새로운 기능들을 간단히 살펴보겠습니다.
o1 모델 간단 소개
OpenAI는 o1 시리즈에 세 가지 변형인 o1-preview, o1, o1-mini를 도입했으며, o1-preview가 가장 먼저 출시되었습니다. 세 가지 변형 모두 GPT-4와 같은 다른 OpenAI 모델들과 비교해 고유한 특징인 고급 추론 능력을 공유합니다.
o1 모델은 답변을 생성하기 전에 문제를 분석하는 데 더 많은 시간을 쓰도록 설계되었습니다. 이 접근 방식은 인간이 복잡한 문제를 해체하고 해결하는 방식을 모방합니다. 주어진 어떤 문제에 대해서도, 이러한 모델들은 질문을 분해하고, 자신의 사고 과정을 단계별로 명확히 표현하며, 초기 추론이 부적절한 경우 대안적 해결책을 탐색하려고 시도합니다.
이 모델들은 완전히 비공개 소스이므로, 훈련 과정에 대한 명시적인 세부 정보는 여전히 공개되어 있지 않습니다. 그러나 o1 모델 훈련 중 사용되었을 가능성이 높은 두 가지 접근 방식이 있습니다: chain-of-thought (CoT) prompting과 reinforcement learning (RL).
CoT prompting의 개념은 간단합니다. 모델에게 주어진 문제에 대한 직접적인 답을 제공하는 대신, CoT prompts는 아래에서 볼 수 있듯이 문제를 해결하기 위한 상세한 맥락적 단계를 포함합니다:
일반 prompt와 CoT prompt의 비교.
파인튜닝 중 방대한 양의 CoT prompting 데이터를 RL과 결합함으로써, 모델은 자신의 추론 과정을 반복적으로 개선합니다. 모델은 자신의 논리에서 결함을 식별하고 문제 해결을 위한 더 합리적인 접근 방식을 채택하는 법을 배웁니다. 그런 다음 모델은 정확한 추론 단계와 올바른 답변을 생성한 것에 대해 보상을 받습니다. 그 결과, o1 시리즈 모델은 답변을 제공하기 전에 비판적으로 사고하고 효과적으로 추론할 수 있습니다.
이 추론 능력을 구현하기 위해, OpenAI는 o1 모델에 "reasoning tokens"라고 불리는 추가 토큰을 도입했습니다. 입력 및 출력 토큰만 사용하는 다른 LLMs와 달리, o1 모델은 자신의 사고 과정을 촉진하기 위해 reasoning tokens를 활용합니다.
이 reasoning tokens를 통해 모델은 출력 토큰을 생성하기 전에 prompt를 분석하고 여러 접근 방식을 고려할 수 있습니다. 답변이 확정되면, reasoning tokens는 context에서 폐기됩니다. 아래는 사용자-모델 상호작용의 여러 라운드 동안 입력, 출력, reasoning tokens의 역학을 시각화한 것입니다:
사용자-모델 상호작용의 여러 라운드 동안 입력, 출력, reasoning tokens의 역학. 출처.
o1을 독특하게 만드는 것(그리고 그것이 개발자에게 중요한 이유)
본질적으로, o1 모델은 GPT-4o를 훌륭하게 만드는 모든 것을 기반으로 하되, chain-of-thought (CoT)와 reinforcement learning (RL) 접근 방식을 결합하여 한계를 더 밀어붙입니다. 그 결과, o1 모델은 코딩, 수학, 일반 과학과 같이 복잡한 추론이 필요한 다양한 영역에서 GPT-4o를 능가합니다.
아래 시각화에서 볼 수 있듯이, o1-preview와 o1 모델은 고급 추론이 요구되는 벤치마크 전반에서 GPT-4o를 능가합니다. 특히 세 가지 핵심 과학적 추론 벤치마크인 AIME 2024, Codeforces, GPQA Diamond에서 훨씬 더 뛰어난 성능을 보입니다.
AIME 2024: 미국의 가장 뛰어난 고등학생 수학 인재들을 평가하도록 설계된 수학 시험 기반 벤치마크입니다.
GPQA Diamond: 화학, 생물학, 물리학과 같은 과학 과목에서의 전문성을 측정합니다.
Codeforces: 경쟁 프로그래밍 대회의 문제들을 포함합니다.
여러 추론 벤치마크에서 GPT-4o, o1-preview, o1 모델 간 비교. 출처.
o1-preview 모델은 GPT-4o와 비교해 복잡한 추론 작업에서 우수한 성능을 보여주지만, 주목할 만한 단점도 있습니다:
높은 추론 토큰 사용량: o1-preview는 많은 수의 추론 토큰을 생성하며, 이는 모델의 128,000토큰 컨텍스트 창에서 상당한 부분을 소비합니다. 광범위한 입력-출력 토큰이 필요한 작업에서는 응답이 잘릴 수 있습니다. 또한 GPT-4o에 비해 사용 비용도 증가합니다.
지연 시간 문제: 많은 토큰 수는 더 느린 응답 시간으로 이어집니다. 평균적으로 o1-preview의 지연 시간은 GPT-4o보다 약 10배 느려, 프로덕션 사용에는 덜 적합합니다.
이러한 한계를 해결하기 위해 OpenAI는 o1 시리즈에 두 가지 추가 모델인 o1-mini와 최신 o1 모델을 도입했습니다.
o1-mini는 o1-preview에 비해 더 작은 모델이며, STEM 관련 데이터에 특히 최적화되어 있습니다. 이러한 최적화 덕분에 AIME 2024(o1-preview의 44.6%에 비해 70% 정확도 달성)와 Codeforces 같은 과학 벤치마크에서 o1-preview를 능가합니다.
Codeforces 벤치마크에서 GPT-4o, o1-preview, o1-mini 모델 간 비교. 출처.
또한 o1-preview보다 더 작기 때문에 o1-mini는 더 빠른 지연 시간을 제공합니다. 이 모델의 추론 시간은 o1-preview보다 약 3–5배 빠릅니다. 그러나 o1-mini의 성능은 비-STEM 벤치마크에서는 여전히 o1-preview보다 낮다는 점에 유의해야 합니다.
성능과 기능을 더욱 향상시키기 위해 OpenAI는 o1 모델의 최신 버전을 도입했습니다. 위 시각화에서 볼 수 있듯이, 이 모델은 모든 과학 벤치마크에서 o1-preview를 능가합니다.
복잡한 추론 작업에서 더 강력한 성능을 제공하는 것 외에도, 최신 o1 모델은 몇 가지 핵심 개선 사항을 제공합니다:
더 큰 컨텍스트 창: 입력은 최대 200,000토큰, 출력은 최대 100,000토큰을 지원합니다.
효율적인 추론 토큰 사용량: 주어진 요청에 대해 평균적으로 o1-preview보다 약 60% 더 적은 추론 토큰을 사용합니다. 이로 인해 최신 o1 모델의 지연 시간은 o1 preview보다 더 우수합니다.
비전 기능: 이미지를 입력으로 받아 시각 데이터에 대한 추론을 가능하게 합니다. 이 기능은 o1-preview 또는 o1-mini 모델에서는 사용할 수 없다는 점에 유의하세요.
OpenAI 도구와의 향상된 통합: 구조화된 출력, 함수 호출, 개발자가 정의한 스타일 또는 톤 기능을 포함합니다. 또한 사용자는
reasoning_effort매개변수를 사용해 추론 노력 수준(낮음, 중간, 높음)을 조정하여 속도, 비용, 품질의 균형을 맞출 수 있습니다.
o1 모델의 실제 활용 사례
o1 시리즈를 사용하여 해결할 수 있는 실제 활용 사례는 많습니다. 이 섹션에서는 복잡한 문제 추론, 텍스트에서의 정보 추출 및 추론, Retrieval Augmented Generation (RAG), 이미지 이해, 함수 호출과 같은 여러 예시를 살펴보겠습니다.
그러나 이 글을 작성하는 시점에는 최신 o1 모델의 사용 가능 여부가 여전히 제한적입니다. 특정 사용자 티어에서만 사용할 수 있기 때문입니다. 따라서 이 모델은 대부분의 사용자 티어(Tier 1부터 5까지)에서 접근 가능하므로, 가능한 경우 o1-mini 모델을 사용하여 사용 사례에 대한 코드 스니펫을 시연하겠습니다.
예제로 들어가기 전에 먼저 OpenAI API 키를 설정해야 합니다. 자체 API 키를 설정하는 방법에 대해 자세히 알아보려면 여기를 확인하세요. 다음으로, API 키를 다음과 같이 환경의 일부로 넣습니다.
import getpass
import os
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
이제 OpenAI의 모델을 사용할 준비가 되었습니다.
복잡한 문제 추론
o1 모델의 가장 직접적인 적용 사례는 답에 도달하기 전에 심도 있는 사고가 필요한 수학 및 코딩의 복잡한 문제를 해결하는 것입니다. 예를 들어, 수학 문제를 푸는 방법을 가르쳐 달라고 하고 싶다면 다음과 같이 OpenAI API를 호출하면 됩니다.
from openai import OpenAI
client = OpenAI()
prompt = """
Julie is reading a 120-page book. Yesterday, she was able to read 12 pages and
today, she read twice as many pages as yesterday. If she wants to read half of the
remaining pages tomorrow, how many pages should she read?
"""
response = client.chat.completions.create(
model="o1-mini",
messages=[
{
"role": "user",
"content": prompt
}
]
)
print(response.choices[0].message.content)
"""
Output:
To determine how many pages Julie should read tomorrow, let's break down the problem step by step:
1. **Total Pages in the Book:**
The book has **120 pages**.
2. **Pages Read Yesterday:**
Julie read **12 pages** yesterday.
3. **Pages Read Today:**
Today, she read **twice** as many pages as yesterday.
( 2 times 12 = 24 ) pages.
4. **Total Pages Read in Two Days:**
( 12 text{ (yesterday)} + 24 text{ (today)} = 36 ) pages.
5. **Remaining Pages:**
( 120 text{ (total)} - 36 text{ (read)} = 84 ) pages left.
6. **Pages to Read Tomorrow:**
She wants to read **half** of the remaining pages:
( frac{84}{2} = 42 ) pages.
**Answer:**
Julie should read **42 pages** tomorrow.
"""
보시다시피, 모델은 최종 답만 제공하는 대신 단계별 사고 과정을 생성하며, 이는 향후 유사한 문제에 접근하는 방법에 대한 이해를 높여줍니다.
창의적 자동화
OpenAI의 다른 LLM과 마찬가지로, o1 모델은 PDF 내용 요약, 기사에서 YouTube 스크립트 생성, 문서에서 특정 정보 추출 및 추론과 같은 창의적 자동화에 사용할 수 있습니다.
다음 예제에서는 o1-mini 모델을 사용하여 특정 출력 스키마로 텍스트에서 특정 정보를 추출합니다. 텍스트에 포함된 정보를 추출할 뿐만 아니라, 간단한 수학 연산을 수행해 정보를 추론하도록 모델에 요청할 것입니다.
import requests
def fetch_html(url):
response = requests.get(url)
if response.status_code == 200:
return response.text
else:
return None
url = "<https://en.wikipedia.org/wiki/List_of_NBA_career_scoring_leaders>"
html_content = fetch_html(url)
json_format = """
{
companies: [
{
"player_name": "Tim Duncan",,
"total_points": "1750",
"total_points_without_free_throw": "1050",
}
]
}
"""
o1_response = client.chat.completions.create(
model="o1-mini",
messages=[
{
"role": "user",
"content": f"""
Extract information from the text.
- Read the following html and return players with the most points without free throw in the NBA's history: {html_content}.
- 결과를 높은 순서에서 낮은 순서로 반환하고, 상위 5개를 보여주세요. 다음 형식의 JSON으로만 반환하세요: {json_format}"
"""
}
]
)
print(o1_response.choices[0].message.content)
"""
출력:
```json
{
"players": [
{
"player_name": "LeBron James",
"total_points": "41599",
"total_points_without_free_throw": "33048"
},
{
"player_name": "Kareem Abdul-Jabbar",
"total_points": "38387",
"total_points_without_free_throw": "31675"
},
{
"player_name": "Karl Malone",
"total_points": "36928",
"total_points_without_free_throw": "27141"
},
{
"player_name": "Wilt Chamberlain",
"total_points": "31419",
"total_points_without_free_throw": "25362"
},
{
"player_name": "Kobe Bryant",
"total_points": "33643",
"total_points_without_free_throw": "25265"
}
]
}
"""
보시다시피, o1 모델은 우리가 정의한 출력 스키마에 따라 정보를 추출할 뿐만 아니라, 수학적 연산을 수행하고 추출된 다른 정보와 함께 적절한 결과를 출력 스키마에 포함할 수도 있습니다.
AI 기반 검색 엔진
또한 o1 모델을 Retrieval Augmented Generation (RAG) 설정에서 사용할 수 있으며, 여기서는 유사도 검색을 통해 얻은 제공된 컨텍스트를 기반으로 쿼리에 대한 응답을 생성하는 데 사용합니다.
RAG 애플리케이션의 일반적인 워크플로는 다음과 같습니다. 사용자 쿼리가 주어지면, 쿼리는 OpenAI의 text-embedding-3-large와 같은 우리가 선택한 임베딩 모델을 사용해 임베딩으로 변환됩니다. 다음으로, 쿼리 임베딩은 유사도 검색을 통해 벡터 데이터베이스 내부에 저장된 컨텍스트 임베딩 모음과 비교됩니다. 그런 다음 가장 관련성이 높은 상위 k개의 컨텍스트를 가져와 프롬프트에 추가하여, LLM이 쿼리에 답하는 데 유용한 컨텍스트를 제공합니다.
RAG 워크플로.
보시다시피, RAG 사용 사례에서 o1 모델을 사용하려면 일반적으로 Milvus와 같은 벡터 데이터베이스와 결합하여 방대한 양의 컨텍스트를 저장하고 효율적이고 빠른 유사도 검색을 수행합니다.
아래 예시에서는 o1-mini 모델과 Milvus의 조합을 사용하여 간단한 RAG 애플리케이션을 만들겠습니다.
먼저, RAG 애플리케이션에서 가능한 컨텍스트로 사용할 HTML의 텍스트 소스를 로드합니다. 다음으로, 원본 텍스트를 각각 약 2000자로 구성된 청크로 분할합니다. 청킹 프로세스가 끝나면 모든 청크를 Milvus 벡터 데이터베이스 내부에 저장할 수 있습니다. 주어진 쿼리에 대해 가능한 최상의 컨텍스트를 찾기 위해 전체 검색을 수행하고 싶으므로 인덱싱 유형을 "FLAT"으로 설정하겠습니다.
!pip install --upgrade --quiet langchain langchain-core langchain-community langchain-text-splitters langchain-milvus langchain-openai bs4
import bs4
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_milvus import Milvus
from langchain_openai import OpenAIEmbeddings
# Create a WebBaseLoader instance to load documents from web sources
loader = WebBaseLoader(
web_paths=(
"<https://lilianweng.github.io/posts/2023-06-23-agent/>",
"<https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/>",
),
bs_kwargs=dict(
parse_only=bs4.SoupStrainer(
class_=("post-content", "post-title", "post-header")
)
),
)
# Load documents from web sources using the loader
documents = loader.load()
# Initialize a RecursiveCharacterTextSplitter for splitting text into chunks
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)
# text_splitter를 사용하여 문서를 청크로 분할
docs = text_splitter.split_documents(documents)
# OpenAI의 기본 임베딩 모델 정의
embeddings = OpenAIEmbeddings()
# 청크화된 데이터를 Milvus에 저장
vectorstore = Milvus.from_documents(
documents=docs,
embedding=embeddings,
connection_args={
"uri": "./milvus_demo.db",
},
index_params={"index_type": "FLAT", "metric_type": "L2"},
drop_old=True, # 기존 Milvus 컬렉션이 존재하는 경우 삭제
)
이제 모델과 프롬프트를 정의할 수 있습니다. 프롬프트에는 "제공된 컨텍스트를 사용하여 쿼리에 답하라"와 같은 지침과 쿼리 자체가 포함됩니다. 결과로 가장 관련성이 높은 상위 1개의 컨텍스트를 가져옵니다.
from langchain_openai import ChatOpenAI
from langchain import hub
# 응답 생성을 위한 OpenAI 언어 모델 초기화
llm = ChatOpenAI(model_name="o1-mini", temperature=1)
# AI 응답 생성을 위한 프롬프트 템플릿 정의
prompt = hub.pull("rlm/rag-prompt")
# 벡터 스토어를 리트리버로 변환
retriever = vectorstore.as_retriever()
query = "AI Agent의 자기 성찰이란 무엇인가요?"
vectorstore.similarity_search(query, k=1)
마지막으로, LangChain으로 RAG 워크플로를 쉽게 조율한 다음, Milvus 데이터베이스에서 가져온 가장 관련성 높은 컨텍스트를 사용하여 주어진 쿼리에 대한 o1-mini 모델의 응답을 얻을 수 있습니다.
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 검색된 문서의 형식을 지정하는 함수 정의
def format_docs(docs):
return "nn".join(doc.page_content for doc in docs)
# AI 응답 생성을 위한 RAG(Retrieval-Augmented Generation) 체인 정의
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# rag_chain.get_graph().print_ascii()
# 특정 질문으로 RAG 체인을 호출하고 응답 검색
res = rag_chain.invoke(query)
print(res)
"""
출력:
AI agent의 자기 성찰은 과거 경험을 바탕으로 자신의 행동과 결정을 평가하고 개선하는 능력을 의미합니다. 이 과정은 agent가 실수를 식별하고 수정할 수 있게 하여 시간이 지남에 따라 성능을 향상시킵니다. 시행착오를 통한 반복적 개선이 필요한 복잡한 실제 작업을 처리하는 데 필수적입니다.
"""
이미지 이해
최신 o1 모델이 o1-preview 및 o1-mini와 비교해 가지는 주요 장점 중 하나는 멀티모달 기능입니다. 즉, 텍스트뿐만 아니라 이미지도 입력으로 받을 수 있습니다. 따라서 o1 모델은 이미지의 내용을 설명하거나, 이미지 속 텍스트를 요약하거나, 이미지에서 구조화된 정보를 추출하는 등 이미지 추론 사용 사례에 이상적입니다.
모델에 이미지 입력을 제공하는 방법은 두 가지가 있습니다. 이미지 링크를 전달하거나 Base64로 인코딩된 이미지를 전달하는 것입니다. 이를 수행하는 예제 코드는 아래와 같습니다.
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="o1",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "이 이미지에는 무엇이 있나요?"},
{
"type": "image_url",
"image_url": {
"url": "<https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg>",
},
},
],
}
],
max_tokens=300,
)
print(response.choices[0])
함수 호출
o1 모델로 탐색할 수 있는 또 다른 흥미로운 사용 사례는 함수 호출입니다. 본질적으로 함수 호출은 LLM이 검색 엔진이나 API와 같은 우리의 코드 또는 외부 서비스와 상호작용할 수 있게 해줍니다. 문제를 깊이 생각해낼 수 있는 능력을 바탕으로, 당면한 작업을 해결하는 데 도움이 되도록 적절한 외부 서비스를 정확하게 사용할 수 있습니다.
예를 들어, 로스앤젤레스의 현재 날씨를 알고 싶다고 해봅시다. 외부 서비스가 없다면 LLM이 올바른 답변을 제공하는 것은 불가능할 것이며, 환각을 시작할 가능성이 높습니다. 날씨 API에 액세스할 수 있다면, 이 "도구"를 추가 리소스로 사용하여 o1 모델이 우리의 쿼리에 답변하도록 도울 수 있습니다.
에이전트형 모델을 만들기 위한 함수 호출의 코드 구현에 대해 더 알고 싶다면 OpenAI 또는 LangChain에서 제공하는 문서를 참고할 수 있습니다.
o1 모델과 대안 모델 간의 비교
이 섹션에서는 o1 모델의 장단점을 GPT 4o, o3-mini, Claude 3.5 Sonnet, DeepSeek R1과 같은 대안 모델과 비교하겠습니다.
GPT 4o와의 비교
복잡한 추론 벤치마크에서 o1 모델의 성능이 GPT-4o 모델보다 훨씬 뛰어나지만, 그렇다고 해서 항상 GPT-4o보다 o1 모델을 선택해야 한다는 의미는 아닙니다.
전반적으로 o1 모델은 아이디어 도출 작업과 같이 복잡하고 상세한 사고 과정을 필요로 하는 작업에서 뛰어납니다. 예를 들어, 우리가 시작하려는 비즈니스에 대한 전략을 계획하고 최선 및 최악의 시나리오를 개요화하는 데 도움을 주는 파트너로 o1 모델을 사용할 수 있습니다. 교육 분야에서는 우리가 개발 중인 과학 과정의 각 구성 요소에 대한 상세한 설명을 생성하는 데 o1 모델을 사용할 수 있습니다. 또한 코드 리뷰 중이나 코드 최적화를 위해 o1 모델을 파트너로 활용할 수도 있습니다.
하지만 AI 어시스턴트를 프로덕션에 배포하려는 경우, 현재는 o1 모델보다 GPT-4o가 여전히 선호됩니다. 이는 OpenAI의 API 구현 측면에서 GPT-4o가 o1 모델에 비해 훨씬 더 성숙해 있기 때문입니다. 예를 들어, GPT-4o와 o1 모델 모두 이미지를 입력으로 받지만, o1 모델은 커스텀 지침, 파일 업로드(이미지 제외), 음성 기능, 웹 브라우징과 같은 여러 도구와 기능에 액세스할 수 없습니다. 따라서 우리의 사용 사례에 이러한 기능이 필요하다면 GPT-4o를 사용해야 합니다.
또한 현재로서는 o1 모델의 가용성이 제한적입니다. 특정 사용자만 이 모델에 액세스할 수 있으며, 이 모델에 액세스하려면 최소한 Tier 3 사용자이거나 ChatGPT Plus 또는 Pro 플랜을 구독해야 합니다. 또한 우리의 사용 사례에서 추론 지연 시간이 매우 중요하다면, GPT-4o는 여전히 o1 모델보다 더 나은 대안을 제공합니다.
o3-mini와의 비교
o3-mini 모델은 OpenAI의 추론 LLM 중 최신 모델입니다. o1-mini와 마찬가지로, o3-mini는 STEM 도메인에 고도로 최적화되어 있지만, 아래에 표시된 다양한 STEM 벤치마크 전반의 성능 그래프에서 볼 수 있듯이 o1-mini보다 우수하고 o1 모델에 필적하는 성능을 제공합니다:
다양한 STEM 벤치마크 전반에서 o3-mini와 o1 모델 간의 성능 비교. 출처.
o3-mini는 o1-mini를 훌륭하게 만드는 모든 요소(낮은 비용과 지연 시간)를 유지하면서 이를 더욱 개선합니다. 따라서 사용 사례가 STEM 도메인 내에 있고 지연 시간이나 비용이 중요하다면 o1 모델보다 o3-model이 더 선호될 것입니다. 그러나 o1 모델은 여전히 o3-mini보다 더 광범위한 지식을 제공하므로, 사용 사례가 더 일반적이고 STEM 도메인에 속하지 않는 경우에는 o1 모델이 더 적합합니다.
o3-mini와 o1 모델은 모두 함수 호출, 구조화된 출력, 개발자 메시지뿐만 아니라 조정 가능한 추론 노력과 같은 고급 API 기능을 지원합니다. 그러나 o3-mini는 현재 텍스트 전용 입력을 지원하므로, 사용 사례의 입력이 이미지라면 o1 모델을 사용해야 합니다.
API를 통한 사용 가능 여부와 관련해서는, 현재 o3-mini와 o1 모델 모두 Tier 3-5 사용자에게만 제공됩니다. ChatGPT Plus, Pro, Team을 구독 중이라면 두 모델 모두 사용할 수 있습니다.
DeepSeek R1 및 Claude 3.5 Sonnet과의 비교
o1 모델의 다른 대안으로는 Claude 3.5 Sonnet과 DeepSeek R1이 있습니다. 이 둘 중에서 DeepSeek R1은 훈련 중 추론 최적화로 인해 o1에 더 가까운 경쟁자이며, Claude 3.5 Sonnet은 실제로 추론에 최적화되지 않았습니다. 아래 여러 추론 벤치마크에서 볼 수 있듯이, o1과 R1은 모두 3.5 Sonnet을 상당한 차이로 능가합니다. 한편, o1과 R1의 성능은 서로 비슷합니다.
o1 모델과 다른 대표 모델 간의 비교. 출처.
따라서 사용 사례에서 LLM의 추론 능력이 필요하다면 o1 또는 R1을 사용하는 것이 권장됩니다. 그렇지 않다면 Claude 3.5 Sonnet이 o1 모델보다 더 낮은 비용과 더 나은 지연 시간을 제공하므로 더 바람직할 것입니다.
이제 우리의 사용 사례가 LLM의 추론 능력을 필요로 한다고 가정해 보겠습니다. 이는 o1 또는 R1 모델 중 하나를 사용할 수 있다는 의미입니다. R1 모델의 주요 장점은 오픈 소스라는 특성으로, 자체 인프라에서 호스팅할 수 있다는 의미입니다. 이는 데이터 프라이버시가 사용 사례에서 중요한 문제라면 매우 유익합니다.
지연 시간 측면에서는 R1이 Mixture-of-Expert (MoE) 아키텍처로 인해 o1보다 더 나을 수 있습니다. MoE 덕분에 주어진 요청에서 R1 파라미터의 작은 일부만 활성화되어 추론 프로세스가 빨라집니다. 또한 R1은 훈련 중 멀티 토큰 예측 접근 방식을 채택하며, 이는 추론 중 추측 디코딩으로 재활용될 수 있습니다. 이는 추론 프로세스를 더욱 빠르게 합니다.
그러나 DeepSeek R1은 총 671B개의 파라미터를 포함한다는 점에 유의해야 합니다. 이는 이를 호스팅하려면 대략 1.5 TB의 GPU 메모리(예: NVIDIA A100 80GB x16)가 필요하다는 의미입니다. 따라서 모델을 자체적으로 호스팅하는 것은 매우 비싸며, R1을 호스팅하는 복잡한 단계를 피하기 위해 o1 모델을 사용하는 것이 더 바람직할 것입니다.o1을 사용하면 API 요청을 할 때만 비용을 지불하면 됩니다. 이는 AWS나 GCP와 같은 인기 클라우드 제공업체에서 R1 모델을 호스팅할 때 지불해야 하는 시간당 GPU 비용과 비교해 대부분의 경우 더 저렴해집니다.
결론
o1 모델은 사고 연쇄 프롬프팅과 강화 학습을 통합하여 GPT-4o를 개선함으로써 AI 추론 능력의 발전을 보여줍니다. 복잡한 문제를 분해하고 대안적 해결책을 탐색하는 능력을 통해 o1 모델은 STEM 관련 작업이나 코딩 작업처럼 깊은 분석적 사고가 필요한 작업에서 뛰어난 성능을 발휘합니다. 또한 최신 o1 모델은 더 큰 컨텍스트 창, 멀티모달 기능, 최적화된 추론 토큰 사용으로 효율성을 향상시킵니다.
그러나 이러한 강점에도 불구하고, 대안 모델 대신 o1 모델을 채택할지는 여전히 특정 사용 사례 요구사항에 전적으로 달려 있습니다. o1 모델은 복잡한 추론 작업에서 GPT-4o를 능가하지만, 비용, 지연 시간, API 성숙도 측면에서는 GPT-4o가 더 바람직합니다. o3-mini와 비교하면 o1은 더 넓은 일반 지식을 제공하는 반면, o3-mini는 더 낮은 비용과 지연 시간으로 STEM 애플리케이션에 더 효율적입니다. DeepSeek R1 및 Claude 3.5 Sonnet과 비교하면 o1과 R1은 추론에서 뛰어나지만, R1의 오픈 소스 특성과 Mixture-of-Expert 아키텍처는 지연 시간을 개선합니다. 다만 비용이 많이 드는 인프라가 필요합니다.
OpenAI GPT-o1을 사용하는 튜토리얼
LangChain, Milvus, OpenAI GPT-o1, OpenAI text-embedding-3-small을 사용한 RAG 챗봇
LangChain, Milvus, OpenAI GPT-o1, NVIDIA embed-qa-4를 사용한 RAG 챗봇
LangChain, Milvus, OpenAI GPT-o1, Cohere embed-multilingual-v3.0을 사용한 RAG 챗봇
LangChain, Milvus, OpenAI GPT-o1, Ollama mxbai-embed-large를 사용한 RAG 챗봇
LangChain, Milvus, OpenAI GPT-o1, HuggingFace all-MiniLM-L12-v1을 사용한 RAG 챗봇
계속 읽기

How to Choose the Best Embedding Model for RAG in 2026: 10 Models Benchmarked
We benchmarked 10 embedding models on cross-modal, cross-lingual, long-document, and dimension compression tasks. See which one fits your RAG pipeline.

Why Teams Are Migrating from Weaviate to Zilliz Cloud — and How to Do It Seamlessly
Explore how Milvus scales for large datasets and complex queries with advanced features, and discover how to migrate from Weaviate to Zilliz Cloud.

Zilliz Cloud Introduces Advanced BYOC-I Solution for Ultimate Enterprise Data Sovereignty
Explore Zilliz Cloud BYOC-I, the solution that balances AI innovation with data control, enabling secure deployments in finance, healthcare, and education sectors.


