Give Your AI Voice Companion a User-Controlled Operating Mode
개요
음성 동반자(voice companion)는 사용자의 모든 문장 승인을 원하지 않으면서도 AI가 코치, 비평가, 조언자 역할을 언제 할지 조용히 결정하는 것을 원치 않는 제품적 긴장을 가지고 있습니다. 이에 대한 해결책으로 TypeScript를 사용하여 사용자 제어가 가능한 운영 모드를 갖춘 제어 계층을 구축하는 방법을 설명합니다.
주요 내용
* 제품적 긴장 해소: 음성 동반자는 사용자가 모든 발언을 승인하는 것을 원치 않지만, AI가 자체적으로 역할을 결정하는 것을 바라지 않는 상충되는 요구를 가집니다.
* 운영 모드 제시: 'Listen'(경청), 'Explore'(탐색), 'Advise'(조언)와 같은 명확한 운영 모드를 사용자에게 제공하여 제어권을 부여합니다.
* 애플리케이션의 역할: LLM은 언어를 생성하지만, 애플리케이션은 모드를 소유하고, 응답 유형을 검증하며, 오래된 작업을 처리하고, 안정적인 중단 경로를 제공합니다.
* 아키텍처 구성 요소: 마이크, RTC/미디어 전송, 음성 인식, 최종 전사본, 애플리케이션 세션 컨트롤러, LLM, 구조화된 응답 제안, 애플리케이션 정책 게이트, 음성 합성 등으로 구성됩니다.
* TypeScript 기반 구현: zod 라이브러리를 사용하여 데이터 계약을 정의하고, Mode, Phase, ResponseKind 등의 타입을 명확히 합니다.
* 모드별 규칙 및 허용 목록: 각 운영 모드에 대한 명확한 지침(modeRules)과 허용되는 응답 종류(allowedKinds)를 설정하여 모델의 행동을 제어합니다.
* 프롬프트 구성: 사용자 전사본을 래핑하고, 현재 모드와 수정본 번호를 포함하는 시스템 프롬프트를 동적으로 생성합니다.
* LLM 어댑터: LLM 제공자와의 인터페이스를 추상화하여 애플리케이션 코드에서 직접적인 LLM API 호출을 분리합니다.
* 정책 평가: LLM의 응답이 구조화되었는지, 그리고 현재 모드에 허용된 응답 종류인지 검증합니다.
* 탄력적 대체 응답: 모델 응답이 유효하지 않을 경우, 현재 모드에 맞는 미리 정의된 대체 응답(fallbackFor)을 제공합니다.
* 세션 관리: VoiceSession 클래스는 세션 상태, 모드 변경, 전사본 처리, LLM 호출, 음성 출력 등을 관리하며, 중단 및 상태 변경을 처리합니다.
* 테스트 전략: 단위 테스트를 통해 상태 불변성(invariant)을 검증하고, 실제 사용 시나리오를 모방한 스크립트 기반 테스트로 실패 사례를 점검합니다.
* 사용자 제어 및 가시성: 선택된 모드는 항상 사용자에게 보여야 하며, 오직 신뢰할 수 있는 애플리케이션 코드만이 모드를 변경할 수 있습니다.
시사점
이 구조화된 접근 방식은 AI 음성 동반자의 예측 불가능성을 제어하고, 사용자에게 명확하고 신뢰할 수 있는 경험을 제공하며, LLM의 유연성과 애플리케이션의 결정론적 제어 간의 균형을 맞추는 데 필수적입니다.
댓글
GitHub Discussions