1. 프롬프트 엔지니어링 vs 컨텍스트 엔지니어링 [0]

thumbnail

프롬프트 엔지니어링은 컨텍스트 엔지니어링의 하위 개념이며, 컨텍스트 엔지니어링은 LLM이 작업을 수행하기 위해 참고해야 할 모든 정보와 도구를 설계하고 관리하는 더 넓은 범위의 기술이다. [0]

1.1. 컨텍스트 엔지니어링의 등장 배경과 정의 [2]

최근 '컨텍스트 엔지니어링'이라는 키워드가 바이럴되면서 '프롬프트 엔지니어가 사라진다'는 이야기가 나왔다. 이에 명확한 정리가 필요해졌다. [3]

  1. 컨텍스트 엔지니어링의 정의 [7]

    • 안드레 카파시(Andrej Karpathy)는 컨텍스트 엔지니어링을 프롬프트 엔지니어링보다 상위 개념으로 설명했다. [8]
    • 컨텍스트 엔지니어링은 LLM이 작업을 더 잘 수행하도록 정교하게 맥락을 채워 넣는 예술 혹은 과학이다. [12]
    • 이는 'the delicate art and science of filling the context window'로 표현된다. [13]
  2. 프롬프트 엔지니어링과의 관계 [5]

    • 프롬프트 엔지니어링은 컨텍스트 엔지니어링의 하위 기술이다. [5]
    • 프롬프트 엔지니어링은 프롬프트를 미세하게 조정하여 LLM이 컨텍스트를 더 잘 이해하도록 돕는 기술이다. [6]
    • 산업용 또는 프로덕션 레벨에서 프롬프트 엔지니어링은 단순히 짧은 지시문이 아니라, 컨텍스트를 프롬프트 단에서 주입하거나 튜닝하는 행위를 의미한다. [11]

1.2. 컨텍스트 엔지니어링의 중요성과 과학적 측면 [14]

컨텍스트 엔지니어링은 단순히 프롬프트 작성 이상의 복잡하고 정교한 작업을 포함한다. [15]

  1. 과학적 측면으로서의 컨텍스트 엔지니어링 [14]

    • 프롬프트 엔지니어링의 다양한 기법들을 모두 포함하는 상위 개념이다. [15]
    • LLM의 편향, 환각(hallucination), 경향성 등의 부정적인 한계를 줄이기 위해 맥락을 제공한다. [16]
    • 하지만 너무 많은 맥락을 주입하면 'lost in the middle' 현상으로 정확도가 떨어지거나 토큰 비용이 과도하게 발생할 수 있다. [17]
    • 따라서 필요한 맥락만 잘 주입하는 것이 중요하며, 이는 컨텍스트 엔지니어링의 광범위한 범위에 해당한다. [18]
  2. 예술적 측면으로서의 컨텍스트 엔지니어링 [19]

    • LLM의 심리 또는 정신에 대한 직관적인 감각이 필요하다. [22]
    • 프롬프트를 넣고 답변을 보면서 어떤 부분을 수정하면 더 나은 결과를 얻을 수 있을지, 어떤 형식으로 컨텍스트를 넣어야 할지에 대한 경험적 감각이 중요하다. [23]
    • 언어에 대한 감각 또한 필요하며, 이러한 이유로 컨텍스트 엔지니어링은 결코 쉬운 일이 아니다. [25]

1.3. 컨텍스트 엔지니어링의 포괄적인 역할 [27]

컨텍스트 엔지니어링은 LLM 앱 전체를 조율하는 복잡한 소프트웨어의 일부에 불과하다. [30]

  1. LLM이 수행해야 하는 다양한 작업 [27]

    • 문제를 적절하게 쪼개고 컨트롤 플로우를 구성한다. [28]
    • 컨텍스트 윈도우의 물리적 한계를 고려하여 토큰을 효과적으로 사용한다. [28]
    • 적합한 종류와 성능의 LLM을 요청한다. [28]
    • 생성 검증 플로우를 처리한다. [29]
    • 보안, 평가, 코드 병렬 처리 등 다양한 작업을 수행한다. [29]
  2. 컨텍스트 엔지니어링의 위치 [30]

    • 컨텍스트 엔지니어링은 LLM 호출을 전체 LLM 앱으로 조율하는 복잡하고 두터운 소프트웨어의 작은 부분에 해당한다. [30]
    • 과거 'GPT 래퍼'와 같은 단순한 개념을 넘어선, 훨씬 더 복잡하고 정교한 일을 수행한다. [32]

1.4. 컨텍스트 엔지니어링의 시각적 이해와 중요성 [33]

