OPEN AI API 활용하여 챗GPT 만들기 – openai api 기본 코드

OpenAI API로 최신 ChatGPT를 구현하는 기본 Python 코드 예제를 소개합니다. 실행 예시와 함께 간단한 채팅 형태로 동작하는 프로그램을 확인하세요. 과거 API 버전을 넘어 최신 환경에 맞는 코드 작성법도 배워보세요.

Overlay Image Overlay Image

※ 이 글은 대단한 설명을 담고 있지는 않습니다. OpenAI API 활용해서 기본적인 동작등을 확인해보고 싶은데, 챗GPT 활용하여 코드를 작성해도 에러가 나는 경우등에 참고할 수 있도록, 그저 동작하는 OpenAI API 기본 코드 형태를 담고 있습니다.

챗GPT는 기본적으로 웹 브라우저를 통해 동작하며, 사용자가 직접 채팅하듯이 대화를 진행해야 합니다.
하지만 서버에서 자동으로 실행되어 특정 문구를 만들어낸다거나, 그 결과를 통해 다시 다른 프로그램의 실행을 유발하는 것과 같이 GPT를 통한 자동화 작업을 수행하려면, 챗GPT의 API 버전인 OpenAI API를 사용하여 직접 프로그램을 작성해야 합니다.

물론 이러한 코드 또한 챗GPT가 작성해 줄 수 있긴 하지만, 챗GPT가 학습된 날짜보다 훨씬 최근에 OpenAI API의 버전이 업데이트 된 상태라, 챗GPT가 작성해준 코드로 프로그램을 돌려봤자 에러가 나곤 합니다.

  • gpt-4o에게 작성해달라고 한 코드를 돌렸음에도 아래와 같이 에러가 발생합니다.
Error: 

You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.

