본문 바로가기

직장 생활/질문 응답

랭그래프에 등록된 노드에서 호출한 에이전트의 writer 이벤트 전달하기 (tool)

 

들어가며...

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 옵션이 있습니다.

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 데이터로 전달하는 과정을 고민하는 저와 같은 사람이 있을까 싶어 공유해 봅니다.