Core prompt engineering techniques — 프롬프트 엔지니어링의 주요 기법
Jump to navigation
Jump to search
프롬프트 엔지니어링은 원하는 결과를 얻기 위해 대형 언어 모델(LLM)과의 상호작용을 최적화하는 다양한 기술과 방법론을 포함합니다. 이러한 기법들은 요청의 구조화, 컨텍스트 제공, 출력 스타일 관리, 그리고 모델의 추론 능력 향상과 관련이 있습니다. LLM은 입력 프롬프트를 기반으로 다음 token을 예측하여 응답을 생성하기 때문에, 프롬프트의 품질과 구조는 결과에 직접적인 영향을 미칩니다. 프롬프트 엔지니어링의 주요 기법들은 개발자와 사용자가 모델 내부 파라미터를 변경하지 않고도 모델의 동작을 효과적으로 제어하고, 오류를 줄이며, 특정 작업에 맞게 모델을 적응시킬 수 있도록 합니다.
프롬프트의 기본 원칙과 구조
구체적인 구현 방식은 다양하지만, 효과적인 프롬프트는 종종 공통적인 원칙과 구조를 고려하여 작성됩니다:
- 경험적 지침: 실용적인 구조의 예시(업계 표준은 아님)로서 다음 원칙을 따를 것을 권장합니다: 방향 제시, 형식 지정, 예시 제공, 품질 평가, 작업 분할.
- 효과적인 프롬프트는 종종 다음과 같은 구성 요소를 포함합니다:
- 도입부/역할: 작업의 컨텍스트 또는 모델의 역할/페르소나를 설정합니다.
- 지시사항: 수행해야 할 내용에 대한 명확한 안내입니다.
- 컨텍스트: 필요한 정보(정적 또는 RAG를 통해 동적으로 검색된 정보)입니다.
- 예시 (Few-shot): 원하는 형식/스타일을 시연합니다.
- 응답 요청: 모델이 생성해야 할 내용에 대한 명시적 지시입니다.
- 시스템 메시지 (System Prompt): API 채팅 인터페이스(예: OpenAI, Anthropic 모델)에서 전체 세션에 대한 전역 지시사항과 역할을 설정할 수 있습니다.
- 포맷팅: Markdown, JSON, XML 또는 YAML을 사용하면 프롬프트를 구조화하고 응답 파싱을 용이하게 합니다. 구분자(```, `"""`, XML 태그)는 지시사항과 데이터를 분리하는 데 중요합니다.
주요 지시사항 및 예시 기법
- 명확하고 구체적인 지시사항: 작업, 원하는 결과 및 제약 조건을 최대한 정확하게 기술합니다. 모호함을 피합니다.
- 역할 지정 (Role Prompting): 모델에 역할을 부여("당신은 ...의 전문가입니다")하여 어조, 스타일 및 지식 기반을 제어합니다.
- Zero-shot Prompting: 예시 없이 요청하는 방식입니다. 간단하거나 모델에게 익숙한 작업에 효과적입니다.
- Few-Shot Prompting: 작업을 시연하기 위해 몇 가지(보통 2~5개) "질문-답변" 예시를 제공하는 방식입니다. 예시가 하나인 One-shot Prompting이 특수한 경우에 해당합니다. 복잡한 형식이나 스타일에 특히 유용합니다. 예시로 인한 편향(anchoring) 또는 잘못된 패턴 학습을 방지하기 위해 주의가 필요합니다.
컨텍스트 관리 기법
- Retrieval-Augmented Generation (RAG): LLM에 전송하기 전에 외부 지식 베이스에서 관련 정보를 프롬프트에 동적으로 추가하는 방식입니다. 2020년 Meta AI가 처음 제안한 이 방법은 환각(hallucination)을 방지하고 데이터의 최신성을 보장하는 핵심 기법입니다.
- 청킹 (Chunking): 모델의 컨텍스트 윈도우에 맞추기 위해 큰 텍스트를 더 작은 조각(청크)으로 나누는 방식입니다. 전략으로는 문장, 단락, token(겹침 포함) 단위 분할이 있습니다.
- 요약 (Summarization): 제한된 컨텍스트 내에서 핵심 내용을 전달하기 위해 긴 텍스트나 대화 이력을 압축합니다.
추론(Reasoning) 향상 기법
이러한 기법들은 모델이 보다 신중하고 체계적으로 "생각"하도록 유도하는 것을 목표로 합니다. 이 중 많은 기법, 특히 CoT의 효과는 대규모 모델(일반적으로 1,000억 개 이상의 파라미터)에서 두드러집니다.
- Chain-of-Thought (CoT): 최종 답변 전에 단계적 추론을 생성하도록 모델에 지시하는 기법입니다. 수학, 논리 및 다단계 작업에서 결과를 크게 향상시킵니다.
- Zero-shot CoT: 예시가 필요 없는 가장 간단한 형태입니다. 프롬프트에 "단계별로 생각해 봅시다(Let's think step by step)"와 같은 문구를 추가하는 것만으로도 추론 연쇄를 시작할 수 있습니다.
- CoT의 변형:
- Auto-CoT: few-shot prompting을 위한 추론 예시를 자동으로 생성합니다.
- Self-Consistency: 여러 추론 연쇄를 생성하고 "투표"를 통해 가장 빈번한 답변을 선택하여 신뢰성을 높입니다.
- Tree-of-Thoughts (ToT): 중간 단계의 역추적 및 평가 가능성과 함께 트리 형태로 여러 추론 경로를 탐색합니다. 이 기법은 복잡한 작업에서 높은 효과를 보여주는데, 예를 들어 "Game of 24" 풀이 성공률을 ~4%에서 ~74%로 향상시킵니다.
- Graph-of-Thought (GoT), LogiCoT 및 더 복잡하거나 논리적으로 검증된 추론을 위한 기타 기법들.
- ReAct (Reason and Act): CoT를 발전시킨 기법입니다. 모델이 추론(Thought) 단계와 도구를 사용한 행동(Act) 단계를 번갈아 수행하며, 관찰(Observation)을 바탕으로 이해를 업데이트하는 반복적 사이클을 나타냅니다.
- Self-Refine: 모델이 먼저 응답을 생성하고, 이를 비판한 다음, 자체 비판을 바탕으로 개선하는 반복적 프로세스입니다. 이 "생성-비판-개선" 사이클은 여러 번 반복될 수 있습니다.
- Take a Step Back Prompting: 모델이 먼저 일반적인 원칙이나 추상화를 수립한 다음, 이를 구체적인 작업에 적용합니다.
고급 기법: 에이전트와 도구
- 도구 사용 (Tool Usage) / 함수 호출 (Function Calling): LLM이 외부 API(검색, 계산기, 데이터베이스)를 호출할 수 있도록 하는 기법입니다. 모델은 도구 호출에 대한 구조화된 요청을 생성하고, 이는 애플리케이션에 의해 실행되며 결과가 모델에 반환됩니다. 현대의 LLM(GPT-4, Claude 3)은 이 기능을 내장 지원합니다.
- 에이전트 (Agents): LLM 기반 시스템으로, 목표 달성을 위해 자율적으로 계획하고, 도구를 사용하며 행동할 수 있습니다. 주로 ReAct와 유사한 사이클을 사용합니다. 프레임워크(LangChain, AutoGen, CrewAI)가 에이전트 생성을 간소화합니다.
- 다중 에이전트 시스템: 복잡한 작업 해결을 위한 여러 전문화된 에이전트 간의 상호작용입니다.
오류 및 환각 감소 기법
- RAG: 검색된 실제 데이터에 응답을 연결합니다.
- 응답 제한 지시사항: 제공된 컨텍스트만을 기반으로 답변하거나 불확실성을 표시하도록 요구합니다("답을 모르면 '모르겠습니다'라고 말하세요").
- 인용 요청: 모델이 응답의 근거가 되는 출처를 명시하거나 컨텍스트의 일부를 인용하도록 요구합니다.
- 검증 및 자기 비판: Chain-of-Verification (CoVe)(응답을 생성한 후 이를 확인하고 수정하는 방식), Self-Refine, 또는 모델에게 자신의 응답에서 오류를 직접 확인하도록 요청하는 기법을 활용합니다.
- CoT: 단계별 추론 자체가 논리적 오류를 줄일 수 있습니다.
평가 및 반복 기법
평가는 별도의 프로세스이지만, 그 일부 측면은 프롬프트 엔지니어링의 일부입니다:
- 프롬프트 A/B 테스팅: 동일한 작업에서 다양한 버전의 프롬프트 효과를 비교합니다.
- 평가에 LLM 활용: 강력한 모델(예: GPT-4)을 사용하여 다른 프롬프트나 모델이 생성한 응답의 품질을 평가합니다(LLM-as-a-Judge).
프롬프트 패턴
일반적으로 재사용되는 구조들:
- 페르소나 패턴 (Persona Pattern).
- 출력 커스터마이징 패턴 (Output Customization Pattern).
- 질문 정제 패턴 (Question Refinement Pattern).
- 인지 검증 / 자기 비판 패턴 (Cognitive Verifier / Self-Critique Pattern).
- 단계별 추론 패턴 (Step-by-Step / Chain-of-Thought Pattern).
- 템플릿 패턴 (Template Pattern).
참고 문헌
- Radford, A. et al. (2019). Language Models are Unsupervised Multitask Learners. PDF.
- Brown, T. B. et al. (2020). Language Models are Few-Shot Learners. arXiv:2005.14165.
- Lewis, P. et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv:2005.11401.
- Li, X. L.; Liang, P. (2021). Prefix-Tuning: Optimizing Continuous Prompts for Generation. arXiv:2101.00190.
- Liu, Y. et al. (2021). Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity. arXiv:2104.08786.
- Bai, Y. et al. (2022). Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073.
- Wei, J. et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903.
- Wang, X. et al. (2022). Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171.
- Kojima, T. et al. (2022). Large Language Models are Zero-Shot Reasoners. arXiv:2205.11916.
- Zhang, Z. et al. (2022). Automatic Chain of Thought Prompting in Large Language Models. arXiv:2210.03493.
- Zhou, D. et al. (2022). Least-to-Most Prompting Enables Complex Reasoning in Large Language Models. arXiv:2205.10625.
- Yao, S. et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv:2210.03629.
- Besta, M. et al. (2023). Graph of Thoughts: Solving Elaborate Problems with Large Language Models. arXiv:2308.09687.
- Madaan, A. et al. (2023). Self-Refine: Iterative Refinement with Self-Feedback. arXiv:2303.17651.
- Schick, T. et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. arXiv:2302.04761.
- Rafailov, R. et al. (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290.
- Wang, Y. et al. (2023). Self-Instruct: Aligning Language Models with Self-Generated Instructions. arXiv:2212.10560.
- Yao, S. et al. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models. arXiv:2305.10601.
- Chen, S. Y. et al. (2023). Extending Context Window of Large Language Models via Positional Interpolation. arXiv:2306.15595.
- Chang, K. et al. (2024). Efficient Prompting Methods for Large Language Models: A Survey. arXiv:2404.01077.
- Genkina, D. (2024). AI Prompt Engineering Is Dead. IEEE Spectrum. [1].
- Li, Z. et al. (2024). Prompt Compression for Large Language Models: A Survey. arXiv:2410.12388.
- Liang, X. et al. (2024). Internal Consistency and Self-Feedback in Large Language Models: A Survey. arXiv:2407.14507.
- Han, H. et al. (2025). Retrieval-Augmented Generation with Graphs (GraphRAG). arXiv:2501.00309.
- Li, W. et al. (2025). A Survey of Automatic Prompt Engineering: An Optimization Perspective. arXiv:2502.11560.
- Wu, Z. et al. (2025). The Dark Side of Function Calling: Pathways to Jailbreaking Large Language Models. EMNLP 2025. PDF.
- Yang, B. et al. (2025). Hallucination Detection in Large Language Models with Metamorphic Relations. arXiv:2502.15844.
같이 보기
- 대형 언어 모델
- Chain-of-Thought Prompting
- LLM의 환각 및 부정확한 응답