AI Sparkup

복잡한 AI 세상을 읽는 힘 ⚡

AI 에이전트의 핵심, 컨텍스트 엔지니어링 – Manus 개발팀이 전하는 6가지 실전 원칙

AI 에이전트를 개발할 때 어떤 접근법을 선택해야 할까요? 모델을 처음부터 훈련시킬 것인가, 아니면 기존 대형언어모델의 컨텍스트 학습 능력을 활용할 것인가? Manus 개발팀이 실제 프로덕션 환경에서 수백만 사용자를 대상으로 AI 에이전트를 운영하며 얻은 경험에서 그 답을 찾을 수 있습니다.

출처: Manus 블로그

컨텍스트 엔지니어링이 답인 이유

Manus 팀은 초기 개발 단계에서 중요한 결정을 내려야 했습니다. 오픈소스 기반으로 End-to-End 에이전트 모델을 훈련시킬 것인가, 아니면 최신 모델의 인컨텍스트 학습 능력을 활용할 것인가?

BERT 시대부터 NLP 분야에서 일해온 Manus 팀의 경험에 따르면, 모델 파인튜닝은 한 번의 반복에 수 주가 걸리는 반면, GPT-3와 같은 대형 모델의 등장으로 인컨텍스트 학습이 새로운 가능성을 열었습니다. 특히 Product-Market Fit을 찾아가는 초기 스타트업에게는 빠른 피드백 루프가 생명이죠.

컨텍스트 엔지니어링의 핵심 장점:

  • 개선사항을 몇 주가 아닌 몇 시간 만에 배포 가능
  • 기반 모델과 독립적인 제품 설계로 모델 발전의 혜택을 자동으로 수용

이 글에서는 Manus 개발팀이 에이전트 프레임워크를 4번 재구축하며 발견한 컨텍스트 엔지니어링의 6가지 핵심 원칙을 소개합니다. 이들이 “확률적 경사하강법(Stochastic Gradient Descent)”이라고 부르는 실험적 접근법을 통해 얻은 실전 노하우입니다.

원칙 1: KV-Cache를 중심으로 설계하라

프로덕션 단계의 AI 에이전트에서 가장 중요한 지표를 하나만 꼽는다면 KV-cache 적중률입니다. 이는 지연시간과 비용에 직접적인 영향을 미치기 때문입니다.

일반적인 AI 에이전트는 다음과 같은 과정을 거칩니다:

  1. 사용자 입력 받기
  2. 현재 컨텍스트를 바탕으로 도구 선택
  3. 도구 실행 후 결과를 관찰
  4. 액션과 관찰 내용을 컨텍스트에 추가
  5. 작업 완료까지 반복

이 과정에서 컨텍스트는 매 단계마다 길어지지만, 출력(주로 구조화된 함수 호출)은 상대적으로 짧습니다. Manus의 경우 평균 입력 대 출력 토큰 비율이 100:1에 달합니다.

AI 에이전트의 컨텍스트 흐름 다이어그램
KV-cache를 통한 토큰 처리 최적화 (출처: Manus 블로그)

동일한 접두사를 가진 컨텍스트는 KV-cache를 활용해 첫 토큰까지의 시간(TTFT)과 추론 비용을 대폭 절감할 수 있습니다. Claude Sonnet의 경우 캐시된 입력 토큰은 0.30 USD/MTok, 캐시되지 않은 토큰은 3 USD/MTok으로 10배의 비용 차이가 발생합니다.

KV-cache 적중률 향상 방법

1. 프롬프트 접두사를 안정적으로 유지

  • 자동회귀 모델의 특성상 단일 토큰 차이도 해당 지점부터 캐시를 무효화
  • 시스템 프롬프트 시작 부분에 초 단위까지 정확한 타임스탬프 포함 금지

2. 컨텍스트를 추가 전용으로 설계

  • 이전 액션이나 관찰 내용 수정 금지
  • JSON 직렬화 시 키 순서 보장으로 결정적 출력 확보

