[실무 강의] 챗GPT API를 활용한 나만의 맞춤형 챗봇 만들기 완벽 마스터 튜토리얼

챗GPT API를 활용한 나만의 맞춤형 챗봇 만들기

오늘은 여러분과 함께 챗GPT API를 활용하여 자신만의 맞춤형 챗봇을 만드는 흥미로운 여정을 떠나보겠습니다. 복잡하게만 느껴졌던 AI 챗봇 개발, 이제 실습을 통해 쉽고 재미있게 마스터해보세요!

[학습 목표]

본 강의를 통해 여러분은 다음과 같은 역량을 갖추게 됩니다.

  • 챗GPT API의 기본 개념과 작동 원리 이해
  • Python을 활용하여 챗GPT API 연동 및 호출 방법 습득
  • 사용자 입력에 응답하는 간단한 챗봇 프로그램 구현
  • 자신만의 특화된 데이터로 챗봇의 응답을 맞춤 설정하는 방법 이해 (심화)

[사전 준비 사항]

실습을 원활하게 진행하기 위해 아래 환경을 미리 준비해주세요.

1. 운영체제 (OS)

  • Windows 10 이상, macOS 최신 버전, 또는 Linux
  • 어떤 운영체제든 상관없으나, 터미널(명령 프롬프트, PowerShell, Terminal 등) 사용에 익숙해야 합니다.

