← Docs hub

Speaker Identity And A2A Service Context

이 문서는 온디바이스 test_sherpa_module 브랜치의 화자 분리/인식 PoC와 Cloud feature_a2a_task_orchestration_cloud 브랜치의 A2A Task Manager 구조를 하나의 서비스 확장 축으로 정리한다.

핵심 결론은 다음과 같다.

Speaker Identity Service Axis

1. 분석 기준 브랜치와 소스

영역 브랜치 핵심 파일
On-device Agent test_sherpa_module SpeakerIdentificationEngine.kt, DiarizationEngine.kt, SpeakerStabilityFeature.kt, SpeakerListActivity.kt, SpeakerHistoryActivity.kt, docs/SPEAKER_THRESHOLDS.md
Cloud LLM Lambda feature_a2a_task_orchestration_cloud gemini/a2a/runtime/orchestrator.py, task_manager.py, session_state.py, memory_context.py, planner/main_router_api.py
Wiki 기존 축 shared llmwiki docs/a2a/*, docs/sk-intellix/*

주의:

1-1. 하위 문서

문서 목적
Entry Points 관계성 높은 기능/책임 단위로 묶은 읽기 진입점
Source Map 온디바이스/Cloud 파일별 책임과 함수 흐름 상세
PUI Launcher 화자 등록 Overlay 구현 설계 보호된 broadcast와 Service overlay, entrySource별 닫기·결과 상태, 추후 UI 가이드 반영 경계
Speaker Enrollment Service Phase 1 Plan 런처앱 음성 등록 화면과 온디바이스 AI 모듈 등록 엔진을 나누는 서비스화 1단계 계획
Speaker Context Contract speaker_context JSON 계약과 상태 전이
Speaker Memory Management 화자별 대화 기록, short/mid/long memory, profile 후보 관리
Speaker Identity Service Planning Voice ID, 바이탈 사인 Face ID, 컨트롤 앱 계정, Google 연동을 포함한 서비스 identity 모델
Speaker Following And Personalization Strategic Roadmap 화자를 추종하고 개인화하는 이유, 서비스 확장 지도, 단계형 미래 로드맵
Service Opportunity Backlog 화자 인식을 개인화, 바이탈, 가족 권한, 외부 계정, proactive care로 확장하는 가능성 백로그
Service Scenarios 단일 화자, 다화자 차단, 개인화, 권한, 복합명령 owner 시나리오
TaskManager Integration Cloud A2A Task Manager와 speaker owner/side-effect gate 연계
Privacy And Safety voiceprint, 대화 기록, 삭제, 동의, 로그 정책
Test Plan PoC부터 Cloud A2A/Task Manager까지 계층별 검증 계획
Evidence And Gap Audit 요구사항별 충족 증거와 제품화 전 남은 검증 공백
Implementation Roadmap 후속 제품 구현을 위한 티켓 분해, 수정 파일, 검증 게이트
Traceability And Completion Audit 사용자 요구사항, 근거 문서, 배포/검증 증거, 제품화 갭을 한 장에서 추적

먼저 어디서부터 봐야 할지 판단하기 어렵다면 Entry Points를 기준으로 본다. 이 페이지는 전체 이해, 온디바이스 화자 PoC, Cloud A2A 연결, 메모리/개인화/권한, 복합명령/TaskManager, 검증/운영 판단으로 문서를 다시 묶는다.

2. 온디바이스 PoC 구성

On-device Speaker PoC Architecture

2.1 SpeakerIdentificationEngine

소스:

app/src/main/java/com/skmagic/ondeviceai/agent/service/module/SpeakerIdentificationEngine.kt

현재 역할:

현재 계약상 의미:

항목 현재 값/동작 서비스 의미
sample rate 16000 STT/diarization/embedding 입력 정렬 기준
default threshold 0.45f 등록 화자 accepted/unknown 경계
embedding asset embedding.onnx 등록/검색에 공통 사용되는 모델
등록 단위 speaker name + WAV paths 사용자별 voiceprint seed
검색 결과 SearchResult(name, score) speaker_id와 confidence의 원천

제약:

2.2 DiarizationEngine

소스:

app/src/main/java/com/skmagic/ondeviceai/agent/service/module/DiarizationEngine.kt

현재 역할:

서비스 의미:

제약:

2.3 SpeakerStabilityFeature

소스:

app/src/main/java/com/skmagic/ondeviceai/agent/service/extension/SpeakerStabilityFeature.kt

현재 역할:

서비스 의미:

3. 현재 차단/재시도 정책

소스:

docs/SPEAKER_THRESHOLDS.md
app/src/main/res/values/strings.xml
app/src/main/res/values-en/strings.xml

현재 문서화된 정책:

상황 조건 안내/동작
거리 멂 rms < 0.015 and hf_ratio < 0.18 가까이에서 다시 말하도록 안내
겹침 발화 overlapRatio >= 0.35 한 명씩 말하도록 안내
화자 과다 speakerCount >= 3 조용한 환경에서 다시 호출하도록 안내
다화자 대부분 unknown speakerCount >= 2, unknownRatio >= 0.9, maxScore <= 0.5 다화자 안내 후 중단
저신뢰 allUnknown, maxScore <= 0.5, multiSpeaker 또는 짧은 발화 가까이에서 다시 말하도록 안내

이 정책은 기능 실행 전에 적용되어야 한다. 이유는 speaker context가 불안정한 상태에서 개인화/권한/복합명령을 수행하면 사용자 경험보다 안전 리스크가 더 커지기 때문이다.

4. Cloud A2A와 연결되는 컨텍스트 계약

Speaker Context Contract

Cloud A2A의 현재 구조는 voice_context 중심이다.

관련 소스:

gemini/a2a/runtime/session_state.py
gemini/a2a/runtime/memory_context.py
gemini/a2a/runtime/orchestrator.py
gemini/a2a/runtime/task_manager.py

현재 normalize_voice_context()는 다음 필드를 기본화한다.

recognized_text
asr_confidence
audio_locale
slot_state
handoff_chain
replan_reason
selected_flow_id
owner_selection

화자 인식이 제품 경로에 들어오면 아래 additive field로 확장하는 것이 안전하다.

{
  "voice_context": {
    "recognized_text": "거실 청정하고 10분 뒤에 돌아와",
    "session_id": "sess_001",
    "asr_confidence": 0.94,
    "audio_locale": "ko-KR",
    "speaker_context": {
      "contract_version": "speaker-context-v1",
      "speaker_id": "user_001",
      "display_name": "아빠",
      "speaker_confidence": 0.72,
      "speaker_state": "identified",
      "speaker_count": 1,
      "overlap_ratio": 0.0,
      "unknown_ratio": 0.0,
      "max_score": 0.72,
      "safety_gate": "pass",
      "personalization_allowed": true,
      "authority_level": "normal",
      "source": "ondevice_sherpa_poc"
    }
  }
}

권장 상태값:

필드 값 예시 의미
speaker_state identified, unknown, ambiguous, multi_speaker, overlap, far_speech Cloud가 개인화와 실행 위험을 판단하는 1차 상태
safety_gate pass, reprompt, block 온디바이스가 이미 차단했는지 또는 Cloud가 보수적으로 처리해야 하는지
personalization_allowed true/false memory/profile 사용 가능 여부
authority_level normal, restricted, child, guest, unknown 실행 권한 정책의 미래 확장 포인트

중요 원칙:

5. A2A Task Manager와 서비스 확장 지점

Cloud A2A 현재 구조:

화자 컨텍스트가 들어오면 확장 가능한 지점은 다음이다.

확장 지점 현재 소스 적용 방식
owner persistence derive_owner_selection() 직전 확정 화자와 active workflow owner가 다르면 확인 질문
memory update build_memory_update() short_term_pair에 speaker_id를 포함하고 profile 후보를 speaker별로 분리
task execution gate build_device_task_requests() speaker_state != identified이면 side-effect task를 confirmation 요구로 낮춤
route planning route_turn() / preclassifier speaker_context를 prompt support context로 제공하되 현재 발화 우선
workflow continuation workflow_context active workflow를 시작한 speaker와 후속 발화 speaker가 다르면 takeover 정책 적용

6. 서비스 확장 방향

Service Expansion Roadmap

6.1 1단계: 안전한 단일 화자 확인

목표:

서비스 효과:

6.2 2단계: 사용자별 대화 기록

현재 UI:

확장 방향:

6.3 3단계: 개인화 기능

예시:

주의:

6.4 4단계: 권한/보호자/게스트 정책

예시:

주의:

6.5 5단계: 복합명령 소유자 관리

복합명령 예:

거실 청정하고 10분 뒤에 침실로 와

Task Manager 관점:

speaker context 적용:

7. 권장 아키텍처

권장 흐름:

Audio
-> STT raw/processed
-> Diarization
-> Speaker Identification
-> Speaker Safety Gate
-> voice_context.speaker_context
-> Cloud A2A Router / Memory / Task Manager
-> Device task or TTS

권장 모듈 책임:

모듈 책임
On-device audio pipeline 음성 수집, STT, diarization, embedding, speaker gate
Speaker context builder speaker_context 계약 생성, PII 최소화
Cloud A2A router 현재 발화와 speaker_context를 함께 보고 route/skill 선택
Memory runtime speaker별 short/mid/long memory 분리
Task Manager speaker_state와 workflow owner에 따른 실행/확인/차단
UI/Settings 화자 등록/조회/삭제, 기록 삭제, 권한 설정

8. 오픈 포인트

항목 현재 상태 필요 작업
등록 화자 영속화 in-memory 중심 + UI 디렉터리 구조 일부 존재 embedding 저장/로드/삭제 계약 필요
speaker_context payload 아직 Cloud 표준 필드 아님 speaker-context-v1 계약 확정 필요
Cloud planner prompt 반영 A2A voice_context는 확장 가능 speaker context를 evidence로 쓰는 prompt 규칙 필요
Task Manager 권한 정책 device_task_requests 생성 구조 존재 side-effect task gate 정책 필요
개인정보/삭제 기록 삭제 UI 일부 존재 voiceprint/profile 삭제와 sync 정책 필요
테스트 PoC 수준 등록/인식/다화자/겹침/unknown/복합명령 owner 테스트 필요

9. 다음 문서 확장 계획

이 세션은 다음 문서로 확장한다.

문서 목적
source-map.md 온디바이스/Cloud 파일별 책임과 함수 흐름 상세
speaker-context-contract.md speaker_context JSON 계약과 상태 전이
service-scenarios.md 개인화/권한/복합명령/다화자 시나리오
privacy-and-safety.md 음성 임베딩/기록/삭제/동의/권한 정책
test-plan.md PoC 재현 테스트와 서비스 확장 검증표

현재 1차 문서는 전체 축을 잡기 위한 overview이며, 이후 문서는 위 순서로 분해하는 것이 좋다.

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date