AI 에이전트 개발에서 모델 훈련 대신 컨텍스트 엔지니어링을 선택하면 몇 주가 걸리던 개선 작업을 몇 시간으로 단축할 수 있으며, 수백만 사용자를 대상으로 검증된 6가지 핵심 원칙을 통해 성능과 비용을 동시에 최적화할 수 있습니다.
AI 에이전트 시스템을 구축할 때 개발자들은 중요한 선택의 기로에 서게 됩니다. 처음부터 모델을 훈련시킬 것인가, 아니면 기존 대규모 언어 모델의 인컨텍스트 학습 능력을 활용할 것인가? 이 글은 Manus 개발팀의 실전 경험을 담은 원문을 바탕으로, 실제 프로덕션 환경에서 검증된 컨텍스트 엔지니어링의 핵심 원칙들을 소개합니다.

컨텍스트 엔지니어링을 선택한 이유
Manus 팀이 컨텍스트 엔지니어링을 선택한 배경에는 실무적인 고려사항이 있었습니다. 과거 BERT 시대에는 새로운 작업을 위해 모델을 파인튜닝하는데 몇 주가 걸렸고, 이런 느린 피드백 루프는 빠르게 움직이는 애플리케이션에서는 치명적이었습니다. 특히 제품-시장 적합성(PMF)을 찾기 전 단계에서는 더욱 그렇습니다.
하지만 GPT-3와 같은 대규모 언어 모델의 등장으로 상황이 완전히 바뀌었습니다. 인컨텍스트 학습 능력을 활용하면 몇 주가 걸리던 개선 작업을 몇 시간으로 단축할 수 있게 되었습니다. 더 중요한 것은 모델의 발전과 독립적으로 제품을 구축할 수 있다는 점입니다.
1. KV-캐시를 중심으로 설계하라
프로덕션 단계의 AI 에이전트에서 가장 중요한 지표를 하나만 선택한다면 KV-캐시 적중률입니다. 이는 지연 시간과 비용에 직접적인 영향을 미치기 때문입니다.
일반적인 AI 에이전트는 사용자 입력을 받은 후 도구 사용의 연쇄 과정을 통해 작업을 완료합니다. 각 반복에서 모델은 현재 컨텍스트를 기반으로 미리 정의된 액션 공간에서 행동을 선택하고, 그 행동이 환경에서 실행되어 관찰 결과를 생성합니다. 이 과정에서 컨텍스트는 계속 증가하지만 출력(주로 구조화된 함수 호출)은 상대적으로 짧습니다.
Manus의 경우 평균 입력 대 출력 토큰 비율이 약 100:1에 달합니다. 다행히 동일한 접두사를 가진 컨텍스트들은 KV-캐시를 활용할 수 있어 첫 토큰까지의 시간(TTFT)과 추론 비용을 대폭 줄일 수 있습니다.
예를 들어, Claude Sonnet의 경우 캐시된 입력 토큰은 0.30 USD/MTok이지만 캐시되지 않은 토큰은 3 USD/MTok로 10배의 차이가 납니다.
KV-캐시 최적화를 위한 핵심 원칙
프롬프트 접두사를 안정적으로 유지하세요. 언어 모델의 자기회귀적 특성상 단 하나의 토큰 차이만 있어도 해당 토큰 이후의 캐시가 무효화됩니다. 흔한 실수 중 하나는 시스템 프롬프트 시작 부분에 정확한 시간(초 단위)을 포함하는 것입니다.
컨텍스트를 추가 전용으로 만드세요. 이전 액션이나 관찰을 수정하지 않도록 하고, 직렬화가 결정적이 되도록 보장하세요. 많은 프로그래밍 언어와 라이브러리들이 JSON 객체를 직렬화할 때 안정적인 키 순서를 보장하지 않아 캐시가 깨질 수 있습니다.
필요할 때 캐시 중단점을 명시적으로 표시하세요. 일부 모델 제공업체나 추론 프레임워크는 자동 증분 접두사 캐싱을 지원하지 않고 컨텍스트에 수동으로 캐시 중단점을 삽입해야 합니다.
2. 제거하지 말고 마스킹하라
AI 에이전트가 더 많은 기능을 갖게 되면 액션 공간이 자연스럽게 복잡해집니다. 최근 MCP(Model Context Protocol)의 인기로 이런 현상이 더욱 가속화되고 있습니다. 사용자가 설정 가능한 도구를 허용한다면, 누군가는 수백 개의 정체불명 도구들을 신중하게 구성된 액션 공간에 연결할 것입니다.

