에이전트는 여러 노드를 거치느라 응답이 느릴 수 있다. 스트리밍은 최종 결과를 기다리지 않고 실행 과정을 실시간으로 흘려보낸다. stream()에 stream_mode를 지정해 전체 상태·변경분·LLM 토큰 중 원하는 단위로 받는다.
이 강의 목표는 상황별 스트리밍 모드를 골라 쓰는 것이다.
1. 스트리밍 모드
| stream_mode | 받는 내용 |
|---|---|
values |
매 단계 전체 State |
updates |
각 노드가 바꾼 부분만 |
messages |
LLM이 생성하는 토큰 단위 |
debug |
상세 실행 이벤트 |
2. updates — 진행 상황 로깅
노드별로 무엇이 바뀌었는지 받아 진행 상황을 표시하기 좋다.
for chunk in app.stream(
{"messages": [("user", "긴 보고서 써줘")]},
{"configurable": {"thread_id": "t1"}},
stream_mode="updates"):
print(chunk) # {'chat': {'messages': [...]}} 형태
3. messages — 챗 UI 타이핑 효과
LLM 토큰을 조각조각 받아 화면에 흘려보낸다.
for tok, meta in app.stream(inp, cfg, stream_mode="messages"):
print(tok.content, end="", flush=True)
여러 모드를 동시에 받으려면 리스트로 준다: stream_mode=["updates", "messages"].
핵심 명령·용어
| 이름 | 뜻 |
|---|---|
app.stream() |
실행 과정 스트리밍 |
stream_mode |
스트리밍 단위 지정 |
values / updates |
전체 / 변경분 |
messages |
LLM 토큰 스트리밍 |
예제
# 비동기 스트리밍(FastAPI SSE 등)
async for tok, meta in app.astream(inp, cfg, stream_mode="messages"):
yield tok.content
해설) 서버에서 사용자에게 실시간 응답을 보낼 땐 astream + messages 모드가 표준이다. 내부 진행 로그가 필요하면 updates를 함께 받는다.
댓글 0
댓글은 운영자만 작성할 수 있어요.