본문 바로가기

IT Note/Data&AI

컨텍스트 엔지니어링 (Context Engineering): 프롬프트를 넘어 AI와 대화하는 새로운 방법

안녕하세요, 여립입니다.

오늘은 요즘 AI에서 주요 주제로 다뤄지는 컨텍스트 엔지니어링 (Context Engineering)에 대해 소개해볼까 합니다. 간략한 컨텍스트 엔지니어링의 소개부터, 개념과 주요 기법들을 훑어볼 예정이니 끝까지 읽어봐주세요!

 

오늘의 블로그 내용은 해당 레포의 내용을 기반으로 작성했습니다.

https://github.com/davidkimai/Context-Engineering

 

GitHub - davidkimai/Context-Engineering: "Context engineering is the delicate art and science of filling the context window with

"Context engineering is the delicate art and science of filling the context window with just the right information for the next step." — Andrej Karpathy. A frontier, first-principles hand...

github.com

 

 


컨텍스트 엔지니어링이란?

ChatGPT나 Claude를 사용해보신 분이라면 이런 경험이 있을 겁니다. 때로는 제 마음을 안 것 같은 매우 정확한 답변을 받지만, 때로는 엉뚱한 대답을 하거나 중요한 정보를 놓치는 경우 말이죠.

 

LLM(Large Language Model)이 급격히 발전하면서, 단순히 "좋은 질문"을 던지는 것만으로는 한계가 드러나기 시작했습니다. 더 복잡한 작업을 수행하고, 더 정확하고 신뢰성 있는 응답을 얻기 위해서는 새로운 접근이 필요했습니다.

 

그래서 등장한 것이 바로 컨텍스트 엔지니어링입니다. 이는 AI가 우리의 의도를 정확히 파악하고, 중요한 정보를 놓치지 않으며, 일관성 있는 결과를 제공하도록 하는 핵심 기법입니다.

https://www.promptingguide.ai/guides/context-engineering-guide

기존의 '프롬프트 엔지니어링'이 무엇을 말할까에 집중했다면, 컨텍스트 엔지니어링은 어떻게 정보를 구조화할까에 초점을 맞춥니다.

 

AI는 본질적으로 이전 단어를 보고 다음 단어를 예측하는 모델입니다. 그렇기 때문에 AI가 참고할 수 있는 건 오직 우리가 입력으로 주는 컨텍스트(context)뿐이죠. 이 제한된 컨텍스트 창 안에 어떤 정보를, 어떤 순서로, 어떤 형식으로 배치하느냐가 성능을 좌우합니다.

 

결국 컨텍스트 엔지니어링이란, 필요한 정보를 전략적으로 선택하고, 체계적으로 구조화해 AI가 정확하게 이해하고, 맥락을 유지하며, 더 나은 답을 만들어낼 수 있도록 환경을 설계하는 기술입니다.

https://blog.langchain.com/context-engineering-for-agents/

컨텍스트 (Context)? 그냥 텍스트랑 뭐가 달라?

많은 사람들이 "컨텍스트"를 단순히 긴 텍스트나 프롬프트의 다른 표현 정도로 생각합니다. 하지만 컨텍스트 엔지니어링에서 말하는 컨텍스트는 프롬프트 엔지니어링에서 말하는 단순한 지시문과 다릅니다. 프롬프트 엔지니어링이 "좋은 문장으로 지시하는 방법"이라면, 컨텍스트 엔지니어링은 "여러 요소들을 구조화해서 조합하는 방법"입니다.

context=Assemble(instructions,knowledge,tools,memory,state,query)

 

컨텍스트의 요소로는 아래와 같은 항목이 있습니다.

  • 모델의 기본 행동과 주 목적을 정의 (instruction/system prompt)
  • 현재 사용자가 요청한 작업 (user prompt)
  • 현재 대화 내용(state/ history)
  • 사용자의 기존 대화 내용과 개인화된 정보를 담고 있는 장기 기억 (long-term memory)
  • 외부 지식 저장소에서 가져온 전문 지식 (Retrieved Information / Knowledge Base)
  • AI가 활용할 수 있는 외부 기능들 (aka. 이메일 전송하기) (Tools)

+) 결과물의 형태와 구조를 정의 (structured output)

