콘텐츠로 이동

책임과 신뢰 경계

Sohri Platform은 핵심 대화 제어, 교체 가능한 외부 제공자, 선택적 클라이언트·채널 어댑터를 분리합니다. 배포 토폴로지가 달라져도 이 소유권은 유지해야 합니다.

세 경계

flowchart LR
    subgraph CH["선택적 클라이언트·채널 경계"]
        C["일반 클라이언트"]
        CA["채널 어댑터"]
    end

    subgraph CORE["Sohri 핵심 경계"]
        GW["WebRTC Gateway"]
        S["Socket Backend"]
        G["Graph Builder"]
        APP["App Backend"]
        DB[("PostgreSQL")]
        ST[("DM 세션 저장소")]
    end

    subgraph EXT["외부 제공자 경계"]
        E["EPD + STT"]
        L["LLM"]
        T["TTS"]
        V["Vocal Biomarkers"]
        R["Sohri Skill Runtime"]
        K["Skill Engine / 외부 API"]
    end

    C --> GW
    CA -.-> GW
    GW --> S
    S --> G
    S --> DB
    APP --> DB
    G --> ST
    S <--> E
    G <--> L
    S <--> L
    S <--> T
    S <--> V
    G -.-> R
    R -.-> K

특정 미디어 서버나 회의실 토폴로지는 채널 구현 선택이며 Sohri 핵심으로 간주하지 않습니다. 채널 어댑터가 있더라도 내부 대화 상태, 공급자 자격 증명 또는 DB를 소유해서는 안 됩니다.

책임 매트릭스

영역 책임 주체 책임이 아닌 것
사용자·워크스페이스 인증과 관리 API App Backend 실시간 PCM 처리
WebRTC 미디어·코덱·재생 세대 WebRTC Gateway 최종 credential 판정, 대화 정책
WebSocket 인증·세션·턴 조정 Socket Backend 시나리오 전이 규칙, Skill Engine 직접 호출
발화 경계와 STT EPD 대화 상태 전이와 응답 생성
NLU·정책·NLG·상태 전이 Graph Builder 미디어 전송, TTS 재생
공통 Skill 실행 계약 변환·오류 정규화 Sohri Skill Runtime 스킬별 제공자 자격 증명, 자동 재시도·캐시
스킬별 입력 검증·외부 API 연동 Skill Engine 전체 대화 세션 소유
대화·분석 쓰기 Socket Backend 관리 조회 API
대화·분석 읽기 App Backend 실시간 분석 재실행
스키마 물리 정본 DB 스키마 저장소 개별 서비스의 임의 DDL
채널별 이벤트·미디어 변환 선택적 채널 어댑터 Sohri 내부 계약 재정의

신뢰 경계와 검증

클라이언트·Gateway

  • WebRTC Gateway의 선행 형식 검사는 최종 인증이 아닙니다.
  • Socket Backend가 /sohri 연결에서 서명, 만료, workspace와 권한을 판정합니다.
  • 오디오·이벤트 크기, 순서, 세션 상관키와 허용 메시지 유형을 경계에서 검증합니다.
  • 채널 어댑터가 전달한 사용자·대화 식별자를 무조건 신뢰하지 않습니다.

핵심 서비스 간

  • App Backend와 Socket Backend의 결합점은 인증 토큰 계약과 공유 DB 계약입니다. 실시간 대화 기록을 위해 서로의 HTTP API를 호출한다고 가정하지 않습니다.
  • Graph Builder 요청은 세션 ID, 텍스트, confidence와 시나리오에 필요한 최소 문맥으로 제한합니다.
  • 공유 DB 접근은 서비스별 읽기·쓰기 소유권과 workspace 범위를 적용합니다.
  • 같은 세션의 상태 변경은 lock으로 직렬화하고, 종료·최종화는 멱등 처리합니다.

외부 제공자

  • 모든 외부 응답은 schema, 크기, timeout과 상태 코드를 검증한 뒤 내부 계약으로 정규화합니다.
  • 제공자 출력은 신뢰할 수 없는 데이터이며 프롬프트 지시나 임의 상태 변경으로 실행하지 않습니다.
  • 재시도는 멱등성, 지연 예산과 중복 side effect를 고려해 어댑터별로 제한합니다.
  • 구현 가용성과 배포 활성화는 별개입니다. 어댑터가 존재해도 자격 증명, 네트워크, 정책 또는 기능 플래그가 없으면 사용할 수 없습니다.

데이터 최소화

경계 허용 데이터 제외 원칙
Gateway → Socket 세션 credential, PCM, 제어 이벤트 공급자 key, DB 내부 필드
Socket → EPD PCM, 발화·재생 상태 전체 사용자 프로필, 대화 전체
Socket → Graph Builder 세션 상관키, STT 텍스트·confidence, 필요한 옵션 원시 credential, 불필요한 음성
Graph Builder → Sohri Skill Runtime 시나리오가 allowlist한 arguments/context 전체 session_user, 내부 상태 전체
Socket → TTS 응답 텍스트, 논리적 음성 설정 인증 토큰, 불필요한 사용자 정보
분석·요약 제공자 확정 발화 또는 확정 메시지 취소 발화, 운영 설정, 비밀 값

변경 규칙

  1. 제공자 교체는 내부 데이터 계약을 유지하는 어댑터 변경으로 제한합니다.
  2. 공유 DB 변경은 스키마 정본에서 시작하고 생산자·소비자 매핑을 함께 검증합니다.
  3. 새 채널은 Gateway 또는 별도 어댑터에서 변환하며 Socket Backend의 핵심 턴 의미를 바꾸지 않습니다.
  4. 새 스킬은 Sohri Skill Runtime 계약과 시나리오 allowlist를 사용하고 Graph Builder에서 외부 API를 직접 호출하는 예외를 만들지 않습니다.
  5. 비밀 값과 환경별 endpoint는 버전 관리 문서·예제 payload·클라이언트 이벤트에 포함하지 않습니다.

관련 문서