자연스러운 반응은 동적 액션 공간을 설계하는 것입니다. RAG와 같은 방식으로 필요에 따라 도구를 로드하는 것이죠. Manus도 이를 시도해봤지만, 실험 결과 명확한 규칙을 발견했습니다: 절대적으로 필요하지 않은 한 반복 중간에 도구를 동적으로 추가하거나 제거하지 마세요.
그 이유는 두 가지입니다:
- 대부분의 LLM에서 도구 정의는 직렬화 후 컨텍스트 앞쪽에 위치하므로 변경사항이 모든 후속 액션과 관찰에 대한 KV-캐시를 무효화합니다.
- 이전 액션과 관찰이 현재 컨텍스트에 더 이상 정의되지 않은 도구를 참조할 때 모델이 혼란스러워합니다.
컨텍스트 인식 상태 머신 활용
Manus는 이 문제를 해결하기 위해 컨텍스트 인식 상태 머신을 사용해 도구 가용성을 관리합니다. 도구를 제거하는 대신 디코딩 중에 토큰 로짓을 마스킹하여 현재 컨텍스트에 따라 특정 액션의 선택을 방지하거나 강제합니다.
실제로 대부분의 모델 제공업체와 추론 프레임워크는 응답 프리필(response prefill) 형태를 지원하여 도구 정의를 수정하지 않고도 액션 공간을 제한할 수 있습니다.
3. 파일 시스템을 컨텍스트로 활용하라
현대의 최신 LLM들은 128K 토큰 이상의 컨텍스트 윈도우를 제공하지만, 실제 에이전트 시나리오에서는 종종 부족하고 때로는 부담이 되기도 합니다.
주요 문제점들:
- 웹페이지나 PDF 같은 비구조화된 데이터와 상호작용할 때 관찰 결과가 매우 클 수 있어 컨텍스트 한계를 쉽게 초과합니다.
- 기술적으로 지원하는 범위 내에서도 특정 컨텍스트 길이를 넘어서면 모델 성능이 저하되는 경향이 있습니다.
- 접두사 캐싱을 사용하더라도 긴 입력은 여전히 비용이 많이 듭니다.

파일 시스템을 궁극적인 컨텍스트로 활용
Manus는 파일 시스템을 궁극적인 컨텍스트로 취급합니다. 크기에 제한이 없고, 본질적으로 지속적이며, 에이전트가 직접 조작할 수 있기 때문입니다. 모델은 필요에 따라 파일에 쓰고 읽는 방법을 학습하여 파일 시스템을 저장소뿐만 아니라 구조화된 외부 메모리로 사용합니다.
압축 전략은 항상 복원 가능하도록 설계됩니다. 예를 들어, URL이 보존되는 한 웹페이지의 내용을 컨텍스트에서 삭제할 수 있고, 샌드박스에서 경로를 사용할 수 있는 한 문서의 내용을 생략할 수 있습니다.
4. 암송을 통해 어텐션을 조작하라
Manus를 사용해본 사람들은 흥미로운 현상을 발견했을 것입니다. 복잡한 작업을 처리할 때 todo.md
파일을 생성하고 작업이 진행됨에 따라 단계별로 업데이트하며 완료된 항목들을 체크해나가는 모습을 말입니다.

이는 단순히 귀여운 행동이 아니라 어텐션을 조작하기 위한 의도적인 메커니즘입니다.
Manus의 일반적인 작업은 평균적으로 약 50번의 도구 호출을 필요로 합니다. 이는 긴 루프이며, 의사결정을 위해 LLM에 의존하기 때문에 특히 긴 컨텍스트나 복잡한 작업에서 주제에서 벗어나거나 초기 목표를 잊어버릴 위험이 있습니다.
할 일 목록을 지속적으로 다시 작성함으로써 Manus는 컨텍스트 끝부분에 목표를 암송하고 있습니다. 이는 전역 계획을 모델의 최근 어텐션 범위 내로 밀어넣어 “중간에서 길을 잃는” 문제를 피하고 목표 불일치를 줄입니다.
5. 잘못된 것들을 그대로 유지하라
에이전트는 실수를 합니다. 이는 버그가 아니라 현실입니다. 언어 모델은 환각을 일으키고, 환경은 오류를 반환하며, 외부 도구는 오작동하고, 예상치 못한 엣지 케이스가 항상 나타납니다. 다단계 작업에서 실패는 예외가 아니라 루프의 일부입니다.