컨텍스트 엔지니어링은 다양한 기술들이 모인 상위 개념이며, LLM의 일관성 있는 답변 생성을 위해 중요하다. [36]

  1. 컨텍스트 엔지니어링의 구성 요소 [34]

    • 'The Role of Context Engineering'이라는 글에서 제시된 그림은 컨텍스트 엔지니어링의 다양한 구성 요소를 보여준다. [34]
    • 여기에는 컨텍스트 엔지니어링, 프롬프트 엔지니어링, 구조화된 출력(Structured Output) 등이 포함된다. [35]
    • 이러한 기술들은 LLM에 컨텍스트를 잘 제공하기 위한 기술들이 모인 상태를 나타낸다. [36]
  2. 컨텍스트 엔지니어링의 중요성 [37]

    • 같은 모델을 사용하더라도 컨텍스트를 어떻게 주느냐에 따라 생성되는 답변이 달라진다. [39]
    • 예를 들어, 이메일 작성 시 시작 문구나 내용이 생성할 때마다 달라질 수 있다. [42]
    • LLM은 생성할 때마다 다른 결과물을 내는 특징이 있기 때문에, 프로덕션 레벨에서는 프롬프트를 통해 일관성 있게 또는 맥락을 넣어 더 쓸 만하게 만드는 것이 관건이다. [48]

1.5. 컨텍스트 제공 방식의 변화: RAG에서 에이전틱 RAG로 [49]

컨텍스트를 LLM에 제공하는 방식은 단순한 RAG에서 에이전틱 RAG로 발전하고 있다. [51]

  1. 기존 RAG 방식 [49]

    • LLM이 답변하기 전에 문서나 로우 데이터를 청킹(쪼개기)하여 검색을 더 잘하게 하거나 문서를 참고하게 하는 방식이었다. [50]
    • 이는 컨텍스트를 보편적으로 LLM에 제공했던 방법이다. [49]
  2. 에이전틱 RAG로의 변화 [51]

    • 최근에는 에이전트형 툴을 사용할 수 있게 되면서, 기존 RAG에서 에이전틱 RAG로 바뀌고 있다. [51]
    • 에이전틱 RAG는 모델에게 여러 소스를 제공하며, 툴 함수를 가진 툴들을 가져와 여러 소스를 참고하게 하여 모델이 답변할 수 있도록 한다. [52]
    • 이는 에이전트형 오케스트레이션이 보편화되는 추세이다. [53]

1.6. 컨텍스트 엔지니어링과 프롬프트 엔지니어링의 역할 [54]

컨텍스트 엔지니어링은 최종 목표 달성을 위해 다양한 툴과 정보를 맥락으로 활용하며, 프롬프트 엔지니어링은 이를 보조한다. [56]

  1. 컨텍스트 엔지니어링의 역할 [56]

    • 최종 목표는 이메일 생성과 같은 특정 작업을 수행하는 것이다. [56]
    • 단순 프롬프트 방식과 달리, 시스템 프롬프트, 에이전트 역할, 툴 호출 등을 통해 복잡한 과정을 거친다. [57]
    • 캘린더, 이메일, 미팅 노트, 연락처 등의 툴을 불러와 맥락을 구성한다. [58]
    • 각 툴은 상대방 시간 확인, 미팅 스케줄링, 응답 톤 조정 등 후속 행위를 수행할 수 있다. [59]
    • 최종 답변 생성 전까지의 모든 과정이 맥락이 된다. [60]
  2. 컨텍스트 제공의 중요성 [61]

    • 컨텍스트를 어떻게 엔지니어링하느냐에 따라 결과가 달라진다. [61]
    • 과거에는 하나의 지식 베이스에서 질문에 답하는 AI 애플리케이션이 일반적이었다. [63]
    • 하지만 오늘날 대부분의 에이전트 기반 애플리케이션은 여러 지식 베이스에 접근하거나, 더 많은 컨텍스트를 제공하거나, 특정 작업을 수행할 수 있는 툴을 추가로 이용한다. [64]
    • LLM이 처음으로 읽는 컨텍스트는 이용 가능한 툴이나 지식 베이스에 대한 정보이다. [68]
    • 툴의 이름, 입력/출력 파라미터, 자연어 설명 등은 LLM이 올바른 응답을 선택하는 데 중요한 컨텍스트가 된다. [70]
    • 어떤 컨텍스트를 제공하느냐에 따라 만들어진 에이전트의 기능이 결정되므로 매우 중요하다. [75]

1.7. 컨텍스트 엔지니어링의 구성 요소 상세 설명 [76]

컨텍스트 엔지니어링은 사용자 프롬프트, 시스템 프롬프트, 메모리, RAG, 툴 등 다양한 요소들을 포함한다. [79]

  1. 컨텍스트의 구성 요소 [79]
    • 사용자 프롬프트(User Prompt): 사용자가 LLM에게 넣는 질문이나 테스크이다. [84]
    • 시스템 프롬프트(System Prompt): 대화에서 모델이 어떻게 행동해야 할지를 정의하고 룰을 주는 초창기 지시문이다. [82]
    • 단기 기억(Short-term Memory): 바로 지금 기억해야 하는 정보이다. [87]
    • 장기 기억(Long-term Memory): 여러 턴의 대화를 통해 기억하고 사용자가 요청했을 때 지식 베이스에서 가져올 정보이다. [88]
      • 장기 기억을 정교하게 가져오는 연구가 활발히 진행 중이며, 프롬프트 엔지니어링으로도 모델의 장기 기억 능력을 향상시키는 연구가 이루어진다. [89]
    • RAG(Retrieval-Augmented Generation): 외부 지식 베이스에서 정보를 검색하여 답변에 활용하는 방식이다. [91]
    • 툴(Tools): 함수 정의를 포함하며, LLM이 특정 작업을 수행하기 위해 사용할 수 있는 도구들이다. [92]
    • 구조화된 출력(Structured Output): 모델이 JSON 객체와 같이 정형화된 포맷으로 답변하도록 정의하는 것이다. [93]
    • 이러한 요소들을 모두 기억하고 LLM이 잘 답변하도록 하는 것이 컨텍스트이다. [94]

