본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

프롬프트 엔지니어링 Prompt Engineering: Zero-shot / One-shot / Few-shot Prompting, Role 역할, Instruction 지시, Context 맥락, Format 형식. - AI에게 원하는 결과를 얻기 위해 입력(프롬프트)을 효과적으로 작성하는 기법 -


프롬프트 엔지니어링 Prompt Engineering

프롬프트만 잘작성해도 원하는 결과를 얻을 수 있다. 

 

 

프롬프트 엔지니어링(Prompt Engineering) AI에게 원하는 결과를 얻기 위해 입력(프롬프트)을 효과적으로 작성하는 기법

생성형 AI는 같은 모델이라도 프롬프트를 어떻게 작성하느냐에 따라 결과의 품질이 크게 달라집니다. 그래서 모델을 다시 학습시키지 않고도 프롬프트만 잘 설계하여 원하는 답변을 얻는 것을 프롬프트 엔지니어링이라고한다.

번역해. -> 다음 한국어 문장을 자연스러운 영어로 번역하세요.

 

Zero-shot Prompting: 예시를 하나도 주지 않고 바로 작업을 지시하는 방법

이 영화는 정말 재미있었다., 이 문장의 감정을 분석하세요.

 

 

 

One-shot Prompting

예시를 1개 보여준 후 새로운 문제를 주는 방법

오늘은 행복하다.

출력:

긍정

-----------------

입력:

오늘은 너무 우울하다.

출력:

 

 

Few-shot Prompting

예시를 여러 개 제공한 후 새로운 문제를 주는 방법

예시1

입력:

오늘은 행복하다.

출력:

긍정

----------------

예시2

입력:

정말 짜증난다.

출력:

부정

----------------

예시3

입력:

기분이 최고다.

출력:

긍정

----------------

입력:

너무 슬프다.

출력:

 

 

 

 

 

AI는 예시를 여러개 볼수록 패턴을 더 잘 이해한다.

Zero-shot 0개 설명만으로 작업 수행 가장 간단하고 빠름 복잡한 작업에서는 결과가 불안정할 수 있음
One-shot 1개 예시 1개를 보고 같은 방식으로 수행 원하는 형식이나 스타일을 알려주기 쉬움 예시가 하나뿐이라 패턴 전달이 제한적일 수 있음
Few-shot 2개 이상 여러 예시를 보고 패턴을 학습하여 수행 형식, 문체, 규칙을 가장 잘 따르는 경향이 있음 프롬프트가 길어지고 토큰을 더 많이 사용함

 

 

 

 

 

Role 역할, Instruction 지시, Context 맥락, Format 형식.

위 4개를 채울수록 결과가 안정된다. 역할지시 맥락은 system_instruction에 데이터는 contents에 넣는다. 맥락에 모르면 모른다는 안정장치를 넣으면 환각이 줄어든다. 

shot 예시는 너무 적으면 모델이 기준을 못잡고 너무 많으면 토큰 비용이 늘고 효과는 점점 줄어든다.

 

 

json으로만 답하라고프롬프트로 명령할 수도 있고 response_mime_type으로 강제할 수 있다 .후자가 더 안전하다. 

response = client.responses.create(
    model="gpt-5",
    input="""
다음 정보를 JSON으로만 출력하세요.

이름: 홍길동
나이: 25

설명은 하지 마세요.
"""
)

print(response.output_text)
response = client.responses.create(
    model="gpt-5",
    input="홍길동(25세)을 JSON으로 변환해.",
    response_format={
        "type": "json_object"
    }
)

print(response.output_text)

 

 

 

response_schema에 pydantic 모델이나 스키마를 주면 json의 키이름과 타입까지 강제할 수 있다.  즉 name은 문자열, age는 정수 라는 것까지 모델이 지키도록 한다. 

response = model.generate_content(
    "홍길동은 25살이다.",
    generation_config={
        "response_mime_type": "application/json",
        "response_schema": Person
    }
)

 

 

 

 

비교 프롬프트 <<< >>> 구분자 방어전과 방어후 데이터를 명확하게 분리해서 LLM이 각각을 비교하도록 하는 역할

LLM은 <<< >>> 안의 내용을 하나의 덩어리로 인식하고 앞을 블록과 뒤 블록을 비교한다. 

prompt = f"""
다음 두 결과를 비교하세요.

방어 전
<<<
{before}
>>>

방어 후
<<<
{after}
>>>

변경된 점을 설명하세요.
"""