딥 에이전트 이벤트 스트리밍하기
딥 에이전트 이벤트 스트리밍하기 (Event Streaming)
Deep Agents에서 서브에이전트(subagent), 메시지, 툴 호출, 그리고 최종 출력을 스트리밍하는 방법을 다루는 페이지예요. 특히 위임된 서브에이전트에서 오는 스트리밍을 stream.subagents로 처리하는 부분이 핵심이에요. 일반적인 에이전트 스트리밍(stream.messages, stream.values, 툴 호출, 커스텀 업데이트)은 LangChain 이벤트 스트리밍 문서에서 다루니까 그쪽도 참고해 주세요.
출처: 공식문서
서브에이전트 스트리밍
Deep Agents는 LangGraph 스트리밍 위에 서브에이전트 프로젝션(projection)을 추가해요. 위임된 task 호출 하나당 스트림 핸들 하나를 원할 때 stream.subagents를 사용해요. 이 프로젝션은 가벼워서 서브에이전트 task를 먼저 발견하고, 메시지·툴 호출·값 스트림은 서브에이전트 핸들에서 해당 프로젝션에 접근할 때만 열려요.
stream = agent.stream_events({
"messages": [{"role": "user", "content": "Write me a haiku about the sea"}],
}, version="v3")
for subagent in stream.subagents:
print(subagent.name, subagent.path, subagent.status)
for message in subagent.messages:
print(message.text)
서브에이전트 스트림 필드
각 서브에이전트 스트림은 부모 실행과 같은 종류의 프로젝션(메시지, 툴 호출, 중첩 서브에이전트, 최종 출력)을 노출해요. 파이썬에서는 tool_calls처럼 snake_case 프로젝션 이름을 사용해요.
| 필드 | 설명 |
|---|---|
name |
서브에이전트 이름 |
messages |
서브에이전트가 내보낸 메시지 |
subagents |
중첩된 서브에이전트 호출 |
output |
최종 서브에이전트 상태 또는 위임 task의 완료 신호 |
path |
서브에이전트 스트림의 네임스페이스 경로 |
status |
started, completed, failed, interrupted 같은 생명주기 상태 |
tool_calls |
서브에이전트에 범위가 한정된 툴 호출 |
서브에이전트 생명주기 추적
어떤 서브에이전트가 시작하고 끝났는지만 보여주면 될 때는 stream.subagents를 사용해요. 개별 서브에이전트에서 해당 프로젝션에 접근하지 않는 한 메시지·값 스트림을 구독할 필요는 없어요.
stream = agent.stream_events(input, version="v3")
running = 0
completed = 0
failed = 0
for subagent in stream.subagents:
running += 1
print(f"{subagent.name}: started")
try:
_ = subagent.output
running -= 1
completed += 1
print(f"{subagent.name}: completed")
except Exception:
running -= 1
failed += 1
print(f"{subagent.name}: failed")
메시지·툴 호출·중첩 작업 스트리밍
Deep Agents는 코디네이터 에이전트와 서브에이전트 양쪽에서 메시지를 내보낼 수 있어요. 스트리밍 툴 호출, 중첩된 작업(nested work), 그리고 여러 스트림을 동시에 소비(consume concurrently)하는 방법은 문서에서 계속 소개돼요. 서브에이전트(subagent)와 서브그래프(subgraph)의 차이도 관련 문서에서 비교할 수 있어요.
더 알아보기 (Learn more)
- 일반 에이전트 스트리밍 모델(
stream.messages,stream.values)은 LangChain 이벤트 스트리밍 문서를 참고하세요. - 각 스트림 필드와 최종 출력에 대한 자세한 내용은 상위 페이지의 링크에서 확인할 수 있어요.