파이썬으로 OpenAI API 마스터하기: ChatGPT를 내 프로젝트에 통합하는 방법 (실전 코드 포함)
안녕하세요! 오늘은 많은 분들이 관심을 가지고 계시는 OpenAI API, 특히 ChatGPT와 같은 강력한 언어 모델을 파이썬으로 어떻게 활용할 수 있는지 알아보겠습니다. OpenAI API를 사용하면 챗봇, 콘텐츠 생성, 코드 생성, 번역 등 무궁무진한 애플리케이션을 개발할 수 있습니다.
이 글에서는 API 키 설정부터 시작하여, 기본적인 API 호출 방법, 스트리밍 응답 처리, 그리고 실제 활용 사례에서 영감을 받은 몇 가지 유용한 함수 예제까지 단계별로 안내해 드립니다.
LLM API 비용 비교가 필요하신분은 아래글
LLM API 비용 총정리 2025년 3월 정보 (ChatGPT, Claude, Gemini, Deepseek 등)
0. 왜 OpenAI API를 사용할까요?
- 강력한 언어 모델: GPT-4 업계 1등 갓 근본의 Open AI 최첨단 모델 접근 가능
- 다양한 기능: 텍스트 생성, 요약, 번역, 코드 작성, 질의응답 등
- 쉬운 통합: Python 라이브러리를 통해 몇 줄의 코드로 간편하게 연동
- 확장성: 아이디어를 빠르게 프로토타이핑하고 실제 서비스로 확장 가능
1. 준비물
가장 먼저 OpenAI API를 사용하기 위해 필요한 것들을 준비해야 합니다.
- OpenAI API 키 발급:
- OpenAI 웹사이트에 가입하고 로그인합니다.
- API 섹션으로 이동하여 API 키를 생성합니다. (API Keys 메뉴)
- 주의: 이 API 키는 비밀번호처럼 안전하게 보관해야 합니다! 외부에 노출되지 않도록 주의하세요. 환경 변수나 별도의 설정 파일에 저장하는 것을 권장합니다.
사이트에서 예시 코드도 제공해줌. 사용할 수 있는 model명도 포함되어있구요
openai
파이썬 라이브러리 설치:
터미널이나 명령 프롬프트에서 다음 명령어를 실행하여 라이브러리를 설치합니다.
pip install openai
2. OpenAI API 기본 사용법: Chat Completions
가장 널리 사용되는 기능은 “Chat Completions” API입니다. 이를 통해 모델과 대화 형식으로 상호작용할 수 있습니다.
기본 구조:
from openai import OpenAI
# 1. API 키 설정 (환경 변수 사용 권장)
# import os
# client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# 또는 직접 입력 (보안에 유의)
client = OpenAI(api_key="여러분의_API_키를_여기에_입력하세요")
# 2. API 호출
try:
response = client.chat.completions.create(
model="gpt-4o-mini", # 사용할 모델 선택 (예: "gpt-4", "gpt-3.5-turbo")
messages=[
{"role": "system", "content": "당신은 유머러스한 챗봇입니다."},
{"role": "user", "content": "오늘 날씨 어때?"}
]
)
# 3. 응답 확인
answer = response.choices[0].message.content
print(answer)
except Exception as e:
print(f"API 호출 중 오류 발생: {e}")
핵심 매개변수 설명:
model
: 사용할 모델의 ID입니다. (예:gpt-4o-mini
,gpt-4
,gpt-3.5-turbo
)messages
: 대화 내용을 리스트 형태로 전달합니다. 각 메시지는 딕셔너리 형태이며,role
과content
를 가집니다.role
:system
: 모델의 역할이나 전반적인 지침을 설정합니다. (예: “당신은 친절한 AI 비서입니다.”)user
: 사용자의 입력을 나타냅니다.assistant
: 모델의 이전 응답을 나타냅니다. (대화의 맥락을 유지하기 위해 사용)
content
: 해당 역할의 메시지 내용입니다.
response.choices[0].message.content
: 모델이 생성한 답변 텍스트입니다.
3. 실시간 응답 처리: 스트리밍(Streaming)
모델이 긴 텍스트를 생성할 때, 전체 응답을 한 번에 기다리는 대신 부분적으로 생성되는 내용을 실시간으로 받아보고 싶을 수 있습니다. 이때 stream=True
옵션을 사용합니다.
제공해주신 참고 코드의 process_stream
함수는 스트리밍 처리를 위한 훌륭한 예시입니다.
import time # 예외 발생 시 재시도를 위해 사용
from openai import OpenAI
# 1. API 키 설정 (환경 변수 사용 권장)
# import os
# client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# 또는 직접 입력 (보안에 유의)
client = OpenAI(api_key="여러분의_API_키를_여기에_입력하세요")
# 스트리밍 응답을 처리하는 함수
def process_stream(stream):
collected_text = ""
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True) # 실시간으로 출력
collected_text += delta.content
print() # 마지막에 줄바꿈
return collected_text
# API 호출 시 stream=True 설정
try:
stream_response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "당신은 시를 쓰는 음유시인입니다."},
{"role": "user", "content": "봄에 대한 짧은 시를 써줘."}
],
stream=True # 스트리밍 활성화
)
generated_poem = process_stream(stream_response)
print("\n--- 전체 생성된 시 ---")
print(generated_poem)
except Exception as e:
print(f"API 호출 중 오류 발생: {e}")
stream=True
로 설정하면, client.chat.completions.create
는 응답 객체 대신 스트림 객체를 반환합니다. 이 스트림 객체를 반복하면서 chunk
를 받아 처리할 수 있습니다. 각 chunk
의 choices[0].delta.content
에 부분적으로 생성된 텍스트가 담겨 있습니다.