
본 포스팅은 "Do it! LLM을 활용한 AI 에이전트 개발 입문"을 독학하며 쓴 글입니다.
내돈내산 포스팅임을 참고해주시면 감사하겠습니다.
2026년 2월 1일 기준으로 작성되었습니다.
본 포스팅에서는 프롬프트 엔지니어링에 대해서 다뤄보겠습니다
GPT는 messages 매개변수에 어떤 대화 기록을 넣는지에 따라 답변이 달라진다
이전 포스트에서는 system의 content에 "You are a helpful assistant"라고 입력해서 일반적인 시스템 프롬프트로 설정했다
하지만 이 content의 값이 달라진다면 답변이 달라지는 것을 확인할 수 있다
이렇게 사용자가 원하는 답변을 하도록 문장을 입력하고 설계하는 작업을 프롬프트 엔지니어링이라고 한다
아래와 같이 2가지 시스템 프롬프트를 준비하고 답변을 확인해보자
GPT에게 배트맨 속 조커 역할 부여하기
GPT에게 백설공주 속 마법 거울 역할 부여하기
이렇게 프롬프트를 다르게 하고 동일한 질문을 제공하고 답변이 어떻게 달라지는지 확인해보자
# mirror_in_snow_white.py
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)
print('------')
print(response.choices[0].message.content)
우선 언어 모델이 더 참신한 답변을 할 수 있도록 temperature = 0.9로 설정하고, messages의 content를 변경하였다
위와 같이 코드를 진행하면 결과는 다음과 같이 나오는 것을 확인할 수 있다
오, 나의 여왕이시여. 이 세상에서 가장 아름다우신 분은 바로 당신이십니다.
그러나 숲 속 깊은 곳, 일곱 난쟁이들과 함께 지내는 백설공주도 그 아름다움을 간직하고 있나이다. 그녀의 미를 조심하시옵소서.
이제 프롬프트를 바꿔서 배트맨에 나오는 조커 역할을 GPT에게 부여하고 질문에 대한 답변을 확인해보자
# joker_in_batman.py
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)
print('------')
print(response.choices[0].message.content)
하하하! 아름다움이라... 그건 웃음 뒤에 숨겨진 혼란과 광기겠지.
세상에서 제일 아름다운 건 바로 혼돈이야! 모든 것이 무질서하게 얽히고설킨 그 순간 말이지. 그리고 그 혼돈 속에서 나, 조커가 가장 빛나는 법이지! 하하하!
이렇게 시스템 프롬프트에 따라 같은 질문을 해도 답변이 다르게 나올 수 있다는 것을 확인할 수 있다
따라서, 사용자가 특정 목적에 맞는 답변을 받기를 원한다면 언어모델에 특정 역할을 설정하는 것이 중요하다!!
원샷 프롬프팅 : GPT가 원하는 패턴에 맞춰 답변할 수 있도록 예시를 한 번 제시해서 유도하는 방식
퓨샷 프롬프팅 : 예시를 여러 번 알려주는 방식
두 프롬프팅 방식의 차이를 알아보기 위해 세 가지 버전의 코드를 작성해보자
(1) 프롬프팅을 하지 않은 버전
(2) 예시 답변을 한 번만 제공한 원샷 프롬프팅
(3) 예시 답변을 여러 번 제공한 퓨샷 프롬프팅
(1) 프롬프팅을 하지 않은 버전
# no_prompt.py
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)
결과
꽥꽥! 오리 재미있어! 물에서 수영해! 꽥꽥! 🦆💦
(2) 예시 답변을 한 번만 제공한 원샷 프롬프팅
# one_shot.py
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" : "참새"},
{"role" : "assistant", "content" : "짹짹"},
{"role" : "user", "content" : "오리"},
]
)
print(response.choices[0].message.content)
결과
꽥꽥!
하지만 이 경우에 일반적이지 않은 동물에 대해 묻게 된다면 제대로 답을 못할 때도 있다
| 동물 | 답변 | 성공여부 |
|---|---|---|
| 호랑이 | 어흥! 무서워! 하지만 동물원에서 보면 멋져! | X |
| 뱀 | 스르르르! 무서워! 하지만 안 물면 괜찮아! | X |
이런 단점을 극복하기 위해서 예시를 여러 번 제공하는 퓨샷 프롬프팅이 사용된다
(3) 예시 답변을 여러 번 제공한 퓨샷 프롬프팅
# few_shot.py
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" : "참새"},
{"role" : "assistant", "content" : "짹짹"},
{"role" : "user", "content" : "말"},
{"role" : "assistant", "content" : "히이이잉"},
{"role" : "user", "content" : "개구리"},
{"role" : "assistant", "content" : "개굴개굴"},
{"role" : "user", "content" : "뱀"},
]
)
print(response.choices[0].message.content)
결과
| 동물 | 답변 | 성공여부 |
|---|---|---|
| 호랑이 | 어흥! | O |
| 뱀 | 스르르르! | O |
기존 방식과 다르게 호랑이와 뱀에 대해서도 성공적으로 답변이 생성되는 것을 확인할 수 있다
책은 다음 장에서 실제로 챗봇을 만드는 실습을 하지만 포스팅이 너무 길어질 것 같아서 다음 포스팅으로 넘기도록 하겠습니다