https://www.philschmid.de/context-engineering

이러한 요소들을 적절히 조합해서 최상의 결과물을 만들어내고자 하는게 컨텍스트 엔지니어링인 것이죠.

 


 

여기까지만 봐도 컨텍스트 엔지니어링은 정말 많은 요소를 포함하고 다루고 있습니다. 제가 처음에 언급한 링크만 들어가보셔도 아시겠지만 정말 방대합니다!

(원문이 되는 A Survey of Context Engineering for Large Language Models을 찾아보시면 총 166페이지..!) https://github.com/Meirtz/Awesome-Context-Engineering

 

GitHub - Meirtz/Awesome-Context-Engineering: 🔥 Comprehensive survey on Context Engineering: from prompt engineering to produc

🔥 Comprehensive survey on Context Engineering: from prompt engineering to production-grade AI systems. hundreds of papers, frameworks, and implementation guides for LLMs and AI agents. - Meirtz/A...

github.com

 

다음으로는, 논문 혹은 기반이 되는 설명들은 모두 연구적인 측면에서 작성된 것이기에, 저는 좀 더 우리가 AI를 활용할때 적용할 수 있을 만한 포인트를 중심으로 컨텍스트 엔지니어링의 주요 기법과 활용점에 대해 소개하고자 합니다.


프롬프트를 어떻게 구조화 해야 할까?

컨텍스트 엔지니어링은 아래와 같은 레이어로 구성됩니다. 가장 하단에는 학습된 데이터를 기반으로 한 모델의 성능, 그 위로 시스템 프롬프트, 예제, 지식기반, 그리고 현재 상태 등으로 쌓이게 됩니다. 

Context Engineering Layer

 

이 구조를 해당 글에서 생물학적 진화 방식 (Biological Metaphore Progression)에 비유해 소개합니다.

level Metaphore Key Concept
1 Atoms Single Prompt
2 Molecules Few-shot examples
3 Cells Conversation state, memory
4 Organs Multi-agent
5 Neural Systems cognitive tools + prompt programs
6 Neural Fields Continuous semantic landscapes

 

 Atomic

ATOMIC PROMPT = [TASK] + [CONSTRAINTS] + [OUTPUT FORMAT]

 

기본적인 구조의 프롬프트입니다. 예를들어, "공간에 대한 시를 쓰고 싶어"가 목적이면, 제약조건으로는 "바다에 대한 내용으로 작성하고, 5글자 이하의 단어로만 작성해"가 될 수 있죠. output으로는 "4줄로 작성해"가 될 수 있습니다.

 

이 구조는 최소한을 담고 있기 때문에 다양한 종류의 컨텍스트를 포함하지 못한다는 한계점들이 있습니다. 

 

Molecules

MOLECULE = [INSTRUCTION] + [EXAMPLES] + [CONTEXT] + [NEW INPUT]

 

이 분자구조의 프롬프트는 원자 프롬프트에서 예시와 컨텍스트를 결합한 구조입니다. 분자구조의 핵심은 few-shot (예시들)을 적절히 제공해, 모델이 패턴을 인식하고 적절한 답을 생성할 수 있도록 하는데 있습니다. (적절한 예시의 수는 3개 내외를 권장하네요)

 

Cells

CELL = [INSTRUCTIONS] + [EXAMPLES] + [MEMORY/STATE] + [CURRENT INPUT]

 

위의 분자 구조에서 메모리/상태가 추가된 구조입니다. 생물학적 세포가 환경과 상호작용하면서 내부 상태를 유지하는 것처럼, 컨텍스트 "세포"는 LLM과의 여러 교환에서 정보를 보존할 수 있게 됩니다.

 

위의 세가지를 합치면 이런 형태가 됩니다.

Cell 구조

Organs

세포간의 협력

위의 세포구조에서 발전해, 여러 개의 전문화된 컨텍스트 세포들이 협력하여 단일 컨텍스트로는 불가능한 복잡한 작업을 수행하는 시스템을 말합니다. 기관의 구성요소로는 오케스트레이터(Orchestrator), 공유 메모리, 그리고 전문화된 셀들을 가집니다.

 

> 결국 각 셀은 "에이전트", organ은 "멀티 에이전트"를 의미합니다.

 

