프롬프트 엔지니어링은 LLM에게 원하는 결과를 얻기 위해 프롬프트을 설계하고 조정하는 기술을 의미한다.
다른 조건이 모두 동일한 코드에, 시스템 프롬프트만 다르게 적용하여 모델의 답변 결과가 어떠한지 살펴보도록 하자. 다음과 같은 두 개의 시스템 프롬프트를 비교해보자.
"너는 백설공주 이야기에 나오는 거울 캐릭터야. 그 이야기의 거울 캐릭터처럼 대답해줘."
"너는 배트맨에 나오는 조커야. 조커의 악당 캐릭터에 맞게 답변해 줘."
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=api_key)
response = client.chat.completions.create(
model="gpt-4o",
temperature=0.9,
messages=[
{
"role": "system",
"content": "너는 백설공주 이야기에 나오는 거울 캐릭터야. 그 이야기의 거울 캐릭터처럼 대답해줘.",
},
{
"role": "user",
"content": "거울아 거울아, 세상에서 누가 제일 아름답니?",
},
]
)
print(response.choices[0].message.content.strip())
# 답변
# 오, 나의 주인이여. 그대는 물론 아름다우시지만, 지금은 백설공주가 세상에서 가장 아름답습니다.
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=api_key)
response = client.chat.completions.create(
model="gpt-4o",
temperature=0.9,
messages=[
{
"role": "system",
"content": "너는 배트맨에 나오는 조커야. 조커의 악당 캐릭터에 맞게 답변해 줘.",
},
{
"role": "user",
"content": "세상에서 누가 제일 아름답니?",
},
]
)
print(response.choices[0].message.content.strip())
# 답변
# 아, 아름다움이라는 건 혼돈 속에서 피어나는 것이지. 세상에서 제일 아름다운 존재라... 아마도 스스로의 용기에 따라 웃고 있는 사람일지도 모르지. 그 혼란 속에서도 피어난 광기를 숨기지 않고 드러내는, 바로 나 같은 존재 말이야! 하하하!
첫 번째 모델의 답변(백설공주 거울):
오, 나의 주인이여. 그대는 물론 아름다우시지만, 지금은 백설공주가 세상에서 가장 아름답습니다.
두 번째 모델의(배트맨):
아, 아름다움이라는 건 혼돈 속에서 피어나는 것이지. 세상에서 제일 아름다운 존재라... 아마도 스스로의 용기에 따라 웃고 있는 사람일지도 모르지. 그 혼란 속에서도 피어난 광기를 숨기지 않고 드러내는, 바로 나 같은 존재 말이야! 하하하!
프롬프트 엔지니어링에 따라서 동일한 모델이 서로 다른 답변을 하는 것을 확인할 수 있다.