Grok API 설정 가이드: Python 개발자를 위한 xAI 콘솔 등록부터 Function Calling까지
Grok API 완벽 설정 가이드 — Python 개발자 편
xAI의 Grok API는 고성능 대규모 언어 모델을 애플리케이션에 통합할 수 있는 강력한 도구입니다. 이 가이드에서는 xAI 콘솔 가입부터 스트리밍 채팅 완성, Function Calling 구성까지 실무에 필요한 전 과정을 단계별로 안내합니다.
1단계: xAI 콘솔 등록 및 API 키 발급
- xAI 콘솔 접속: 브라우저에서
console.x.ai에 접속합니다.- 계정 생성: X(구 Twitter) 계정 또는 이메일로 가입을 완료합니다.- 결제 정보 등록: 대시보드 좌측 메뉴의 Billing 탭에서 결제 수단을 추가합니다. 무료 크레딧이 제공되는 경우 별도 결제 없이 시작할 수 있습니다.- API 키 생성: API Keys 메뉴에서Create API Key버튼을 클릭합니다. 키 이름을 입력하고 권한 범위를 설정한 뒤 생성합니다.- 키 안전 보관: 생성된 키는 한 번만 표시됩니다. 즉시 안전한 위치에 복사하여 저장하세요.
2단계: Python SDK 설치 및 환경 설정
Grok API는 OpenAI 호환 인터페이스를 제공하므로 openai Python SDK를 그대로 활용할 수 있습니다.
SDK 설치
pip install openai
환경 변수 설정
# Linux / macOS
export XAI_API_KEY="YOUR_API_KEY"
# Windows PowerShell
$env:XAI_API_KEY="YOUR_API_KEY"
기본 클라이언트 초기화
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("XAI_API_KEY"),
base_url="https://api.x.ai/v1",
)
base_url을 https://api.x.ai/v1으로 지정하는 것이 핵심입니다. 이를 통해 기존 OpenAI SDK 코드에서 최소한의 변경만으로 Grok 모델을 사용할 수 있습니다.
3단계: 채팅 완성 (Chat Completions) 호출
기본 호출
response = client.chat.completions.create(
model=“grok-3”,
messages=[
{“role”: “system”, “content”: “당신은 유능한 AI 어시스턴트입니다.”},
{“role”: “user”, “content”: “Python의 GIL이 무엇인지 간단히 설명해주세요.”},
],
temperature=0.7,
max_tokens=1024,
)
print(response.choices[0].message.content)
스트리밍 응답
실시간으로 토큰을 수신하려면 stream=True 파라미터를 추가합니다.
stream = client.chat.completions.create(
model="grok-3",
messages=[
{"role": "user", "content": "FastAPI로 REST API를 만드는 예제를 보여주세요."},
],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
스트리밍은 사용자 체감 응답 속도를 크게 향상시키며, 챗봇이나 실시간 UI에 필수적입니다.
4단계: Function Calling 구성
Function Calling을 사용하면 Grok 모델이 외부 함수를 호출하도록 구조화된 응답을 생성할 수 있습니다.
도구 정의
tools = [
{
“type”: “function”,
“function”: {
“name”: “get_weather”,
“description”: “지정된 도시의 현재 날씨 정보를 반환합니다.”,
“parameters”: {
“type”: “object”,
“properties”: {
“city”: {
“type”: “string”,
“description”: “날씨를 조회할 도시 이름 (예: 서울)”,
},
“unit”: {
“type”: “string”,
“enum”: [“celsius”, “fahrenheit”],
“description”: “온도 단위”,
},
},
“required”: [“city”],
},
},
}
]
Function Calling 전체 워크플로우
import json
def get_weather(city: str, unit: str = "celsius") -> dict:
# 실제 구현에서는 날씨 API를 호출합니다
return {"city": city, "temperature": 18, "unit": unit, "condition": "맑음"}
# 1) 모델에게 도구와 함께 질문
response = client.chat.completions.create(
model="grok-3",
messages=[{"role": "user", "content": "서울 날씨 어때?"}],
tools=tools,
tool_choice="auto",
)
msg = response.choices[0].message
# 2) 모델이 함수 호출을 요청하면 실행
if msg.tool_calls:
tool_call = msg.tool_calls[0]
args = json.loads(tool_call.function.arguments)
result = get_weather(**args)
# 3) 함수 결과를 다시 모델에게 전달
follow_up = client.chat.completions.create(
model="grok-3",
messages=[
{"role": "user", "content": "서울 날씨 어때?"},
msg,
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result, ensure_ascii=False),
},
],
tools=tools,
)
print(follow_up.choices[0].message.content)
사용 가능한 모델 목록
| 모델명 | 특징 | 권장 용도 |
|---|---|---|
grok-3 | 최고 성능, 복잡한 추론 | 고급 분석, 코드 생성 |
grok-3-mini | 빠른 응답, 비용 효율 | 간단한 질의, 분류 작업 |
grok-3-fast | 속도 최적화 | 실시간 채팅, 저지연 서비스 |
openai SDK는 자동 재시도를 지원합니다. max_retries=3을 클라이언트 생성 시 전달하면 일시적인 네트워크 오류에 대응할 수 있습니다.- **비동기 호출:** from openai import AsyncOpenAI를 사용하면 asyncio 기반 비동기 호출로 동시 처리량을 높일 수 있습니다.- **응답 형식 지정:** response_format={"type": "json_object"}를 설정하면 모델이 유효한 JSON만 출력하도록 강제할 수 있어 파싱 에러를 방지합니다.- **시스템 프롬프트 활용:** 시스템 메시지에 응답 언어, 톤, 형식을 명시하면 일관된 출력 품질을 유지할 수 있습니다.- **비용 모니터링:** xAI 콘솔의 *Usage* 대시보드에서 일별·모델별 토큰 사용량을 확인하고 예산 알림을 설정하세요.
## Troubleshooting — 자주 발생하는 오류
| 오류 | 원인 | 해결 방법 |
|---|---|---|
401 Unauthorized | API 키가 유효하지 않거나 만료됨 | xAI 콘솔에서 키 상태를 확인하고 필요 시 재발급하세요. |
429 Too Many Requests | 속도 제한(Rate Limit) 초과 | 요청 간격을 늘리거나 max_retries와 지수 백오프를 적용하세요. |
404 Not Found | base_url 설정 누락 또는 오타 | base_url이 https://api.x.ai/v1인지 확인하세요. |
400 Bad Request (Function Calling) | 도구 스키마의 JSON 형식 오류 | parameters 필드가 유효한 JSON Schema인지 검증하세요. |
openai.APIConnectionError | 네트워크 문제 또는 방화벽 차단 | 인터넷 연결을 확인하고 프록시 설정이 있는 경우 httpx 클라이언트 설정을 조정하세요. |
Q1. Grok API는 OpenAI SDK 없이도 사용할 수 있나요?
네, Grok API는 표준 REST API이므로 requests 라이브러리나 curl로 직접 호출할 수 있습니다. 다만 OpenAI 호환 SDK를 사용하면 스트리밍, 재시도, 타입 안정성 등 편의 기능을 자동으로 활용할 수 있어 권장됩니다.
Q2. 무료 사용량 제한이 있나요?
xAI는 신규 가입 시 일정량의 무료 크레딧을 제공할 수 있으며, 이후에는 사용한 토큰 수에 따라 과금됩니다. 정확한 가격과 무료 한도는 xAI 콘솔의 Pricing 페이지에서 확인하세요. 모델별로 입력·출력 토큰 단가가 다르므로 용도에 맞는 모델을 선택하는 것이 비용 절감에 중요합니다.
Q3. Function Calling에서 여러 함수를 동시에 호출할 수 있나요?
네, Grok 모델은 단일 응답에서 여러 개의 tool_calls를 반환할 수 있습니다. msg.tool_calls 리스트를 순회하면서 각 함수를 실행하고, 모든 결과를 tool 역할 메시지로 전달하면 됩니다. 병렬 함수 호출은 복합 질의(예: 여러 도시 날씨 동시 조회)에 특히 유용합니다.