이를 기반으로 한, 주요 패턴 중 하나는 Reasoning과 Act를 합친 ReAct 입니다. 전에도 잠깐 소개했었는데, 사고와 행동, 관찰을 반복해 좋은 결과물을 생성하는 방식이죠.

 

https://www.dailydoseofds.com/ai-agents-crash-course-part-10-with-implementation/

 

이후로는 신경 시스템 (Neural System)과 신경 필드 (Neural Fields)로 확장할 수 있습니다. 신경 시스템은 여러 단계의 동작과 복잡한 추론을 할 수 있도록 하고, 이를 확장해, 동적 컨텍스트 관리를 통해 연속적인 의미 필드안에서 추론 패턴을 구성하는 컨텍스트 엔지니어링의 궁극적인 목표로 이어집니다.


 

결국 명확한 목적성을 부여하기 위해 필요한 요소로는 세포 단계를 보면 좋을 것 같은데요, 기존의 대화 맥락과 현재의 상태, 명확한 작업과 제약조건, 결과 예시를 제공함으로써 일관성 있고 구체성을 가진 결과물을 얻을 수 있겠습니다.

 

다만 항상 모든 컨텍스트를 LLM에게 제공하기는 어렵습니다. 현재 상용화 된 LLM 서비스가 많은 요청을 허용하더라도, 너무 많은

컨텍스트는 초점을 잃게 만드니까요.

 


 

토큰 수는 유한하다

아무리 좋은 컨텍스트 설계를 해도, 현실적인 제약이 있습니다. Context Window, 즉 모델이 한 번에 처리할 수 있는 컨텍스트의 양에는 한계가 있기 때문입니다. GPT-4가 128K 토큰, Claude가 200K 토큰을 지원한다고 해도, 복잡한 작업에서는 금방 한계에 부딪힙니다.

더욱 중요한 것은 단순히 "얼마나 많이 넣느냐"가 아니라 "얼마나 효율적으로 넣느냐"입니다. 컨텍스트 창 안에서 효율성을 높이기 위해서는 토큰을 최소화하는 전략이 필수적입니다.

 

https://www.allaboutai.com/ai-glossary/context-window/

토큰? 코인인가요?

AI에서 말하는 토큰(token)은 언어 모델이 텍스트를 쪼개어 이해하고 처리하는 가장 작은 단위를 말합니다.

이 토큰을 단어에서 쪼개는 방식도 다양하게 존재하는데, 글자 단위, Subword 단위, 단어 단위 등이 있습니다.

 

예를 들어, "안녕하세요"를 토큰화(Tokenize)하게 되면,

글자단위로는, `["안", "녕", "하", "세", "요"]` (5토큰)

Subword(tiktoken)는 `"안녕하세요" → [ "안녕", "하세요" ]` (2토큰)

단어 단위로는, `안녕하세요`가 유지됩니다. (1토큰)

 

https://winder.ai/calculating-token-counts-llm-context-windows-practical-guide/

컨텍스트를 최적화 하는 방법들

Context window, 즉 모델이 허용하는 컨텍스트의 양에서 효율성을 높이기 위해, token을 최소화 하는 전략을 사용하게 됩니다. 이를 위해, 정보의 중요도와 사용 목적에 따라 선별하고 재구성하는 과정을 거치게 됩니다.

 

대화 로그나 문서내용을 그대로 모델에 넣기 보단, 연관된 핵심 요소만 추려내고, 반복적인 표현을 제거해 더 적은 토큰으로 동일한 의미를 전달하도록 합니다 (pruning).

 

너무 많은 내용을 담아야 할 때는, 계층적 요약 기법 등을 활용해, 요약된 형태로 내용을 전달하도록 합니다. (summarization)

 

정보의 배치 방식도 중요한 요소인데, 주요 지침이 우선순위가 되도록 맨 앞 혹은 뒤에 배치하거나, 고정된 형태로 컨텍스트에 슬롯을 구성해 항상 그자리에 같은 정보를 배치하는 방법 등이 있습니다. 더불어, json등의 구조체를 활동해 데이터를 전달할 수도 있습니다. 


컨텍스트 엔지니어링을 적용하자

