피드로 돌아가기
Live chain-of-thought in a chatbot: how to actually stream the tool calls (not just the text)
Dev.toDev.to
Backend

SSE 기반 실시간 Tool Call 스트리밍으로 Agent CoT 가시성 확보

Live chain-of-thought in a chatbot: how to actually stream the tool calls (not just the text)

Bernard Uriza2026년 5월 28일10intermediate

Context

기존 LLM 챗봇의 스트리밍 방식은 텍스트 출력에만 집중하여 도구 호출 과정이 블랙박스로 처리됨. 이로 인해 사용자는 실제 작업 수행 시간 동안 단순 타이핑 인디케이터만 확인하며 시스템 신뢰도와 UX 저하를 경험함.

Technical Solution

  • ToolCall, Text, Result의 세 가지 이벤트 타입으로 세분화한 SSE 전송 계층 설계
  • FastAPI StreamingResponse와 X-Accel-Buffering: no 헤더 설정을 통한 Nginx 버퍼링 제거 및 즉각적 데이터 전송
  • PHI 유출 방지를 위해 내부 ToolCall 객체에서 input 필드를 제거한 별도의 ToolCallWire 전송 모델 정의
  • asyncio.timeout(180) 및 CancelledError 우선 처리 로직을 통한 좀비 LLM 호출 방지와 리소스 낭비 제거
  • MCP 서버 상태를 부팅 시점에 검증하는 Runner.preflight() 핸드셰이크 프로세스 도입
  • 사용자의 읽기 의도를 반영한 200px 임계값 기반의 조건부 자동 스크롤 UI 로직 구현

- SSE 도입 시 Nginx의 response buffering 설정 확인 - LLM 스트리밍 구현 시 클라이언트 연결 종료에 따른 upstream 취소 로직(CancelledError) 검증 - 보안 요구사항이 있는 경우 내부 도메인 모델과 전송용 Wire 모델을 엄격히 분리 - Agent 시스템 부팅 시 외부 MCP 서버와의 JSON-RPC 핸드셰이크를 통한 사전 상태 체크 수행

원문 읽기