OpenAI API 사용법 총정리 - Python 설치 부터 회의 요약 챗봇 만들기 까지
최근 인공지능 기술의 발달로 ChatGPT와 같은 대화형 AI 모델이 주목받고 있습니다. 이러한 모델은 OpenAI에서 제공하는 API를 통해 쉽게 활용할 수 있는데요. 이 글에서는 OpenAI API의 기본적인 사용법부터 이를 활용한 대화형 챗봇, 회의 내용 자동 요약 챗봇 구현까지 총정리해 보겠습니다.
OpenAI API는 강력한 자연어 처리 기능을 제공하여 개발자들이 다양한 AI 애플리케이션을 쉽게 만들 수 있게 해줍니다. 특히 최신 GPT 모델을 기반으로 한 API를 사용하면 사람과 거의 구분이 안 갈 정도로 자연스러운 대화를 수행하는 챗봇을 개발할 수 있습니다.
OpenAI API 설치 및 API키 발급
OpenAI API를 사용하려면 먼저 회원가입 후 API키를 발급받아야 합니다.
-
OpenAI 홈페이지에서 회원가입을 진행합니다.
-
API키 페이지에 들어가서 "Create new secret key"를 클릭해 새 API키를 생성합니다.
- 생성된 API키를 안전한 곳에 저장해 둡니다. (다른 사람과 절대 공유하면 안됩니다)
발급 받으신 키는 아래와 같이 확인 가능 합니다.
참고로 API사용은 유료이며 ChatGPT 유료 사용과 별개로 가입시 무료 Credit 사용량을 초과하면 사용량에 따라 과금 됩니다.
그 다음 아래와 같이 Python용 라이브러리를 설치해 줍니다.
pip install openai
간단한 OpenAI API 사용법: 질문에 답변하기
OpenAI 라이브러리를 import하고 발급받은 API키로 인증하는 코드는 다음과 같습니다.
import openai
openai.api_key = "YOUR_API_KEY"
openai.ChatCompletion.create() 함수를 사용하면 ChatGPT 모델에게 질문을 던지고 답변을 받을 수 있습니다.
completion = openai.ChatCompletion.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Who won the world series in 2020?"}]
)
print(completion.choices[0].message.content)
실행 결과:
The Los Angeles Dodgers won the World Series in 2020.
이처럼 간단한 사실 질문에 대해서는 단 몇 줄의 코드로 ChatGPT의 답변을 얻을 수 있습니다.
시스템 프롬프트로 챗봇 성격 설정하기
이번에는 시스템 메시지를 통해 챗봇의 성격과 답변 스타일을 정해보겠습니다. 아래와 같이 첫번째 메시지에서 시스템 프롬프트를 지정할 수 있습니다.
completion = openai.ChatCompletion.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "당신은 재치있고 위트있는 답변을 하는 챗봇입니다."},
{"role": "user", "content": "가장 재미있는 농담을 들려줘"}
]
)
print(completion.choices[0].message.content)
- 실행 결과:
알았어요, 제가 아는 가장 재미있는 농담 하나 들려드릴게요.
토마토 두 개가 도로를 건너고 있었어요. 그런데 한 토마토가 깔려 죽었대요.
그러자 다른 토마토가 친구에게 말했죠. "어이쿠, 캐첩(catch up) 좀 해!"
하하하, 어때요? 속이 뻥 뚫리는 느낌 아니에요? 아니면 아직 덜 익은 농담이었나? 장담컨대 이 농담은 토마토 케첩만큼이나 새콤달콤 웃음 폭탄이랍니다!
OpenAI API 활용 사례
활용 사례 1: 대화형 챗봇 만들기
OpenAI API의 Chat API를 사용하여 대화의 맥락을 유지하면서 사용자와 자연스럽게 대화하는 챗봇을 만들어봅시다. messages 파라미터에 이전 대화 내용을 포함시키면 모델이 대화 흐름을 인지하고 이에 맞는 답변을 생성할 수 있습니다.
messages = [
{"role": "system", "content": "당신은 친절하고 도움이 되는 AI 어시스턴트입니다."},
{"role": "user", "content": "안녕하세요! 오늘 날씨가 어떤지 알려주실 수 있나요?"},
{"role": "assistant", "content": "안녕하세요! 오늘은 대체로 맑고 포근한 날씨가 예상됩니다. 낮 최고기온은 22도까지 오르겠네요. 야외 활동하기 좋은 날씨에요. 계획 있으신가요?"},
{"role": "user", "content": "딱히 계획은 없는데 이런 날 뭐하면 좋을까요?"}
]
completion = openai.ChatCompletion.create(
model="gpt-4o",
messages=messages
)
assistant_reply = completion.choices[0].message.content
print(assistant_reply)
messages.append({"role": "assistant", "content": assistant_reply})
messages.append({"role": "user", "content": "와 완전 좋은 제안이네요. 그렇게 해야겠어요!"})
completion = openai.ChatCompletion.create(
model="gpt-4o",
messages=messages
)
print(completion.choices[0].message.content)
실행 결과:
이런 화창한 날씨에는 가벼운 산책이나 하이킹을 추천드려요. 근처 공원이나 산책로에서 자연을 만끽하면서 상쾌한 공기를 마시는 게 어떨까요? 아니면 친구나 가족들과 야외에서 피크닉을 즐기는 것도 좋겠죠. 맛있는 음식과 함께 푸른 잔디밭에 앉아 여유로운 시간을 보내는 거예요. 자전거 타기나 캐치볼 같은 가벼운 야외 스포츠를 즐기셔도 될 거 같네요. 이런 활동들로 기분 전환도 하고 활력도 얻을 수 있을 거예요. 어떤 계획이 마음에 드시나요?
제 제안이 도움이 되었다니 기쁘네요! 오늘처럼 좋은 날 야외에서 즐겁게 시간을 보내시면 삶의 활력이 느껴지실 거예요. 가끔은 이렇게 여유를 갖는 것도 중요하죠. 옥외 활동 후에는 시원한 음료 한잔의 여유도 잊지 마세요. 행복하고 의미있는 하루 보내시길 바라며, 또 무엇을 도와드릴까요? 궁금하신 점이 더 있으시면 언제든 물어봐 주세요! 대화 흐름을 이어가면서 사용자의 발화에 적절히 반응하는 것을 볼 수 있습니다. 이런 식으로 OpenAI API를 활용하면 사용자와 자연스럽게 상호작용하는 챗봇을 만들 수 있습니다.
활용 사례 2: 회의록 자동 요약 챗봇
회의는 비즈니스 현장에서 빈번하게 일어나는 커뮤니케이션 방식입니다. 하지만 회의 내용을 일일이 기록하고 요약하는 일은 상당한 시간과 노력이 듭니다. OpenAI의 Whisper API와 ChatGPT API를 활용하면 이 작업을 자동화할 수 있습니다.
Whisper API로 회의 녹음 파일 텍스트로 변환하기
Whisper는 OpenAI에서 만든 자동 음성 인식(ASR) 모델로, 음성 데이터를 텍스트로 변환해줍니다. 회의 녹음 파일을 입력으로 받아 텍스트로 변환하는 코드는 다음과 같습니다.
audio_file= open("recording.m4a", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
print(transcript.text)
위 코드에서는 "recording.m4a" 파일을 읽어서 Whisper 모델에 전달하고 있습니다. 현재 가장 강력한 성능을 보이는 "whisper-1" 모델을 사용했습니다. 변환된 텍스트는 transcript.text에 담깁니다.
ChatGPT API로 회의록 자동 요약하기
위에서 변환한 회의 녹취록을 ChatGPT API로 전달하여 자동으로 회의 내용을 요약해봅시다. 요약문 생성을 위해 시스템 프롬프트에서 요구사항을 명확히 제시할 것입니다.
completion = openai.ChatCompletion.create(
model="gpt-4o",
messages=[
{
"role": "system",
"content": "당신은 회의 녹취록을 분석하여 중요 내용을 요약하는 AI입니다. 주제가 바뀔 때마다 문단을 나누고, 회의 참석자들의 이름은 '참석자1', '참석자2'와 같이 익명으로 처리하세요. 회의에서 언급된 핵심 사항과 결정된 사항, 향후 액션 아이템을 명확히 정리해 주세요."
},
{
"role": "user",
"content": transcript.text
}
]
)
print(completion.choices[0].message.content)
실행 결과:
회의록 요약 참석자: 참석자1, 참석자2, 참석자3
프로젝트 A 진행 상황
기획안 초안 작성 완료(참석자1) 디자인 시안 제작 중(참석자2) 다음주 중으로 개발 착수 예정 => 액션 아이템: 기획안에 대한 피드백 제출(모든 참석자, ~6/20까지)
신규 클라이언트 제안