본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 10. 13:46

【#6】Hermes Agent 해독하기

요약

Hermes Agent의 핵심 메커니즘인 delegate_task와 mixture_of_agents의 차이점을 분석합니다. 업무를 분할하여 독립된 컨텍스트에서 수행하는 방식과 여러 모델의 답변을 통합하는 앙상블 방식의 설계 의도를 다룹니다.

핵심 포인트

  • delegate_task는 서브 태스크를 독립된 컨텍스트로 분할하여 수행함
  • 자식 에이전트는 외부 부작용 방지를 위해 특정 도구 사용이 제한됨
  • mixture_of_agents는 여러 모델의 답변을 병렬로 받아 통합하는 방식임
  • 두 방식은 각각 '나누어 정복하기'와 '지혜 모으기'의 목적을 가짐

연재 「Hermes Agent 해독하기」 제6회.

에이전트가 복잡한 태스크(Task)에 직면하면, 하나의 대화 컨텍스트(Context)만으로는 부족해진다. 서브 태스크(Sub-task)마다 별도의 문맥에서 생각하게 하고 싶거나, 여러 모델의 의견을 대조하고 싶을 때가 있다. Hermes는 이를 두 가지 서로 다른 도구로 해결한다 —— **delegate_task (업무를 나누어 던지기)**와 mixture_of_agents (다수 모델로 생각하게 하여 통합하기). 비슷해 보이지만 서로 다른 이 두 가지를 구분하는 것이 이번의 주안점이다.

delegate_task는 자식 에이전트(AIAgent)를 생성하여 서브 태스크를 맡긴다.

  • 깊이 제한 (Depth Limit): MAX_DEPTH = 1. delegation.max_spawn_depth[1, 3]으로 클램프(Clamp)된다. 기본값으로는 「부모 → 자식」의 1단계까지이며, 손자는 태어나지 않는다.
  • 병렬도 (Parallelism): max_concurrent_children 기본값 3 (delegate_tool.py:132). 자식은 최대 3개까지 동시에 실행된다.
  • 격리 (Isolation): 각 자식은 새로운 컨텍스트(Context) + 전용 task_id를 가진다. 부모의 대화를 오염시키지 않고 독립된 문맥에서 작업한다.
  • 집약 (Aggregation): 자식의 작업은 통째로 부모에게 반환되는 것이 아니라, 요약(Summary)만 부모에게 돌아간다.
  • 차단 도구 (Blocked Tools): 자식에게는 DELEGATE_BLOCKED_TOOLS가 적용되어 일부 도구가 봉쇄된다.

DELEGATE_BLOCKED_TOOLS의 내용은 {delegate_task, clarify, memory, send_message, execute_code} (delegate_tool.py:45)이다. 그 의미를 읽어보면 설계 의도를 알 수 있다. 자식에게 delegate_task를 허용하면 끝도 없이 손자, 증손자가 늘어나기 때문이다 (깊이 제한의 이중 담보). clarify는 인간에게 되묻는 것이지만, 자식은 인간과 직접 대화하지 않는다. memory / send_message는 영구 메모리나 외부 전송이라는 「외부로 향하는 부작용(Side effect)」이므로, 자식의 폭주가 외부로 새나가는 것을 방지한다. execute_code는 추가로 또 다른 도구 실행구를 열기 때문에 봉쇄한다. **「자식은 계산은 해도 좋지만, 외부 세계에 대한 영구적인 부작용은 갖지 않는다」**라는 일관된 방침이다.

mixture_of_agents는 병렬의 의미가 완전히 다르다. 태스크를 분할하는 것이 아니라, 동일한 질문을 여러 프론티어 모델(Frontier Model)에 던지고 답변을 통합한다.

  • 참조 모델군을 asyncio.gather로 병렬 실행한다.
  • 그 출력을 aggregator가 하나로 통합한다.
  • aggregator의 기본값은 anthropic/claude-opus-4.6 (mixture_of_agents_tool.py:73의 코드 상수. 설정으로 덮어쓰기 가능. 모델명은 구식이 될 수 있음에 주의).
  • 전체적으로 5회의 API 호출(참조 4 + 집약 1)이 표준 구성이다.

delegate_task가 「나누어 정복하기」라면, mixture_of_agents는 「지혜를 모으기」이다. 전자는 서브 태스크의 수평 분할, 후자는 동일 문제에 대한 **다각적 앙상블(Ensemble)**이다. 난제에서 단일 모델의 정답 여부의 불확실성을 줄이고 싶을 때 후자가 효과적이다.

헷갈리기 쉬운 것이 Gateway의 128 세션 LRU (제8회)이다. 이것은 「128개의 대화를 동시에 병렬 계산하고 있는 것」이 아니다. 어디까지나 다중화(Multiplexing) —— 다수의 채팅 상대 세션을 메모리 상에 LRU로 유지하며, 들어온 메시지를 대응하는 세션으로 분배할 뿐이다 (idle TTL 1시간 후 퇴거).

병렬 「계산」은 delegate_task / mixture_of_agents의 영역이고, 병렬 「다중화」는 Gateway의 영역이다. 같은 「병렬」이라도 계층이 다르다. 이곳을 혼동하면 Hermes의 병렬 성능을 잘못 이해하게 된다.

자식 에이전트와 다중 모델 실행에는 폭주를 억제하는 레일이 깔려 있다.

  • 자식의 차단 도구: §1의 DELEGATE_BLOCKED_TOOLS
  • 자동 거부 (auto-deny): 자식으로부터의 위험한 승인 요청은 자동 거부 (인간이 없는 문맥에서 승인을 요청받더라도 중단함)
  • 하트비트 (Heartbeat): 장시간 처리 중인 자식은 생존 시그널을 보내며, 무응답 시 회수할 수 있다.
  • 중단 전파 (Interrupt Propagation): 부모가 중단되면 자식에게도 중단이 전달된다.

「자식은 외부에 부작용을 남기지 않는다 + 위험한 요청은 자동 거부 + 부모의 중단이 전파된다」——이 3가지 지점을 통해, fan-out(팬아웃)된 대상이 제어 불능 상태가 되는 사태를 방지하고 있다.

다음 회차는, delegate_task의 동기 fan-out(팬아웃)으로는 다룰 수 없는 「영속성·인간 개입 포함·크래시 내성(Crash Resilience) 있음」의 협업——Kanban 영속 태스크 보드(Kanban Persistent Task Board)를 파헤친다.

대응 맵 장: §12 / 행 번호는 hermes update에 따라 어긋날 수 있음

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0