Skip to main content

o3-mini vs. DeepSeek-R1: API 설정, 성능 테스트 및 모델 평가

API를 통해 OpenAI o3-mini를 설정하고 실행하는 방법을 알아보고, 유연한 reasoning effort 설정을 탐색하며, W&B Weave Evaluations를 사용해 DeepSeek-R1과 성능을 비교해 보세요. 이 글은 AI 번역본입니다. 오역이 있을 경우 댓글로 알려주세요.
Created on September 12|Last edited on September 12
새로 실행을 시작하기 OpenAI의 o3-mini 모델 API를 통해 실행하는 방법은 놀라울 만큼 간단하며, ChatGPT 인터페이스나 GPT-4o에서 경험할 수 있는 것 이상으로 다양한 유연성을 제공합니다.
이 가이드는 o3-mini로 추론을 실행하는 방법과 성능을 비교하는 방법을 단계별로 설명합니다. DeepSeek-R1 AIME 데이터셋에서 사용하여 Weave 평가연구나 소프트웨어 개발에 AI를 도입하려는 경우, 이 글은 다음 내용을 시작하는 데 도움이 될 것입니다. OpenAI의 최신 모델.
더 빠르게 직접 실행해 보고 싶다면, 이 Colab에서 스크립트를 테스트해 보세요:

참고: 현재 o3 시리즈 모델은 티어 3–5 계정을 보유한 경우에만 API를 통해 접근할 수 있습니다.
안타깝게도 그렇게 하지 않으면 ChatGPT 인터페이스를 통해서만 o3에 접근해야 합니다.
모델 접근이 더 널리 열리면 다시 참고할 수 있도록 이 글을 북마크해 두시길 권장합니다.
먼저 GPT-4o로 시작하고 나중에 코드를 업그레이드하고 싶다면, 이를 위한 튜토리얼이 있습니다 여기.
💡


목차



이제 막 시작했고 아직 Python을 실행할 환경을 머신에 설정하지 않았다면간단한 튜토리얼을 준비했습니다 여기 몇 분이면 바로 시작할 수 있도록 도와줍니다.
또한, 필요하다면 OpenAI API를 받는 방법 안내, 여러분은 ~을 알게 될 것입니다 여기.
💡

W&B Weave

W&B Weave 프로젝트에서 모델 출력의 로깅과 분석 과정을 간소화합니다. 시작은 간단합니다. Weave를 import한 뒤 프로젝트 이름으로 초기화하면 됩니다.
Weave의 핵심 기능은 @weave.op 데코레이터. 파이썬에서 데코레이터는 함수의 동작을 확장하며, 이를 적용하면 @weave.op를 사용하면 해당 함수의 입력과 출력이 자동으로 기록됩니다. 이를 통해 모델을 거쳐 흐르는 데이터를 손쉽게 추적할 수 있습니다.
실행이 완료되면 Weave가 이러한 로그를 수집하고 인터랙티브 대시보드에 시각화하여 함수 호출, 입력, 출력에 대한 통찰을 제공합니다. 이를 통해 디버깅이 강화되고 실험 데이터를 체계적으로 관리할 수 있으며, 특히 o3-mini 및 기타 AI 모델을 다룰 때 모델 개발이 한층 간소화됩니다.

o3-mini와 R1 가격 비교

Deepseek-Reasoner (R1)는 입력 토큰 100만 개당 $0.55(캐시 미스 가정 시)를 청구하며, o3-mini는 100만 개당 $1.10입니다. 출력 토큰의 경우 R1은 100만 개당 $2.19, o3-mini는 $4.40입니다. OpenAI는 Batch API를 제공하여 입력 토큰 비용을 100만 개당 $0.55, 출력 토큰 비용을 100만 개당 $2.20으로 낮출 수 있습니다. Batch API는 여러 요청을 동시에 처리하여 효율을 높이고 비용을 절감합니다.


