OpenAI SDK로 Groq GPT-OSS 120B 사용하기: Base URL, 가격, 캐싱
2026년 6월 17일 · 19분 읽기 · GPT / Claude / Gemini

Groq의 OpenAI 호환 엔드포인트는 실제로 한 줄만 바꾸면 됩니다. base_url을 https://api.groq.com/openai/v1로 설정하고 OpenAI SDK를 계속 사용하면 됩니다. 2026년 6월 17일 기준, Groq는 가격 페이지에서 openai/gpt-oss-120b를 캐시되지 않은 입력 토큰 1M당 $0.15, 캐시된 입력 토큰 1M당 $0.075, 출력 토큰 1M당 $0.60로 표시하고 있습니다(Groq 가격).
이 부분이 유용합니다. 함정은 “OpenAI 호환”이 “동일한 동작과 동일한 과금”을 의미한다고 가정하는 것입니다. 그렇지 않습니다. 여전히 Groq 모델 ID를 선택하고, 캐시 히트를 확인하고, 지원되지 않는 OpenAI 파라미터를 피하고, 내장 도구 호출을 별도로 집계해야 합니다.

실제로 무엇을 바꾸는가
Groq 문서에서는 API가 “OpenAI 클라이언트 라이브러리와 대부분 호환된다”고 설명하며, 정확한 OpenAI 클라이언트 설정을 보여 줍니다. Groq 키를 전달하고 base_url="https://api.groq.com/openai/v1"를 설정하면 됩니다(Groq OpenAI 호환성).
OpenAI Python SDK를 설치합니다.
pip install openai
export GROQ_API_KEY="gsk_..."
그런 다음 Groq를 통해 GPT-OSS 120B를 호출합니다.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["GROQ_API_KEY"],
base_url="https://api.groq.com/openai/v1",
)
response = client.chat.completions.create(
model="openai/gpt-oss-120b",
messages=[
{"role": "system", "content": "You are a concise senior backend engineer."},
{"role": "user", "content": "Write a PostgreSQL index plan for a slow user_events query."},
],
)
print(response.choices[0].message.content)
print(response.usage)
중요한 차이는 model입니다. OpenAI 자체 플랫폼에서는 OpenAI가 호스팅하는 모델 이름을 사용할 수 있습니다. Groq에서는 GPT-OSS가 openai/gpt-oss-120b 또는 openai/gpt-oss-20b로 지정됩니다.
OpenAI는 2025년 8월 5일 Apache 2.0 라이선스의 오픈 웨이트 추론 모델로 gpt-oss-120b와 gpt-oss-20b를 공개했습니다(OpenAI). OpenAI에 따르면 gpt-oss-120b는 총 파라미터 117B, 토큰당 활성 파라미터 5.1B, 전문가 128개, 토큰당 활성 전문가 4개를 가지며, 최대 128k 컨텍스트 길이를 네이티브로 지원합니다(OpenAI). Groq의 모델 페이지에서는 호스팅되는 openai/gpt-oss-120b의 컨텍스트 윈도우를 131,072 토큰, 최대 출력 토큰을 65,536으로 표시합니다(Groq 모델 카드).
120B와 20B 중 선택하기
원가보다 품질이 더 중요할 때는 120B를 사용하세요. 에이전트 계획, 더 어려운 코딩 작업, 복잡한 추출, 다단계 추론에 적합합니다. 라우팅, 요약, 분류, 짧은 어시스턴트, 대량 백그라운드 작업처럼 더 저렴한 처리량이 필요할 때는 20B를 사용하세요.
| Groq 모델 ID | 표시 속도 | 캐시되지 않은 입력 | 캐시된 입력 | 출력 |
|---|---|---|---|---|
openai/gpt-oss-120b |
500 TPS | $0.15 / 1M | $0.075 / 1M | $0.60 / 1M |
openai/gpt-oss-20b |
1,000 TPS | $0.075 / 1M | $0.0375 / 1M | $0.30 / 1M |
이 가격은 Groq의 현재 가격표와 프롬프트 캐싱 표에서 가져온 것입니다(Groq 가격). 20B 모델의 표시 토큰 가격은 120B의 정확히 절반입니다. 따라서 “먼저 시도해 보기” 워크플로의 좋은 기본값이 됩니다. 답변 품질이 충분하지 않다면 해당 경로를 120B로 승격하세요.

