[day-20] Chat GPT API

Joohyung Park·2024년 1월 25일
1

[모두연] 오름캠프

목록 보기
26/95
post-thumbnail

Chat GPT 프롬프트, API 활용법에 대해 적어보겠다.

라이브러리 설치

언어는 파이썬을 사용하며 openai 라이브러리를 설치해준다.
!pip install openai 명령어로 쉽게 설치 가능하다.

API 키 생성

여기서는 무료버전인 3.5버전을 사용한다.

키 획득 방법

https://platform.openai.com/api-keys 사이트 접속 -> API Keys -> Create new secret key 버튼을 눌러 원하는 이름으로 생성

코랩에서 키 설정하기

import os
os.environ["OPENAI_API_KEY"] = "your-api-key"

코드에 직접 입력하는 방법도 있지만 위의 코드처럼 환경 변수로 설정하는 것이 보안성이 높아진다고 한다.

간단한 요청 실습

코딩에서 자주 나오는 'hello world'를 찍어보는 실습이다.

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

# OpenAI API 키 설정
client = OpenAI(api_key='your-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)

본인의 api key를 넣고 response 변수의 messages, content 부분에 원하는 말을 사용하면 그에 맞는 응답을 해준다.

다음과 같은 방식으로 번역 요청도 가능하다.

import openai

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

#응답 출력
print(response.choices[0].message.content)
# Bonjour, comment ça va?

내가 설정한 영어를 프랑스어로 잘 번역해주는 모습이다.

response에 다양한 매개변수를 설정하여 조금 더 다양한 응답을 출력하게 할 수 있다.

매개변수

  • max_tokens : 생성될 텍스트의 최대 길이를 설정한다. 이는 단어나 구두점을 포함한 언어의 기본 단위
  • temperature : 생성된 텍스트의 창의성을 조절한다. 높은 값은 더 창의적이고 예측하기 어려운 텍스트를 생성하며, 낮은 값은 일관되고 예측 가능한 텍스트를 생성
  • top_p : 생성된 텍스트의 다양성을 조절한다. 가능한 다음 단어의 확률 분포에서 상위 몇 퍼센트를 고려할지 결정
  • frequency_penalty : 생성된 텍스트에서 단어의 반복을 줄이는 역할을 한다. 값이 높을 수록 이미 나온 단어나 구문의 반복 가능성 감소
  • presence_penalty : 새로운 정보나 주제를 도입하는 것에 대한 경향성을 조절한다. 높은 값은 새롭고 다양한 정보나 주제를 생성하는데 도움이 된다.

다음은 위의 매개변수를 활용한 예시이다.

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.7,
        top_p=0.8,
        frequency_penalty=0.2
    )
    print(response.choices[0].message.content)
Hello, the weather is nice today. The sunlight
Hello, the weather is nice today. The sunlight
Hello, today's weather is nice. The sunlight
Hello, today's weather is nice. The sunlight
Hello, the weather is nice today. The sunlight
Hello, today's weather is nice. The sunlight
Hello, today's weather is nice. The sunlight
Hello, the weather is nice today. The sunlight
Hello, today's weather is nice. The sunlight
Hello, today the weather is nice. The sunlight

10번 반복하는 와중에도 조금씩 달라지는 모습을 보인다.


챗봇 기능

내가 GPT에게 역할을 부여하고 그에 맞는 대답을 내놓아라!

이를 ask_chatbot함수로 구현하였다.

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

prompt_role = "너는 블로그 전문가, 파워블로그처럼 글을 써야해.\
                개발자의 직업관에 대한 글을 써야하고,\
                그리고 취업을 준비하는 20대 독자들에게 잘 보일수 있도록 글을 써야되\
                SEO최적화된 글을 써야되"

위의 코드는 GPT에게 블로그 글을 쓰는데 지시사항을 알려주고 있다.

프롬프트에 여러 설정을 변경할 수도 있다!

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}])

매개변수

  • facts : 글에 포함될 사실들의 목록
  • tone : 글의 톤 또는 스타일(전문적, 친근한 등)
  • length_words : 글의 단어 수
  • style : 글의 스타일(SEO 최적화, 설득력 있는 등)

챗봇 - 실습

  • 대학을 졸업한 후 개발자로서의 삶에 대해 비공식적이고 친근한 톤으로 약 100단어의 블로그 글을 작성
print(
    assist_blogger(
        facts =["Chat GPT 등장이후의 취업 전략은?"],
        tone = "정중하게",
        length_words = 200,
        style= "파워블로그 스럽게"
        )
)

주제는 취업 전략을 물어보고 있으며 정중한 톤으로, 200단어로, 파워블로그 처럼 영향력 있는 스타일로 글을 작성해달라고 요청하고 있다.

txt파일을 읽어 번역 및 요약하기

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

# 파일 경로 설정
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
# 출력 결과
(4,
 "This is a 3. It's sloppily written and rendered at an extremely low resolution of 28x28 pixels,\n\nbut your brain has no trouble recognizing it as a 3. And I want you to take a moment\n\nto appreciate how crazy it is that brains can do this so effortlessly. I mean, this,\n\nthis and this are also recognizable as 3s, even though the specific values of each pixel\n\nis very different from one image to the next. The particular light-sensitive cells in your\n\neye that are firing when you see this 3 are very ")

txt파일의 각 부분의 최대 길이를 5000자로 설정하며, 텍스트를 여러 부분으로 나누고 일부를 출력하는 코드이다.

해당 내용을 번역하기

# 첫 번째 부분만 사용
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)

앞에서 정의한 텍스트 부분 중, 첫 번째 부분에 대한 번역을 한국어로 요청하였다.

# 이 글은 숫자 3에 대한 설명과 신경망(neural network)에 대한 이해를 돕기 위한 것입니다. ~~~

해당 내용을 요약하기

# 각 부분에 대한 번역 및 요약 결과를 저장할 리스트
translated_summaries = []

# 모든 부분에 대해 번역 및 요약 요청 수행
for part in parts:
    # 실제 환경에서는 이 부분에 API 요청을 넣어야 합니다.
    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" : part}  
      ],
    )
    # 번역 및 요약 결과 저장
    translated_summary = response.choices[0].message.content
    translated_summaries.append(translated_summary)

# 모든 결과를 하나의 문자열로 결합
final_result = '\n\n'.join(translated_summaries)

# 최종 결과 출력
print(final_result)

위에서 정의했던 텍스트 첫 번째 부분을 요약해주는 코드이다.

유용한 사이트 모음

  1. AI 편집 프로그램 Vrew
  2. AI PPT 편집 프로그램 Gamma
  3. 무료 GPT

피드백

이처럼, ChatGPT API를 활용하여 사이트에서 대화를 주고받는 것처럼 내가 원하는 앱을 만들어 구현할 수 있다. 다양한 기능을 구현가능한 것을 보아, 나중에 이를 활용하여 앱을 만들어도 좋은 결과를 보여줄 것 같다. 여태까지 블로그 쓴 글들을 보면서 느낀건데, ChatGPT로 그림을 그려서 넣어도 괜찮을 것 같다고 생각하여 실천해보고자 한다.

지금까지 파이썬 기본, 데이터 분석, 인공지능 맛보기를 알려주신 진환 강사님 감사합니다!

profile
익숙해지기 위해 기록합니다

0개의 댓글