OpenAI o3-mini는 낮음, 보통, 높음의 세 가지 수준으로 조정 가��한 유연한 추론 노력 설정을 제공합니다. 이를 통해 사용자는 필요에 따라 속도 또는 정확도를 최적화할 수 있습니다. 기본적으로 ChatGPT는 보통 추론 노력으로 동작하여 효율성과 성능 사이의 균형을 이루며, STEM 과제에서 OpenAI o1과 유사한 특성을 보입니다.
보다 빠른 응답과 단순한 추론이 필요한 작업에는 낮음 설정이 계산 부담을 줄여 주므로, 간단하고 신속한 작업에 적합합니다. 반면 높음 설정은 문제 해결 능력을 강화하여 AIME, GPQA와 같은 복잡한 벤치마크에서 정확도를 크게 향상시킵니다. 이 설정을 사용하면 o3-mini가 고급 평가에서 이전 모델들을 능가할 수 있지만, 약간의 지연 시간 증가라는 트레이드오프가 뒤따릅니다.
이 옵션들을 통해 개발자는 실시간 애플리케이션에 최적화할지, 심층 분석적 추론을 처리할지 등 다양한 워크로드에 맞춰 성능을 정교하게 조정할 수 있습니다.


o3-mini Python 빠른 시작

지금 바로 시작해 보겠습니다. 이 튜토리얼은 유효한 OpenAI API 키와 Python이 설치되어 있으며, 다음 pip 패키지가 함께 설치되어 있다고 가정합니다:
pip install weave openai datasets
먼저 o3-mini와 Weave로 추론을 실행하는 간단한 스크립트부터 작성하겠습니다:
import os
from openai import OpenAI
# Option to hardcode API key (leave empty to use env variable)
OPENAI_API_KEY = ""
# Use hardcoded key if provided, else fetch from environment
api_key = OPENAI_API_KEY if OPENAI_API_KEY else os.getenv("OPENAI_API_KEY")

if not api_key:
raise ValueError("No API key provided. Set it manually or through the environment variable.")

O3_MODEL = "o3-mini" # Replace with actual o3 model ID
# Initialize OpenAI client
openai_client = OpenAI(api_key=api_key)

# Math problem
problem = "Find the derivative of f(x) = 3x^2 + 5x - 7."
# Run inference
try:
response = openai_client.chat.completions.create(
model=O3_MODEL,
messages=[{"role": "user", "content": problem}]
)
print(response.choices[0].message.content)
except Exception as e:
print(f"Failed to get OpenAI response: {e}")
여기서 Weave는 모델의 입력과 출력을 기록합니다. 추가로 무언가를 넣을 필요조차 없다는 점에 주목하세요. @weave.op왜냐하면 Weave는 이미 OpenAI Python 라이브러리와 통합되어 있으며, 추론 호출을 Weave에 로깅하는 데 필요한 것은 단지… import 그리고 init Weave!

Weave로 o3-mini 평가하기

이제 추론 파이프라인을 설정했으니, AIME 데이터셋에서 OpenAI의 o3 mini 모델과 R1을 평가해 보겠습니다. 이 데이터셋은 박사급 과학 문제로 구성되어 있어, AI 추론 능력을 평가하기에 매우 엄격한 벤치마크입니다.
Weave Evaluations를 사용해 o3-mini의 응답을 정답과 비교하겠습니다. 평가 과정에서는 o3-mini로 답안을 생성한 뒤, GPT-4o를 판별자로 사용해 정오를 채점합니다. 이 평가를 자동화하면 o3-mini가 복잡한 학술적 추론을 얼마나 잘 수행하는지 정량적으로 측정할 수 있습니다.

API 실패 처리와 신뢰할 수 있는 비교 보장

이전에 평가를 진행하면서 DeepSeek-R1에서 API 호출이 무작위로 실패해 빈 응답이나 형식이 잘못된 응답을 반환하는 문제가 발생했습니다. 최근에도 DeepSeek-R1의 장애가 있었기 때문에, API 호출이 실패할 수 있음을 유의하세요. 당분간 가장 좋은 해결책은 코드에서 R1 관련 부분을 주석 처리하고 OpenAI의 o3만으로 평가를 실행하거나, DeepSeek 671B 파라미터 모델을 제공하는 다른 공급자를 찾는 것입니다.
이제 평가 파이프라인을 실행하고 결과를 분석해 보겠습니다:
import os
import asyncio
import requests
from datasets import load_dataset
from openai import OpenAI
import json
import weave; weave.init("aime_evaluation")

