본문 바로가기
프로그래밍

Colab에서 OpenAI API로 챗봇 기능 구현

by Good.PhD 2024. 8. 21.

Colab은 웹브라우저 환경에서 쉽게 코딩할 수 있는 툴이다. 학생들하고 수업 할 때 항상 사용하는데 간단한 튜토리얼 정도는 문제 없이 돌아가서 굉장히 좋은 툴이다.

Google Colab

 

Python 환경에서 OpenAI의 LLM 모델들을 사용해볼 수 있는데, 코파일럿에 API 사용 방법을 물어보면 의도했던 답변이 안 나왔다. 파이썬에서 API를 쓰겠다고 명시하지 않아서 API 접근할 수 있는 방법을 여러가지 알려주다 보니 제대로 안 나오는 듯.. 그래서 파이썬에서 API를 쓰겠다고 하니 openAI github을 알려줬다. 작성해준 코드도 거기서 가져온 것으로 보인다.

https://github.com/openai/openai-python

 

GitHub - openai/openai-python: The official Python library for the OpenAI API

The official Python library for the OpenAI API. Contribute to openai/openai-python development by creating an account on GitHub.

github.com

 

 

OpenAI API github

 

위 그림처럼 작성하면 된다고 한다. os.environ.get("OPENAI_API_KEY") 이 부분은 API를 노출시키지 않으려고 사용한 부분인데, API 키 발급을 받으면 이 부분만 대체해주면 된다.

OpenAI API 키 발급 방법: https://lsjsj92.tistory.com/655

 

Python OpenAI API를 활용해 GPT3(GPT3.5) 사용하기(Feat. ChatGPT)

포스팅 개요 최근 OpenAI chatGPT가 각광을 받으면서, 저도 ChatGPT에 대해서 관심이 많아졌습니다. 이미 OpenAI에서 GPT 계열의 모델들은 API를 제공해주고 있고 그 중 ChatGPT의 전신이 되는 GPT3.5의 버전의

lsjsj92.tistory.com

 

 

clinet.chat.completions.create() 함수에 messages를 보면 dictionary 형태로 전달이 되는 것을 볼 수 있다. "role"에 정의된 값에 따라 사용자가 입력한 텍스트인지, 아니면 모델이 생성한 답변인지를 구분하고 있다.

챗GPT 대화 화면

 

예를 들어 위와 같은 대화가 있으면, API 단에서는 아래와 같은 형식으로 메세지를 주고 받고 있음을 알 수 있다.

 

{"role":"user", "content":"안녕. 나 영어 연습이 필요해"}

{"role":"assistant", "content":" 안녕! 영어 연습을 도와줄게. 어떻게 시작하고 싶어? 대화, 작문, 문법 연습 중 어떤 것이 좋을까? "}

 

{"role":"user", "content":" 나는 듣기 연습이 필요해 "}