3. 필요시 캐시 중단점 명시적 표시

  • 자동 증분 접두사 캐싱을 지원하지 않는 제공업체의 경우
  • 최소한 시스템 프롬프트 끝까지는 중단점에 포함

원칙 2: 제거하지 말고 마스킹하라

에이전트의 기능이 늘어날수록 액션 공간이 복잡해집니다. 특히 사용자가 수백 개의 도구를 연결할 수 있는 환경에서는 모델이 잘못된 액션을 선택하거나 비효율적인 경로를 택할 가능성이 높아집니다.

자연스러운 반응은 RAG와 같은 방식으로 동적 액션 공간을 설계하는 것입니다. 하지만 Manus의 실험 결과, 반드시 필요한 경우가 아니라면 중간 반복에서 도구를 동적으로 추가하거나 제거하는 것을 피해야 합니다.

컨텍스트 인식 상태 머신
Manus의 컨텍스트 인식 상태 머신 구조 (출처: Manus 블로그)

동적 도구 변경의 문제점

1. KV-cache 무효화

  • 대부분의 LLM에서 도구 정의는 시스템 프롬프트 근처에 위치
  • 변경 시 후속 모든 액션과 관찰에 대한 캐시 무효화

2. 모델 혼란

  • 이전 액션과 관찰이 더 이상 정의되지 않은 도구를 참조
  • 제약된 디코딩 없이는 스키마 위반이나 환각 액션 발생

해결책: 상태 머신 기반 마스킹

Manus는 컨텍스트 인식 상태 머신을 사용해 도구 가용성을 관리합니다. 도구를 제거하는 대신 디코딩 중 토큰 로짓을 마스킹해 특정 액션의 선택을 방지하거나 강제합니다.

Function Calling의 3가지 모드:

  • Auto: 함수 호출 여부를 모델이 선택
  • Required: 반드시 함수 호출, 선택은 자유
  • Specified: 특정 서브셋에서만 함수 선택

원칙 3: 파일 시스템을 컨텍스트로 활용하라

최신 대형언어모델들이 128K 토큰 이상의 컨텍스트 윈도우를 제공하지만, 실제 에이전트 시나리오에서는 종종 부족하고 때로는 오히려 부담이 됩니다.

긴 컨텍스트의 문제점

1. 관찰 데이터의 폭발적 증가

  • 웹페이지나 PDF 같은 비구조화 데이터 처리 시 컨텍스트 한계 초과 위험

2. 성능 저하

  • 기술적으로 지원되는 길이를 넘어서면 모델 성능 저하

3. 높은 비용

  • 접두사 캐싱을 사용해도 모든 토큰에 대해 전송 및 프리필 비용 발생
파일 시스템 기반 컨텍스트 관리
파일 시스템을 활용한 외부 메모리 구조 (출처: Manus 블로그)

파일 시스템 = 무제한 컨텍스트

Manus는 파일 시스템을 궁극적인 컨텍스트로 취급합니다. 크기 제한이 없고, 본질적으로 지속적이며, 에이전트가 직접 조작할 수 있는 구조화된 외부 메모리입니다.

모델은 필요에 따라 파일을 읽고 쓰는 법을 학습하며, 파일 시스템을 단순한 저장소가 아닌 구조화된 외부 메모리로 활용합니다. 압축 전략은 항상 복원 가능하도록 설계됩니다. 예를 들어, URL이 보존되는 한 웹페이지 내용을 컨텍스트에서 제거할 수 있습니다.

원칙 4: 반복학습을 통해 주의집중을 조작하라

Manus를 사용해본 사람이라면 흥미로운 행동을 발견했을 것입니다. 복잡한 작업을 처리할 때 todo.md 파일을 만들고, 작업이 진행되면서 단계별로 업데이트하며 완료된 항목을 체크하는 것입니다.

이는 단순히 귀여운 행동이 아니라 주의집중을 조작하기 위한 의도적인 메커니즘입니다.

Todo 리스트를 통한 주의집중 관리
반복학습을 통한 목표 유지 메커니즘 (출처: Manus 블로그)