You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface. 

Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28`

A detailed migration guide is available here: https://github.com/openai/openai-python/discussions/742
  • 에러 메세지에도 나와있는 것 처럼, pip3 install openai==0.28 으로, 더 예전버전의 API를 설치해서 해결할 수도 있습니다.
(chatgpt) root@chatgpt2:/# pip3 install openai==0.28
Collecting openai==0.28
  Downloading openai-0.28.0-py3-none-any.whl.metadata (13 kB)
Collecting requests>=2.20 (from openai==0.28)
  Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
... 중략 ...
Downloading yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (336 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 336.9/336.9 kB 18.7 MB/s eta 0:00:00
Installing collected packages: urllib3, tqdm, propcache, multidict, idna, frozenlist, charset-normalizer, certifi, attrs, aiohappyeyeballs, yarl, requests, aiosignal, aiohttp, openai
Successfully installed aiohappyeyeballs-2.4.4 aiohttp-3.11.11 aiosignal-1.3.2 attrs-24.3.0 certifi-2024.12.14 charset-normalizer-3.4.1 frozenlist-1.5.0 idna-3.10 multidict-6.1.0 openai-0.28.0 propcache-0.2.1 requests-2.32.3 tqdm-4.67.1 urllib3-2.3.0 yarl-1.18.3

하지만 새로 작성하는 프로그램 조차 이러한 호환성을 위해 굳이 과거의 API를 사용하는 것 보다는, 코드를 최신으로 수정하는 것이 앞으로의 호환성을 위해 더 나을 것입니다.

OpenAI API 기본 코드

아래는 제가 기본형태로 사용하는 코드입니다.

import openai
import time

openai.api_key = "여기에 API키를 넣습니다."

print("chatGPT를 종료하려면 'bye'를 입력하세요.\n")
content = ''
msg = ''  # 초기 msg 변수 선언

while True:
    prompt = input("명령을 내려 주세요: ")
    if prompt.lower() == 'bye':
        print("chatGPT를 종료합니다.")
        break

    messages = [
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': content},
        {'role': 'assistant', 'content': msg},
        {'role': 'user', 'content': prompt},
    ]

    response = openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages
    )

    # 응답 출력 및 처리
    reply_content = response.choices[0].message.content.strip()
    print(reply_content)
    print("--------------------------------")

    # 다음 메시지 준비
    msg = reply_content
    content += msg

    time.sleep(1)

실행 예시

(chatgpt) root@chatgpt:/# python3 gpt_sample.py      
chatGPT를 종료하려면 'bye'를 입력하세요.

명령을 내려 주세요: 안녕. 동작 테스트중인데 잘되나? 너는 누구니?
안녕하세요! 저는 AI 언어 모델로, 여러분의 질문에 답변하고 정보를 제공하는 역할을 합니다. 어떤 도움을 드릴까요?
--------------------------------
명령을 내려 주세요: 서울이란 어떤곳인가?
서울은 대한민국의 수도이자 최대 도시로, 한반도의 북서부에 위치해 있습니다. 서울은 역사적으로 중요한 도시로, 오랜 역사를 가지고 있으며 다양한 문화와 전통이 혼합된 곳입니다. 다음은 서울에 대한 몇 가지 주요 특징입니다:

1. **역사와 문화**: 서울은 조선 왕조의 수도로서, 경복궁, 창덕궁 등과 같은 많은 궁궐과 문화유산이 있습니다. 전통 시장과 현대적인 건물이 공존하며, 한국의 전통 문화와 현대 문화가 조화롭게 어우러져 있습니다.

2. **경제 중심지**: 서울은 한국의 경제, 금융, 산업의 중심지로, 많은 대기업과 국제 기업들이 본사를 두고 있습니다. 삼성, LG, 현대자동차 등 유명 기업들이 서울에 본사를 두고 있습니다.

3. **교통**: 서울은 잘 발달된 대중교통 시스템을 갖추고 있으며, 지하철, 버스 등이 편리하게 운영되고 있어 이동이 용이합니다. 인천 국제공항도 가까워 국제적인 교통의 중심지 역할을 합니다.

4. **관광 명소**: 서울에는 N서울타워, 명동, 동대문, 홍대, 인사동 등 인기 있는 관광 명소와 쇼핑 지역이 많습니다. 또한, 서울의 유명한 한강 공원은 여가를 즐길 수 있는 좋은 장소입니다.

5. **음식**: 한국의 다양한 음식을 경험할 수 있는 곳으로, 길거리 음식부터 고급 레스토랑까지 다양한 옵션이 있습니다. 김치, 비빔밥, 불고기 등 전통 한국 음식은 물론, 다양한 국제 요리도 즐길 수 있습니다.

서울은 역사와 현대가 공존하는 매력적인 도시로, 방문객들에게 다양한 경험을 제공합니다. 더 궁금한 점이 있다면 말씀해 주세요!
--------------------------------
명령을 내려 주세요: 내가 사과를 5개 샀는데, 내가 1개 먹고, 나머지는 친구 2명에게 나눠주려고한다. 몇개씩 주면 되나? 
사과를 5개 샀고, 1개를 먹었다면 남은 사과는 4개입니다. 이 4개를 친구 2명에게 나눠주려고 한다면, 각 친구에게 2개씩 주면 됩니다. 

따라서, 2명에게 각각 2개씩 나누어 주면 됩니다.
--------------------------------
명령을 내려 주세요: bye
chatGPT를 종료합니다.

챗GPT가 작성해주는 코드와 비교하자면, ChatCompletion.create -> chat.completions.create 으로 변경된 것이 주된 차이일 것입니다.

실행 예시에서 확인 가능하신 것 처럼, 위 코드는 채팅 형태로 동작하게 되어있습니다.
해당 코드를 기반으로 직접 수정하시거나, 챗GPT 에게 코드 수정을 요청하시면 될 것입니다.

관련글

Sora에서 Media containing people 에러 나지 않고 성공한 케이스

Sora에서 Media containing people 에러 나

Sora에서 인물 사진을 기반으로 영상을 제...

Leave a Comment