콘텐츠로 이동

Socket Backend

Socket Backend는 /sohri 단일 WebSocket 엔드포인트에서 음성 대화를 오케스트레이션하는 Java 25·Spring Boot 4 서비스입니다. 기본 sohri 경로는 EPD, Dialog Manager(DM), TTS를 연결하고, 선택형 openai_realtime 경로는 OpenAI Realtime의 VAD·STT·대화·음성을 중계합니다. 두 경로 모두 대화·메시지·분석 결과를 PostgreSQL에 저장하고 공통 종료 후처리를 사용합니다.

EPD가 STT를 포함합니다

기본 경로에서 EPD는 발화 구간만 검출하는 컴포넌트가 아닙니다. END 응답에 STT 텍스트, confidence, 음성 경로를 함께 반환합니다. Socket Backend가 별도 STT 서비스를 호출하는 것으로 이해하면 턴 순서와 지연 지표를 잘못 해석하게 됩니다.

핵심 특성

  • 연결 직후 대화 행을 만들지만, 기본 경로의 EPD 연결은 첫 PCM에서 지연 생성합니다.
  • conversation_session_update로 엔진을 명시할 수 있습니다. 설정 전에 PCM이 먼저 오면 sohri가 선택되며 이후 엔진 변경은 거절됩니다.
  • 유효한 EPD END를 수락할 때만 입력 게이트를 닫습니다. TTS와 dialog_response 전송이 끝난 뒤 게이트를 열고, 즉시 분석 모드라면 그 다음에 분석합니다.
  • 바지인은 이미 저장된 USER/BOT 메시지와 완료된 DM 호출을 롤백하지 않습니다. 응답 generation을 바꿔 늦게 도착한 오디오·텍스트만 억제합니다.
  • 스트리밍 TTS가 취소되면 이미 열린 재생 큐를 닫도록 tts_stream_end{status:"aborted"}를 보냅니다.
  • 종료 후처리는 대기 중 기록을 최대 5초 기다린 뒤 분석과 일반 대화 요약을 병렬 실행하고, 둘의 join 뒤 바이오마커 요약을 실행합니다. 마음온 회신은 마지막에 비동기로 예약합니다.

문서 안내

책임 경계

Socket Backend는 WebSocket 실시간 파이프라인, 외부 EPD/DM/TTS/분석 연동, 그 결과의 영속화를 담당합니다. 회원·로그인 REST, 대시보드 조회 REST, 시나리오 저작 REST는 이 서비스의 범위가 아닙니다. HTTP 표면은 /healthz, 관리 포트의 Actuator, EPD 운영 보조 /api/epd-test/** 정도입니다.