Manus의 일반적인 작업은 평균 50번의 도구 호출을 필요로 합니다. 이는 긴 루프이며, LLM에 의존하는 의사결정 과정에서 주제에서 벗어나거나 초기 목표를 잊을 위험이 있습니다.

Todo 리스트를 지속적으로 다시 작성함으로써 Manus는 목표를 컨텍스트 끝부분에 암송합니다. 이는 글로벌 계획을 모델의 최근 주의 범위로 밀어넣어 “중간에서 길을 잃는” 문제를 피하고 목표 불일치를 줄입니다.

원칙 5: 실패 정보도 컨텍스트에 보존하라

에이전트는 실수를 합니다. 이는 버그가 아니라 현실입니다. 언어모델은 환각을 일으키고, 환경은 오류를 반환하며, 외부 도구는 오작동하고, 예상치 못한 엣지 케이스가 항상 나타납니다.

일반적인 반응은 이러한 오류를 숨기는 것입니다. 추적을 정리하고, 액션을 재시도하거나, 모델 상태를 재설정하는 것이죠. 더 안전하고 통제된 것처럼 보이지만 대가가 따릅니다. 실패를 지우면 증거가 제거되고, 증거 없이는 모델이 적응할 수 없습니다.

오류 컨텍스트 보존
실패 정보를 통한 학습 과정 (출처: Manus 블로그)

실패를 통한 학습

에이전트 행동을 개선하는 가장 효과적인 방법 중 하나는 놀랍도록 간단합니다. 잘못된 선택을 컨텍스트에 남겨두는 것입니다. 모델이 실패한 액션과 그 결과로 나온 관찰이나 스택 트레이스를 보면, 내부 믿음을 암묵적으로 업데이트합니다.

이는 유사한 액션에서 멀어지게 하여 같은 실수를 반복할 가능성을 줄입니다. 실제로 오류 복구는 진정한 에이전트 행동의 가장 명확한 지표 중 하나입니다.

원칙 6: Few-shot의 함정을 피하라

Few-shot 프롬프팅은 LLM 출력을 개선하는 일반적인 기법이지만, 에이전트 시스템에서는 미묘한 방식으로 역효과를 낳을 수 있습니다.

언어모델은 뛰어난 모방자입니다. 컨텍스트에 유사한 과거 액션-관찰 쌍이 가득하면, 더 이상 최적이 아닐 때도 그 패턴을 따르려 합니다.

패턴 다양화를 통한 Few-shot 함정 방지
구조화된 변화를 통한 패턴 깨기 (출처: Manus 블로그)

다양성을 통한 해결

Manus는 액션과 관찰에 구조화된 변화를 도입합니다. 다른 직렬화 템플릿, 대체 표현, 순서나 형식의 약간의 노이즈 등이 그것입니다. 이러한 통제된 무작위성은 패턴을 깨고 모델의 주의를 조정하는 데 도움을 줍니다.

핵심은 균일한 컨텍스트일수록 더 취약한 에이전트가 된다는 것입니다.

컨텍스트 엔지니어링의 미래

컨텍스트 엔지니어링은 여전히 발전하는 과학이지만, 에이전트 시스템에서는 이미 필수적입니다. 모델이 더 강력하고, 빠르고, 저렴해지고 있지만, 메모리, 환경, 피드백의 필요성을 대체할 수 있는 원시 능력은 없습니다.

컨텍스트를 어떻게 형성하느냐에 따라 에이전트의 행동이 결정됩니다. 실행 속도, 복구 능력, 확장성 모두가 컨텍스트 설계에 달려 있습니다.

Manus 팀이 반복적인 재작성, 막다른 길, 수백만 사용자를 대상으로 한 실제 테스트를 통해 학습한 이러한 교훈들이 여러분의 AI 에이전트 개발에서 시행착오를 줄이는 데 도움이 되기를 바랍니다. 에이전트의 미래는 한 번에 하나의 컨텍스트씩 구축될 것입니다.


참고자료:

Comments