Speaker Identity A2A Evidence And Gap Audit
이 문서는 화자 분리/인식 PoC와 Cloud A2A Task Manager 확장 문서의 요구사항 충족 상태를 증거 기준으로 점검한다.
목적은 “문서가 많다”가 아니라, 각 주장이 어떤 소스/계약/검증으로 뒷받침되는지와 제품화 전에 무엇이 더 필요한지를 명확히 남기는 것이다.
1. 감사 기준
| 항목 | 완료로 보는 증거 | 현재 상태 |
|---|---|---|
| 온디바이스 화자 등록/인식 PoC 분석 | 실제 소스 파일과 주요 함수/상수/제약이 문서화되어 있음 | 충족 |
| diarization 기반 화자 분리 분석 | segmentation/embedding 모델 경로와 segment 계약이 문서화되어 있음 | 충족 |
| 화자 안정화 정책 분석 | boost, decay, speaker count gate가 문서화되어 있음 | 충족 |
| Cloud A2A Task Manager 연결 분석 | orchestrator.py, task_manager.py, session_state.py, memory_context.py 연결 지점이 문서화되어 있음 |
충족 |
| speaker context 계약 제안 | additive JSON 계약과 상태 전이가 문서화되어 있음 | 충족 |
| 메모리/개인화 확장 | speaker-scoped memory, profile, authority policy가 문서화되어 있음 | 충족 |
| 서비스 시나리오 | 단일 화자, 다화자, 개인화, 권한, workflow owner 예시가 문서화되어 있음 | 충족 |
| 개인정보/안전 정책 | raw audio 금지, Reference Embedding sync, Query Embedding 비저장, 삭제/동의/logging 기준이 문서화되어 있음 | 충족 |
| 제품 identity model | OnDevice Voice ID 발급과 Cloud Person Profile 연결 관계가 문서화되어 있음 | 설계 충족, 구현 필요 |
| 테스트 계획 | PoC, contract, memory, TaskManager, release gate가 문서화되어 있음 | 충족 |
| 실제 제품 통합 완료 | ForegroundService/Cloud request에 speaker_context가 실제 삽입되고 E2E 검증됨 | 미충족, 후속 구현 필요 |
| 실기기 검증 완료 | 실제 디바이스에서 등록->인식->Cloud A2A->TaskManager까지 검증 로그가 있음 | 미충족, 후속 검증 필요 |
2. 요구사항별 근거
2.1 온디바이스 소스 레벨 구성
근거 문서:
근거 소스:
app/src/main/java/com/skmagic/ondeviceai/agent/service/module/SpeakerIdentificationEngine.kt
app/src/main/java/com/skmagic/ondeviceai/agent/service/module/DiarizationEngine.kt
app/src/main/java/com/skmagic/ondeviceai/agent/service/extension/SpeakerStabilityFeature.kt
app/src/main/java/com/skmagic/ondeviceai/agent/ui/SpeakerListActivity.kt
app/src/main/java/com/skmagic/ondeviceai/agent/ui/SpeakerHistoryActivity.kt
docs/SPEAKER_THRESHOLDS.md
판단:
- 현재 PoC의 구조 분석은 충분히 문서화되어 있다.
- 다만 이 분석은 PoC 경로 기준이다. 실제 제품 E2E에 speaker context가 연결됐다는 의미는 아니다.
2.2 Cloud A2A / Task Manager 연결
근거 문서:
근거 소스:
gemini/a2a/runtime/orchestrator.py
gemini/a2a/runtime/task_manager.py
gemini/a2a/runtime/session_state.py
gemini/a2a/runtime/memory_context.py
gemini/a2a/runtime/contracts.py
판단:
- Cloud가 직접 화자를 분석하지 않고 온디바이스 산출물인
speaker_context를 받아 사용하는 경계가 타당하다. - 현재 문서는 additive field 방식의 계약 제안까지 포함한다.
- 실제 Cloud 코드에
speaker_context를 정규화하고 TaskManager 정책에 반영하는 구현은 후속 작업이다.
2.3 서비스 확장성
근거 문서:
정리된 확장 축:
- 단일 화자 안전 확인
- 다화자/겹침 발화 차단
- 사용자별 대화 memory 분리
- speaker profile 기반 개인화
- authority/guest/child 권한 정책
- 복합명령 workflow owner 유지
- takeover/confirmation 정책
판단:
- 서비스 확장 방향은 문서화되어 있다.
- 제품 반영 전에는 speaker_id 저장/삭제/동의와 권한 정책 소유자를 확정해야 한다.
3. 현재 남은 제품화 갭
| 갭 | 이유 | 후속 작업 |
|---|---|---|
| speaker_context 실제 request 삽입 | 현재 문서는 계약 제안이며 제품 경로 삽입은 별도 구현 필요 | 온디바이스 Cloud request 생성부에 voice_context.speaker_context 추가 |
| Cloud 정규화 구현 | normalize_voice_context()가 아직 speaker_context 계약을 직접 강제하지 않을 수 있음 |
session_state.py에 default/validation 추가 |
| TaskManager side-effect gate | speaker_state 기반 실행 차단 정책은 문서 수준 | task_manager.py에서 side-effect step 실행 전 정책 적용 |
| speaker-scoped memory | 현재 memory_update는 speaker scope 확장이 필요 |
memory_context.py에 speaker_id, privacy policy, no-write gate 추가 |
| 영속 저장 정책 | 등록 embedding/history의 제품 저장/삭제/암호화 정책 필요 | 저장소 구조, 삭제 API, consent state 설계 |
| OnDevice Voice ID | 현재 nickname 정제 문자열을 ID로 사용 | opaque generator와 local repository 구현 |
| Voice Sync Registry 제품 구현 | Voice ID와 Reference Embedding을 동기화하고 사용자 정보에 연결할 저장소가 없음 | sync/delete/lookup API와 DB 구현 |
| 등록 Sync Outbox | Cloud offline 동기화 경로가 없음 | raw 음성 없이 Voice ID와 Reference Embedding만 재전송하는 idempotent outbox 구현 |
| 실기기 E2E evidence | 현재 문서화와 정적 검증 중심 | 등록->인식->Cloud->TaskManager 로그 수집 |
| threshold 튜닝 | 현재 threshold는 PoC 기준 | 거리/소음/다화자/언어별 test set 기반 튜닝 |
4. 다음 구현 순서
상세 티켓 분해와 파일별 수정 지점은 Implementation Roadmap을 기준으로 본다.
- OnDevice에서 opaque Voice ID와 local template repository를 구현한다.
- 5세트 등록 controller와 Voice ID/Reference Embedding Sync Outbox를 구현한다.
- Cloud에 Voice Sync Registry, delete/resolve와 Person mapping을 구현한다.
- Cloud 호출 payload에
speaker-context-v2를 additive field로 포함한다. - Cloud가
person_context를 만든 뒤 person scope memory와 권한을 적용한다. - TaskManager side-effect gate를 적용한다.
- 등록/ID 발급/사용자 조회/삭제 E2E 로그를 수집한다.
5. 완료 판단 기준
이 축을 제품 반영 완료로 보려면 아래 증거가 필요하다.
| 기준 | 필요한 증거 |
|---|---|
| 계약 구현 | on-device request log에 voice_context.speaker_context가 포함된 실제 payload |
| Cloud 정규화 | unit test 또는 log에서 speaker state default/validation 확인 |
| 메모리 분리 | 동일 발화라도 speaker_id별 memory write/read가 분리되는 테스트 |
| 권한/안전 | unknown/multi/overlap 상태에서 side-effect task가 block/reprompt 되는 테스트 |
| TaskManager owner | 복합명령 후속 turn에서 동일 화자/다른 화자 정책이 구분되는 테스트 |
| 개인정보 | 일반/등록 raw audio Cloud 미전송, 임시 파일 삭제, Reference Embedding 암호화·삭제, Query Embedding 비저장, Voice ID masking 확인 |
| 실기기 | 실제 디바이스 logcat 또는 Cloud request/response evidence |
6. 현재 결론
현재 문서 축은 PoC 분석과 확장 설계 관점에서는 충족 상태다.
하지만 제품 기능 완료 상태는 아니다. 제품 완료로 전환하려면 speaker context를 실제 온디바이스 request와 Cloud A2A runtime에 연결하고, 실기기 evidence를 확보해야 한다.
따라서 이 세션의 현재 위치는 다음과 같이 본다.
소스 분석 완료
계약 초안 완료
서비스 확장 설계 완료
테스트 계획 완료
제품 코드 통합 미완료
실기기 E2E 검증 미완료