이번 포스트에서는 OpenAI의 ChatGPT API를 사용하기 위해 필요한 API 키(챗지피티 API Key)를 발급받고, 이를 환경 변수에 등록하는 방법을 단계별로 설명하고자 한다. API 키는 OpenAI의 서비스를 이용하기 위한 필수 요소로, 이를 올바르게 설정해야 안정적으로 API를 호출할 수 있다.

단계 1: OpenAI 계정 생성 및 로그인
먼저, OpenAI 계정을 생성하고 로그인한다.
OpenAI 계정 생성
1. OpenAI 웹사이트 접속: OpenAI 웹사이트에 접속한다.
2. 계정 생성: 화면 중간의 “API login” 버튼을 클릭한다.

3. 계정 정보 입력: 이메일 주소와 비밀번호를 입력하여 계정을 생성다. 또는 Google이나 Microsoft 계정을 사용하여 간편하게 가입할 수 있다.

이메일 인증: 입력한 이메일 주소로 전송된 인증 이메일을 확인하고, 계정을 활성화한다.
OpenAI 로그인
- 로그인 페이지 접속: OpenAI 로그인 페이지로 이동한다.
- 로그인 정보 입력: 생성한 계정의 이메일 주소와 비밀번호를 입력하여 로그인한다.
단계 2: OpenAI API 키 발급
API 키를 발급받아야 OpenAI의 서비스를 사용할 수 있다. 다음 단계에 따라 API 키를 발급받는다.
API 키 발급
1. Dashboard 접속: 로그인 후, OpenAI Dashboard 페이지로 이동다.
2. API Keys 메뉴 선택: 좌측 상단 메뉴에서 톱니바퀴 항목(Settings)을 클릭한다.

3. 새로운 API 키 생성: 왼쪽 메뉴에서 “Your profile”을 선택하고, “User API keys(Legacy)”를 클릭 한뒤 나오는 “+ Create new secret key” 버튼을 클릭한다.

4. API 키 이름 입력: API 키의 이름을 입력하여 새로운 API 키를 생성한다.

5. API 키 복사 및 저장: 생성된 API 키를 복사하여 안전한 곳에 저장한다. 이 키는 이후에 한 번만 표시되므로 반드시 복사하여 저장해야 한다.

단계 3: API 키 환경 변수에 등록
API 키를 환경 변수로 등록하면 보안이 강화되고, 코드에서 쉽게 접근할 수 있다.API 키를 환경 변수로 등록하기에는 두가지 방법이 있다.
.env
파일을 생성하고 해당 파일에 API 키를 등록한다.
장점: 프로젝트마다 서로 다른 API 키를 사용함으로써 API 사용량을 관리할 수 있다.
단점:.env
파일을 잘 관리해야 하며, Git-hub에 올라가서 공개되지 않도록.ignore
파일에.env
파일을 반드시 등록해야 한다.- 시스템 환경변수에 API 키 정보를 등록하로 로드하여 사용한다.
장점: API 키가 외부에 노출될 가능성이 매우 낮다.
단점: 서로 다른 프로젝트마다 API 사용량을 관리하는 등의 이유로 여러 API 키를 사용할 때 번거로움이 있다.
각각의 장단점이 있지만 .env 파일로 관리하는 것은
Python 프로젝트 설정
1. 프로젝트 디렉토리 생성: 원하는 위치에 프로젝트 디렉토리를 생성한다.
mkdir openai-chatbot
cd openai-chatbot
2. 가상 환경 생성 및 활성화: 가상 환경을 생성하고 활성화한다.
python -m venv myvenv
#myvenv는 가상환경의 이름이다. # Windows.\myvenv\Scripts\activate
# Macsource myvenv/bin/activate
3. 필수 라이브러리 설치: openai
라이브러리와 환경 변수 관리를 위한 python-decouple
라이브러리를 설치한다.
pip install openai python-decouple
.env 파일 생성 및 API 키 등록
1. .env 파일 생성: 프로젝트 루트 디렉토리에 .env
파일을 생성한다.
2. API 키 등록: 발급받은 API 키를 .env
파일에 추가한다.
# .env 파일 내용
OPENAI_API_KEY=your-openai-api-key

API Key를 시스템 환경 변수에 설정하기
발급받은 Key를 시스템 환경 변수로 설정해야 한다.
윈도우 환경 사용자라면 “시스템 환경 변수”에서 “시스템 변수”에 OPENAI_API_KEY="your_api_key_here"
를 등록해주면 된다.

