오늘 강의는 ChatGPT 활용에 대한 강의였습니다.
머신러닝, 딥러닝 하면서 겨우겨우 집중력을 유지하면서 겨우겨우 강의를 따라가는 느낌이었는데
오늘은 약간 코드를 안 치면서 실습을 하다보니 오히려 집중력이 떨어지는? 상황이 오더라고요.


ChatGPT에 계속 질문을 하다보니 강의는 진행되는데 혼자 ChatGPT와 놀고 있는 상황잌ㅋㅋ
재밌는 기사들과 신기한 서비스 들을 계속 소개시켜 주시니 그냥 막 놀았던거 같습니다.ㅎ
소개 받은 괜찮은 사이트도 정리해 보고, 마지막에 했던 ChatGPT API 사용하는 것도
정리해보겠습니다.

 

서비스중인 사이트

뤼튼
누구나 쉽게 생성AI를 사용할 수 있게 만든 사이트 입니다.
가입도 쉽고, ChatGPT 사용도 무료로 가능합니다. 실제 써보니 이미지 생성 같은 부분은
좀 부족하긴 한데 그외 텍스트 질문 등은 충분히 쓸만했습니다.
한글서비스라서 사용하기 편리하게 느껴졌습니다.

 

VREW
AI 기술이 활용된 편집 프로그램입니다. 음석분석, AI목소리, 번역 자막 기능까지 가능한데
숏폼 영상까지 만들어 줍니다. 영상편집도 간단해서 쉬워보였습니다.
음성과 조금 상관없는 영상이나 AI음성의 높낮이가 안 맞는 것들이 있습니다.
뭔가 미묘하게 퀄리티가 떨어져 보이는 느낌은 아직 있습니다.

 

Gamma
ppt와 같은 다양한 문서들을 만들어내는 사이트입니다. 질문 몇번으로 괜찮은 문서가 통일성 있게
나오고, 약간의 수정만 거치면 바로 발표할 때 사용해도 되겠더군요.
내가 대학 다닐때 나왔다면 ppt 만든다고 그 많은 시간들을 허비하지 않았을 텐데요.
참 좋은 시대다. 라는 생각을 했습니다.

 

 

open ai 기초

먼저 OpenAI 사이트에 접속합니다. 로그인을 해야 하고요.

위의 그림과 같이 1번, 2번 순서대로 해서 키를 생성해야 합니다.
이 키는 처음에 한번만 카피할 수 있으니 꼭 카피를 해둬야 합니다.^^
강의 중간에 키를 만들어서 강의중에 사용하려고 했는데 바로 사용이 안됐습니다.
시간이 좀 필요한 것 같습니다. 30분 정도 지나면 된다고 했는데 더 많은 시간이 필요하더라고요.
그리고 안전하게 보관해야 겠지요? 다른 사람과 공유하지 않는게 중요할 것 같습니다.

 

!pip install openai

API키를 생성하고, 구글 코랩에서 간단하게 실습을 했습니다.
위의 코드를 실행시켜서 필요한 패키지들을 설치합니다.

 

from openai import OpenAI  # OpenAI 모듈 불러오기

# OpenAI API 키 설정
client = OpenAI(api_key='키값키값')  # 사용자의 API 키로 대체해야 함

# ChatGPT를 사용한 텍스트 생성 요청
response = client.chat.completions.create(
    model = "gpt-3.5-turbo",
    messages = [{"role" : "user", "content" : "Hello World!"}]
)
# API 응답에서 마지막 메시지의 내용을 출력
print(response.choices[0].message.content)

위에 키값키값 이라고 적혀 있는 부분에 OpenAI 사이트에서 생성한 API 키값을 넣어줘야 합니다.

 

import openai

# ChatGPT를 사용한 텍스트 생성 요청
response = client.chat.completions.create(
    model = "gpt-3.5-turbo",
    messages = [{"role" : "user", "content" : "Translate the following English text to korean: 'Hello, how are you?'"}]
)

#응답 출력
print(response.choices[0].message.content)

model 은 gpt-3.5-turbo 로 지정했고, messages 는 대화의 맥락을 나타내는 메시지 목록입니다.


role 은 메시지의 발신자를 나타내고, user 는 사용자의 메시지를 나타냅니다. system 또는 assistant 는
챗봇 또는 시스템의 메시지를 나타냅니다.
content 는 메시지의 실제 내용입니다. 질문, 명령, 정보, 응답 등이 될 수 있습니다.


