Logo

파이썬으로 ChatGPT API를 호출하는 방법

이번 포스팅에서는 파이썬으로 ChatGPT API를 호출하는 방법에 대해서 알아보겠습니다.

OpenAI API 키 설정

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

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

$ export OPENAI_API_KEY=sk-...0K7L
$ echo $OPENAI_API_KEY
sk-...0K7L

이렇게 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-...0K7L'

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

requests 라이브러리 사용

ChatGPT API를 호출하는 첫 번째 방법은 파이썬에서 HTTP를 통해 원격 API를 호출하는데 범용적으로 사용되는 requests 라이브러리를 사용하는 것입니다.

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

$ pip install requests

그 다음 python을 실행 후 os 내장 모듈과 방금 설치한 requests 모듈을 불러옵니다.

$ 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
>>> import requests

이제 requests 모듈의 post() 함수를 이용해서 ChatGPT API를 호출할 차례인데요.

headers 키워드 인자로 환경 변수로 설정해놓은 API 키를 Authorization 헤더로 넘김니다. json 키워드 인자로는 gpt-3.5-turbo를 인공지능 모델로 지정해주고, 보낼 메시지의 역할과 내용을 리스트의 형태로 넘겨주면 됩니다.

HTTP를 통해서 송수신되는 ChatGPT API의 요청과 응답이 구체적으로 어떻게 생겼는지 궁금하시다면 관련 포스팅을 참고 바랍니다.

함수가 반환해준 결과는 response 변수에 저장하겠습니다.

>>> 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": "야!"}]},
... )

response 변수를 상대로 json() 함수를 호출하면 ChatGPT API가 응답해준 결과를 사전의 형태로 얻을 수 있습니다.

>>> response.json()
>>> {'id': 'chatcmpl-76qTg3W2m8YYuAxAbe1DTEk0vsdJe', 'object': 'chat.completion', 'created': 1681866048, 'model': 'gpt-3.5-turbo-0301', 'usage': {'prompt_tokens': 10, 'completion_tokens': 19, 'total_tokens': 29}, 'choices': [{'message': {'role': 'assistant', 'content': '네? 제가 도움을 드릴 수 있나요?'}, 'finish_reason': 'stop', 'index': 0}]}

다음과 같이 응답 사전으로 부터 수신된 메세지만 추출할 수도 있습니다.

>>> response.json()["choices"][0]["message"]["content"]
'네? 제가 도움을 드릴 수 있나요?'

requests 라이브러리를 사용하면 OpenAI 뿐만 아니라 타사의 API도 표준화된 방법으로 호출할 수 있다는 이점이 있습니다.

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

openai 라이브러리 사용

OpenAI에서는 제공하는 openai 라이브러리를 이용해서도 ChatGPT API를 호출할 수 있습니다.

마찬가지로 터미널에서 pip를 사용하여 openai라는 패키지를 설치해줍니다.

$ pip install openai

그 다음 python을 실행 후 os 내장 모듈과 방금 설치한 openai 모듈을 불러옵니다.

$ 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
>>> import openai

그 다음 환경 변수로 저장해놓은 API 키를 읽어서 openaiapi_key 속성으로 설정합니다.

>>> openai.api_key = os.getenv("OPENAI_API_KEY")

이제 openai 모듈의 ChatCompletion 속성을 이용해서 ChatGPT API를 호출할 차례인데요.

model 키워드 인자로는 gpt-3.5-turbo를 인공지능 모델로 지정해주고, messages 키워드 인자로 보낼 메시지를 역할과 내용을 넘겨줍니다.

함수가 반환해준 결과는 response 변수에 저장하겠습니다.

>>> response = openai.ChatCompletion.create(
...     model="gpt-3.5-turbo", messages=[{"role": "user", "content": "야!"}]
... )

반환된 결과는 다음과 같이 복잡한 사전의 형태입니다.

>>> response
<OpenAIObject chat.completion id=chatcmpl-76r2Uczo2uksiVeaLtlkg7i48gmuC at 0x1029f87d0> JSON: {
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "\ub124, \ubb34\uc5c7\uc774 \ubb38\uc81c\uc778\uac00\uc694? \uc5b4\ub5bb\uac8c \ub3c4\uc640\ub4dc\ub9b4\uae4c\uc694?",
        "role": "assistant"
      }
    }
  ],
  "created": 1681868206,
  "id": "chatcmpl-76r2Uczo2uksiVeaLtlkg7i48gmuC",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 30,
    "prompt_tokens": 10,
    "total_tokens": 40
  }
}

비슷한 방식으로 수신된 메시지 내용만 추출할 수 있습니다.

>>> response.choices[0].message.content
'네, 무엇이 문제인가요? 어떻게 도와드릴까요?'

openai 라이브러리를 사용하면 ChatGPT API 뿐만 OpenAI에서 제공하는 다른 API들도 유사한 방식으로 호출할 수 있어서 편리합니다.

마치면서

이상으로 파이썬으로 ChatGPT API를 호출하는 2가지 방법에 대해서 알아보겠습니다. 보시다시피 requests 라이브러리를 사용하든 openai 라이브러리를 사용하든 작성해야하는 코드의 양은 어차피 얼마 안 되며 큰 차이가 나지 않죠? 따라서 requests 라이브러리를 사용해서 원격 API를 호출하시는데 이미 익숙하시다면 굳이 새롭게 openai 라이브러리 사용법을 익힐 큰 이유는 없을 것 같습니다.

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