GPT 프롬프트 엔지니어링 실습 1

유정민·2024년 10월 15일

GPT Prompt Engineering

목록 보기
2/5

1. 비속어 검사기 실습

저번에 배운 내용을 토대로 비속어 검사기를 만들어 보겠습니다.

from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI()

load_dotenv()를 통해.env 파일에서 API 키를 로드하고 OpenAI 클라이언트를 생성합니다.

sentence = '오늘 하루 열라 짜증난다.'

# f-string으로 처리
content = f"""
다음은 사용자가 작성한 문장입니다.
비속어를 제거하고 다시 작성해주세요.
비속어가 없을 경우 문장을 유지해주세요.

# 문장
{sentence}
"""

사용자가 작성한 문장과 비속어를 제거하라는 지시사항을 담고 있는 문자열을 생성합니다.

completion = client.chat.completions.create(
    model="chatgpt-4o-latest",
    messages=[
        {
            'role': 'system',
            'content': '당신은 비속어 검사기입니다'
        },
        {
            'role': 'user',
            'content': content
        }
    ],
    temperature=0
)

client 객체를 통해 결과를 확인해보겠습니다.

print(completion.choices[0].message.content)

오늘 하루 정말 짜증난다.

비속어가 잘 제거되었습니다.

1.1 Template 사용하기

다음으로는 Template를 사용하여 비속어 검사기를 만들어 보겠습니다.

from string import Template

우선 Template 클래스를 가져와 문자열에 변수를 삽입할 수 있게 해줍니다.

content = Template(
    """
다음은 사용자가 작성한 문장입니다.
비속어를 제거하고 다시 작성해주세요.
비속어가 없을 경우 문장을 유지해주세요.

# 문장
$sentence
"""
)

sentence = '오늘 하루 열라 짜증난다.'

다음 과정은 1번 과정과 거의 동일합니다.

completion = client.chat.completions.create(
    model="chatgpt-4o-latest",
    messages=[
        {
            'role': 'system',
            'content': '당신은 비속어 검사기입니다'
        },
        {
            'role': 'user',
            'content': content.substitute(sentence=sentence)
        }
    ],
    temperature=0
)

1번 과정과는 달리 substitute메서드를 사용하여 content 템플릿에서 ${sentence}sentence 변수의 값으로 대체하여 최종 문자열을 생성합니다.

print(completion.choices[0].message.content)

오늘 하루 정말 짜증난다.

역시 비속어가 잘 제거되었습니다.

1.2 함수화하여 재사용하기

이번에는 재사용하기 쉽게 위 과정을 함수화해서 사용해보겠습니다.

def profanity_checker(title: str, temperature=0, model="gpt-3.5-turbo"):
    content = Template(
        """
다음은 사용자가 작성한 문장입니다.
비속어를 제거하고 다시 작성해주세요.
비속어가 없을 경우 문장을 유지해주세요.

# 문장
$sentence
    """
    )


    completion = client.chat.completions.create(
        model=model,
        messages=[
            {
                'role': 'system',
                'content': '당신은 비속어 검사기입니다'
            },
            {
                'role': 'user',
                'content': content.substitute(sentence=sentence)
            }
        ],
        temperature=temperature
    )

    return completion.choices[0].message.content

함수 profanity checker는 입력인자로 title, temperature, model을 받습니다.

-title: 검사할 문장 (str / 문자열)
-temperature: 응답의 창의성을 조절하는 파라미터 (기본값 0)
-model: 사용할 모델 (기본값 "gpt-3.5-turbo")

이제 sentencesprofanity_checker()함수에 집어넣어서 결과를 확인해보겠습니다.

sentences = [
    "이거 완전 바보아니야?",
    "머신러닝 열라 어렵네",
    "오늘 동대문에서 만나요"
]

result = []

for sentence in sentences:
    result.append(profanity_checker(sentence))

print(result)

['이거 완전 어리석은 생각 아니야?', '머신러닝 정말 어렵네', '오늘 동대문에서 만나요']

비속어가 있는 문장은 비속어를 표준어로 바꿔주고, 비속어가 없는 문장은 그대로 출력 됐습니다.

profile
초보 개발자 공부 기록

0개의 댓글