2. Python 설치

  • 권장 버전: Python 3.8 이상
  • Python 공식 웹사이트 ([https://www.python.org/](https://www.python.org/)) 에서 최신 버전 또는 권장 버전을 다운로드하여 설치합니다.
  • 설치 시 ‘Add Python to PATH’ 옵션을 반드시 체크해주세요.
  • 설치 확인: 터미널에 python --version 또는 python3 --version 을 입력하여 설치된 버전을 확인합니다.

3. 필수 라이브러리 설치

터미널을 열고 아래 명령어를 순서대로 실행하여 필요한 라이브러리를 설치합니다.

pip install openai python-dotenv
  • openai: OpenAI API와 상호작용하기 위한 공식 라이브러리입니다.
  • python-dotenv: API 키와 같은 민감한 정보를 환경 변수로 관리하여 코드에 직접 노출되는 것을 방지하는 데 사용됩니다.

4. OpenAI API Key 발급

챗GPT API를 사용하려면 OpenAI에서 API Key를 발급받아야 합니다.

  1. OpenAI 웹사이트 ([https://platform.openai.com/](https://platform.openai.com/))에 접속하여 회원가입 또는 로그인합니다.
  2. 좌측 메뉴에서 ‘API keys’ 섹션으로 이동합니다.
  3. ‘Create new secret key’ 버튼을 클릭하여 새로운 API Key를 생성합니다.
  4. 주의: 생성된 API Key는 다시 볼 수 없으므로 반드시 안전한 곳에 복사하여 보관해야 합니다.

[단계별 실습 과정]

1단계: 프로젝트 기본 설정 및 API Key 관리

안전한 API Key 관리를 위해 프로젝트 루트 디렉토리에 `.env` 파일을 생성하고, 발급받은 API Key를 저장합니다. 또한, Python 스크립트에서 이 환경 변수를 읽어오도록 설정합니다.

1.1. `.env` 파일 생성 및 API Key 저장

프로젝트 폴더 안에 `.env` 라는 이름의 파일을 만들고, 아래 형식으로 API Key를 저장합니다.

OPENAI_API_KEY='여러분의_API_키_를_여기에_붙여넣으세요'
1.2. API Key 로드하는 Python 스크립트 작성

이제 Python 스크립트에서 이 Key를 불러오겠습니다. `main_chatbot.py` 라는 이름의 파이썬 파일을 생성하고 다음 코드를 작성합니다.

import os
from dotenv import load_dotenv

# .env 파일에서 환경 변수 로드
load_dotenv()

# OpenAI API 키 가져오기
openai_api_key = os.getenv("OPENAI_API_KEY")

if not openai_api_key:
    print("Error: OPENAI_API_KEY 환경 변수가 설정되지 않았습니다.")
    exit()

print("OpenAI API 키 로드 성공!")
# 여기에 챗봇 로직을 추가할 것입니다.

터미널에서 python main_chatbot.py 를 실행하여 ‘OpenAI API 키 로드 성공!’ 메시지가 나오는지 확인합니다.

2단계: 챗GPT API 기본 호출 및 응답 받기

OpenAI 라이브러리를 사용하여 챗GPT 모델과 통신하고, 사용자의 질문에 대한 응답을 받아오는 기본적인 기능을 구현합니다.

2.1. OpenAI 클라이언트 초기화

앞서 작성한 `main_chatbot.py` 파일에 OpenAI 클라이언트를 초기화하는 코드를 추가합니다.


# ... (이전 코드) ...

from openai import OpenAI

# OpenAI 클라이언트 초기화
client = OpenAI(api_key=openai_api_key)

print("OpenAI 클라이언트 초기화 완료.")

# ... (이하 챗봇 로직) ...
2.2. 챗GPT API 호출 함수 구현

사용자 메시지를 받아 챗GPT API를 호출하고, 응답을 반환하는 함수를 만듭니다.


# ... (이전 코드) ...

def get_chatgpt_response(user_message):
    try:
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",  # 또는 "gpt-4" 등 사용 가능한 모델
            messages=[
                {"role": "system", "content": "You are a helpful assistant."},
                {"role": "user", "content": user_message}
            ]
        )
        # 응답에서 텍스트 추출
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"API 호출 중 오류가 발생했습니다: {e}"

print("챗GPT 응답 함수 준비 완료.")

3단계: 사용자 입력 처리 및 챗봇 실행

사용자로부터 직접 입력을 받아 챗봇에게 전달하고, 챗GPT로부터 받은 응답을 사용자에게 보여주는 인터페이스를 만듭니다.

3.1. 무한 루프를 이용한 대화 흐름 구현

사용자가 ‘종료’와 같은 특정 키워드를 입력할 때까지 계속해서 대화를 주고받을 수 있도록 `while` 루프를 사용합니다.


# ... (이전 코드) ...

print("\n챗봇을 시작합니다. 종료하려면 'quit' 또는 'exit'를 입력하세요.")

while True:
    user_input = input("나: ")
    if user_input.lower() in ['quit', 'exit', '종료']:
        print("챗봇을 종료합니다.")
        break

    # 챗GPT 응답 받기
    bot_response = get_chatgpt_response(user_input)
    print(f"챗봇: {bot_response}")

이제 python main_chatbot.py 를 실행하면 터미널에서 직접 챗봇과 대화할 수 있습니다. 다양한 질문을 던져보세요!

4단계: 챗봇 맞춤 설정 (심화)

챗봇의 역할을 특정하거나, 특정 지식 기반으로 답변하도록 만드는 방법을 알아봅니다. 이는 `messages` 배열의 `system` 메시지를 활용하여 구현할 수 있습니다.

4.1. 시스템 메시지(System Message) 활용

챗봇의 페르소나(Persona)나 역할을 정의하는 데 시스템 메시지가 사용됩니다. `get_chatgpt_response` 함수 내의 `messages` 부분을 수정해봅니다.


def get_chatgpt_response(user_message):
    try:
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                # 예시: 한국어로만 답변하고, 친절한 개발 도우미 역할을 수행하도록 설정
                {"role": "system", "content": "당신은 한국어로만 답변하는 친절한 개발 도우미입니다. 사용자의 질문에 대해 명확하고 간결하게 설명해주세요."}, 
                {"role": "user", "content": user_message}
            ]
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"API 호출 중 오류가 발생했습니다: {e}"

이처럼 시스템 메시지를 변경함으로써 챗봇의 응답 스타일과 행동 방식을 크게 제어할 수 있습니다. 예를 들어, ‘당신은 전문적인 번역가입니다.’ 와 같이 설정하면 번역에 특화된 챗봇을 만들 수 있습니다.

5단계: 대화 기록 유지 (선택 사항)

챗봇이 이전 대화 내용을 기억하도록 하려면, `messages` 리스트에 사용자와 챗봇의 이전 상호작용을 계속 추가해주어야 합니다. 이는 좀 더 복잡한 챗봇 구현에 필수적입니다.

5.1. 대화 기록을 저장할 리스트 생성

`main_chatbot.py` 파일 상단에 대화 기록을 저장할 리스트를 초기화합니다.


# ... (이전 코드) ...

conversation_history = [] # 대화 기록을 저장할 리스트

# ... (이하 함수 및 루프) ...
5.2. API 호출 시 대화 기록 전달

`get_chatgpt_response` 함수와 `while` 루프 부분을 수정하여, 이전 대화 기록을 포함하여 API를 호출하도록 합니다.


def get_chatgpt_response(user_message, history):
    try:
        # 시스템 메시지와 이전 대화 기록을 포함하여 API 호출
        messages_to_send = [{"role": "system", "content": "You are a helpful assistant."}] + history + [{"role": "user", "content": user_message}]
        
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=messages_to_send
        )
        
        # 사용자의 메시지와 챗봇의 응답을 기록에 추가
        history.append({"role": "user", "content": user_message})
        history.append({"role": "assistant", "content": response.choices[0].message.content.strip()})
        
        return response.choices[0].message.content.strip(), history
    except Exception as e:
        return f"API 호출 중 오류가 발생했습니다: {e}", history

# ... (while 루프 수정) ...

print("\n챗봇을 시작합니다. 종료하려면 'quit' 또는 'exit'를 입력하세요.")

while True:
    user_input = input("나: ")
    if user_input.lower() in ['quit', 'exit', '종료']:
        print("챗봇을 종료합니다.")
        break

    # 대화 기록과 함께 챗GPT 응답 받기
    bot_response, conversation_history = get_chatgpt_response(user_input, conversation_history)
    print(f"챗봇: {bot_response}")

이제 챗봇이 이전 대화 내용을 기억하며 더 자연스러운 상호작용을 할 수 있습니다.

[결과 확인]

지금까지 챗GPT API를 사용하여 자신만의 맞춤형 챗봇을 만드는 과정을 단계별로 살펴보았습니다. 준비 사항부터 기본 챗봇 구현, 그리고 더 나아가 대화 기록 유지 기능까지 익혔습니다. 여러분은 이제 챗GPT의 강력한 언어 모델을 활용하여 다양한 아이디어를 현실로 만들 준비가 되었습니다!

본 튜토리얼에서 제시된 코드는 시작점일 뿐입니다. 여러분의 창의력을 발휘하여 챗봇에 특정 지식을 주입하거나, 웹 인터페이스를 연동하거나, 감정 분석 기능을 추가하는 등 무궁무진한 확장이 가능합니다. 지금 바로 코드를 실행하고, 여러분만의 특별한 챗봇을 만들어보세요!

댓글 남기기