들어가며...
https://docs.langchain.com/oss/python/releases/changelog
Changelog - Docs by LangChain
Log of updates and improvements to our Python packages
docs.langchain.com
최근에 랭체인 & 랭그래프 버전이 업그레이드(10월 20일 메이저 1.0 버전) 되면서 편리한 기능들이 많이 도입되었습니다.
create_agent & middleware 조합으로 추론 & 툴 호출에 대한 강력한 지원을 방향으로 잡고
LLM 호출 루프 & 미들웨어 & 콜백을 강력하게 지원해주고 있습니다.
기존 에이전트 시스템을 마이그레이션 하는 과정에서 SSE 데이터의 흐름이 끊기는 상황을 확인했습니다.
그래프의 runtime에서 제공된 writer는 잘 동작하지만,
그래프에 등록된 노드 안에 있는 에이전트의 runtime으로 호출되는 writer를 바깥 그래프 호출에서 잡지 못하는 상황이었습니다.
graph.astream()...
-> 등록된 노드에서의 runtime writer : 이벤트 캐치 O
-> 노드 안에 있는 에이전트의 runtime writer: 이벤트 캐치 X
전달될 커스텀 이벤트들은 사용자의 사용성을 개선하기 위해서 전달되는 진행 과정에 대한 정보들이어서, 매우 중요한 정보였습니다.
해결책은 생각보다 간단했습니다.
astream의 옵션 중 subgraph 옵션이 있습니다.

create_agent는 랭그래프를 엔진으로 두고 있습니다.
그래프를 정의할 때 노드 안에 있는 에이전트들은 사실상 단일 서브 그래프로 봐야 하는 것이죠.
랭그래프를 감싸는 그래프를 정의하는 것이다 보니, subgraph를 True로 설정해야, 스트림 이벤트가 서브그래프까지 전달됩니다.
https://docs.langchain.com/oss/python/langgraph/streaming#stream-subgraph-outputs
Streaming - Docs by LangChain
Extended example: async custom streaming with stream writer
docs.langchain.com
tool 호출 과정을 SSE 데이터로 전달하는 과정을 고민하는 저와 같은 사람이 있을까 싶어 공유해 봅니다.
'직장 생활 > 질문 응답' 카테고리의 다른 글
| 에이전트에서 툴 결과 응답만 내려주도록 구현하기 [feat: langchain] (0) | 2025.12.08 |
|---|---|
| 에이전트 애플리케이션 고민. 자율성과 신뢰성의 트레이드 오프 (3) | 2025.06.07 |
| 벡터와 임베딩의 차이점이 뭘까? (0) | 2025.05.11 |