GPT-3.5 Turbo API를 활용한 간단한 챗봇 만들기
안녕하세요! 2026년, IT/코딩 실무 기술을 누구나 쉽게 따라 할 수 있도록 가르치는 수석 IT 교육 강사입니다. 오늘은 최신 인공지능 기술의 정수라고 할 수 있는 GPT-3.5 Turbo API를 활용하여, 누구나 자신만의 간단한 챗봇을 만들 수 있는 방법을 단계별로 상세하게 안내해 드리겠습니다. 이 튜토리얼을 통해 여러분은 복잡한 AI 모델을 직접 구축하지 않고도, 강력한 언어 모델의 능력을 여러분의 애플리케이션에 통합하는 방법을 배우게 될 것입니다.
[학습 목표]
이 강의를 통해 여러분은 다음과 같은 목표를 달성할 수 있습니다:
- GPT-3.5 Turbo API의 기본 개념과 작동 방식을 이해합니다.
- OpenAI API 키를 발급받고 설정하는 방법을 익힙니다.
- Python을 사용하여 GPT-3.5 Turbo API와 통신하는 코드를 작성합니다.
- 간단한 사용자 입력에 응답하는 챗봇 애플리케이션을 구현합니다.
- 챗봇의 응답을 제어하기 위한 기본적인 프롬프트 엔지니어링 기법을 학습합니다.
[사전 준비 사항]
본격적인 실습에 앞서, 원활한 진행을 위해 다음 환경을 준비해 주시기 바랍니다.
1. 개발 환경
- 통합 개발 환경(IDE): Visual Studio Code (VS Code)를 권장합니다. 다양한 확장 기능과 편리한 디버깅 기능을 제공합니다.
- 운영체제(OS): Windows, macOS, Linux 등 어떤 운영체제든 상관없습니다.
- Python 버전: Python 3.7 이상 버전을 권장합니다. 최신 기능을 활용하기 위해 가능하면 최신 버전을 설치하는 것이 좋습니다.
2. 필수 설치 라이브러리
터미널 또는 명령 프롬프트에서 다음 명령어를 실행하여 필요한 Python 라이브러리를 설치합니다.
pip install openai python-dotenv
- openai: OpenAI API와 상호작용하기 위한 공식 Python 라이브러리입니다.
- python-dotenv: API 키와 같은 민감한 정보를 코드에 직접 노출하지 않고 환경 변수로 관리하기 위한 라이브러리입니다.
3. OpenAI API 키 발급
GPT-3.5 Turbo API를 사용하려면 OpenAI 계정이 필요하며, API 키를 발급받아야 합니다. 다음 단계를 따르세요:
- OpenAI 공식 웹사이트 ([https://openai.com/](https://openai.com/))에 접속하여 계정을 생성하거나 로그인합니다.
- 로그인 후, API 섹션으로 이동하여 API 키를 생성합니다. ‘Create new secret key’ 버튼을 클릭하면 새로운 API 키가 발급됩니다.
- [매우 중요] 발급받은 API 키는 안전하게 보관해야 하며, 절대로 코드에 직접 포함시키지 마세요. 이 키는 여러분의 계정과 연결되어 사용량에 따라 비용이 발생할 수 있습니다.
4. 환경 변수 설정
API 키를 안전하게 관리하기 위해 .env 파일을 사용합니다. 프로젝트의 루트 디렉토리에 `.env`라는 이름의 파일을 생성하고, 다음과 같이 API 키를 저장합니다.
OPENAI_API_KEY='여러분의_API_키_를_여기에_붙여넣으세요'
참고: `여러분의_API_키_를_여기에_붙여넣으세요` 부분을 실제 발급받은 API 키로 교체해야 합니다.
[단계별 실습 과정]
1단계: Python 스크립트 기본 설정
먼저, 챗봇을 구현할 Python 파일을 생성합니다. 예를 들어, `chatbot.py`라는 이름으로 파일을 만들고, 필요한 라이브러리를 import하며 환경 변수에서 API 키를 로드하는 코드를 작성합니다.
import openai
import os
from dotenv import load_dotenv
# .env 파일에서 환경 변수 로드
load_dotenv()
# OpenAI API 키 설정
openai.api_key = os.getenv("OPENAI_API_KEY")
# API 키가 제대로 로드되었는지 확인 (선택 사항)
if not openai.api_key:
print("Error: OPENAI_API_KEY is not set.")
exit()
print("OpenAI API 키가 성공적으로 로드되었습니다.")
이 코드는 `.env` 파일에서 `OPENAI_API_KEY`를 읽어와 `openai` 라이브러리에 설정합니다. 만약 API 키가 설정되지 않았다면 오류 메시지를 출력하고 종료합니다.
2단계: GPT-3.5 Turbo API 호출 함수 만들기
사용자의 메시지를 받아 GPT-3.5 Turbo 모델과 통신하고 응답을 반환하는 함수를 정의합니다. `openai.ChatCompletion.create` 메서드를 사용하며, `model`, `messages` 매개변수가 중요합니다.
def get_gpt_response(user_message):
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # 사용할 모델 지정
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": user_message}
]
)
# API 응답에서 실제 메시지 내용 추출
return response.choices[0].message.content.strip()
except Exception as e:
return f"API 호출 중 오류가 발생했습니다: {e}"
- `model=”gpt-3.5-turbo”`: OpenAI에서 제공하는 최신 대화형 모델 중 하나입니다.
- `messages`: 대화의 맥락을 나타내는 리스트입니다. 각 요소는 `role` (system, user, assistant)과 `content` (메시지 내용)를 가집니다.
- `role: “system”`: 챗봇의 성격이나 역할을 정의하는 데 사용됩니다. 여기서는 “You are a helpful assistant.”로 설정하여 일반적인 보조 역할을 수행하도록 지시합니다.
- `role: “user”`: 사용자의 실제 입력 메시지입니다.
3단계: 사용자 입력 및 챗봇 응답 루프 구현
이제 사용자가 메시지를 입력하고 챗봇이 응답하는 기본적인 대화 루프를 만듭니다. 사용자가 ‘exit’ 또는 ‘quit’를 입력하면 대화가 종료되도록 합니다.
def main():
print("간단한 챗봇입니다. 종료하려면 'exit' 또는 'quit'를 입력하세요.")
while True:
user_input = input("You: ")
if user_input.lower() in ["exit", "quit", "종료"]:
print("챗봇을 종료합니다.")
break
response = get_gpt_response(user_input)
print(f"Bot: {response}")
if __name__ == "__main__":
main()
이 코드는 사용자의 입력을 계속 받아서 `get_gpt_response` 함수를 호출하고, 반환된 응답을 화면에 출력합니다. 대화 기록을 유지하려면 `messages` 리스트에 이전 대화 내용을 추가하는 방식으로 확장할 수 있습니다.
4단계: (선택 사항) 대화 기록 관리 및 프롬프트 엔지니어링
실제 챗봇은 이전 대화 내용을 기억하고 이를 바탕으로 더 자연스러운 응답을 생성해야 합니다. 이를 위해 `messages` 리스트에 사용자의 메시지와 챗봇의 응답을 순차적으로 추가하여 대화의 맥락을 유지할 수 있습니다.
# ... (이전 코드와 동일하게 import 및 API 키 설정) ...
def get_gpt_response_with_history(user_message, chat_history):
try:
chat_history.append({"role": "user", "content": user_message})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=chat_history
)
bot_response = response.choices[0].message.content.strip()
chat_history.append({"role": "assistant", "content": bot_response})
return bot_response
except Exception as e:
return f"API 호출 중 오류가 발생했습니다: {e}"
def main_with_history():
print("대화 기록을 유지하는 챗봇입니다. 종료하려면 'exit' 또는 'quit'를 입력하세요.")
# 초기 시스템 메시지로 대화 기록 시작
chat_history = [{"role": "system", "content": "You are a helpful assistant that remembers the conversation."}]
while True:
user_input = input("You: ")
if user_input.lower() in ["exit", "quit", "종료"]:
print("챗봇을 종료합니다.")
break
response = get_gpt_response_with_history(user_input, chat_history)
print(f"Bot: {response}")
if __name__ == "__main__":
# main() # 이전 버전 실행 시
main_with_history() # 대화 기록 유지 버전 실행 시
프롬프트 엔지니어링: `system` 메시지의 내용을 변경하여 챗봇의 응답 스타일, 성격, 기능 등을 다양하게 제어할 수 있습니다. 예를 들어, “You are a sarcastic assistant.” 와 같이 설정하면 비꼬는 말투의 챗봇을 만들 수도 있습니다. 또한, 사용자 메시지에 특정 지시사항을 포함시켜 원하는 답변을 유도할 수도 있습니다.
[결과 확인]
모든 코드를 작성한 후, 터미널에서 `python chatbot.py` 명령어를 실행하여 챗봇을 테스트합니다. 터미널에 “You: ” 프롬프트가 나타나면 메시지를 입력하고 Enter 키를 누르세요. GPT-3.5 Turbo API가 생성한 응답을 “Bot: “과 함께 확인할 수 있습니다. ‘exit’ 또는 ‘quit’를 입력하여 챗봇을 종료할 수 있습니다.
성공적인 실행 모습 (예시)
OpenAI API 키가 성공적으로 로드되었습니다.
간단한 챗봇입니다. 종료하려면 'exit' 또는 'quit'를 입력하세요.
You: 오늘 날씨 어때?
Bot: 오늘은 전국적으로 맑은 날씨가 예상됩니다. 낮 기온은 평년보다 조금 높겠으며, 일교차가 클 수 있으니 건강 관리에 유의하시기 바랍니다.
You: 재밌는 이야기 하나 해줘.
Bot: 옛날 옛날 아주 먼 옛날, 깊은 숲 속에 호기심 많은 아기 다람쥐가 살고 있었어요. 어느 날, 아기 다람쥐는 반짝이는 무언가를 발견했는데, 그것은 바로 도토리가 아니라 작은 보석이었답니다! 아기 다람쥐는 보석을 들고 친구들에게 자랑했지만, 친구들은 보석보다 맛있는 도토리가 더 좋다고 했어요. 아기 다람쥐는 잠시 실망했지만, 곧 보석을 소중히 간직하며 숲 속의 다른 신기한 것들을 탐험하기 시작했답니다.
You: exit
챗봇을 종료합니다.
이 튜토리얼을 통해 GPT-3.5 Turbo API를 활용하여 간단한 챗봇을 만드는 기본적인 과정을 마스터하셨습니다. 이제 이 코드를 기반으로 더욱 복잡하고 유용한 챗봇 애플리케이션을 개발해 보세요!