맥 환경 사용자라면 아래 코드를 통해 환경 변수로 등록할 수 있다.
export OPENAI_API_KEY="your_api_key_here"
단계 4: 환경 변수로 저장한 API Key 로드 예제
이제 환경 변수에 등록된 API 키를 Python에서 로드해보자.
import os
from decouple import config
# 환경 변수에서 API 키 로드
api_key = config('OPENAI_API_KEY')
print로 api_key를 출력해보면 환경 변수로 등록한 API Key가 정상적으로 출력되는 것을 확인할 수 있다.
단계 5: OpenAI API를 통해 질문을 보내고 답변 받기
이제 사용 준비가 완료 되었다. 간단하게 아래와 같이 get_chat_gpt_response()
함수를 만들고 사용해볼 수 있겠다.
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")
def get_chat_gpt_response(prompt):
response = openai.Completion.create(
engine="text-davinci-002",
prompt=f"{prompt}",
temperature=0.7,
max_tokens=150,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
return response.choices[0].text.strip()
question = "지구에서 가장 높은 산은 무엇인가요?"
answer = get_chat_gpt_response(question)
print(answer)
Trouble Shooting
아래와 같은 Error가 발생한다면?
"You exceeded your current quota, please check your plan and billing details."
이제 돈을 지불할 준비를 해야 한다. 1k token당 금액이 책정되어 있어서 카드 등록을 하지 않으면 못쓰게 되어있다. 이미 ChatGPT-4 사용을 위해 $20을 지불하고 있건만… OpenAI API를 쓰려면 또 등록을 해야한다.
여기 Billing overview 사이트에서 카드를 등록하면 된다.

단계 6: 이제 진짜로 사용 가능하다
실행해보면 답변이 한방에 잘 날라온다. 분명 한글로 물어봤는데 너는 영어로 대답하는구나

단계 7: 매개변수 셋팅
OpenAI 라이브러리로 ChatGPT를 호출할 때 여러가지 변수가 있다.
우리가 채팅의 형태로 사용할 때는 따로 변수 설정이 없지만 API를 사용하게 되면 매개변수 셋팅을 통해서 결과 텍스트의 특성을 제어하고 최적화 할 수 있다.
- temperature: 텍스트의 다양성과 무작위성을 제어한다. 값이 낮으면 일관된 텍스트를 생성하고, 값이 높으면 더 창의적이고 다양한 텍스트를 생성한다. - max_tokens: ChatGPT 모델이 생성하는 응답의 최대 토큰 수를 제한하는 기능을 수행한다. 토큰은 모델이 처리하는 텍스트의 작은 단위로, 문자, 단어, 혹은 단어의 일부가 될 수 있다. - top_p: Top-p 샘플링 또는 누적 확률 분포에서의 임계값을 설정한다. 값이 낮으면 예측 가능한 텍스트를 생성하고, 값이 높으면 더 다양한 단어와 문구가 생성된다. - frequency_penalty: 생성된 텍스트의 단어 빈도에 대한 패널티를 제어한다. 양수 값은 모델이 자주 등장하는 단어를 덜 사용하게 만들고, 음수 값은 모델이 자주 등장하는 단어를 더 선호하게 만든다. - presence_penalty: 생성된 텍스트에서 단어의 반복에 대한 패널티를 제어한다
추가 꿀팁: 대화형으로 사용할 때와 다른 차이점은 무엇이 있을까?
매개변수 셋팅을 통해 추가로 답변을 최적화 할 수 있고, 또 다른 차이점은 무엇이 있을까?
바로, 대화의 연속성이다.
대화형으로 사용할 때는 하나의 주제로 계속 대화를 이어갈 수 있다. 이전에 답변에 대해서 다시 정리를 할 수도 있고, 이어지는 문장을 만들어 줄 수도 있다.
하지만 API 호출을 사용하게 되면 대화를 이어나가지 못한다.
ChatGPT는 API 호출 간에 상태를 저장하지 않는다.
이 말은 각 API 호출이 독립적이라는 것으로, 이전 호출에서 얻은 정보를 기억하지 않는다.
그럼 대화형이 안되면 API는 기능이 반감되는 것은 아닐까?
그래서 API호출에서도 대화형으로 구현을 할수도 있지만, 제약이 있다.
방법은 이전 호출의 내용을 현재 호출의 입력으로 포함하여 대화 기록을 강제로 유지시키는 것이다.
두 개의 질문이 있고 각 질문에 대한 답변을 얻으려면, 두 번째 질문에서 첫 번째 질문과 답변을 함께 입력으로 전달하면 된다. 이렇게 하면 모델이 이전 대화의 문맥을 이해하고 적절한 응답을 생성할 수 있다.
question1 = "지구에서 가장 높은 산은 무엇인가요?"
answer1 = get_chat_gpt_response(question1)
question2 = "그 산의 높이는 얼마인가요?"
full_question2 = f"{question1}\n{answer1}\n{question2}"
answer2 = get_chat_gpt_response(full_question2)
print(answer2)
이 방법을 사용하면 이전 대화의 정보를 기억하여 모델이 일관된 응답을 생성할 수 있다. 하지만 대화가 길어질수록 입력 텍스트가 길어지므로, 모델의 최대 토큰 수를 초과하지 않도록 주의해야 한다는 점이 제약 사항이 될 것이다. 혹은 매번 긴 문장을 사용하게 되므로 token이 많아져 내가 내는 비용이 커질 수 있겠다. 이 경우 일부 정보를 생략하거나 요약해야 할 수도 있을 것이다.
결론
이번 포스트에서는 OpenAI의 ChatGPT API를 사용하기 위해 필요한 API 키를 발급받고, 이를 환경 변수에 등록하는 방법을 단계별로 설명해 보았다. API 키 발급부터 환경 변수 설정, 그리고 API 호출 예제까지의 과정을 따라하면, OpenAI의 다양한 기능을 활용한 프로젝트를 쉽게 시작할 수 있을 것이다.
더 고급 사용방법을 원한다면, Batch API 도 사용해 보자!