프롬프트 엔지니어링 Prompt Engineering
대규모 언어 모델(LLM)이 원하는 작업을 수행하도록 프롬프트(GEMINI.md, CALUDE.md 등)를 설계하고 개선하는 과정이다.
좋은 프롬프트는 좋은결과를 가져온다.
프롬프트 엔지니어링은 생성형 AI 결과물의 품질, 관련성 및 정확성에 직접적인 영향을 미치기 때문에 매우 중요하다.
LLM은 인간을 모방하려고 시도하지만 고품질의 관련성 높은 결과물을 생성하려면 자세한 지침이 필요하다.
잘 만들어진 프롬프트는 AI가 사용자의 의도를 이해하고 의미 있는 응답을 생성해 후처리를 회소화하는데 도움이 된다.
프롬프트 Prompt
프롬프트는 특정 작업을 수행하도록 생성형 AI에 요청하는 자연어 텍스트이다.
단순히 말 해 우리가 ChatGpt, Gemini 등 에게 질문하는 내용
ex) 이 메서드 해석해줘, 오늘 날씨 어때?
LLM 은 매우 유연하기 때문에 사용자는 수많은 입력 데이터 조합을 통해 생성형 AI 솔루션과 상호 작용할 수 있다.
하지만 이 모든 출력(결과물) 이 유용한 것은 아니다.
내가 원하는 결과를 얻기 위해 프롬프트를 체계적으로 설계하면 보다 의미 있고 유용한 결과물을 얻을 수 있다.
중요한 이유
프롬프트 엔지니어는 최종 사용자와 대규모 언어 모델 간의 격차를 해소한다.
개발자의 제어 능력 강화: 사용자와 AI의 상호 작용을 보다 효과적으로 제어할 수 있다. 프롬프트는 대규모 언어 모델에 의도를 제시하고 컨텍스트를 설정해 ai는 이를 통해 출력을 세분화하고 사용자가 필요한 형식을 출력한다.
개선된 사용자 경험: 프롬프트 엔지니어링을 통해 사용자는 첫 번째 프롬프트에서 원하는 결과를 쉽게 얻을 수 있습니다.
프롬프트 엔지니어링 기법
AI의 추론 능력과 출력 품질 개선을 위해 사용하는 프롬프트 기법들이다.
Zero-shot Prompt: 모델의 기본 추론 능력에 의존해 예시 없이 바로 작업을 한다. 단순 요약, 번역등 일반적인 질문을 할 때 사용을 권한다.
Few-shot Prompt: 몇 개의 입출력 예시를 함께 제공해 원하는 출력 형식을 얻는 기법이다. 포맷이 중요한 (json, log) 질문에 권한다.
Chain-of-Thought (CoT, 사고의 사슬): 문제를 단계별 사고 과정으로 나누어 추론한다. 복잡한 논리 문제에서 정확도 향상된다. 프롬프트에 "단계별로 생각해라” or "체크리스트를 만들어가며 결과물을 생성해라" 를 추가한다.
Least-to-Most Prompting (최소-최대 프롬프트): 먼저 문제를 하위로 나열한 뒤 순서대로 해결한다. 복잡한 문제를 안정적으로 해결 가능하다. 다단계 계산, 복합 조건 문제 질문을 할 때 권한다.
Tree-of-Thought (ToT, 사고의 나무): 여러 가지 해결책을 고려하고 틀린 것으로 판명되면 폐기하는 인간의 문제 해결 방식을 모방한 것으로 탐색 기반 추론을 한다. 최적의 선택이 중요한 문제에 사용을 권한다.
Self-Consistency (자기 일관성): 여러 번 추론하게 한 후 가장 많이 등장하는 답변을 택하는 것으로 정답 안정성이 중요한 (수학, 논리문제) 에 사용을 권한다.
Self-Refine (자기 개선): 스스로 자신의 답을 평가하고 수정하면서 점점 개선한다. 글쓰기, 코드 설명, 정책 문서 생성할 때 사용을 권한다.
Reflexion: 언어 피드백을 통해 언어 기반 에이전트를 강화한다. Reflection 프로세스의 주요 단계는 작업을 정의하고,궤적을 생성하고, 평가하고, 성찰을 수행하고, 다음 궤적을 생성합니다. 위 프로세스를 반복해 최적화 하는 방법을 배운다.
Generated Knowledge Prompting (생성된 지식 프롬프트): 프롬프트를 완료하는 데 필요한 관련 사실을 먼저 생성고 결과물을 생성한다. 추론 정확도가 향성 되며, 도메인 지식이 필요한 문제에 권한다.
Retrieval Augmented Generation (RAG, 검색 증강 생성) : 외부 소스에서 가져온 정보로 모델의 정확성과 신뢰성을 향상시키는 기술이다. RAG는 연구 논문의 각주처럼 모델에 인용할 수 있는 소스를 제공하기 때문에 사용자는 모든 출처를 확인할 수 있고 이는 환각(hallucination) 감소와 신뢰성 향상으로 이어진다. 최신 정보를 알아야 할 때 사용을 권한다.
Program-aided Language Models (PAL, 프로그램 지원 언어 모델): 자연어 대신 코드 실행(Python 등)으로 문제 해결하는 방식이다. 계산 정확도가 매우 높아 수치 계산, 알고리즘 문제에 사용을 권한다.
Directional-Stimulus Prompting (방향 자극 프롬프트) : 원하는 방향의 키워드나 힌트로 출력 방향을 유도하는 방법이다. 모델의 표현 선택을 제한 할 때 사용한다.
Prompt Chaining( 프롬프트 체이닝) : 하나의 큰 작업을 여러 프롬프트로 분할한다. 복잡한 작업을 안정적으로 처리할 수 있다.
Maieutic Prompting (산파술 프롬프트) : 모델에게 설명을 제시하면서 질문에 답하라고 지시한다. 답변에 대해 설명하라고 지시한다. 일관되지 않은 설명 트리는 버린다. 이를 통해 복잡한 상식 추론 성능이 개선된다.
Complexity-based Prompting( 복잡성 기반 프롬프트): 가장 많은 계산 단계를 거치는 추론을 우선 선택한다.
Automatic Reasoning and Tool-use (ART): 불확실한 답변에 사용자가 주석을 추가해 학습시키는 기법이다.
Role Prompting (역할 부여 프롬프트): 모델에게 역할을 부여한다. 모델은 매우 유연해 어느 답이든 할 수 있는 상태인데, 역할을 부여하면 ( 너는 품질 관리자야, 10년차 개발자야) 그에 맞는 답변을 생성한다.
프롬프트 구성 요소
Instruction 지시: 모델이 수행할 특정 작업을 지시한다.
상세하고 구체적일 수록 좋다. 프롬프트에 예시를 제공하는 것은 효과적이다. 하지만 프롬프트가 길어지만 ai에게 혼란을 줄 수 있다. 직접적일수록 메시지가 더 효과적으로 전달된다. (== 타부서에게 설명한다고 생각하고 프롬프트 작성하기)
Context 문맥: 더 나은 응답을 위해 모델을 조종할 수 있는 외부 정보, 추가 문맥 (ex 이 서비스는 Spring boot 기반이며 AWS ECS 환경에서 실행 중이다. 최근 [에러로그] 해당 로그가 증가하고 있다.
Input 입력데이터: 응답받고자 하는 입력이나 질문 ( == ERROR 2024-01-10 14:22:31
java.lang.NullPointerException)
Output format 출력형식: 원하는 출력 형식, 유형 (ex 에러 원인과 발생 위치 해결 방법을 출력해)
모범 사례
명확하고 구체적인 프롬프트 작성 : 원하는 응답을 프롬프트에 명확하게 정의하여 AI가 잘못 해석하지 않게 한다.
하지 말라고 말하는 대신, 해야 할 일을 말하기 : 많은 테크 기업 블로그에서 이렇게 말하는데, 직접 해본 결과 둘 다 명시하는 것이 성능이 좋았다.
우선순위 부여: 중요한 측면을 강조한다.
지침과 문맥 구분: 프롬프트의 시작 부분에 지침을 넣고 ### 또는 ""를 사용하여 지침과 문맥을 구분한다. (open ai 권장)
반복적인 프롬프트 실험 및 개선: 다양한 아이디어를 실험하고 AI 프롬프트를 테스트하여 결과를 확인한다. 정확성과 연관성을 높이기 위해 최적화를 시도한다.
'AI' 카테고리의 다른 글
| Claude Code 란 (0) | 2026.01.21 |
|---|---|
| Hallucination 할루시네이션 환각 이란 (0) | 2026.01.21 |
| LLM 이란? (0) | 2026.01.21 |