Deep Agents
Deep Agents는 LangGraph 플랫폼에서 제공하는 자율적으로 장시간 실행되는 에이전트 프레임워크입니다. 복잡한 작업을 독립적으로 수행하고, 필요에 따라 하위 에이전트를 생성하며, 격리된 환경에서 코드를 실행할 수 있습니다.
핵심 개념
| 개념 | 설명 |
|---|
| Deep Agent | 자율적으로 작업을 수행하는 장기 실행 에이전트 |
| Skills | 에이전트가 사용할 수 있는 도구와 능력 세트 |
| Subagents | 복잡한 작업을 위해 생성하는 하위 에이전트 |
| Sandbox | 코드 실행을 위한 격리된 환경 |
| Backend | 에이전트 실행을 관리하는 인프라 |
일반 Agent vs Deep Agent
| 항목 | 일반 Agent | Deep Agent |
|---|
| 실행 시간 | 초~분 | 분~시간 |
| 실행 환경 | 로컬 프로세스 | 격리된 Sandbox |
| 하위 작업 | 도구 호출 | Subagent 생성 |
| 상태 관리 | 체크포인터 | 내장 Persistence |
| 코드 실행 | 제한적 | 격리 환경에서 자유롭게 |
| 적합한 작업 | 질문 답변, 검색 | 코드 생성, 데이터 분석, 보고서 작성 |
Quickstart
from langgraph.prebuilt import create_react_agent
from langchain.chat_models import init_chat_model
llm = init_chat_model("gpt-4o", temperature=0)
# Deep Agent 스타일의 ReAct 에이전트 생성
agent = create_react_agent(
model=llm,
tools=tools,
prompt="당신은 연구 보조 AI입니다. 주어진 도구를 활용하여 작업을 완수하세요.",
)
# 실행
result = agent.invoke({
"messages": [HumanMessage(content="RAG 아키텍처 비교 보고서를 작성해줘")]
})
Skills (능력)
Skills는 에이전트에게 부여하는 도구와 능력의 집합입니다.
from langchain_core.tools import tool
@tool
def read_file(path: str) -> str:
"""파일을 읽어 내용을 반환합니다."""
with open(path, "r") as f:
return f.read()
@tool
def write_file(path: str, content: str) -> str:
"""파일에 내용을 작성합니다."""
with open(path, "w") as f:
f.write(content)
return f"파일 저장 완료: {path}"
@tool
def run_python(code: str) -> str:
"""Python 코드를 실행합니다."""
# 프로덕션에서는 Sandbox에서 실행
import subprocess
result = subprocess.run(
["python", "-c", code],
capture_output=True, text=True, timeout=30,
)
return result.stdout or result.stderr
# Skills 구성
skills = [read_file, write_file, run_python, web_search]
Skill 카테고리
| 카테고리 | 예시 | 설명 |
|---|
| 정보 수집 | 웹 검색, 문서 검색, API 호출 | 외부 정보 획득 |
| 파일 조작 | 읽기, 쓰기, 편집 | 파일 시스템 작업 |
| 코드 실행 | Python, Shell | 계산, 데이터 처리 |
| 커뮤니케이션 | 이메일, 슬랙 | 외부 알림 |
Subagents (하위 에이전트)
복잡한 작업을 하위 에이전트에게 위임합니다.
from langgraph.prebuilt import create_react_agent
# 전문 하위 에이전트 생성
researcher = create_react_agent(
model=llm,
tools=[web_search, read_file],
prompt="데이터 수집 전문가. 요청된 정보를 수집하세요.",
)
analyst = create_react_agent(
model=llm,
tools=[run_python],
prompt="데이터 분석 전문가. 수집된 데이터를 분석하세요.",
)
# 메인 에이전트에서 하위 에이전트를 도구로 활용
@tool
def delegate_research(query: str) -> str:
"""연구 에이전트에게 정보 수집을 위임합니다."""
result = researcher.invoke({
"messages": [HumanMessage(content=query)]
})
return result["messages"][-1].content
Backends & Sandboxes
Deep Agent의 코드 실행은 격리된 Sandbox에서 수행됩니다.
| Backend | 격리 수준 | 속도 | 적합한 환경 |
|---|
| Docker | 높음 | 보통 | 프로덕션 |
| E2B | 매우 높음 | 빠름 | 클라우드 |
| Modal | 높음 | 빠름 | GPU 작업 |
| 로컬 | 없음 | 매우 빠름 | 개발 |
코드 실행 도구(run_python 등)는 프로덕션에서 반드시 격리된 Sandbox에서 실행하세요. 로컬 실행은 보안 위험이 있습니다.
사용 시나리오
| 시나리오 | Deep Agent 활용 | 일반 Agent와 차이 |
|---|
| 코드 생성 + 실행 | Sandbox에서 안전한 코드 실행 | 코드만 생성 (실행 불가) |
| 데이터 분석 보고서 | 수집 → 분석 → 시각화 → 보고서 자동화 | 단순 질문 답변 |
| 멀티스텝 리서치 | Subagent로 병렬 조사 + 종합 | 순차적 도구 호출 |
| 장기 실행 작업 | 시간/일 단위 작업 지원 | 시간 초과 위험 |
시작 추천: 먼저 create_react_agent로 기본 에이전트를 구축하세요. 작업이 복잡해지면 Subagent를 추가하고, 코드 실행이 필요하면 Sandbox를 연결합니다.
참고 자료