2025.8.14: 프롬프트 엔지니어링

jiyongg·2025년 8월 14일

TIL: Today I Learned

목록 보기
22/30

오늘은 해커톤 프로젝트 개발에 집중하느라 정말 짧게 공부했다. 프로젝트가 생각보다 진도가 나가지 않아서, 하루를 프로젝트에 온전히 투자했다. 오늘은 프롬프트 엔지니어링에 대해 알아봤는데, 일단 옵시디언에 정리한 내용을 그대로 복붙하고 나중에 수정하겠다. 사실 개발 목적으로 알아봤지만, 실생활에서 적용하기에도 괜찮은 가이드인 것 같다는 생각이 들었다.

다음 주에는 SQLD 시험이 있고, 그 다음 주에는 대망의 해커톤 행사가 있다. 그렇다 보니 당분간 TIL은 옵시디언에 정리한 내용을 옮겨 적는 정도로만 쓰게 될 것 같다.. 공부에 3~4시간, 블로그에 글 쓰는 데에 거의 3~4시간이 걸리다보니, 그동안 온전히 개발에 투자할 시간이 많지 않았다. 나도 이왕 쓰는 거 최대한 정성껏 쓰고 싶은데, 어쩔 수 없이 당분간은 다른 것들에 좀 많은 시간을 투자하고자 한다.

요약

  • 생성형 AI = 고급 자동 완성 도구
    • 일부분을 제시하고 나머지 부분을 완성하게 하는 전략
    • 대답의 prefix 지정
  • 명확하고 구체적인 요청 사항을 제시할 것
  • 예시를 제공하지 않는 제로샷 프롬프트 < 예시를 제공하는 퓨샷 프롬프트
  • 안티패턴보다는 패턴 지시가 낫다
  • 복잡한 프롬프트는 여러 개의 단순한 프롬프트로 쪼개보기
  • 모델의 패러미터를 조정해보기
  • 같은 의미의 다른 표현으로 바꾸어 보기
  • 응답 생성에는 무작위성과 확정성이 공존

1. 프롬프트의 구성

1) 입력

  • 질문(Question), 작업(Task), 항목(Entity) 등

예시

What's a good name for a flower shop that specializes in selling bouquets of dried flowers? Create a list of 5 options with just the names.

a. 부분 입력 완성 전략

  • 생성형 언어 모델은 고급 자동 완성 도구처럼 작동함
  • 부분 컨텐츠를 제공하면, 나머지 부분은 모델이 제공된 컨텐츠를 참고해 완성

예시

<프롬프트>

Valid fields are cheeseburger, hamburger, fries, and drink.
Order: Give me a cheeseburger and fries
Output:
```
{
"cheeseburger": 1,
"fries": 1
}
```
Order: I want two burgers, a drink, and fries.
Output:

<응답>

```
{
"hamburger": 2,
"drink": 1,
"fries": 1
}
```
  • 프롬프트에서 출력 예시를 제공하였고, 모델이 이를 참고하여 응답함
  • Output:은 후술할 응답 prefix에 해당

2) 제약 조건

모델에게 해야 할 일 또는 하지 말아야 할 일을 지시하는 부분.

예시) Summarize this text in one sentence:

3) 대답 형식

응답 형식을 지정함. 표, 글머리 기호 목록, 키워드, 문장, 문단 등의 형식으로 요청

예시) All questions should be answered comprehensively with details, unless the user requests a concise response specifically.

2. 제로샷 프롬프트와 퓨샷 프롬프트

모델은 예시의 패턴과 관계를 식별해 이를 응답 생성 시 참고함

  • 제로샷 프롬프트: 예시를 제공하지 않는 프롬프트
  • 퓨샷 프롬프트: 예시를 제공하는 프롬프트
    • 모델 응답 형식 지정, 문구, 범위 지정, 패턴 등을 규제하는 데에 사용
    • 구체적이고 다양한 예시를 사용

프롬프트에는 항상 퓨샷 프롬프트를 포함하는 것이 좋음

예시

Below are some examples showing a question, explanation, and answer format:

Question: Why is the sky blue?
Explanation1: The sky appears blue because of Rayleigh scattering, which causes
shorter blue wavelengths of light to be scattered more easily than longer red
wavelengths, making the sky look blue.
Explanation2: Due to Rayleigh scattering effect.
Answer: Explanation2

Question: What is the cause of earthquakes?
Explanation1: Sudden release of energy in the Earth's crust.
Explanation2: Earthquakes happen when tectonic plates suddenly slip or break
apart, causing a release of energy that creates seismic waves that can shake the
ground and cause damage.
Answer: Explanation1

Now, Answer the following question given the example formats above:

Question: How is snow formed?
Explanation1: Snow is formed when water vapor in the air freezes into ice
crystals in the atmosphere, which can combine and grow into snowflakes as they
fall through the atmosphere and accumulate on the ground.
Explanation2: Water vapor freezes into ice crystals forming snow.
Answer:
  • 예시를 통해 모델이 더 짧은 설명을 선택하도록 함

예시의 개수

적절한 예시의 개수를 고르는 것이 필요함

예시가 너무 많음 -> 과적합 우려
예시가 너무 적음 -> 원하는 대답 나오지 않을 수 있음

예시 형식의 일관성

모든 예시에서 일관된 형식을 보장하도록 함. 특히 XML 태그, 공백, 줄바꿈, 예시 구분자에 주의

3. 지시는 긍정적으로

하면 안되는 것보단 해야 하는 것을 지시하는 것이 더 원하는 대답을 얻을 확률이 높음

부정 지시 예시 (실패한 사례)

