[ 토이프로젝트 ] 기말과제로 LLM 사용법 찍먹하기

김형겸·2023년 6월 7일
1

0. 들어가며


2개월 전, SOPT 에서 개설된 chatGPT 스터디를 보고 흥미가 생겨 참여했고, 이곳에서 JS 환경에서의 openAI API 사용법과 fine tuning 방법을 조금 배웠다.
딥한 내용은 다 이해하지 못했지만 이것을 스터디 강의에서 듣고 끝내는 것이 아닌 작은 토이프로젝트에라도 적용하고 싶은 마음이 컸다.

그러던 마침 수강하고 있던 파이썬을 사용한 모델링 수업에서 자유주제의 파이썬 프로그램 작성 및 발표 라는 기말 과제를 내 주었고 자유 주제라는 말을 듣자마자 내가 배운 것을 써 먹을 수 있는 절호의 기회라고 생각했다!
과 특성상 농업 이라는 키워드가 들어가야 했기 때문에 간단한 작물 재배 솔루션 챗봇 을 만들어 발표하기로 결정하였다.




1. LLM 이란?


Large Language Model 의 약자로 자연어 처리 분야에서 사용되는 인공지능 모델이다.
방대한 데이터셋을 통해 인간의 대화를 학습하고, 결과를 도출해 내는데 능하다.
가장 대표적인 LLM 기반 프로덕트는 OpenAI 사의 chatGPT 가 있겠다.

LLM 의 단점도 분명히 존재하는데, 이것은 다음 게시글에서 느낀점과 함께 나열해보고자 한다.




2. API key 발급받기


발급법은 굉장히 간단하다.

먼저 openAI 홈페이지에 들어가 로그인을 해준다.

로그인을 하고 나면 위와 같은 화면이 우리를 반겨준다. API 탭으로 들어간다.


화면이 나타나고, 여러가지 기능들을 사용할 수 있는 목록들이 보인다.
공식문서의 세팅법, python 을 사용하지 않은 다른 언어를 통한 API 사용법을 알고싶다면 공식문서를 참고해도 도움이 많이 될 것이다.
일단 우리는 우측 상단의 계정을 누르고 드롭다운의 View API keys 탭으로 들어간다.

그럼 이와 같은 화면을 만날 수 있다. Create new secret key를 누른다.

키 이름을 지정해주고, 발급받은 API 키를 복사해서 잘 저장해둔다.
이때 발급받은 API 키는 이 순간에만 볼 수 있으므로 지금 복사해서 잘 저장 해 두어야 한다!

API 키를 발급받았고, 다음으로는 API 를 사용하는 방법에 대해 알아보도록 하자.




3. API 호출하기(Python)


해당 토이프로젝트는 Python으로 만들었기에 다른 환경에서의 API 사용 방법은 공식문서나 다른 아티클을 참조해주시길 바랍니다!

먼저, openai 모듈을 설치해 주어야 한다.

pip install openai

모듈이 설치되었다면 파일을 하나 만들고 간단하게 코드를 작성해보자.

import openai
import os

openai.api_key = os.getenv("OPENAI_API_KEY") # openai api key 가져오기

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

print(completion.choices[0].message)

위의 코드를 작성하여 .env 파일에 작성해둔 API 키를 가져오자.
그 후 completion 변수를 정의해준다. openai.ChatCompletion.create() 메서드는 여러가지 인자를 받는데, 가장 기본적인 구조는 위와 같다.

  1. model : 인공지능 모델을 선택한다. gpt-3.5-turbo 모델 뿐 만 아니라 여러가지 모델을 사용할 수 있다. 자세한 모델과 가격 정보는 여기서 확인할 수 있다.
  2. messages : 말그대로 메시지 내용을 적는 딕셔너리 배열이다. 이 딕셔너리에는 rolecontent 가 존재하는데, user 말고 다른 role 도 존재하니 아래에서 자세히 살펴보도록 하자.

user role 은 말그대로 유저가 를 뜻하며 GPT 에게 Content key의 value 를 보내게 된다.
자 이제 코드를 실행시켜보면?


Hello! 라는 말에 답을 한 것을 볼 수 있다! 이렇게 내 프로젝트에도 GPT 가 들어오게 된 것이다.
자 그럼 이제 input 을 주어서 간단하게 자유로운 질문을 할 수 있도록 코드를 수정해보자.

