subagents 파라미터에서 커스텀 subagent를 지정할 수 있습니다. Subagent는 context quarantine (메인 agent의 컨텍스트를 깔끔하게 유지)와 특화된 지시사항 제공에 유용합니다.
왜 subagent를 사용하나요?
Subagent는 컨텍스트 비대화 문제를 해결합니다. Agent가 대용량 출력을 가진 도구(웹 검색, 파일 읽기, 데이터베이스 쿼리)를 사용할 때, 컨텍스트 윈도우는 중간 결과로 빠르게 채워집니다. Subagent는 이러한 세부 작업을 격리합니다—메인 agent는 그것을 생성한 수십 개의 tool 호출이 아닌 최종 결과만 받습니다. Subagent를 사용해야 하는 경우:- ✅ 메인 agent의 컨텍스트를 어지럽힐 수 있는 다단계 작업
- ✅ 커스텀 지시사항이나 도구가 필요한 특화된 도메인
- ✅ 다른 model 기능이 필요한 작업
- ✅ 메인 agent가 고수준 조정에 집중하도록 유지하고 싶을 때
- ❌ 간단한 단일 단계 작업
- ❌ 중간 컨텍스트를 유지해야 할 때
- ❌ 오버헤드가 이점보다 클 때
Configuration
subagents는 dictionary 리스트 또는 CompiledSubAgent 객체여야 합니다. 두 가지 타입이 있습니다:
SubAgent (Dictionary 기반)
대부분의 사용 사례에서는 subagent를 dictionary로 정의합니다: 필수 필드:- name (
str): Subagent의 고유 식별자. 메인 agent는task()tool을 호출할 때 이 이름을 사용합니다. - description (
str): 이 subagent가 수행하는 작업. 구체적이고 행동 지향적으로 작성하세요. 메인 agent는 이를 사용하여 위임 시점을 결정합니다. - system_prompt (
str): Subagent를 위한 지시사항. Tool 사용 가이드와 출력 형식 요구사항을 포함하세요. - tools (
List[Callable]): Subagent가 사용할 수 있는 도구. 최소한으로 유지하고 필요한 것만 포함하세요.
- model (
str | BaseChatModel): 메인 agent의 model을 재정의합니다."provider:model-name"형식을 사용하세요 (예:"openai:gpt-4o"). - middleware (
List[Middleware]): 커스텀 동작, 로깅 또는 rate limiting을 위한 추가 middleware. - interrupt_on (
Dict[str, bool]): 특정 tool에 대한 human-in-the-loop을 구성합니다. Checkpointer가 필요합니다.
CompiledSubAgent
복잡한 워크플로우의 경우, 미리 빌드된 LangGraph graph를 사용하세요: 필드:- name (
str): 고유 식별자 - description (
str): 이 subagent가 수행하는 작업 - runnable (
Runnable): 컴파일된 LangGraph graph (먼저.compile()을 호출해야 함)
SubAgent 사용하기
CompiledSubAgent 사용하기
더 복잡한 사용 사례의 경우, 미리 빌드된 LangGraph graph를 subagent로 제공할 수 있습니다:범용 subagent
사용자 정의 subagent 외에도, deep agent는 항상general-purpose subagent에 접근할 수 있습니다. 이 subagent는:
- 메인 agent와 동일한 system prompt를 가집니다
- 동일한 모든 tool에 접근할 수 있습니다
- 동일한 model을 사용합니다 (재정의되지 않는 한)
언제 사용하나요
범용 subagent는 특화된 동작 없이 컨텍스트 격리에 이상적입니다. 메인 agent는 복잡한 다단계 작업을 이 subagent에 위임하고 중간 tool 호출로 인한 비대화 없이 간결한 결과를 받을 수 있습니다.예시
메인 agent가 10번의 웹 검색을 수행하고 결과로 컨텍스트를 채우는 대신, 범용 subagent에 위임합니다:
task(name="general-purpose", task="Research quantum computing trends"). Subagent는 모든 검색을 내부적으로 수행하고 요약만 반환합니다.Best practice
명확한 description 작성하기
메인 agent는 description을 사용하여 어떤 subagent를 호출할지 결정합니다. 구체적으로 작성하세요: ✅ 좋음:"Analyzes financial data and generates investment insights with confidence scores"
❌ 나쁨: "Does finance stuff"
System prompt를 상세하게 유지하기
Tool 사용 방법과 출력 형식에 대한 구체적인 가이드를 포함하세요:Tool set 최소화하기
Subagent에게 필요한 tool만 제공하세요. 이는 집중도와 보안을 향상시킵니다:작업별로 model 선택하기
다른 model은 다른 작업에서 뛰어납니다:간결한 결과 반환하기
Subagent에게 원시 데이터가 아닌 요약을 반환하도록 지시하세요:일반적인 패턴
여러 특화된 subagent
다른 도메인을 위한 특화된 subagent를 생성하세요:- 메인 agent가 고수준 계획 생성
- data-collector에 데이터 수집 위임
- 결과를 data-analyzer에 전달
- 인사이트를 report-writer에 전송
- 최종 출력 컴파일
문제 해결
Subagent가 호출되지 않음
문제: 메인 agent가 위임하는 대신 작업을 직접 수행하려고 합니다. 해결책:-
Description을 더 구체적으로 만들기:
-
메인 agent에게 위임하도록 지시하기:
컨텍스트가 여전히 비대해짐
문제: Subagent를 사용함에도 불구하고 컨텍스트가 채워집니다. 해결책:-
Subagent에게 간결한 결과를 반환하도록 지시하기:
-
대용량 데이터에 filesystem 사용하기:
잘못된 subagent가 선택됨
문제: 메인 agent가 작업에 부적절한 subagent를 호출합니다. 해결책: Description에서 subagent를 명확하게 구분하세요:Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.