{"role":"assistant", "content":"좋아! 듣기 연습을 위한 몇 가지 방법이 있어. 예를 들어, 영어 대화를 듣고 이해하는 연습을 할 수 있어. 내가 간단한 영어 문장을 말하면, 너는 그 문장을 들어보고 이해한 내용을 말해주는 식으로 진행할 수 있어.

또는, 좋아하는 주제에 대한 짧은 영어 오디오 클립이나 비디오를 찾아서 같이 들어본 후, 그 내용을 토론해볼 수도 있어. 어떤 방법이 마음에 들어?"}

 

model 파라미터에도 다양한 모델 정보를 입력할 수 있다. 아래 블로그에서 사용할 수 있는 모델들을 잘 정리해줘서 참고해보면 좋을 듯.

사용 가능한 모델 리스트: https://yongeekd01.tistory.com/141

 

OpenAI API 이용 개발 기초(소개, API 사용준비, 기본모델들, ChatGTP)

1. Open AI API 소개 OpenAI API는 거의 모든 작업에 적용 가능 . 다양한 기능과 가격대의 다양한 모델을 제공할 뿐만 아니라 맞춤형 모델을 미세 조정할 수 있는 기능도 제공함 OpenAI에서는 현재 API를

yongeekd01.tistory.com

 

chat_completion 출력 결과

 

clinet.chat.completions.create()을 실행해서 얻은 chat_completion을 출력한 결과.

chat_completion 에 다양한 값이 포함되어 있는데 그 중 choices 안에 모델이 생성한 답변이 담겨있다. 그래서 답변만 골라내려면 마지막에 작성된 chat_completion.choices[0].message.content라고 구체적으로 명시를 해줘야 한다.

 

참고로 deeplearning.ai 강의에서는 아래와 같이 API key를 넣어서 사용한다. 향후 밑에 나오는 코드들은 아래 코드 이후로 작성된 코드들이다.

---------------------------------------

import openai

openai.api_key = '발급받은 API key를 넣어주세요'

---------------------------------------

https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/

 

ChatGPT Prompt Engineering for Developers - DeepLearning.AI

Level up your use of LLMs with prompt engineering best practices. Learn to automate workflows, chain LLM calls, and build a custom chatbot.

www.deeplearning.ai

 

chatGPT 답변을 간단하게 받기 위해 함수로 정리

Colab에서 openAI API를 이용해서 모델과 대화를 해보기 위해서 간단하게 구현을 해봤다. chatGPT라는 함수를 만들고, 텍스트를 입력하면 답변이 출력되도록 했다.

 

Colab 상에서 대화를 진행해보기 위해 작성한 반복문

while문으로 간단하게 반복문을 작성했다. 사용자가 입력하고 API로 답변을 생성하면서 대화를 해볼 수 있다. 그런데,, 이렇게 대화를 하면 대화가 이어지지가 않는다.

 

아래는 위 코드대로 진행한 대화 결과...

---------------------------------------

Type your message: 안녕. 나 영어 연습이 필요해.

ChatGPT: 안녕하세요! 도와드릴 수 있어 기쁩니다. 무엇에 대해 연습하고 싶으신가요? 문법, 단어, 읽기, 쓰기, 듣기 또는 말하기 중 어떤 영역인가요?

Type your message: 나는 듣기

ChatGPT: 드리겠습니다. 말씀해주세요.

Type your message: 아니 듣기 연습 하고 싶다고

ChatGPT: 한다면, 라디오나 팟캐스트를 들어보는 것도 좋습니다. 특정 주제에 대해 말하는 사람들을 들으면서 어투나 문장 구성을 배울 수 있고, 현지인들이 실제로 어떻게 대화를 나누는지 알 수 있습니다. 또한, 오디오북을 들으면서 동시에 책을 읽는 것도 효과적입니다. 많은 양의 듣기 연습을 통해 청취 능력을 향상시킬 수 있습니다. 정확한 발음과 제대로 된 억양을 듣는 것이 중요하기 때문에, 자막이 있는 영화나 드라마를 시청하는 것도 좋습니다.

Type your message: exit

---------------------------------------

대화가 연결이 안된다. 이전에 했던 답변을 전혀 기억하지 못하는 문제가 있다.

문맥

 

 

그러나 이전 대화를 리스트 안에 포함시켜서 전달하면 문맥을 고려한 답변이 나온다. 그래서 위 코드를 실행해서 나온 답변은 이렇다.

---------------------------------------

ChatGPT: 그럼, 다양한 방법으로 듣기 실력을 향상시킬 수 있습니다.

1. 영어 오디오 책, 팟캐스트, 음악을 들어보세요. 이런 자료들은 일상 생활에서 자연스럽게 영어 청취 연습을 할 수 있게 해줍니다.
2. 영어로 된 뉴스나 다큐멘터리를 시청하세요. 다양한 소리와 억양, 말하는 스타일을 듣게 될 것입니다.
3. 영어 회화 앱을 이용해 보세요. 자체적으로 듣기 연습을 제공하는 앱들이 많습니다.
4. 매일 영어로 된 짧은 기사나 이야기를 하나씩 듣고 이해한 내용을 서술해 보세요.

앞선 방법들을 적용해서 청취 능력을 향상 시키는데 도움이되길 바랍니다.

---------------------------------------

그래서 문맥을 고려한 답변을 생성하도록 챗봇을 구현하려면 대화 히스토리를 저장해서 함께 모델에 입력해줘야한다.

 

문맥을 기억하기 위한 수정 버전

 

그래서 함수를 이렇게 수정했다. 그리고 진행한 대화에서는 이전 대화 내용을 반영한 답변 생성이 되는 것을 볼 수 있었다.

아래는 위 코드대로 진행한 대화 결과...

---------------------------------------

Type your message: 안녕. 나 영어 연습이 필요해.

ChatGPT: 안녕하세요! 도와드릴 수 있어요. 영어 연습을 위해 어떤 방법 또는 주제를 선호하시나요?

Type your message: 음...일상 주제로 대화해보고 싶어

ChatGPT: 그럼, 당신의 하루가 어떻게 시작되는지부터 이야기해봅시다. 아침에 일어나면 보통 무엇을 하시나요?

Type your message: 나는... 똥 싸

ChatGPT: Ah, got it. You might say in English: "First thing in the morning, I use the bathroom." What do you do next?

Type your message: I eat something

ChatGPT: That's great! You could say, "Then, I have breakfast." What do you usually have for breakfast?

Type your message: exit

---------------------------------------

 

'role'에서 'user'와 'assistant'외에 'system'이 있는데, 시스템 프롬프트라고 해서 챗봇의 역할을 규정해 줄 수 있는 프롬프트이다. 시스템 프롬프트를 적절하게 작성하면 챗봇이 의도한대로 작동하도록 유도할 수 있다.아래 예시에서 시스템 프롬프트는 클로드에게 작성해달라고 했다.

시스템 프롬프트

 

시스템 프롬프트를 넣은 이후의 대화. 어떻게든 영어로 말하게 하려는 학원 영어 선생님 느낌...

---------------------------------------

Type your message: 안녕. 나 영어 연습이 필요해.

ChatGPT: Hello! I'm glad you're taking the initiative to practice your English. How can I assist you today? Is there a specific area you would like to focus on such as grammar, vocabulary, or conversational skills?

Type your message: 좀 쉽게 해줘. 나 영어에 자신이 없어.

ChatGPT: Of course, don't worry. We can start from the basics. How about introducing yourself in English? Just tell me a little bit about yourself, like your name, what you like to do and so on.

Type your message: 너 한국어 못 해?

ChatGPT: 네, 저는 한국어를 이해하고 사용할 수 있지만, 당신의 영어 학습을 위해 가능한 한 영어로 대화를 유도하려고 노력하고 있습니다. 천천히 갑시다. 한 번, 자신에 대해 간단하게 영어로 얘기해보세요. 이름이나 취미 등에 대해 이야기해 보시겠어요? 

Type your message: 음,,, 나는 여행 좋아하는데

ChatGPT: That's a good start! You can say, "I enjoy traveling." Could you tell me more? For example, where have you traveled before, or what's your favorite place to visit?

Type your message: I enjoy eating

ChatGPT: Great! That's something a lot of us enjoy. You could expand on that by saying something like, "I enjoy eating, particularly trying out new cuisines." Can you tell me more about your favorite foods or dishes you've tried?

Type your message:  Thanks a lot. 오늘 영어를 너무 많이 한 것 같다.

ChatGPT: You're welcome! You did a great job today. It's okay to take it one step at a time. Remember, the goal is to make a little progress every day. Talk to you later!

Type your message: exit

---------------------------------------

 

거대언어모델 기반 챗봇은 대략 이런 느낌으로 작동한다. :)