question = input("질문을 입력하세요 : ")

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": f"{question}"}
  ]
)

print(f"답변 : {completion.choices[0].message['content']}")


아주 훌륭하게 답변하는 것을 볼 수 있다. 그럼 이런 질문에도 답변하는지 한번 보도록 하자.

같은 질문을 두 번 했다. 답변은 잘 하지만 뭔가 양식이 통일되지 않는 느낌이 든다.
내가 원하는 것은 두 번째 답변처럼 번호를 매겨 답변을 해 주길 바란다.
그렇다면 방법은 뭐가 있을까?




4. 역할 부여하기, 답변 양식 정해주기


이전에 설명했던 role 에는 user 뿐 만 아니라 다른 것들도 존재한다.

system

GPT에게 역할을 지정해준다. 어떤 기능을 하는지 간단한 코드와 아웃풋을 보자

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content":"너는 유치원 교사야 어린아이들이 이해하기 쉬운 단어와 어휘로 설명해줘"},
    {"role": "user", "content": f"{question}"}
  ]
)

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content":"당신은 유능한 학자입니다. 전문적인 어휘와 단어를 사용해 답변해주세요."},
    {"role": "user", "content": f"{question}"}
  ]
)

역할을 유치원 교사 로 설정하느냐, 유능한 학자 로 설정하느냐에 따라 어휘선택, 말투가 달라지는 것을 알 수 있다!
이와같이 GPT 가 해야 할 역할을 지정해주는 것을 system role 이라 할 수 있다.

assistant

말 그대로 assistant, GPT 의 답변을 적어주는 것이다.
답변을 적어주는게 무슨 의미가 있느냐?
바로 이전의 답변을 보고 새 답변의 형식을 유추하도록 학습시킬 수 있기 때문이다!

아래 systemassistant 를 함께 적용한 예시를 보도록 하자.

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": """오늘 기온에 맞춰 오늘 작물에게 맞는 행동을 추천해야 합니다.
    사용자가 특정 작물과 현재 기온에 대한 정보를 제공하면, 해당 기온에서의 작물 관리에 대한 오늘 하루 관리법을 제공해야 합니다."""},
    {"role": "assistant", "content": """오늘은 기온이 ~~도,
    날씨가 ~~ 하므로 ~~ 작물에게 다음과 같은 조치를 하는것을 추천합니다. 1. ~~ 2. ~~ 3. ~~"""},
    {"role": "assistant", "content": """오늘은 기온이 ~~도,
    날씨가 ~~ 하므로 ~~ 작물에게 다음과 같은 조치를 하는것을 추천합니다. 1. ~~ 2. ~~ 3. ~~"""},
    {"role": "assistant", "content": """오늘은 기온이 ~~도,
    날씨가 ~~ 하므로 ~~ 작물에게 다음과 같은 조치를 하는것을 추천합니다. 1. ~~ 2. ~~ 3. ~~"""},
    {"role": "user", "content": f"{question}"}
  ]
)

3번 정도 같은 답변을 넣어주어 답변의 형식을 학습하도록 한다. 케이스를 더 복잡하게 설정하면 더 일정한 형식의 답변과 에러처리까지 가능하지만 이번 예제에서는 이정도만 하고 넘어가도록 하자.


두 번의 답변 모두 이전에 의도했던 형식으로 잘 답변해주는 것을 볼 수 있다!
이런식으로 내가 원하는 형식의 답변만 나오도록 GPT 를 조작할 수 있다.




5. 다음 글로 넘어가며


앞으로 담을 내용을 하나의 글로 다 담기에는 무리가 있다고 판단하여 다음 게시글에서 토이프로젝트의 완성 까지 다뤄볼 예정이다.
담을 내용은 아래와 같다.

  • 하나의 단어만 넣어주어도 원하는 답변을 받을 수 있도록 수정하기
  • API 와 각종 모듈을 이용한 실시간 정보 바탕의 챗봇 구현하기
  • GUI interface gradio 소개
  • AI 계의 Github, Hugging Face 에 프로덕트 배포하기

이번 토이프로젝트를 진행하면서 간단하게 공부한 내용들이기에 많이 부족할 수 있다. 하지만 나처럼 이번에 처음 GPT API 를 사용하는 사람들이 이 글을 보고 기본적인 사용법을 익혔으면 좋겠다.

profile
클린코드를 향해

0개의 댓글