[프롬프트 강의] 프롬프트 엔지니어링 및 컨텍스트 엔지니어링
이 유튜브영상 인사이트 노트는 LilysAI 로 작성됐어요. LilysAI 에 무료로 가입하고 영상에서 10배 빠르고 깊게 인사이트를 얻으세요
Q: 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 차이점과 관계는 무엇인가요?
Q: 컨텍스트 엔지니어링은 어떤 요소들을 포함하나요?
프롬프트 엔지니어링과 컨텍스트 엔지니어링의 차이는 무엇인가? 컨텍스트 엔지니어링은 프롬프트 엔지니어링을 포함하는 상위 개념으로, LLM이 작업을 수행하기 위해 참고해야 할 모든 정보와 도구를 설계하고 관리하는 더 넓은 범위의 기술입니다.
1. 프롬프트 엔지니어링 vs 컨텍스트 엔지니어링
프롬프트 엔지니어링은 컨텍스트 엔지니어링의 하위 개념이며, 컨텍스트 엔지니어링은 LLM이 작업을 수행하기 위해 참고해야 할 모든 정보와 도구를 설계하고 관리하는 더 넓은 범위의 기술이다.
1.1. 컨텍스트 엔지니어링의 등장 배경과 정의
최근 '컨텍스트 엔지니어링'이라는 키워드가 바이럴되면서 '프롬프트 엔지니어가 사라진다'는 이야기가 나왔다. 이에 명확한 정리가 필요해졌다.
-
컨텍스트 엔지니어링의 정의
- 안드레 카파시(Andrej Karpathy)는 컨텍스트 엔지니어링을 프롬프트 엔지니어링보다 상위 개념으로 설명했다.
- 컨텍스트 엔지니어링은 LLM이 작업을 더 잘 수행하도록 정교하게 맥락을 채워 넣는 예술 혹은 과학이다.
- 이는 'the delicate art and science of filling the context window'로 표현된다.
-
프롬프트 엔지니어링과의 관계
- 프롬프트 엔지니어링은 컨텍스트 엔지니어링의 하위 기술이다.
- 프롬프트 엔지니어링은 프롬프트를 미세하게 조정하여 LLM이 컨텍스트를 더 잘 이해하도록 돕는 기술이다.
- 산업용 또는 프로덕션 레벨에서 프롬프트 엔지니어링은 단순히 짧은 지시문이 아니라, 컨텍스트를 프롬프트 단에서 주입하거나 튜닝하는 행위를 의미한다.
1.2. 컨텍스트 엔지니어링의 중요성과 과학적 측면
컨텍스트 엔지니어링은 단순히 프롬프트 작성 이상의 복잡하고 정교한 작업을 포함한다.
-
과학적 측면으로서의 컨텍스트 엔지니어링
- 프롬프트 엔지니어링의 다양한 기법들을 모두 포함하는 상위 개념이다.
- LLM의 편향, 환각(hallucination), 경향성 등의 부정적인 한계를 줄이기 위해 맥락을 제공한다.
- 하지만 너무 많은 맥락을 주입하면 'lost in the middle' 현상으로 정확도가 떨어지거나 토큰 비용이 과도하게 발생할 수 있다.
- 따라서 필요한 맥락만 잘 주입하는 것이 중요하며, 이는 컨텍스트 엔지니어링의 광범위한 범위에 해당한다.
-
예술적 측면으로서의 컨텍스트 엔지니어링
- LLM의 심리 또는 정신에 대한 직관적인 감각이 필요하다.
- 프롬프트를 넣고 답변을 보면서 어떤 부분을 수정하면 더 나은 결과를 얻을 수 있을지, 어떤 형식으로 컨텍스트를 넣어야 할지에 대한 경험적 감각이 중요하다.
- 언어에 대한 감각 또한 필요하며, 이러한 이유로 컨텍스트 엔지니어링은 결코 쉬운 일이 아니다.
1.3. 컨텍스트 엔지니어링의 포괄적인 역할
컨텍스트 엔지니어링은 LLM 앱 전체를 조율하는 복잡한 소프트웨어의 일부에 불과하다.
-
LLM이 수행해야 하는 다양한 작업
- 문제를 적절하게 쪼개고 컨트롤 플로우를 구성한다.
- 컨텍스트 윈도우의 물리적 한계를 고려하여 토큰을 효과적으로 사용한다.
- 적합한 종류와 성능의 LLM을 요청한다.
- 생성 검증 플로우를 처리한다.
- 보안, 평가, 코드 병렬 처리 등 다양한 작업을 수행한다.
-
컨텍스트 엔지니어링의 위치
- 컨텍스트 엔지니어링은 LLM 호출을 전체 LLM 앱으로 조율하는 복잡하고 두터운 소프트웨어의 작은 부분에 해당한다.
- 과거 'GPT 래퍼'와 같은 단순한 개념을 넘어선, 훨씬 더 복잡하고 정교한 일을 수행한다.
1.4. 컨텍스트 엔지니어링의 시각적 이해와 중요성
컨텍스트 엔지니어링은 다양한 기술들이 모인 상위 개념이며, LLM의 일관성 있는 답변 생성을 위해 중요하다.
-
컨텍스트 엔지니어링의 구성 요소
- 'The Role of Context Engineering'이라는 글에서 제시된 그림은 컨텍스트 엔지니어링의 다양한 구성 요소를 보여준다.
- 여기에는 컨텍스트 엔지니어링, 프롬프트 엔지니어링, 구조화된 출력(Structured Output) 등이 포함된다.
- 이러한 기술들은 LLM에 컨텍스트를 잘 제공하기 위한 기술들이 모인 상태를 나타낸다.
-
컨텍스트 엔지니어링의 중요성
- 같은 모델을 사용하더라도 컨텍스트를 어떻게 주느냐에 따라 생성되는 답변이 달라진다.
- 예를 들어, 이메일 작성 시 시작 문구나 내용이 생성할 때마다 달라질 수 있다.
- LLM은 생성할 때마다 다른 결과물을 내는 특징이 있기 때문에, 프로덕션 레벨에서는 프롬프트를 통해 일관성 있게 또는 맥락을 넣어 더 쓸 만하게 만드는 것이 관건이다.
1.5. 컨텍스트 제공 방식의 변화: RAG에서 에이전틱 RAG로
컨텍스트를 LLM에 제공하는 방식은 단순한 RAG에서 에이전틱 RAG로 발전하고 있다.
-
기존 RAG 방식
- LLM이 답변하기 전에 문서나 로우 데이터를 청킹(쪼개기)하여 검색을 더 잘하게 하거나 문서를 참고하게 하는 방식이었다.
- 이는 컨텍스트를 보편적으로 LLM에 제공했던 방법이다.
-
에이전틱 RAG로의 변화
- 최근에는 에이전트형 툴을 사용할 수 있게 되면서, 기존 RAG에서 에이전틱 RAG로 바뀌고 있다.
- 에이전틱 RAG는 모델에게 여러 소스를 제공하며, 툴 함수를 가진 툴들을 가져와 여러 소스를 참고하게 하여 모델이 답변할 수 있도록 한다.
- 이는 에이전트형 오케스트레이션이 보편화되는 추세이다.
1.6. 컨텍스트 엔지니어링과 프롬프트 엔지니어링의 역할
컨텍스트 엔지니어링은 최종 목표 달성을 위해 다양한 툴과 정보를 맥락으로 활용하며, 프롬프트 엔지니어링은 이를 보조한다.
-
컨텍스트 엔지니어링의 역할
- 최종 목표는 이메일 생성과 같은 특정 작업을 수행하는 것이다.
- 단순 프롬프트 방식과 달리, 시스템 프롬프트, 에이전트 역할, 툴 호출 등을 통해 복잡한 과정을 거친다.
- 캘린더, 이메일, 미팅 노트, 연락처 등의 툴을 불러와 맥락을 구성한다.
- 각 툴은 상대방 시간 확인, 미팅 스케줄링, 응답 톤 조정 등 후속 행위를 수행할 수 있다.
- 최종 답변 생성 전까지의 모든 과정이 맥락이 된다.
-
컨텍스트 제공의 중요성
- 컨텍스트를 어떻게 엔지니어링하느냐에 따라 결과가 달라진다.
- 과거에는 하나의 지식 베이스에서 질문에 답하는 AI 애플리케이션이 일반적이었다.
- 하지만 오늘날 대부분의 에이전트 기반 애플리케이션은 여러 지식 베이스에 접근하거나, 더 많은 컨텍스트를 제공하거나, 특정 작업을 수행할 수 있는 툴을 추가로 이용한다.
- LLM이 처음으로 읽는 컨텍스트는 이용 가능한 툴이나 지식 베이스에 대한 정보이다.
- 툴의 이름, 입력/출력 파라미터, 자연어 설명 등은 LLM이 올바른 응답을 선택하는 데 중요한 컨텍스트가 된다.
- 어떤 컨텍스트를 제공하느냐에 따라 만들어진 에이전트의 기능이 결정되므로 매우 중요하다.
1.7. 컨텍스트 엔지니어링의 구성 요소 상세 설명
컨텍스트 엔지니어링은 사용자 프롬프트, 시스템 프롬프트, 메모리, RAG, 툴 등 다양한 요소들을 포함한다.
- 컨텍스트의 구성 요소
- 사용자 프롬프트(User Prompt): 사용자가 LLM에게 넣는 질문이나 테스크이다.
- 시스템 프롬프트(System Prompt): 대화에서 모델이 어떻게 행동해야 할지를 정의하고 룰을 주는 초창기 지시문이다.
- 단기 기억(Short-term Memory): 바로 지금 기억해야 하는 정보이다.
- 장기 기억(Long-term Memory): 여러 턴의 대화를 통해 기억하고 사용자가 요청했을 때 지식 베이스에서 가져올 정보이다.
- 장기 기억을 정교하게 가져오는 연구가 활발히 진행 중이며, 프롬프트 엔지니어링으로도 모델의 장기 기억 능력을 향상시키는 연구가 이루어진다.
- RAG(Retrieval-Augmented Generation): 외부 지식 베이스에서 정보를 검색하여 답변에 활용하는 방식이다.
- 툴(Tools): 함수 정의를 포함하며, LLM이 특정 작업을 수행하기 위해 사용할 수 있는 도구들이다.
- 구조화된 출력(Structured Output): 모델이 JSON 객체와 같이 정형화된 포맷으로 답변하도록 정의하는 것이다.
- 이러한 요소들을 모두 기억하고 LLM이 잘 답변하도록 하는 것이 컨텍스트이다.
1.8. 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 차이점
프롬프트 엔지니어링은 컨텍스트 엔지니어링의 하위 개념으로, 지시문 설계와 정보 설계 및 관리라는 명확한 차이가 있다.
-
개념 및 범위
- 프롬프트 엔지니어링: 지시문 자체를 설계하고 최적화하는 과정이다.
- 컨텍스트 엔지니어링: LLM이 작업을 수행할 때 참고해야 하는 정보와 도구를 설계하고 관리하는 것이다.
- 프롬프트 엔지니어링의 범위는 단일 또는 복합 프롬프트에 한계가 있지만, 컨텍스트 엔지니어링은 시스템 전체에서 다양한 정보 소스와 도구를 사용하며 상태를 포함할 수 있다.
- 컨텍스트 엔지니어링은 필요한 정보와 도구를 적시에 제공하는 중요한 역할을 한다.
-
예시 및 목표
- 프롬프트 엔지니어링: 질문이나 문장을 작성하여 더 좋은 답을 얻는 방법에 집중한다.
- 컨텍스트 엔지니어링: 어떤 정보를 어떻게 조합하여 LLM에게 제공할 것인가에 대한 더 광범위한 작업을 수행한다.
- 프롬프트 엔지니어링의 목표: 명확하게 질문하고 지시하여 원하는 답변을 유도하는 것이다.
- 컨텍스트 엔지니어링의 목표: 시스템이나 문자열(프롬프트)이 아닌, 동적인 상황에 따라 즉석에서 만들어지거나 최적의 형태로 조립된 정보를 제공하는 것이다.
-
한계
- 프롬프트 엔지니어링의 한계: 프롬프트 자체의 한계, 컨텍스트 윈도우의 제약, 잘못 만들어진 RAG 시스템 등으로 인해 성능이 제한될 수 있다.
- 컨텍스트 엔지니어링의 한계: 정보가 너무 많을 경우 어떤 것을 넣을지에 대한 고민이 필요하며, 우선순위 설정, 구조화, 시스템 통합 등 복잡한 문제를 해결해야 한다.
- 정답이 하나로 정해져 있지 않으므로, 만들고자 하는 것에 맞는 컨텍스트를 계속 찾아나가야 한다.
1.9. 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 잘못된 작업 결과
각각의 엔지니어링을 잘못 수행했을 때 발생하는 부작용은 명확히 다르다.
-
프롬프트 엔지니어링을 잘못했을 때
- 목표 결과물이 나오지 않고 의도와 다른 출력이 발생한다.
- 가드레일이나 지시문을 전혀 따르지 못한다.
- 결과물이 이상하거나 두루뭉술하게 나올 수 있다.
- 결과적으로 작은 단어 하나를 바꾸고 결과를 반복적으로 확인하는 무한 반복 작업에 빠질 수 있다.
-
컨텍스트 엔지니어링을 잘못했을 때
- LLM이 대화의 맥락을 잃어버리거나 잘못된 맥락을 주입하여 멀티턴 대화가 제대로 이루어지지 않는다.
- 결과물에 오염, 편향 등이 생기거나, 일반적인 ChatGPT와 같은 쓸모없는 결과물이 나올 수 있다.
- RAG 시스템이 망가지거나, 메모리가 누수되거나, 툴 체이닝이 실패하는 등의 문제가 발생할 수 있다.
1.10. 결론: 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 조화
컨텍스트 엔지니어링은 흐름을 주도하며, 프롬프트 엔지니어링은 이에 맞춰 함께 가야 하는 필수적인 요소이다.
- 핵심 메시지
- 컨텍스트 엔지니어링이 흐름이지만, 프롬프트 엔지니어링 역시 이에 맞춰 가야 한다.
- 이 강의 내용을 통해 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 개념적 차이, 작업 대상, 작업 방식 등을 이해하는 시간이 되었기를 바란다.
방대한 자료를 천재처럼 이해하세요 - LilysAI 와 함께
1,000,000+ 명의 정보 탐색가들이 Lilys AI를 사용하고 있어요.
