스크립트 테스트로 못 잡는 음성 에이전트 버그 7가지
Shipped a voice agent on the Realtime API. Went through production call logs and found 7 behavioral bugs that no amount of scripted testing would have caught
·2026.09.15 04:14
핵심 내용
실제 통화 로그 분석을 통해 음성 에이전트의 시스템 프롬프트 누출, 종료 무시 등 7가지 행동 버그를 발견하고 해결한 사례를 공유했다.
자세히 보기
Realtime API 기반 비즈니스 음성 에이전트를 프로덕션 환경에서 운영하며 실제 통화 로그(raw transcripts)를 분석한 결과, 스크립트 기반 테스트로는 발견하기 어려운 7가지 행동 버그를 식별하고 해결했다.
주요 발견된 버그 및 해결책
- 시스템 프롬프트 누출: 사용자가 내부 지시문을 낭독하면 에이전트가 이를 확인하고 반복했다. 유사한 사용자 입력에 대해 의도만 응답하도록 수정했다.
- 종료 신호 무시: 사용자가 "I'm done" 등 종료 의사를 4회 연속 보내도 에이전트가 통화를 종료하지 않았다. 비수락 응답을 거절로 간주하고 즉시 종료하도록 로직을 변경했다.
- 시간 오차: 모델이 주입된 시간 값을 재계산하여 실제 시간과 9시간 이상 차이가 발생했다. 주입된 시간은 그대로 읽게 하고 모델의 자체 연산을 금지했다.
- 비결정적 추출: 구조화 추출 호출의 temperature가 0.4로 설정되어 동일 대화에서 액션 아이템이 불일치했다. 모든 추출/분류 호출의 temperature를 0으로 낮춰 결정적(deterministic) 동작을 보장했다.
- 복합 요청 누락: LangGraph 라우터가 턴당 하나의 응답 노드만 처리하여 일부 응답이 누락됐다. 여러 노드로 fan-out하고 병렬 쓰기 병합 및 메시지 태그 기반 정렬을 적용해 해결했다.
- 교차 주제 기억 상실: 한 주제 답변 중 언급된 다른 주제 관련 사실을 인식하지 못해 질문을 반복했다. 서버 측 추적 도구를 주제 단위 커버리지 추적으로 확장하여 영구 상태(durable state)를 관리하도록 개선했다.
- 피로 신호 무시: 사용자가 시간/질문 수에 대한 불만을 표시해도 에이전트가 정중히 인정만 하고 동일한 페이싱을 유지했다. 피로 신호 감지 시 질문 단위 페이싱을 중단하고 전체 정보를 수집하는 모드로 전환하는 스위치를 추가했다.
운영 시사점
스크립트 기반 테스트 수 주보다 원본 대화 로그 하루 검토가 실제 버그 발견에 더 효과적이었다. 프로덕션 음성 에이전트 운영 시 요약이나 평가 점수 대신 원본 로그를 정기적으로 검토할 것을 권장했다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.