1.8. 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 차이점 [95]

프롬프트 엔지니어링은 컨텍스트 엔지니어링의 하위 개념으로, 지시문 설계와 정보 설계 및 관리라는 명확한 차이가 있다. [95]

  1. 개념 및 범위 [95]

    • 프롬프트 엔지니어링: 지시문 자체를 설계하고 최적화하는 과정이다. [100]
    • 컨텍스트 엔지니어링: LLM이 작업을 수행할 때 참고해야 하는 정보와 도구를 설계하고 관리하는 것이다. [101]
    • 프롬프트 엔지니어링의 범위는 단일 또는 복합 프롬프트에 한계가 있지만, 컨텍스트 엔지니어링은 시스템 전체에서 다양한 정보 소스와 도구를 사용하며 상태를 포함할 수 있다. [102]
    • 컨텍스트 엔지니어링은 필요한 정보와 도구를 적시에 제공하는 중요한 역할을 한다. [103]
  2. 예시 및 목표 [104]

    • 프롬프트 엔지니어링: 질문이나 문장을 작성하여 더 좋은 답을 얻는 방법에 집중한다. [104]
    • 컨텍스트 엔지니어링: 어떤 정보를 어떻게 조합하여 LLM에게 제공할 것인가에 대한 더 광범위한 작업을 수행한다. [105]
    • 프롬프트 엔지니어링의 목표: 명확하게 질문하고 지시하여 원하는 답변을 유도하는 것이다. [106]
    • 컨텍스트 엔지니어링의 목표: 시스템이나 문자열(프롬프트)이 아닌, 동적인 상황에 따라 즉석에서 만들어지거나 최적의 형태로 조립된 정보를 제공하는 것이다. [107]
  3. 한계 [109]

    • 프롬프트 엔지니어링의 한계: 프롬프트 자체의 한계, 컨텍스트 윈도우의 제약, 잘못 만들어진 RAG 시스템 등으로 인해 성능이 제한될 수 있다. [109]
    • 컨텍스트 엔지니어링의 한계: 정보가 너무 많을 경우 어떤 것을 넣을지에 대한 고민이 필요하며, 우선순위 설정, 구조화, 시스템 통합 등 복잡한 문제를 해결해야 한다. [112]
    • 정답이 하나로 정해져 있지 않으므로, 만들고자 하는 것에 맞는 컨텍스트를 계속 찾아나가야 한다. [113]

1.9. 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 잘못된 작업 결과 [114]

각각의 엔지니어링을 잘못 수행했을 때 발생하는 부작용은 명확히 다르다. [115]

  1. 프롬프트 엔지니어링을 잘못했을 때 [115]

    • 목표 결과물이 나오지 않고 의도와 다른 출력이 발생한다. [115]
    • 가드레일이나 지시문을 전혀 따르지 못한다. [116]
    • 결과물이 이상하거나 두루뭉술하게 나올 수 있다. [117]
    • 결과적으로 작은 단어 하나를 바꾸고 결과를 반복적으로 확인하는 무한 반복 작업에 빠질 수 있다. [117]
  2. 컨텍스트 엔지니어링을 잘못했을 때 [118]

    • LLM이 대화의 맥락을 잃어버리거나 잘못된 맥락을 주입하여 멀티턴 대화가 제대로 이루어지지 않는다. [118]
    • 결과물에 오염, 편향 등이 생기거나, 일반적인 ChatGPT와 같은 쓸모없는 결과물이 나올 수 있다. [120]
    • RAG 시스템이 망가지거나, 메모리가 누수되거나, 툴 체이닝이 실패하는 등의 문제가 발생할 수 있다. [121]

1.10. 결론: 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 조화 [122]

컨텍스트 엔지니어링은 흐름을 주도하며, 프롬프트 엔지니어링은 이에 맞춰 함께 가야 하는 필수적인 요소이다. [122]

  1. 핵심 메시지 [122]
    • 컨텍스트 엔지니어링이 흐름이지만, 프롬프트 엔지니어링 역시 이에 맞춰 가야 한다. [122]
    • 이 강의 내용을 통해 프롬프트 엔지니어링과 컨텍스트 엔지니어링의 개념적 차이, 작업 대상, 작업 방식 등을 이해하는 시간이 되었기를 바란다. [123]