다음과 같은 코드를 실행하면 Hello, how are you? 라는 글을 출력하는데 korean 으로 출력을 해달라고 했으니
안녕하세요, 어떻게 지내세요? 라는 출력 결과가 나왔습니다. 저 부분을 프랑스로 바꾸면 프랑스어로 나오더군요.

 

for i in range(10):
    response = client.chat.completions.create(
        model = "gpt-3.5-turbo",
        messages = [{"role" : "user", "content" : "Translate the following korean text to English: 안녕하세요 오늘 날씨가 좋네요. 햇살이 맑아요"}],
        max_tokens=10,
        temperature=0.9,
        top_p=0.8,
        frequency_penalty=0.2
    )
    print(response.choices[0].message.content)

바로 위의 코드에는 여러가지 매개변수가 있습니다.

 

  1. max_tokens (최대 토큰 수)은 생성될 텍스트의 최대 길이를 토큰 수로 지정합니다.
    토큰은 단어나 구두점 등을 포함한 언어의 기본 단위 입니다.
  2. temperature (창의성 조절)은 생성된 텍스트의 창의성을 조절합니다.
    인터스텔라 영화에서 주인공이 농담의 정도를 세팅하는 장면이 있었는데
    이 매개변수를 보니 그 장면이 떠오르더군요.^^
  3. top_p (텍스트 다양성 조절)은 생성된 텍스트의 다양성을 조절한다고 합니다.
    이 매개변수는 가능한 다음 단어의 확률 분포에서 상위 몇 퍼센트를 고려할지 결정한다고
    하는데 좀 써봐야 알 것 같은 매개변수 입니다.
  4. frequency_penalty (단어 반복 감소)는 생성된 텍스트에서 단어의 반복을 줄이는 역할을 합니다.
    이 값이 높을수록 이미 나온 단어나 구문의 반복 가능성이 줄어듭니다.
  5. presence_penalty (새로운 정보 증가)는 새로운 정보나 주제를 도입하는 것에 대한 경향성을 조절합니다.
    높은 값은 새롭고 다양한 정보나 주제를 생성하는 데 도움이 됩니다.

 

옵션이 다양합니다. AI 세계에 들어온 기분이 드네요.

위의 코드는 안녕하세요 오늘 날씨가 좋네요. 햇살이 맑아요 라는 문장을 영어로 바꿔서 10번 출력합니다.
같은 문장이 계속 나올 것 같지만
'Hello, the weather is nice today. The sunlight'
'Hello, today's weather is good. The sunlight'
'Hello, the weather is nice today. The sunshine'
'Hello, today's weather is nice. The sunlight'


반복되는 문장도 있지만 이렇게 다양하게 나옵니다.
위의 매개변수값을 조정한다면 더 다양하게 나올 수도 있겠지요?

def ask_chatbot(messages):
    response = client.chat.completions.create(
        model = "gpt-3.5-turbo", messages = messages
    )
    return response.choices[0].message.content

ask_chatbot 함수는 위에 부분을 함수화 했습니다.
메시지 맥락을 설정하는데 rolecontent 를 포함합니다. 위의 다양한 매개변수도 넣을 수 있겠지요?

 

from typing import List
def assist_blogger(
    facts: List[str], tone: str, length_words: int, style: str
):
    facts = ", ".join(facts)
    prompt_role = "너는 블로그 전문가고, 파워블로그처럼 글을 써야해"
    prompt = f"{prompt_role} \
            FACTS: {facts} \
            TONE: {tone} \
            LEGNTH: {length_words} words \
            STYLE: {style}"
    return ask_chatbot([{"role": "user", "content": prompt}])
print(
    assist_blogger(
        ["대학 진학 이후의 개발자의 삶은?"], "informal", 100, "blogpost"
    )
)

assist_blogger 함수를 만들었습니다. 이 함수가 호출될때 user 의 메시지인 prompt_role 을 f-string 으로
prompt 에 넣습니다. 거기에 또 다른 옵션들이 있습니다.
아래 호출을 하는 assist_blogger 보면


facts: ["대학 진학 이후의 개발자의 삶은?"] - 주제입니다.
tone: "informal" - 글의 톤이 비공식적이고 친근감 있는 스타일입니다.
length_words: 100 - 글의 길이가 약 100단어로 설정되어 있습니다.
style: "blogpost" - 블로그 포스트 형식의 글을 작성합니다.

 