# API Keys and Clients
openai_client = OpenAI(api_key="your api key")
deepseek_client = OpenAI(
api_key="your-deepseek-key",
base_url="https://api.deepseek.com"
)

# Model constants
O3_MINI = "o3-mini"
JUDGE_MODEL = "gpt-4o-2024-08-06" # For evaluation

# Consistent system message
system_message = "Solve the following problem. put your final answer within \\boxed{}: "

def run_openai_inference(prompt: str) -> str:
"""Run inference using OpenAI API"""
try:
response = openai_client.chat.completions.create(
model=O3_MINI,
messages=[
{"role": "user", "content": prompt}
]
)
return response.choices[0].message.content
except Exception as e:
print(f"Failed to get OpenAI response: {e}")
return None

class O3MiniModel(weave.Model):
@weave.op
async def predict(self, text: str) -> str:
print("running inference")
return run_openai_inference(f"{system_message}{text}")

class DeepseekR1(weave.Model):
@weave.op
async def predict(self, text: str) -> str:
try:
response = deepseek_client.chat.completions.create(
model="deepseek-reasoner",
messages=[
{"role": "user", "content": system_message + text}
]
)
return response.choices[0].message.content
except Exception as e:
print(f"Failed to get Deepseek response: {e}")
return None

@weave.op
async def gpt4_scorer(label: str, model_output: str) -> dict:
"""Score the model's output by comparing it with the ground truth."""
query = f"""
YOU ARE A LLM JUDGE DETERMINING IF THE FOLLOWING MODEL GENERATED ANSWER IS THE SAME AS THE CORRECT ANSWER
I WILL GIVE YOU THE LAST 100 CHARS OF THE MODEL'S REASONING PATH, WHICH WILL CONTAIN THE FINAL ANSWER ->

Model's Answer (last 100 chars): {str(model_output)[-100:]}
Correct Answer: {label}
Your task:
1. State the model's predicted answer (answer only).
2. State the ground truth (answer only).
3. Determine if the model's final answer is correct (ignore formatting differences, etc.). RESPOND with the predicted and ground truth answer, followed with a JSON object containing the correctness encapsulated within the following delimiters:
```json
{{ "correctness": true/false }}
```
"""
try:
response = openai_client.chat.completions.create(
model=JUDGE_MODEL,
messages=[{"role": "user", "content": query}]
)
response_text = response.choices[0].message.content
json_start = response_text.index("```json") + 7
json_end = response_text.index("```", json_start)
correctness = json.loads(response_text[json_start:json_end].strip()).get("correctness", False)
return {"correctness": correctness, "reasoning": response_text}
except Exception as e:
print(f"Scoring failed: {e}")
return {"correctness": False, "reasoning": str(e)}

def load_ds():
print("Loading AIME dataset...")
dataset = load_dataset("Maxwell-Jia/AIME_2024")["train"]
return [{"text": row["Problem"], "label": row["Answer"]} for row in dataset]

async def run_evaluations():
print("Loading dataset...")
dataset = load_ds()
print("Initializing models...")

models = {
"o3-mini": O3MiniModel(),
"deepseek-r1": DeepseekR1()
}

print("Preparing dataset for evaluation...")
dataset_prepared = [{"text": row["text"], "label": row["label"]} for row in dataset]

print("Running evaluations...")
scorers = [gpt4_scorer]
for model_name, model in models.items():
print(f"\nEvaluating {model_name}...")
evaluation = weave.Evaluation(
dataset=dataset_prepared,
scorers=scorers,
name=f"{model_name} Evaluation"
)
results = await evaluation.evaluate(model)
print(f"Results for {model_name}: {results}")

