Logo

ChatGPT 터미널 앱 파이썬으로 만들어보기

이번 포스팅에서는 ChatGPT API를 활용하여 파이썬으로 GhatGPT와 유사하지만 터미널 상에서 돌아가는 간단한 챗앱을 구현해보겠습니다.

OpenAI API 키 설정

OpenAI에서 회원 가입 후에 API 키를 발급받는 방법은 별도 포스팅에서 자세히 다루었으니 참고 바랍니다.

사전 준비로 터미널을 열고 OPENAI_API_KEY라는 환경 변수에 OpenAI에서 발급받은 API 키를 설정해줍니다.

$ export OPENAI_API_KEY=sk-...f4ZT
$ echo $OPENAI_API_KEY
sk-...f4ZT

이렇게 API 키를 환경 변수로 저장해놓으면 Python 코드를 실행할 때 os 모듈의 getenv() 함수를 통해 쉽게 환경 변수를 읽어올 수 있습니다.

$ python
Python 3.11.2 (main, Apr  7 2023, 15:52:33) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getenv("OPENAI_API_KEY")
'=sk-...f4ZT'

Python에서 환경 변수를 다루는 방법에 대해서는 관련 포스팅을 참고 바랍니다.

ChatGPT API 호출

지금부터 chat.py 파일을 생성하고 그 안에 ChatGPT API 호출하기 위한 파이썬 코드를 작성하겠습니다.

우선 터미널을 열고 파이썬의 패키지 매니저인 pip를 사용하여 requests라는 패키지를 설치해줍니다.

$ pip install requests

파이썬으로 HTTP 통신이 필요한 프로그램을 작성할 때 많이 사용되는 라이브러리인 requests에 대해서는 별도 포스팅에서 자세히 다루고 있으니 참고 바랍니다.

이제 requests 모듈의 post() 함수를 이용해서 ChatGPT API에 야!라는 메시지를 전송해보겠습니다. 이 때 환경 변수로 설정해놓은 API 키를 빼먹지 말고 헤더로 함께 넘겨주셔야 합니다. 인공지능 모델로는 최근에 많이 사용되는 gpt-3.5-turbo를 사용하겠습니다.

chat.py
import os
import requests

response = requests.post(
    "https://api.openai.com/v1/chat/completions",
    headers={"Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}"},
    json={
        "model": "gpt-3.5-turbo",
        "messages": [{"role": "user", "content": "야!"}],
    },
)

print(response.json())

ChatGPT API로 부터 사전의 형태로 응답된 결과를 콘솔에 출력해보면 choices 키 안에 답변이 들어있는 것을 볼 수 있습니다.

터미널
$ node chat.js
{'id': 'chatcmpl-77YyHZ3pjApero1ylATUbrQ78TBVd', 'object': 'chat.completion', 'created': 1682037081, 'model': 'gpt-3.5-turbo-0301', 'usage': {'prompt_tokens': 10, 'completion_tokens': 27, 'total_tokens': 37}, 'choices': [{'message': {'role': 'assistant', 'content': '저는 AI 어시스턴트입니다. 무엇을 도와드릴까요?'}, 'finish_reason': 'stop', 'index': 0}]}

커맨드 라인 인터페이스 구현

이제 터미널 상에서 ChatGPT와 메시지를 주고 받을 수 있도록 코드를 살짝 수정해야하는데요.

우선 파이썬의 input() 내장 함수로 사용자의 입력을 받아서 question 변수에 할당합니다. 그리고 ChatGPT API를 호출할 때 content 키에 question을 값으로 넘깁니다. 마지막으로 ChatGPT API로 부터 응답된 결과에서 수신된 메세지만 다시 터미널에 출력만 해주면 됩니다.

이 과정을 while문을 이용해서 반복해주면 ChatGPT와 계속해서 메세지를 주고 받을 수 있습니다.

chat.py
import os
import requests

print("💬 ChatGPT 터미널 챗앱 💬")

while True:
    question = input("\n👤 ")

    response = requests.post(
        "https://api.openai.com/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}"},
        json={
            "model": "gpt-3.5-turbo",
            "messages": [{"role": "user", "content": question}],
        },
    )

    answer = response.json()["choices"][0]["message"]["content"]

    print("🤖", answer)

다시 프로그램을 실행해보면 다음과 같이 터미널에서 ChatGPT와 메시지를 주고 받으며 채팅이 가능하게 됩니다! 🎉

터미널
$ python chat.py
💬 ChatGPT 터미널 챗앱 💬

👤 대한민국의 수도는 어디야?
🤖 대한민국의 수도는 서울입니다.

👤 서울에서 가장 높은 건물은 뭐야?
🤖 현재 서울에서 가장 높은 건물은 롯데월드타워(123층, 555m)입니다.

👤

마치면서

이상으로 ChatGPT API를 활용하여 정말 간단한 터미널 챗앱을 파이썬으로 구현해보았습니다. requests 라이브러리만 있으면 이렇게 어렵지 않게 ChatGPT API와 상호작용하는 터미널 앱을 만들 수 있습니다.

ChatGPT에 대한 포스팅은 관련 태그를 통해서 쉽게 만나보세요!