하지만 일반적인 충동은 이러한 오류들을 숨기는 것입니다. 추적을 정리하고, 액션을 재시도하거나, 모델의 상태를 재설정하고 마법같은 “temperature”에 맡기는 것입니다. 이는 더 안전하고 통제된 것처럼 느껴지지만 대가가 따릅니다: 실패를 지우는 것은 증거를 제거하는 것이고, 증거 없이는 모델이 적응할 수 없습니다.
실패를 학습의 기회로 활용
우리의 경험상 에이전트 행동을 개선하는 가장 효과적인 방법 중 하나는 놀랍도록 간단합니다: 잘못된 경로를 컨텍스트에 그대로 남겨두는 것입니다. 모델이 실패한 액션과 그 결과인 관찰이나 스택 트레이스를 볼 때, 내부 믿음을 암묵적으로 업데이트합니다. 이는 유사한 액션에서 벗어나도록 prior를 조정하여 같은 실수를 반복할 가능성을 줄입니다.
실제로 오류 복구는 진정한 에이전트 행동의 가장 명확한 지표 중 하나라고 믿습니다. 그러나 이상적인 조건 하에서의 작업 성공에 주로 초점을 맞추는 대부분의 학술적 연구와 공개 벤치마크에서는 여전히 충분히 다뤄지지 않고 있습니다.
6. Few-shot에 빠지지 마라
Few-shot 프롬프팅은 LLM 출력을 개선하는 일반적인 기법입니다. 하지만 에이전트 시스템에서는 미묘한 방식으로 역효과를 낼 수 있습니다.
언어 모델은 뛰어난 모방꾼입니다. 컨텍스트의 행동 패턴을 모방합니다. 컨텍스트가 유사한 과거 액션-관찰 쌍으로 가득하다면, 모델은 더 이상 최적이 아닐 때에도 그 패턴을 따르는 경향이 있습니다.

이는 반복적인 결정이나 액션을 포함하는 작업에서 위험할 수 있습니다. 예를 들어, Manus를 사용해 20개의 이력서를 검토하는 작업을 할 때, 에이전트는 종종 리듬에 빠져 컨텍스트에서 보는 것이 그것이기 때문에 유사한 액션을 반복합니다.
다양성을 통한 해결
해결책은 다양성을 늘리는 것입니다. Manus는 액션과 관찰에 소량의 구조화된 변형을 도입합니다. 다른 직렬화 템플릿, 대체 표현, 순서나 형식의 미세한 노이즈 등입니다. 이런 통제된 무작위성은 패턴을 깨고 모델의 어텐션을 조정하는 데 도움이 됩니다.
즉, Few-shot으로 인해 고착화된 패턴에 빠지지 마세요. 컨텍스트가 균일할수록 에이전트는 더 취약해집니다.
실무 적용을 위한 핵심 메시지
컨텍스트 엔지니어링은 여전히 새로운 과학 분야이지만, 에이전트 시스템에서는 이미 필수적입니다. 모델이 더 강력하고 빠르며 저렴해지고 있지만, 원시 성능만으로는 메모리, 환경, 피드백의 필요성을 대체할 수 없습니다. 컨텍스트를 어떻게 구성하느냐가 궁극적으로 에이전트의 행동을 정의합니다: 얼마나 빠르게 실행되는지, 얼마나 잘 복구하는지, 얼마만큼 확장되는지를 말입니다.
Manus 팀은 수차례의 재작성, 막힌 길, 수백만 사용자를 대상으로 한 실제 테스트를 통해 이러한 교훈들을 얻었습니다. 여기서 공유한 내용이 보편적 진리는 아니지만, 그들에게 효과가 있었던 패턴들입니다. 이 글이 여러분의 고통스러운 반복 작업을 단 한 번이라도 피하는 데 도움이 된다면, 이 글은 그 역할을 다한 것입니다.
에이전트의 미래는 한 번에 하나의 컨텍스트씩 구축될 것입니다. 잘 설계하시기 바랍니다.
참고자료:
Comments