에이전트 하네스(Agent Harness) 시대: ByteDance DeerFlow 2.0이 어떻게 작업 완료율을 42%에서 78%로
요약
ByteDance가 공개한 오픈소스 에이전트 프레임워크 DeerFlow 2.0은 에이전트의 작업 이탈(Task drift) 문제를 해결하기 위해 설계되었습니다. 4계층 하네스 아키텍처를 통해 작업 완료율을 42%에서 78%로 대폭 향상시켰습니다.
핵심 포인트
- DeerFlow 2.0은 모델 성능 개선보다 에이전트의 경로 이탈 방지에 집중함
- 세션 목표(Session Goals)를 최우선 순위로 두어 목표 정렬 상태를 지속 확인
- 서브 에이전트 팩토리 패턴을 통한 동적 작업 분해 및 병렬 실행 지원
- 상태 없는 건망증, 연쇄 오류, 컨텍스트 팽창 문제를 하네스 계층으로 해결
모든 에이전트 개발자가 마주하는 문제
당신은 에이전트(Agent)를 작성합니다. 목표는 다음과 같습니다: "글로벌 SaaS 가격 책정 전략을 조사하고 비교 보고서를 생성하라."
처음 10분: 완벽합니다. 검색하고, 정리하고, 초안을 작성합니다.
15분째: 갑자기 "완벽한 커피를 내리는 방법"을 검색하기 시작합니다. 작업 이탈(Task drift)이 발생한 것입니다.
30분째: 컨텍스트 윈도우(Context window)에는 30페이지 이상의 중간 쓰레기 데이터가 쌓여 있습니다. 에이전트는 자신이 무엇을 해야 했는지 잊어버렸습니다.
이것은 농담이 아닙니다. 모든 프로덕션 에이전트 개발자가 이 벽에 부딪힙니다.
ByteDance 역시 이 문제에 부딪힌 것으로 보입니다. 2026년 2월, 그들은 슈퍼 에이전트 하네스(Super Agent Harness)를 처음부터 다시 작성한 DeerFlow 2.0을 오픈 소스로 공개했습니다. 출시 당일 GitHub Trending 1위를 차지했으며 현재 48k개 이상의 Star를 보유하고 있습니다.
또 다른 에이전트 프레임워크(Framework)와 달리, DeerFlow는 한 가지 날카로운 질문을 던집니다:
"모델을 더 똑똑하게 만드는 것이 아니라, 에이전트가 경로를 이탈하지 않도록 방지하는 하네스(Harness)를 제공하는 것."
에이전트가 작업에서 이탈하는 이유
단순화된 에이전트 실행 루프(Execution loop)는 세 가지 지뢰를 드러냅니다:
def run_agent(task: str) -> str:
context = [{"role": "user", "content": task}]
for step in range(50):
...
- 상태 없는 건망증 (Stateless Amnesia) — 컨텍스트가 길어질수록 모델은 원래의 목표를 더 많이 잃어버립니다.
- 연쇄 오류 (Cascading Errors) — 하나의 중간 실수가 이후의 모든 과정을 오염시킵니다.
- 컨텍스트 팽창 (Context Bloat) — 윈도우가 터질 때까지 모든 단계의 결과가 컨텍스트에 쏟아져 들어갑니다.
DeerFlow는 **하네스 계층 (Harness layer)**을 통해 이 세 가지를 분리합니다.
DeerFlow의 4계층 하네스 아키텍처 (Four-Layer Harness Architecture)
┌─────────────────────────────────┐
│ Session Goals │ ← 최상위 목표 정의
├─────────────────────────────────┤
...
계층 1: 세션 목표 (Session Goals) — 이탈 방지
전통적인 에이전트들은 컨텍스트의 맨 윗부분에 목표를 묻어두며, 그곳에서 목표는 침몰해 버립니다. DeerFlow는 세션 목표를 일급 시민(First-class citizen)으로 취급합니다:
class Session:
def __init__(self, goal: str):
self.goal = goal
...
모든 에이전트 단계(step) 이전에, Harness는 목표와의 정렬(alignment) 상태를 확인합니다. 임계값(threshold) 미만일 경우 → 편차 컨텍스트(deviation context)와 함께 목표 플래너(goal planner)를 재실행합니다.
Layer 2: 병렬 서브 에이전트 스케줄링 (Parallel Sub-Agent Scheduling)
복잡한 작업은 더 이상 선형적이지 않습니다. DeerFlow는 서브 에이전트 팩토리 (Sub-Agent factory) 패턴을 도입하여, 작업을 동적으로 분해하고 병렬로 실행합니다:
from deerflow import Supervisor, SubAgent
supervisor = Supervisor(goal="Research EU AI regulations impact on SaaS")
...
에이전트를 위한 맵리듀스(Map-Reduce) 방식입니다. 공식 데이터에 따르면, 복잡한 작업(50단계 이상)의 완료율이 42%에서 78%로 급증했습니다.
Layer 3: 컨텍스트 엔지니어링 (Context Engineering) — 숨겨진 핵심 요소
이 모듈은 저를 가장 놀라게 했습니다. 컨텍스트가 가득 찼을 때 무자비하게 잘라내는(truncation) 대신, DeerFlow는 3단계 감쇠 (three-tier decay) 방식을 사용합니다:
class ContextManager:
def __init__(self, max_tokens=128000):
self.short_term = [] # 최근 10단계, 전체 유지
...
결과: 컨텍스트 활용률이 약 40%에서 85% 이상으로 뛰어올랐습니다.
Layer 4: 샌드박스 (Sandbox) + 장기 메모리 (Long-term Memory)
각 서브 에이전트(Sub-Agent)는 격리된 파일 시스템과 네트워크 실행 환경을 할당받습니다. 장기 메모리는 세션 간 학습 내용을 벡터 인덱스(vector indexes)로 저장합니다. 즉, 에이전트 A가 오늘 배운 것을 에이전트 B가 내일 참조할 수 있습니다.
이것이 에이전트 신뢰성(Reliability)에 의미하는 바
DeerFlow는 12-Factor Agents 원칙과 일치합니다:
- 원칙 10: 작고 집중된 에이전트 (Small, focused agents) → DeerFlow는 기본적으로 max_steps=15로 설정합니다.
- 원칙 5: 비즈니스 상태와 실행의 분리 (Separate execution from business state) → 세션 목표(Session Goal) 레이어가 정확히 이 역할을 수행합니다.
- 원칙 9: 오류를 컨텍스트로 압축 (Compress errors into context) → 3단계 컨텍스트 감쇠(three-tier context decay) 방식이 이를 수행합니다.
ARK Trust가 CostGuardian 및 컨텍스트 압축 모듈을 포함하는 이유도 바로 이것입니다. 모델을 더 똑똑하게 만들기 위해서가 아니라, 모델이 실패했을 때 통제 불능 상태(spiraling)에 빠지는 것을 막기 위함입니다. DeerFlow는 아키텍처 레이어에서 드리프트(drift)를 방지하며, ARK는 신뢰성 레이어에서 충돌(crash)을 방지합니다. 목적지는 같습니다:
프로덕션급 에이전트의 근본적인 문제는 "충분히 똑똑하지 않다"가 아니라, "충분히 안정적이지 않다"는 것입니다.
결론 (Bottom Line)
만약 당신이 여전히 while True: llm.invoke() 방식으로 에이전트(Agent)를 작성하고 있다면, 30분만 투자하여 DeerFlow의 소스 코드를 읽어보십시오. 그 아키텍처(Architecture)를 통째로 채택할 필요는 없지만, 제대로 된 에이전트 하네스(Agent Harness)가 어떤 모습인지에 대해서는 반드시 알아야 합니다.
오픈 소스: GitHub의 bytedance/deer-flow. MIT 라이선스. Docker compose up으로 실행 가능합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기