Don't end haikus with a question:
Haiku are fun
A short and simple poem
Don't you enjoy them?
  • 질문으로 끝내지 말라고 했는데 질문으로 끝남

긍정 지시 예시

Always end haikus with an assertion:
Haiku are fun
A short and simple poem
A joy to write
  • 모두 긍정문으로 끝남

4. 컨텍스트 추가

모델이 문제를 해결하기 위해 필요한 정보를 컨텍스트로 프롬프트에 포함

<예시>

Answer the question using the text below. Respond with only the text provided.
Question: What should I do to fix my disconnected wifi? The light on my Google Wifi router is yellow and blinking slowly.

Text:
Color: Slowly pulsing yellow
What it means: There is a network error.
What to do:
Check that the Ethernet cable is connected to both your router and your modem and both devices are turned on. You might need to unplug and plug in each device again.

Color: Fast blinking yellow
What it means: You are holding down the reset button and are factory resetting this device.
What to do:
If you keep holding down the reset button, after about 12 seconds, the light will turn solid yellow. Once it is solid yellow, let go of the factory reset button.

Color: Solid yellow
What it means: Router is factory resetting.
What to do:
This can take up to 10 minutes. When it's done, the device will reset itself and start pulsing white, letting you know it's ready for setup.

Color: Solid red
What it means: Something is wrong.
What to do:
Critical failure. Factory reset the router. If the light stays red, contact Wifi customer support.

<응답>

Check that the Ethernet cable is connected to both your router and your modem and both devices are turned on. You might need to unplug and plug in each device again.
  • Slowly pulsing yellow에 해당하는 부분의 What to do를 대답하는 것을 볼 수 있음

5. Prefix

Prefix는 프롬프트 컨텐츠에 추가하는 단어 또는 구문으로 붙이는 위치에 따라 3가지 용도로 사용

  • 입력 prefix: 의미론적으로 의미 있는 부분에 입력 prefix를 추가.
    • 예시: 영어, 프랑스어 (두 언어의 구분)
  • 출력 prefix: 원하는 응답에 대한 정보를 모델에 제공
    • 예시: JSON: (출력이 JSON 형식이어야 함)
  • 예시 prefix: 퓨샷 프롬프트에서 예시에 prefix를 붙여서, 모델이 예시를 더 쉽게 파싱할 수 있음

예시

Classify the text as one of the following categories.
- large
- small
Text: Rhino
The answer is: large
Text: Mouse
The answer is: small
Text: Snail
The answer is: small
Text: Elephant
The answer is:
  • 입력 prefix: Text:
  • 출력 prefix: The answer is:

6. 프롬프트 세분화

복잡한 프롬프트를 더 간단한 프롬프트 여러 개로 나누기

  • 세분화: 하나의 프롬프트에 여러 요청 사항을 포함하는 대신, 요청 사항 당 하나의 프롬프트를 만들기
  • 연결: 순차적 단계로 이루어지는 작업의 경우 각 단계를 프롬프트로 만들고, 프롬프트를 순서대로 연결
    • 이때, 한 프롬프트의 출력이 다음 단계 프롬프트의 입력이 되며, 마지막 프롬프트의 출력이 최종 출력
  • 응답 aggregate: 서로 다른 병렬적인 작업을 수행하고 이 결과를 aggregate하여 최종 출력을 생성

7. 패러미터 조정

  • 최대 출력 토큰: 대답에서 생성될 수 있는 최대 토큰 수를 지정하며, 토큰 1개는 영문 기준 약 4자에 해당
  • 온도 (temperature): 토큰 선택의 무작위성을 제어함
    • 높을수록 창의적인 답변, 낮을수록 확정적인 답변
  • topK: 가장 확률이 높은 토큰 k개 중 다음 토큰들을 선택함
  • topP: 확률의 합이 topP와 같아질 때까지 토큰들을 선택함
  • stop_sequence: 컨텐츠 생성을 중지하도록 지시하는 중지 시퀀스를 설정
    • 중지 시퀀스는 아무 문자의 시퀀스가 될 수 있음
    • 생성된 컨텐츠에 나타날 수 있는 문자의 시퀀스를 사용하는 것을 피할 것

8. 프롬프트 변경

  • 다른 표현으로 변경: 문장의 의미가 동일하더라도 단어와 문구에 따라 다른 응답이 출력될 수 있음
  • 유사한 작업으로 전환: 동일한 결과를 얻는 유사한 작업을 입력
    • 예시: 문장형 질문(Which category does A belong to ~) 대신 명확한 객관식 질문(Multiple choice problem: Which of following options ~)으로 변경
  • 순서 변경: 프롬프트에서 컨텐츠 순서는 응답에 영향을 줄 수 있음

9. 생성 모델의 내부

생성 모델은 텍스트 응답을 두 단계에 걸쳐 생성

  • 1단계) 다음에 나올 가능성이 있는 토큰에 대한 확률 분포를 생성
    • 이 단계는 무작위성이 없음. 동일한 프롬프트가 입력되면 동일한 분포가 생성됨
  • 2단계) 이러한 분포를 여러 디코딩 전략 중 하나를 통해 텍스트 응답으로 변환
    • 단순한 디코딩 전략은 매 차례에 가장 가능성이 높은 토큰을 선택하는 것으로, 무작위성이 없음
    • 하지만 무작위 샘플링을 통해 대답을 생성할 수도 있는데, 이는 무작위성이 있음
      • 온도가 이 무작위성을 제어

참고할 만한 것들

profile
그냥 쓰고 싶은 것 쓰는 개발(?) 블로그

0개의 댓글