저번에 배운 내용을 토대로 비속어 검사기를 만들어 보겠습니다.
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)
오늘 하루 정말 짜증난다.
비속어가 잘 제거되었습니다.
다음으로는 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)
오늘 하루 정말 짜증난다.
역시 비속어가 잘 제거되었습니다.
이번에는 재사용하기 쉽게 위 과정을 함수화해서 사용해보겠습니다.
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")
이제 sentences를 profanity_checker()함수에 집어넣어서 결과를 확인해보겠습니다.
sentences = [
"이거 완전 바보아니야?",
"머신러닝 열라 어렵네",
"오늘 동대문에서 만나요"
]
result = []
for sentence in sentences:
result.append(profanity_checker(sentence))
print(result)
['이거 완전 어리석은 생각 아니야?', '머신러닝 정말 어렵네', '오늘 동대문에서 만나요']
비속어가 있는 문장은 비속어를 표준어로 바꿔주고, 비속어가 없는 문장은 그대로 출력 됐습니다.