설정에 넣어 둘 수 있는 작은 스위치 예시는 다음과 같습니다.
import os
from openai import OpenAI
MODEL = os.getenv("GROQ_MODEL", "openai/gpt-oss-20b")
client = OpenAI(
api_key=os.environ["GROQ_API_KEY"],
base_url="https://api.groq.com/openai/v1",
)
def ask(prompt: str) -> str:
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Answer with practical developer steps."},
{"role": "user", "content": prompt},
],
)
return response.choices[0].message.content
print(ask("Give me a minimal Redis rate limiter design."))
20B로 실행합니다.
GROQ_MODEL=openai/gpt-oss-20b python app.py
120B로 실행합니다.
GROQ_MODEL=openai/gpt-oss-120b python app.py
캐시 히트를 반영해 요청 비용 계산하기
Groq 프롬프트 캐싱은 openai/gpt-oss-20b와 openai/gpt-oss-120b를 포함한 지원 모델에서 자동으로 작동합니다. Groq에 따르면 코드 변경은 필요 없고, 캐시 히트는 정확한 접두사 매칭을 사용하며, 캐시된 부분에는 입력 토큰 50% 할인이 적용되고, 캐시된 데이터는 사용되지 않으면 2시간 후 자동 만료됩니다(Groq 프롬프트 캐싱).
실용적인 규칙은 안정적인 텍스트를 앞에 두는 것입니다.
좋은 순서:
- 시스템 프롬프트
- 도구 정의
- Few-shot 예시
- 공유 문서 또는 스키마
- 사용자별 입력
- 타임스탬프, ID, 요청별 데이터
나쁜 순서: 20,000토큰짜리 공유 프롬프트 앞에 타임스탬프, 요청 ID, 사용자별 필드를 넣는 것. 이렇게 하면 접두사가 깨집니다.
GPT-OSS 120B용 비용 헬퍼는 다음과 같습니다.
def groq_gpt_oss_120b_cost(prompt_tokens, cached_tokens, completion_tokens):
uncached_tokens = max(prompt_tokens - cached_tokens, 0)
return (
uncached_tokens / 1_000_000 * 0.15
+ cached_tokens / 1_000_000 * 0.075
+ completion_tokens / 1_000_000 * 0.60
)
그리고 Groq가 반환하는 경우 캐시 사용량을 출력하는 실행 가능한 호출 예시는 다음과 같습니다.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["GROQ_API_KEY"],
base_url="https://api.groq.com/openai/v1",
)
STATIC_POLICY = """
You are an internal code review assistant.
Always check correctness, security, performance, and migration risk.
Return JSON with keys: summary, risks, suggested_patch.
"""
def review(diff: str):
response = client.chat.completions.create(
model="openai/gpt-oss-120b",
messages=[
{"role": "system", "content": STATIC_POLICY},
{"role": "user", "content": diff},
],
response_format={"type": "json_object"},
)
usage = response.usage
details = getattr(usage, "prompt_tokens_details", None)
cached = getattr(details, "cached_tokens", 0) if details else 0
print("prompt_tokens:", usage.prompt_tokens)
print("cached_tokens:", cached)
print("completion_tokens:", usage.completion_tokens)
print("estimated_cost_usd:", groq_gpt_oss_120b_cost(
usage.prompt_tokens,
cached,
usage.completion_tokens,
))
return response.choices[0].message.content
Groq의 캐싱 문서는 usage.prompt_tokens_details 아래에 cached_tokens가 있다고 보여 주며, 캐시 히트율을 cached_tokens / prompt_tokens × 100%로 정의합니다(Groq 프롬프트 캐싱). 두 번째 요청마다 항상 더 저렴해진다고 가정하지 마세요. 정확한 접두사가 중요합니다.
도구 호출은 별도로 집계하기
내장 도구를 활성화하면 토큰 가격만이 전체 청구액이 아닙니다. Groq 가격 페이지는 GPT-OSS용 Built-In Tools를 별도로 표시합니다. Browser Search basic search는 1000 requests당 $5, Browser Search visit website는 1000 requests당 $1, Code Execution Python은 hour당 $0.18입니다(Groq 가격).
이는 에이전트 설계 방식에 영향을 줍니다. 사용자 메시지마다 검색을 한 번 호출하는 지원 봇은 프롬프트 토큰만 사용하는 요약기와 비용 구조가 다릅니다. 캐시는 반복되는 도구 스키마에는 도움이 되지만, 외부 도구 호출을 무료로 만들어 주지는 않습니다.
또한 OpenAI 코드를 복사해 붙여넣기 전에 호환성을 확인하세요. Groq의 OpenAI 호환성 문서는 400을 반환할 수 있는 지원되지 않는 필드를 나열합니다. 여기에는 logprobs, logit_bias, top_logprobs, messages[].name, 그리고 1이 아닌 n 값이 포함됩니다(Groq OpenAI 호환성). Groq는 또한 temperature=0이 1e-8로 변환된다고 설명합니다.
안전한 최소 요청은 다음과 같습니다.
response = client.chat.completions.create(
model="openai/gpt-oss-120b",
temperature=0.2,
messages=[
{"role": "system", "content": "Be precise. If unsure, say so."},
{"role": "user", "content": "Explain this stack trace and suggest a fix: ..."},
],
)
앱 전체를 한 커밋으로 마이그레이션하지 마세요. 공급자 설정을 환경 변수 뒤에 두세요.
LLM_BASE_URL=https://api.groq.com/openai/v1
LLM_API_KEY=$GROQ_API_KEY
LLM_MODEL=openai/gpt-oss-120b
그런 다음 SDK에 연결합니다.
client = OpenAI(
api_key=os.environ["LLM_API_KEY"],
base_url=os.environ["LLM_BASE_URL"],
)
response = client.chat.completions.create(
model=os.environ["LLM_MODEL"],
messages=[{"role": "user", "content": "Summarize this incident report."}],
)
실용적인 멀티 공급자 탈출구
이를 프로덕션에 연결한다면 코드베이스 곳곳에 공급자 가정을 하드코딩하지 마세요. base_url, api_key, model을 설정에 보관하세요. 이렇게 하면 Groq를 쉽게 테스트할 수 있고, 공급자 라우팅도 단순해집니다.
Claude, GPT, Gemini를 위한 하나의 OpenAI 호환 엔드포인트를 원하는 팀이라면 onehop이 쉬운 방법입니다. base URL을 https://api.onehop.ai/v1로 바꾸면 됩니다. OpenAI/Anthropic과 호환되고, 1차 공급자보다 저렴하며, 신규 계정은 카드 없이 $10를 무료로 받을 수 있습니다.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ONEHOP_API_KEY"],
base_url="https://api.onehop.ai/v1",
)
response = client.chat.completions.create(
model=os.environ["ONEHOP_MODEL"],
messages=[
{"role": "user", "content": "Compare this API design against common REST mistakes."}
],
)
print(response.choices[0].message.content)
빠른 GPT-OSS 추론과 Groq의 도구/캐싱 스택이 특히 필요할 때는 Groq를 사용하세요. 클라이언트 코드를 다시 작성하지 않고 Claude, GPT, Gemini 및 기타 호스팅 모델 전반에서 단일 통합 표면을 원할 때는 onehop을 사용하세요. onehop에서 Claude 및 기타 모델을 호출하거나 $10 무료 크레딧으로 가입할 수 있습니다.
프로덕션 체크리스트
출시 전에 이 체크리스트를 실행하세요.
- 모델 ID를 고정하세요. 품질이 중요하면
openai/gpt-oss-120b, 비용을 낮추려면openai/gpt-oss-20b를 사용합니다. - Groq가 캐시된 접두사를 재사용할 수 있도록 안정적인 프롬프트 섹션을 앞에 두세요.
- 모든 요청에 대해
prompt_tokens,cached_tokens,completion_tokens를 로그로 남기세요. - Browser Search, Visit Website, Code Execution에 대한 별도 회계를 추가하세요.
- 트래픽을 Groq로 라우팅하기 전에 지원되지 않는 OpenAI 파라미터를 제거하세요.
- 비즈니스 로직을 건드리지 않고 Groq, 1차 공급자 API, onehop을 테스트할 수 있도록
base_url을 설정 가능하게 유지하세요.
전체 마이그레이션은 한 줄일 수 있습니다. 신뢰할 수 있는 마이그레이션은 세 줄에 회계를 더한 것입니다. base URL, 모델 ID, 비용 텔레메트리입니다. 거기서 시작한 다음, 앱의 각 경로에서 120B의 품질이 출력 토큰 비용을 감당할 가치가 있는지 결정하세요. 더 넓은 모델 접근을 위해 같은 base-URL 패턴을 원한다면 onehop에서 Claude 및 기타 모델을 호출하고 $10 무료 크레딧으로 가입하세요.
관련 글

OpenAI SDK로 Gemini API 호출하기: base_url, API Key, 모델명만 바꾸는 마이그레이션 튜토리얼
기존 OpenAI SDK 프로젝트를 위한 Gemini 호환 인터페이스 마이그레이션 체크리스트. 코드, 파라미터 매핑, 가격 포함.
2026년 6월 14일 · 9분 읽기

OpenAI SDK로 Gemini API 호출하기: base_url, key, 모델명만 바꾸는 연동 튜토리얼
기존 OpenAI SDK 코드로 Gemini를 연동할 때 최소 변경은 세 가지 설정이면 충분합니다.
2026년 6월 14일 · 9분 읽기

OpenAI SDK로 Gemini 호출하기: base_url, API Key, 모델명만 바꾸는 연동 튜토리얼
Google이 OpenAI 호환 인터페이스를 지원해 base_url, Key, 모델명만 변경하면 Gemini를 연동할 수 있습니다.
2026년 6월 14일 · 11분 읽기