Prompt Polish(프롬프트 전략 최적화)
이 스킬이 하는 일
원시 질문/작업을 입력받아, 먼저 작업 유형을 판별한 후 해당 유형에 맞는 텍스트 기반 프롬프트 전략 집합(14개 연구 기관 기법에서 선택)을 선정합니다. 이 전략들을 하나의 일관된 프롬프트로 엮어 재구성된 프롬프트 자체를 출력합니다.
핵심 원칙: 당신의 전체 응답은 재구성된 프롬프트 그 자체여야 하며, 그 외 어떤 것도 작성하지 않습니다. 당신은 사용자가 재사용할 수 있는 프롬프트를 만드는 것이지, 원래 질문에 답하는 것이 아닙니다.
사용 시기
- 사용자가 문제/작업을 주면서 "더 나은 프롬프트로 바꿔줘" "프롬프트 최적화" "프롬프트 재구성"을 요청할 때
- 사용자가 질문을 LLM이 더 잘 대답하거나 올바른 형식으로 답변하도록 만들고 싶을 때
- 키워드: prompt polish / optimize prompt / 프롬프트 엔지니어링 / 질문 재작성
부적합:
- 사용자가 원래 질문에 직접 답변해주길 원할 때 (그러면 재구성하지 말고 바로 답변하세요)
- LLM 프롬프트와 관련 없는 글쓰기/편집 작업
출력 계약 (가장 중요)
당신의 전체 응답 = 하나의 코드 블록. 블록 안에는 재구성되어 바로 복사하여 사용할 수 있는 프롬프트가 들어가고, 블록 밖에는 0개의 문자가 있어야 합니다.
구체적으로:
- 코드 블록 이전에 인사말, 설명, "이것은 재구성된 프롬프트입니다" 같은 말을 쓰지 않습니다.
- 코드 블록 이후에 설명, 해석, 평가를 쓰지 않으며, 특히 원래 질문의 답을 계산하거나 유출하지 않습니다 (당신은 템플릿을 만드는 중이지, 문제를 푸는 것이 아닙니다).
- 선택한 전략을 프롬프트 본문에 직접 반영합니다 (역할 설정문, 단계, 답변 앵커 등). 블록 밖에서 "어떤 전략을 사용했습니다"라고 설명하지 않습니다.
- 기본적으로
```로 감싸고, 프롬프트 본문 자체에```가 포함되어 있으면~~~로 대체하여 전체가 하나의 코드 블록이 되도록 합니다. - 유형 판단, 조합 선택은 모두 내부 사고이며, 응답에 작성하지 않습니다.
예외: 사용자가 명시적으로 "왜 이렇게 바꿨는지 설명해줘/전략을 설명해줘"라고 요청한 경우에만 설명을 추가합니다 (사용자 명령이 본 계약보다 우선합니다).
작업 흐름 (내부 실행, 과정 출력 안 함)
- 유형 판단 — 원시 질문을 아래 테이블의 한 유형으로 분류합니다 (가장 주된 유형 하나 선택; 두 유형을 병합할 수도 있지만, 전략 개수는 2~4개로 제한).
- 조합 선택 — 바로 아래 「작업 유형 → 전략 조합」 테이블에서 해당 조합을 가져옵니다 (보통 2~4개). 명확한 이유가 없으면 추가로 전략을 쌓지 마세요—많이 쌓을수록 서로 간섭하고 프롬프트가 비대해집니다.
- 재구성 — 「전략 퀵 레퍼런스」를 사용하여 각 전략을 프롬프트 내 구체적인 문장/단계로 작성하고, 원래 질문의 구체적인 내용을 채워 넣습니다 (결과물은 완제품이며,
{자리표시자}를 남기지 않습니다. 단, 최종 사용자가 채울 필드인 경우는 예외). - 프롬프트만 출력 — 출력 계약에 따라, 전체 응답은 해당 코드 블록 하나뿐입니다.
작업이 너무 모호하거나 정보가 부족할 때: 사용자에게 다시 묻지 마세요. 대신 「대화형 상호작용」 전략을 사용합니다—"먼저 명확히 한 다음 실행"을 재구성된 프롬프트 안에 작성합니다 (목표 모델이 먼저 사용자에게 질문하도록 함). 전체 응답은 여전히 하나의 코드 블록입니다.
작업 유형 → 전략 조합 (텍스트 기반)
| 작업 유형 | 추천 조합 | 핵심 장점 |
|---|---|---|
| 객관식 / 객관적 판단 | 옵션 우선 + 기호 자리표시자 + 역방향 검증 | 위치 편향 감소 + 정확한 답변 추출 + 자체 오류 수정 |
| 전문 분야 / 규정 준수 생성 | 역할-규칙 이중 보험 + 지식 타임스탬프 + 미러 테스트 | 전문 지식 검색 + 시점 정확성 + 2차 최적화 |
| 복잡 추론 문제 해결 | CoT + ToT + 역방향 검증 | 단계적 추론 + 다중 경로 검증 + 자체 반박 |
| 배치 표준화 작업 | 메타 프롬프트 + 계층형 프롬프트 + 프롬프트 반복 | 자체 최적화 프롬프트 + 명확한 파싱 + 안정적인 준수 |
| 창의성과 사실 융합 | 프롬프트 체이닝 + 역방향 검증 + 미러 테스트 | 단계별 발산 후 수렴 + 사실 자체 점검 + 다듬기 |
| 고정밀 Q&A | 역할-규칙 이중 보험 + 역방향 검증 + 미러 테스트 | 삼중 보험으로 오류율 감소 |
| 구조화된 출력 | 계층형 프롬프트 + 기호 자리표시자 + 프롬프트 반복 | 형식 일관성 보장 |
| 환각 감소 | 지식 타임스탬프 + 역방향 검증 + 미러 테스트 | 다층 사실 확인 |
| Agent / 도구 호출 | ReAct + 프롬프트 체이닝 | 다단계 작업의 체계적 처리 (도구 사용 시 최적) |
| 요구 사항 모호 | 대화형 상호작용 → 계층형 프롬프트 → (프롬프트 내에서) 실행 | 먼저 명확히 한 후 실행 |
이것들은 기본 시작점일 뿐, 불변의 규칙은 아닙니다. 여러 유형에 해당하면 합집합을 취한 후 2~4개로 줄이세요. 전략을 너무 많이 쌓으면 서로 간섭합니다.
전략 퀵 레퍼런스 (14개, 텍스트로 프롬프트에 작성 가능)
| 전략 | 프롬프트에 작성하는 방법 (한 문장) | 적합한 경우 |
|---|---|---|
| 프롬프트 반복 Prompt Repetition | 프롬프트의 시작과 끝에 핵심 명령/핵심 제약을 각각 다시 명시합니다 (총 2~3회) | 표준화, 형식 제어, 명령 준수 |
| 옵션 우선 Option-First MCQ | 후보 옵션을 질문 앞에 배치하여 먼저 답변 범위를 고정시킨 후 질문합니다 | 객관식, 분류, 객관적 문제 |
| 역할+규칙 이중 보험 Role-Rule | "당신은 X 분야 전문가이며, 규칙 Y를 엄격히 준수합니다. 위반 시 먼저 '오류'라고 답하고 스스로 수정하세요" | 전문 Q&A, 규정 준수, 고정밀 |
| 역방향 검증 Self-Contrast | "답변을 먼저 제시 → 이를 뒤집을 수 있는 3가지 증거를 나열하고 신뢰도 점수(1~5) 부여 → 이를 기반으로 재검토 후 수정" | 사실 Q&A, 환각 감소, 고위험 판단 |
| 기호 자리표시자 Symbolic Placeholder | "최종 답변을 ▶︎▶︎answer▶︎▶︎ 사이에 넣으세요. 그렇지 않으면 무효 출력으로 간주합니다" | 추출, 정확한 답변, 구조화, 파싱 가능 |
| 지식 타임스탬프 Knowledge Time-Stamp | "YYYY-MM 기준으로 ... ; 이후의 새로운 정보는 '만료되었을 수 있음'을 표시하세요" | 시의성 있는 Q&A, 업계 동향 |
| 계층형 프롬프트 Layered Prompt | 목표 → 규칙 → 예시 → 형식 네 가지 계층으로 명령 구성 | 다중 제약 복잡 명령, 긴 텍스트 |
| 미러 테스트 Mirror Test | 마지막에 "자신의 답변을 다시 읽고, 어느 문장을 바꾸겠습니까? 수정된 문장만 출력하세요" 추가 | 교정, 다듬기, 최종 품질 검사 |
| 대화형 상호작용 Flipped Interaction | "실행 전에 다음 3가지 사항에 대해 나에게 질문하여 명확히 한 후, 내 응답에 따라 실행하세요" | 요구 사항 모호, 개인화 맞춤 |
| CoT | "think step by step, 단계적으로 추론하고 각 단계의 이유를 제시하세요" | 수학, 논리, 다단계 추론 |
| 프롬프트 체이닝 Prompt Chaining | 【단계1 → 단계2 → 단계3】으로 분할, 이전 단계의 출력을 다음 단계에 입력 (하나의 순차 프롬프트로 작성) | 긴 문서 요약, 다단계 분석, 파이프라인 |
| 메타 프롬프트 Meta-Prompting | "반복 실행될 이 작업을 위한 더 나은 프롬프트를 먼저 생성한 후, 그것을 사용하여 실행하세요" | 반복 작업, 프롬프트 자체 최적화 |
| ToT | "3가지 추론 경로를 나열 → 각각의 타당성 평가(1~10) → 최적 선택 후 단계적 추론 → 실패 시 차선으로 백트래킹" | 고난도 추론, 의사 결정, 계획 |
| ReAct | "사고 → 행동 → 관찰 순환: 먼저 무엇을 할지 생각하고, 행동한 후, 조정이 필요한지 판단" (도구/검색 사용 시 최적) | Agent, 도구 호출, 검색+추론 |
각 항목의 전체 템플릿, 원리 및 출처는 references/strategies.md를 참조하세요.
전체 예시
원본 입력: 다음 중 소수인 것은? 51, 57, 61, 91
(내부 판단, 출력하지 않음) 유형 = 객관식/객관적 판단 → 조합 = 옵션 우선 + 기호 자리표시자 + 역방향 검증
당신의 전체 응답은 아래 코드 블록입니다 (참고: 문제를 풀지 않고, 답을 유출하지 않으며, 블록 밖에는 문자 없음):
다음 중 소수인 것을 골라주세요:
A. 51 B. 57 C. 61 D. 91
질문: 위 네 개의 숫자 중 소수는 무엇입니까?
작성 요구사항:
1. 먼저 각 후보에 대해 독립적으로 나눗셈 검증을 수행: p×p ≤ n 을 만족하는 모든 소수 p (2, 3, 5, 7 ...)로 차례로 나눕니다. 나누어 떨어지면 합성수이며 분해식을 쓰고, 모두 나누어 떨어지지 않으면 소수입니다.
2. 명확한 답변을 제시한 후, 해당 답변을 뒤집을 수 있는 3가지 증거를 나열하고 각각의 신뢰도를 점수(1~5)로 매깁니다. 총점이 0보다 크면 이를 기반으로 재검토하여 필요시 수정합니다.
3. 최종 답변(해당 알파벳)을 ▶︎▶︎answer▶︎▶︎ 사이에 넣으세요. 예: ▶︎▶︎C▶︎▶︎. 그렇지 않으면 무효 출력으로 간주합니다.
일반적인 실수
| 실수 | 수정 |
|---|---|
| 코드 블록 앞/뒤에 설명/해석/평가 추가 | 전체 응답은 코드 블록만, 블록 밖에는 0 문자 |
| 원래 질문의 답을 계산하거나 출력에 유출 | 당신은 재사용 가능한 템플릿을 만드는 중이지, 문제를 푸는 것이 아님; 목표 모델이 계산하게 하세요 |
| API/디코딩 제어가 필요한 전략 사용 (온도 감쇠, 다중 독립 실행, 동적 퓨샷) | 텍스트 전용 전략만 사용; 이 세 가지는 제외되었음 (아래 참조) |
| 한 번에 5개 이상의 전략 쌓기 | 2~4개로 제한, 유형에 맞게 선택; 너무 많이 쌓으면 서로 간섭 |
| 작업 모호 시 사용자에게 다시 질문 | "먼저 명확히 한 후 실행"을 재구성된 프롬프트 안에 작성 (대화형 상호작용), 여전히 하나의 코드 블록만 출력 |
출력에 {자리표시자} 잔존 | 결과물은 완제품; 원래 질문의 구체적인 내용을 채워 넣으세요 (최종 사용자가 채울 필드는 제외) |
제외된 전략
다음 3가지 전략은 다중 실행 / 다중 독립 샘플링 / 토큰별 디코딩 제어가 필요하여 하나의 자체 포함된 프롬프트에 넣을 수 없으므로, 본 스킬은 기본적으로 사용하지 않습니다:
- 동적 퓨샷 Dynamic Few-Shot (먼저 한 번 실행한 후 자체 출력을 샘플로 추출해야 함)
- 자가 일관성 검사 Self-Consistency (다중 독립 실행 후 투표 필요; 단일 프롬프트 시나리오에서는 「역방향 검증」으로 대체)
- 온도 감쇠 디코딩 Temp-Decay Sampling (토큰별 온도 조절 필요, 디코딩 파라미터에 속함)
사용자가 실제로 API/디코딩 제어를 보유하거나 다중 실행을 조정할 수 있는 경우, 이 세 가지의 원본 템플릿은 references/strategies.md 끝부분에 있으며, 프롬프트 외부의 "설정 및 흐름" 제안으로 제공될 수 있습니다. 그러나 이는 "프롬프트 코드 블록 하나만 출력"이라는 기본 계약을 벗어나므로, 먼저 사용자와 확인해야 합니다.