에이전트 / 서브에이전트는 코드 구성 / 작성해야하는 코드 분량의 차이라기보단, 유사한 내부 클래스를 가지나 단순히 전체 워크플로우에서 갖는 역할의 차이에 가깝다.

객체지향 관점에서 보면, 동일한 객체가 디자인 패턴상 오케스트레이터(Facade/Mediator Pattern)로 쓰이느냐, 컴포넌트(Worker Pattern)로 쓰이느냐의 배치 차이라고 이해하면 정확하다.

  • 코드 구성이나 클래스 내부 구조의 근본적인 차이 (×)
  • 동일한 아키텍처 아티팩트(클래스/인스턴스)가 전체 오케스트레이션/워크플로우 내에서 어떤 ‘역할(Role)‘과 ‘스코프(Scope)‘를 부여받았는가 (○)

메이저 프레임워크에서 메인 에이전트와 서브 에이전트는 코드상 동일한 기본 클래스(Base Class)의 인스턴스

from crewai import Agent
 
# 1. 메인 에이전트 선언 (팀장 역할)
main_agent = Agent(
    role="Project Manager",
    goal="유저의 복잡한 요구사항을 쪼개고 하위 에이전트들을 통제하여 프로젝트를 완수하라",
    backstory="당신은 오케스트레이션 전문가입니다...",
    tools=[delegate_to_sub_agent_a, delegate_to_sub_agent_b]  # 서브 에이전트 호출을 '툴'로 가짐
)
 
# 2. 서브 에이전트 선언 (팀원 역할)
sub_agent_a = Agent(
    role="Data Scraper",
    goal="지정된 타겟 URL에서 특정 데이터만 정밀하게 크롤링하라",
    backstory="당신은 파이썬 Scrapy와 Selenium 마스터입니다...",
    tools=[web_search_tool, scrape_tool]  # 실제 파일/웹 제어 툴을 가짐
)
  • 공통점: 내부 멤버 변수와 메서드 메커니즘(LLM 호출, 프롬프트 생성, 정규식 파싱, 메모리 관리 등)
  • 차이점: 주입되는 프롬프트(Role/Goal), 들고 있는 툴(Tools)
    • 메인: 서브 에이전트 인스턴스 그 자체. 프로바이더/프레임워크 단에서 서브 에이전트를 실행하는 행위(Function Calling)를 하나의 ‘Tool’로 추상화하여 메인 에이전트에게 쥐여준다.
    • 서브: 코드 실행기, DB 쿼리 전송기, 웹 브라우저 제어 등 실제 인프라나 데이터에 직접 닿는 구체적인(Low-level) 기능이다.