앞서 설명한 컨텍스트 최적화 기법들은 컨텍스트 윈도우를 어떻게 효율적으로 활용할지에 초점이 맞춰져 있습니다. 그러나 현실에서는 대화가 길어질수록, 혹은 다루는 데이터가 방대해질수록 단순히 “줄여 담기”만으로는 한계가 발생합니다.

 

모델이 매번 모든 정보를 새로 받아들이는 것이 아니라, 어떤 정보를 지속적으로 기억하고, 외부 지식에서 찾아오며, 현재 대화 맥락에만 집중할지를 설계하는 구조가 필요합니다.

https://medium.com/@gustavodelrio/context-engineering-the-architecture-of-intelligent-ai-systems-d8b0d37da2b7

 

Memory Systems: 맥락 유지와 일관성

AI는 기본적으로 각 대화를 독립적으로 처리합니다. 하지만 복잡한 프로젝트나 장기적인 협업에서는 이전 맥락을 기억하고 활용하는 것이 필수적입니다. 이를 보완하고자 등장한 시스템이 메모리(기억) 입니다.

 

메모리 시스템의 주요 기능으로는:

  • 선택적 기억: 모든 정보가 아닌, 중요하고 재사용 가능한 정보만 저장
  • 맥락적 연결: 새로운 정보와 기존 기억을 연결하여 일관성 유지
  • 적응적 업데이트: 새로운 정보에 따라 기존 기억을 수정하거나 보완
  • 우선순위 관리: 시간이 지나면서 덜 중요한 기억은 압축하거나 제거

이를 바탕으로 단기 기억 (현재 대화 안에서의 기억) 과 장기 기억 (모든 대화에서 고려해야 하는 기억, 주로 사용자의 프로필이나 선호도) 을 구성해, 매번 모든 정보를 토큰으로 집어넣지 않고도 연속된 대화를 할 수 있게 됩니다.

 

Retrieval-Augmented Generation (RAG): 외부 지식 확장

Memory가 개인화와 맥락 유지에 초점을 둔다면, RAG는 외부 지식 확장에 초점을 둡니다. RAG는 “검색 → 추출 → 컨텍스트 추가”의 과정을 통해, 모델이 학습 당시 알지 못했던 지식이나 최신 정보를 활용할 수 있게 합니다. 이를 통해 모델은 제한된 파라미터 기억만 사용하는 것이 아니라, 마치 외부 라이브러리를 가져다 쓰듯이 필요할 때만 지식을 불러와 활용할 수 있습니다.

 

물론 모든 정보를 모두 컨텍스트에 넣을 수 없기 때문에, 앞에서 언급한 컨텍스트 효율화와, 주요 정보를 적절히 선별해 제공하는 것을 목표로 합니다. 이를 위해 사용되는 기법으로는 질의 해석 및 재작성, re-ranking, Graph RAG, self-evaluation 등이 있습니다.

 


 

Memory와 RAG는 각각의 한계를 보완하며 함께 설계될 때 가장 큰 시너지를 발휘합니다. 단순히 대화 맥락을 이어가는 것만으로는 부족하고, 외부 지식 검색만으로는 개인화가 부족하기 때문이죠. 그 결과 모델은 사용자 맞춤형(Memory) + 최신/정확한 정보 기반(RAG)이라는 두 가지 장점을 동시에 활용해 더 나은 AI의 답변을 기대할 수 있게 됩니다.

 

 

 

컨텍스트 엔지니어링은 그냥 “좋은 질문”을 던지는 걸 넘어서, AI가 더 똑똑하게 움직일 수 있는 무대를 만들어 주는 일에 가깝습니다. 단순히 질문을 잘하는 것에서 끝나는 게 아니라, AI가 제대로 이해하고 원하는 답을 줄 수 있도록 주변 환경을 설계해 주는 거죠.

이제는 “AI에게 뭘 시킬까?”보다는 “AI랑 어떻게 같이 생각하고 협업할까?”가 좀 더 중요한 질문이 되지 않을까 합니다. 질문을 잘 던지는 것보단, 맥락을 잘 구성하고 전달하는 사람이 유리한 것이죠. 

 

이 글을 통해 컨텍스트 엔지니어링에 대해 알아갈 수 있기를 바랍니다. 

 

감사합니다!

반응형