[Python 100일 챌린지] Day 97 - ChatGPT API 활용하기
드디어 진짜 AI와 대화한다! ChatGPT API를 Python에서 사용하는 방법을 배웁니다. 나만의 AI 비서, 번역기, 요약봇… 무엇이든 만들 수 있어요! 오늘부터 여러분도 AI 개발자입니다!
(40분 완독 ⭐⭐⭐⭐)
🎯 오늘의 학습 목표
📚 사전 지식
- Day 59: requests 라이브러리 기초
- Day 38: JSON 파일 다루기
- 영어 기초 (API 문서 읽기)
🎯 학습 목표 1: OpenAI API 키 발급받기
1단계: OpenAI 계정 생성
- OpenAI 웹사이트 접속
- 계정 생성 (이메일, Google, Microsoft 계정)
- 전화번호 인증
2단계: API 키 생성
- API Keys 페이지 이동
- “Create new secret key” 클릭
- API 키 복사 및 안전하게 보관
⚠️ 중요: API 키는 절대 공개하지 마세요!
3단계: 라이브러리 설치
1
pip install openai
4단계: API 키 관리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ❌ 잘못된 방법: 코드에 직접 작성
api_key = "sk-proj-xxxxx" # 절대 이렇게 하지 마세요!
# ✅ 올바른 방법 1: 환경 변수
import os
api_key = os.getenv("OPENAI_API_KEY")
# ✅ 올바른 방법 2: .env 파일 (추천!)
# .env 파일 생성
# OPENAI_API_KEY=sk-proj-xxxxx
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
.env 파일 사용하기
1
2
3
4
# pip install python-dotenv 설치 후
# .env 파일 생성 (프로젝트 루트)
OPENAI_API_KEY=your-api-key-here
1
2
3
4
5
6
7
# Python 코드
from dotenv import load_dotenv
import os
load_dotenv() # .env 파일 로드
api_key = os.getenv("OPENAI_API_KEY")
print("API 키 로드 완료!" if api_key else "API 키 없음!")
🎯 학습 목표 2: ChatGPT API로 대화하기
첫 번째 대화 (최신 방식)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from openai import OpenAI
import os
# 클라이언트 생성
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# ChatGPT에게 질문하기
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Python이 뭔가요?"}
]
)
# 답변 출력
answer = response.choices[0].message.content
print(answer)
출력 예시:
1
2
Python은 1991년 귀도 반 로썸이 개발한 고급 프로그래밍 언어입니다.
배우기 쉽고, 읽기 쉬운 문법을 가지고 있어 초보자에게 인기가 많습니다...
메시지 역할 이해하기
1
2
3
4
5
6
7
8
9
10
11
12
13
messages = [
# system: AI의 성격/역할 설정
{"role": "system", "content": "당신은 친절한 Python 선생님입니다."},
# user: 사용자 질문
{"role": "user", "content": "for 루프가 뭐예요?"},
# assistant: AI 답변 (대화 히스토리)
{"role": "assistant", "content": "for 루프는 반복문입니다..."},
# 다음 질문
{"role": "user", "content": "예제 보여주세요"}
]
대화 이어가기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 대화 히스토리 저장
conversation = [
{"role": "system", "content": "당신은 Python 전문가입니다."}
]
# 첫 번째 질문
conversation.append({"role": "user", "content": "리스트란 무엇인가요?"})
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=conversation
)
answer = response.choices[0].message.content
print("AI:", answer)
# 답변을 대화에 추가
conversation.append({"role": "assistant", "content": answer})
# 두 번째 질문 (이전 대화 기억)
conversation.append({"role": "user", "content": "예제 코드 보여주세요"})
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=conversation
)
answer = response.choices[0].message.content
print("\nAI:", answer)
🎯 학습 목표 3: 실전 AI 애플리케이션 만들기
예제 1: AI 번역기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def translate(text, target_language):
"""텍스트를 목표 언어로 번역"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": f"당신은 전문 번역가입니다. 모든 텍스트를 {target_language}로 번역하세요."},
{"role": "user", "content": text}
]
)
return response.choices[0].message.content
# 사용 예시
korean_text = "안녕하세요. Python을 공부하고 있습니다."
english = translate(korean_text, "영어")
print(f"영어: {english}")
japanese = translate(korean_text, "일본어")
print(f"일본어: {japanese}")
출력:
1
2
영어: Hello. I am studying Python.
일본어: こんにちは。Pythonを勉強しています。
예제 2: 문서 요약기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def summarize(text, max_sentences=3):
"""긴 텍스트를 요약"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": f"다음 텍스트를 {max_sentences}문장으로 요약하세요."},
{"role": "user", "content": text}
]
)
return response.choices[0].message.content
# 긴 텍스트
long_text = """
Python은 1991년 귀도 반 로썸이 개발한 프로그래밍 언어입니다.
문법이 간결하고 읽기 쉬워 초보자에게 인기가 많습니다.
데이터 분석, 웹 개발, 인공지능 등 다양한 분야에서 사용됩니다.
NumPy, Pandas, Django, TensorFlow 등 강력한 라이브러리가 있습니다.
전 세계적으로 가장 인기 있는 프로그래밍 언어 중 하나입니다.
"""
summary = summarize(long_text, max_sentences=2)
print("요약:", summary)
예제 3: AI 챗봇 (대화형)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def chatbot():
"""간단한 AI 챗봇"""
conversation = [
{"role": "system", "content": "당신은 친근한 AI 친구입니다. 짧고 명확하게 답변하세요."}
]
print("AI 챗봇 시작! ('quit'으로 종료)")
print("-" * 50)
while True:
# 사용자 입력
user_input = input("\n나: ")
if user_input.lower() in ['quit', 'exit', '종료']:
print("챗봇을 종료합니다.")
break
# 대화에 추가
conversation.append({"role": "user", "content": user_input})
# AI 응답
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=conversation
)
answer = response.choices[0].message.content
print(f"AI: {answer}")
# 응답을 대화에 추가
conversation.append({"role": "assistant", "content": answer})
# 실행
# chatbot() # 주석 해제하고 실행하세요
예제 4: 코드 설명기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def explain_code(code):
"""Python 코드를 자연어로 설명"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "당신은 Python 코드를 초보자에게 쉽게 설명하는 전문가입니다."},
{"role": "user", "content": f"다음 코드를 설명해주세요:\n\n{code}"}
]
)
return response.choices[0].message.content
# 사용 예시
code = """
def factorial(n):
if n == 0:
return 1
return n * factorial(n-1)
"""
explanation = explain_code(code)
print(explanation)
출력 예시:
1
2
3
4
이 함수는 팩토리얼을 계산합니다.
- n이 0이면 1을 반환합니다 (기저 사례).
- 그렇지 않으면 n과 factorial(n-1)을 곱합니다 (재귀 호출).
예: factorial(5) = 5 × 4 × 3 × 2 × 1 = 120
💻 고급 기능
1. 온도(Temperature) 조절
창의성 vs 일관성
1
2
3
4
5
6
7
8
9
10
11
12
13
# 온도 낮음 (0.0~0.3): 일관적, 예측 가능
response = client.chat.completions.create(
model="gpt-3.5-turbo",
temperature=0.1,
messages=[{"role": "user", "content": "Python이란?"}]
)
# 온도 높음 (0.7~1.0): 창의적, 다양함
response = client.chat.completions.create(
model="gpt-3.5-turbo",
temperature=0.9,
messages=[{"role": "user", "content": "Python이란?"}]
)
2. 최대 토큰 제한
1
2
3
4
5
response = client.chat.completions.create(
model="gpt-3.5-turbo",
max_tokens=50, # 최대 50토큰 (약 37단어)
messages=[{"role": "user", "content": "Python 설명해줘"}]
)
3. 스트리밍 (실시간 출력)
1
2
3
4
5
6
7
8
9
10
11
response = client.chat.completions.create(
model="gpt-3.5-turbo",
stream=True,
messages=[{"role": "user", "content": "Python의 장점 5가지"}]
)
print("AI: ", end="")
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
print()
💰 비용 관리
토큰 계산
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def count_tokens(text):
"""대략적인 토큰 수 계산 (한국어: 1글자 ≈ 2토큰)"""
# 실제로는 tiktoken 라이브러리 사용 권장
return len(text) * 2
text = "안녕하세요"
tokens = count_tokens(text)
print(f"{text}: 약 {tokens} 토큰")
# GPT-3.5-turbo 가격 (2025년 기준, 변동 가능)
# 입력: $0.0005 / 1K tokens
# 출력: $0.0015 / 1K tokens
cost = (tokens / 1000) * 0.0005
print(f"예상 비용: ${cost:.6f}")
비용 절약 팁
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 짧은 프롬프트 사용
# ❌ 긴 프롬프트
prompt = "Python is a programming language... (긴 설명)"
# ✅ 짧은 프롬프트
prompt = "Python 설명해줘"
# 2. max_tokens 제한
response = client.chat.completions.create(
model="gpt-3.5-turbo",
max_tokens=100, # 최대 토큰 제한
messages=[...]
)
# 3. 대화 히스토리 관리
# 오래된 대화는 삭제
if len(conversation) > 10:
conversation = conversation[-10:] # 최근 10개만 유지
⚠️ 주의사항
1. API 키 보안
1
2
3
4
5
6
7
# ❌ GitHub에 업로드 금지!
# - .env 파일
# - API 키가 들어간 코드
# ✅ .gitignore에 추가
# .env
# config.py
2. 에러 처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
try:
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
except Exception as e:
print(f"오류 발생: {e}")
print("API 키를 확인하세요!")
3. 비용 모니터링
OpenAI Usage 페이지에서 사용량 확인!
📝 요약
- API 키: .env 파일로 안전하게 관리
- 기본 사용:
client.chat.completions.create() - 메시지 역할: system(설정), user(질문), assistant(답변)
- 고급 옵션: temperature(창의성), max_tokens(길이 제한)
- 비용: 토큰 단위로 과금, 사용량 모니터링 필수
🤔 자주 묻는 질문 (FAQ)
Q1: API 키는 어디서 받나요? 무료인가요?
A:
- OpenAI 웹사이트에서 가입
- 신규 가입 시 $5 무료 크레딧 제공 (변동 가능)
- 무료 크레딧 소진 후에는 사용한 만큼 결제
비용 예시 (2025년 기준, 변동 가능):
- GPT-3.5-turbo: $0.0005 / 1K 입력 토큰
- 간단한 질문 1000개 ≈ $1 정도
팁: 처음엔 무료 크레딧으로 충분히 연습할 수 있어요! 😊
Q2: API 키를 GitHub에 올렸어요. 어떻게 하나요?
A: 🚨 즉시 조치해야 합니다!
1단계: API 키 삭제
- OpenAI 웹사이트 → API Keys → 해당 키 Delete
2단계: 새 키 생성
- Create new secret key 클릭
3단계: 올라간 코드 수정
- .env 파일 사용으로 변경
- .gitignore에 .env 추가
1 2 3 4
# .gitignore .env *.env config.py
4단계: Git 히스토리에서 완전 제거 (고급)
1
2
3
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .env' \
--prune-empty --tag-name-filter cat -- --all
중요: 삭제 후 다시 커밋하는 것만으로는 부족합니다. Git 히스토리에 남아있어요!
Q3: “Rate limit exceeded” 에러가 나와요!
A: API 호출 횟수 제한에 걸렸습니다.
무료 계정 제한:
- 분당 3회 요청
- 일당 200회 요청 (변동 가능)
해결 방법:
- 잠시 기다리기: 1분 후 다시 시도
- 유료 플랜: 제한이 훨씬 높아집니다
- 요청 간격 두기: ```python import time
for i in range(10): response = client.chat.completions.create(…) time.sleep(20) # 20초 대기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
### Q4: temperature를 얼마로 설정해야 하나요?
**A**: 용도에 따라 다릅니다!
| Temperature | 용도 | 특징 |
|-------------|------|------|
| **0.0 ~ 0.3** | 정확한 답변, 번역, 요약 | 일관적, 예측 가능 |
| **0.5 ~ 0.7** | 일반적인 대화 | 균형잡힌 답변 |
| **0.8 ~ 1.0** | 창작, 브레인스토밍 | 창의적, 다양함 |
**추천**:
- 처음엔 **0.7** (기본값)로 시작
- 너무 창의적이면 낮추고, 지루하면 높이세요!
### Q5: 한국어로 질문해도 되나요?
**A**: 네! ChatGPT는 한국어를 잘 이해합니다. 하지만:
**프롬프트는 영어가 더 좋은 경우**:
```python
# ✅ 영어 프롬프트 (추천)
{"role": "system", "content": "You are a helpful assistant. Answer in Korean."}
# ✅ 한국어 프롬프트 (괜찮음)
{"role": "system", "content": "당신은 친절한 어시스턴트입니다."}
이유: OpenAI 모델은 영어로 학습된 데이터가 훨씬 많아서 영어 프롬프트가 더 정확할 수 있어요. 하지만 한국어도 충분히 잘 작동합니다!
Q6: 비용을 어떻게 절약하나요?
A: 다음 팁들을 따라해보세요!
- max_tokens 설정:
1 2 3
response = client.chat.completions.create( max_tokens=100 # 짧은 답변만 )
- 짧은 프롬프트 사용: ```python
❌ 비효율: 긴 설명
“당신은 매우 친절하고 상세하게 설명하는 전문가입니다. 사용자의 질문에 최선을 다해…”
✅ 효율적: 짧고 명확
“당신은 Python 전문가입니다.”
1
2
3
4
5
6
3. **대화 이력 관리**:
```python
# 최근 10개 메시지만 유지
if len(conversation) > 10:
conversation = conversation[-10:]
- GPT-3.5-turbo 사용: GPT-4보다 10배 저렴!
🧪 연습 문제
문제: 감정 분석기 만들기
주어진 텍스트의 감정을 분석하는 함수를 만들어보세요.
1
2
3
4
5
6
7
8
9
def analyze_sentiment(text):
# TODO:
# 텍스트의 감정을 "긍정", "부정", "중립" 중 하나로 분석
# ChatGPT API 사용
pass
# 테스트
print(analyze_sentiment("오늘 너무 행복해요!")) # 긍정
print(analyze_sentiment("최악이야...")) # 부정
✅ 정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def analyze_sentiment(text):
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "텍스트의 감정을 '긍정', '부정', '중립' 중 하나로만 답변하세요."},
{"role": "user", "content": text}
]
)
return response.choices[0].message.content.strip()
# 테스트
print(analyze_sentiment("오늘 너무 행복해요!")) # 긍정
print(analyze_sentiment("최악이야...")) # 부정
print(analyze_sentiment("날씨가 흐리네요")) # 중립
📚 다음 학습
Day 98: 종합 프로젝트 1 - 주식 예측 시스템 ⭐⭐⭐⭐
내일은 지금까지 배운 모든 것을 활용한 실전 프로젝트를 시작합니다!
“ChatGPT API로 무엇이든 만들 수 있습니다. 상상력이 한계입니다!” 🚀
Day 97/100 Phase 10: AI/ML 입문 #100DaysOfPython