assist_blogger 위처럼 호출하면
" 대학 진학 이후의 개발자의 삶은? 이란 주제를 블로그 전문가이고, 파워블로그처럼 글을 써야 하고,
비공식적이고, 친근감 있게, 글의 길이가 약 100단어로 스타일은 블로그 포스트 형식으로 써줘"
이런 질문을 ChatGPT에서 한 것과 같은 응답을 받을 수 있습니다.

 

open api 기초 - 번역

# 첨부된 파일을 읽고 작은 부분으로 나누기 위한 코드입니다.

# 파일 경로 설정
file_path = '/content/[English] But what is a neural network_ _ Chapter 1, Deep learning [DownSub.com].txt'

# 파일을 읽어서 내용을 저장
with open(file_path, 'r') as file:
    transcript = file.read()

# 텍스트를 나눌 최대 길이 설정 (토큰 수가 아닌 문자 수 기준)
max_length = 5000  # 각 부분의 최대 길이 (문자 수)

# 텍스트를 작은 부분으로 나누는 함수
def split_into_parts(text, length):
    return [text[i:i+length] for i in range(0, len(text), length)]

# 텍스트를 여러 부분으로 나눔
parts = split_into_parts(transcript, max_length)

# 나누어진 부분들의 수와 첫 부분의 내용 일부를 출력
num_parts = len(parts)
first_part_preview = parts[0][:500]  # 첫 부분의 처음 500자

num_parts, first_part_preview

텍스트 파일을 읽어서 번역하는 코드입니다.
파일 경로는 일단 코랩의 일반적인 경로입니다. 거기에 파일을 올려놓았습니다.
close 가 없는 with open 을 이용해서 파일을 읽고, transcript 객체에 할당합니다.


max_length 텍스트를 나눌 최대 길이의 문자수를 5000자로 정합니다.
통채로 넣으면 토큰제한으로 오류가 날 수 있기 때문에 5000자 제한을 걸었습니다. 주의하세요.

 

split_into_parts 함수를 만듭니다.
split_into_parts 함수는 transcript(text)max_length(length) 를 매개변수로 받습니다.
그러면 for문을 처음부터 transcript(text) 끝까지 돌면서 max_length(length) 사이즈 만큼 잘라서
text 에 저장하고 리턴합니다. 리턴한 값들은 parts 에 저장됩니다.


parts 의 길이를 num_parts 에 저장하고, first_part_preview = parts[0][:500] 에서
첫 부분의 처음 500자를 first_part_preview 에 할당합니다.

# 첫 번째 부분만 사용
first_part = parts[0]

# 첫 번째 부분에 대한 번역 요청
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages = [
        {"role" : "system", "content" : "너는 유튜브를 영어에서 한국어로 번역하는 번역가이자, 요약을 잘하는 역할을 할꺼야"},
        {"role" : "user", "content" : "업로드한 파일을 한국어로 변역해줘"},    
        {"role" : "assistant", "content" : "Yes."},     
        {"role" : "user", "content" : "한국어로 번역한 내용을 요약해"},
        {"role" : "assistant", "content" : "Yes."},        
        {"role" : "user", "content" : first_part}  
      ],
)

# 번역 결과 출력
print(response.choices[0].message.content)

이 코드에서는 first_part = parts[0] 텍스트의 5000자로 나눈 첫번째 부분을 온전히 first_part 에 할당합니다.
그리고, messages 에 여러 옵션을 넣어서 만듭니다. 그러면 실제로 한국어로 번역한 결과가 출력됩니다.
이 부분을 반복문을 통해 여러번 수행하고 합치면 온전한 번역본을 만들 수 있습니다.

 

이렇게 ChatGPT를 다양한 환경에서 사용할 수 있게 됩니다.
재밌습니다.ㅎ 비용이 들기 때문에 막 사용할 수는 없겠지만 연습용으로는 만들어 볼 수 있을 것 같습니다.
여러 사람이 이용한다고 보면ㅎㅎ 상당한 금액을 결제해야 할 수도 있습니다.
많은 수강생이 안 되다보니 강사님 API키를 공유해서 사용했는데 사용량이 많아 바로 막히셨습니다.^^
이용자가 많다면 못할 것도 없겠지요.


이제 교육 받은지 한달 정도 된것 같습니다. 그동안 가르쳐주셨던 강사님은 두 달동안 못 뵙는다고 하네요.
이제 html, css 새로운 영역으로 들어가게 되서요. 프로젝트 할때쯤에 볼 수 있을 것 같다고 하셨는데
그때는 좀 더 향상된 모습으로 뵐 수 있었으면 좋겠습니다. 모두 화이팅 입니다.!!