if __name__ == "__main__":
asyncio.run(run_evaluations())
스크립트는 먼저 AIME 데이터셋을 로드하는 것으로 시작합니다. 허깅 페이스 load_dataset 함수. 이 데이터셋은 수학 경시 대회 문제로 구성되어 있어, 복잡한 추론 능력을 평가하기에 강력한 벤치마크입니다. 각 항목에는 문제 프롬프트(텍스트)와 정답 레이블(라벨)이 포함되어 있습니다.
그다음 스크립트는 OpenAI의 o3-mini 모델과 DeepSeek API를 통한 DeepSeek-R1을 사용해 추론을 실행합니다. 각 모델은 데이터셋을 개별적으로 처리하여 각 문항에 대한 응답을 생성합니다. 추론 과정은 다음과 같이 진행됩니다:
  • o3-mini쿼리는 OpenAI의 API로 전송되며, 응답은 모델 출력으로 반환됩니다.
  • DeepSeek-R1: 쿼리는 DeepSeek의 API를 통해 처리되며, 동일한 방식으로 응답이 반환됩니다.

결과

첫 실행에서 ‘medium’ 추론 강도를 사용했을 때, o3는 정확도 76%로 R1과 완전히 동일한 성적을 기록했습니다. 이는 기본인 medium 설정을 사용한 결과이므로, 궁금하신 분들은 “high” 추론으로 평가를 다시 실행해 o3가 R1을 능가할 수 있는지 확인해 보시길 권합니다.
다음은 Weave 평가 스크린샷으로, R1과 o3를 비교한 화면입니다:



Weave 비교 대시보드

평가가 완료되면 Weave가 결과를 인터랙티브 대시보드로 정리합니다. 이 강력한 도구를 통해 다음을 수행할 수 있습니다:
  • 모델 출력을 나란히 비교합니다.
  • 특정 매개변수로 결과를 필터링하고,
  • 모든 함수 호출에 대한 입력과 출력을 추적합니다.
이러한 구조적이고 시각적인 접근 방식 디버깅을 단순화하고 모델 성능에 대한 깊이 있는 인사이트를 제공합니다으로 만들어, 추적과 개선에 필수적인 도구가 됩니다 대형 언어 모델.
DeepSeek-R1이 다루는 추론 중심 과제와 같은 작업에서는, 비교 보기에서 단계별로 추적 각 모델의 의사 결정 과정을 확인할 수 있습니다. 이 기능을 통해 논리적 착오, 프롬프트 해석 오류, 또는 O3-Mini처럼 한 모델이 다른 모델보다 우수한 지점을 쉽게 파악할 수 있습니다.
이러한 세밀한 출력들을 분석하면, 모델이 특정 작업에서 성공하거나 실패하는 이유를 더 잘 이해할 수 있습니다. 이러한 인사이트는 문제 진단, 모델 개선, 그리고 복잡한 추론 상황에 맞춘 기능 최적화에 매우 유용합니다.
비교 보기 화면은 다음과 같습니다:

이러한 세밀한 출력들을 분석하면, 비교 보기를 통해 모델이 특정 과제에서 어떻게, 그리고 왜 성공하거나 실패하는지 더 쉽게 이해할 수 있습니다. 이 수준의 세부 정보는 문제를 진단하고 모델을 개선하며, 까다로운 추론 상황에 맞게 능력을 최적화하는 데 매우 유용합니다.

결론

OpenAI o3-mini는 특히 STEM 도메인에서 추론이 중요한 작업에 강력하고 유연한 선택지를 제공합니다. 다양한 reasoning effort 설정과 효율적인 API 통합을 통해, 개발자는 속도 또는 추론의 깊이 중 어떤 것에 최적화할지 선택할 수 있습니다.
Weave Evaluations 프레임워크는 모델 출력의 체계적인 비교, 성능 추적, 워크플로우 개선을 쉽게 해줍니다. 직접 추론을 실행하든 대규모 벤치마킹을 수행하든, o3-mini는 확장 가능하면서도 비용 효율적인 해결책을 제공합니다.
API 접근이 확대되고 더 많은 사용자가 워크플로우에 이 모델들을 통합함에 따라, o3-mini는 연구, 개발, 그리고 AI 기반 애플리케이션을 위한 핵심 도구로 자리 잡을 것입니다.


이 글은 AI로 번역되었습니다. 오역이 의심되는 부분이 있다면 댓글로 알려주세요. 원문 보고서는 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기