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에 대한 포스팅은 관련 태그를 통해서 쉽게 만나보세요!

This work is licensed under CC BY 4.0 CC BY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord