← Docs hub

19.comToMe A2A Workflow Example

이 문서는 /home/silogood/work/19.comToMe 폴더의 설계 자료를 A2A Wiki 관점으로 다시 정리한 것이다.

실제 폴더 내용은 command 하나가 아니라 ComeToMe 이동/추종 기능 설계다. 따라서 이 문서는 아래 기능을 A2A/TaskManager 구조에 어떻게 얹을지 설명한다.

원본 근거:

/home/silogood/work/19.comToMe/docs/strategy/short-term/com-to-me-system-design.md
/home/silogood/work/19.comToMe/docs/strategy/short-term/com-to-me-speaker-recognition-service-scenario.md
/home/silogood/work/19.comToMe/docs/diagrams/com-to-me-flow.mmd
/home/silogood/work/19.comToMe/docs/diagrams/com-to-me-speaker-recognition-service.svg

19.comToMe A2A Workflow Example

1. 실제 19.comToMe 폴더 내용

현재 폴더는 코드 구현체보다 설계 문서와 다이어그램 중심이다.

파일 내용
com-to-me-system-design.md ComeToMe 전체 시스템 설계. 단계별 rollout, TaskManager lifecycle, DoA/Vision/AMR/FollowMe 연결, 실패 정책 포함
com-to-me-speaker-recognition-service-scenario.md Sherpa ONNX 기반 화자인식 PoC 분석과 ComeToMe 1단계 speaker gate 시나리오
com-to-me-flow.mmd Mermaid 기반 ComeToMe task lifecycle
com-to-me-speaker-recognition-service.svg 화자인식 서비스 시나리오 구조도

핵심은 ComeToMe를 단발 ODL 명령으로 보면 안 된다는 점이다. 이 기능은 호출어, 의도 분류, stage gate, 화자인식, DoA, Vision, AMR, FollowMe, 후속 task가 이어지는 장기 device workflow다.

2. 단계별 기능 범위

원본 설계는 ComeToMe를 0-1, 0-2, 1, 2, 3 단계로 확장한다.

단계 범위 포함 기능 제외/보류
0-1 "나에게와" 단일 기능 호출어, ComeToMe 의도, DoA, 회전, Vision 사용자 감지, AMR 접근 좌표 생성, FollowMe 시작 화자인식, 등록 장소 이동, 공간인식, 후속 기능
0-2 등록 방 기반 공간 이동 0-1 + 사용자 등록 방 이름/좌표 매핑, "거실로와", "주방으로와" 등 장소명 기반 이동 화자인식 기반 권한/개인화, 공간인식, 후속 기능
1 화자인식 연동 0-2 + 음성 등록, 등록 화자 인식, 화자별 설정/장소 매핑 정책 공간인식 기반 후속 연속동작
2 화자구분 + 공간인식 + 후속 연속동작 화자별 ComeToMe, 공간/방 인식, 도착 후 다음 기능 수행 능동적 후속 기능 제안
3 후속 기능 제안 상황/위치/화자 기반 다음 기능 추천, 사용자 확인 후 실행 자동 실행은 별도 정책 필요

3. A2A에서의 해석

Cloud A2A Planner는 ComeToMe 내부의 DoA/Vision/AMR 세부 단계를 매번 LLM으로 재계획하면 안 된다. Cloud의 역할은 사용자의 발화를 다음처럼 큰 의도와 slot으로 정리하는 것이다.

예시 발화:

하이나무, 나에게와

Planner 관점:

{
  "turn_mode": "singleton",
  "selected_routes": ["ODL"],
  "steps": [
    {
      "id": "step_1",
      "route": "ODL",
      "purpose": "사용자 방향 기반 ComeToMe 실행",
      "execution_target": "device",
      "device_intent": {
        "method": "comeToMe",
        "params": {
          "commandType": "user_direction",
          "utterance": "나에게와"
        }
      }
    }
  ]
}

예시 발화:

하이나무, 거실로와

Planner 관점:

{
  "turn_mode": "singleton",
  "selected_routes": ["ODL"],
  "steps": [
    {
      "id": "step_1",
      "route": "ODL",
      "purpose": "등록 장소 기반 ComeToMe 실행",
      "execution_target": "device",
      "device_intent": {
        "method": "comeToMe",
        "params": {
          "commandType": "place_name",
          "roomName": "거실",
          "utterance": "거실로와"
        }
      }
    }
  ]
}

4. DeviceAgent TaskManager로 내려가는 구조

온디바이스 Bridge는 Cloud step을 DeviceAgent TaskManager.submitTask 또는 submitWorkflow로 넘긴다.

단일 ComeToMe task 예:

{
  "method": "submitTask",
  "taskMethod": "comeToMe",
  "source": "cloud_a2a",
  "cloud_workflow_id": "wf_cometome_001",
  "cloud_step_id": "step_1",
  "cloud_output_key": "cometome_result",
  "commandType": "place_name",
  "roomName": "거실",
  "rolloutStage": "0-2"
}

2단계 이상에서 후속 연속동작이 붙는 경우는 workflow가 된다.

{
  "method": "submitWorkflow",
  "workflowName": "come_to_me_followup_workflow",
  "source": "cloud_a2a",
  "cloud_workflow_id": "wf_cometome_002",
  "subTasks": [
    {
      "taskMethod": "comeToMe",
      "commandType": "place_name",
      "roomName": "거실",
      "rolloutStage": "2",
      "cloud_step_id": "step_1",
      "cloud_output_key": "cometome_arrival_context"
    },
    {
      "taskMethod": "followUpDeviceAction",
      "inputFrom": "cometome_arrival_context",
      "cloud_step_id": "step_2",
      "cloud_output_key": "followup_result"
    }
  ]
}

중요한 점:

5. ComeToMe TaskManager 내부 lifecycle

원본 설계의 lifecycle은 다음 구조다.

A1 대기
-> 호출어 "하이나무" 감지
-> ComeToMe 의도 분류
-> rollout stage 확인
-> stage >= 1이면 등록 화자 확인
-> 명령 타입 분기
   - user_direction: DoA 각도 판별 -> 회전 -> Vision 사용자 감지 -> target_pose 생성
   - place_name: 장소명 해석 -> 등록 장소 좌표 조회 -> target_pose 생성
-> AMR에 target_pose 전달
-> AMR 목적지 도착
-> Vision / Speaker 사용자 확인
-> FollowMe 대상 확인
-> FollowMe 수행
-> stage >= 2이면 후속 연속동작
-> stage >= 3이면 후속 기능 제안

이 lifecycle은 DeviceAgent/SoC 쪽에서 task state machine으로 구현되어야 한다.

6. 화자인식 gate

원본 com-to-me-speaker-recognition-service-scenario.md 기준:

판단 결과 예:

data class SpeakerVerificationResult(
    val speakerId: String?,
    val displayName: String?,
    val score: Float,
    val margin: Float?,
    val threshold: Float,
    val accepted: Boolean,
    val reason: String
)

TaskManager 판단:

상황 판단 동작
0-1/0-2 stage speaker gate bypass 기존 단계 기능 수행
1단계 이상 + 등록 화자 accepted 통과 DoA 또는 장소 이동 진행
등록 profile 없음 실패 이동하지 않고 등록 안내
score threshold 미달 실패 이동하지 않고 재시도 안내
best/second margin 부족 불확실 이동하지 않고 재확인
다화자/겹침 발화 불확실 한 명씩 말하도록 안내
2단계 이상 + speaker_id 확정 통과 후속 연속동작 context에 speaker_id 전달

7. 실패 reason contract

ComeToMe는 물리 이동과 사용자 인식이 결합된 기능이므로 실패 reason이 중요하다.

실패 DeviceAgent reason 후보 Cloud 동작
의도 confidence 부족 LOW_INTENT_CONFIDENCE 재질문 또는 대기
stage 밖 기능 요청 FEATURE_STAGE_UNAVAILABLE 현재 단계 미지원 안내
등록 화자 없음 SPEAKER_PROFILE_NOT_FOUND 등록 안내
화자 score/margin 부족 SPEAKER_VERIFICATION_FAILED 재시도/재확인
장소명 미등록 ROOM_NOT_FOUND 장소 재확인/등록 안내
장소 좌표 불일치 LOCATION_POSE_INVALID 재등록 안내
DoA confidence 부족 DOA_CONFIDENCE_LOW 재시도 안내
Vision 사용자 미감지 PERSON_NOT_FOUND 재호출 유도
AMR 경로 실패 PATH_BLOCKED 또는 NAVIGATION_FAILED 대체/중단 replan
FollowMe 대상 소실 FOLLOW_TARGET_LOST FollowMe 미시작 또는 재탐색
stale event STALE_EVENT 무시/로그

예시 event:

{
  "eventName": "FAILED",
  "taskMethod": "comeToMe",
  "cloud_workflow_id": "wf_cometome_001",
  "cloud_step_id": "step_1",
  "reason_code": "SPEAKER_VERIFICATION_FAILED",
  "reason_params": {
    "rolloutStage": "1",
    "score": 0.42,
    "threshold": 0.5,
    "commandType": "user_direction"
  },
  "requires_cloud_decision": true,
  "suggested_action": "ASK_USER_RETRY_OR_ENROLL"
}

8. A2A 통합 설계 판단

권장 구조:

피해야 할 구조:

9. 원본 설계의 주요 제약

원본 설계에서 명시된 중요한 제약:

10. 검증 시나리오

시나리오 입력 기대 결과
0-1 정상 A1 대기, "하이나무", "나에게와", 정면 2m 사용자 화자인식 없이 좌표 생성, AMR 이동, FollowMe 시작
0-1 범위 제한 0-1에서 "거실로와" 장소명 이동 미지원 처리, AMR 이동 없음
0-2 장소명 이동 "거실로와", 등록 좌표 있음 등록된 거실 좌표로 이동 후 사용자 확인
0-2 장소명 미등록 "서재로와", 등록 없음 이동하지 않고 장소 등록/재확인 안내
1 화자 미등록 미등록 사용자가 ComeToMe 발화 DoA/AMR 이동 전 실행 보류
1 화자 오거부 등록 사용자가 소음 환경에서 발화 낮은 confidence면 재시도 안내, 이동 보류
2 후속 연속동작 화자와 공간 확인 후 후속 task 연결 ComeToMe 완료 후 다음 기능 수행
3 후속 기능 제안 도착 위치와 화자 기반 추천 후보 생성 사용자 확인 전 자동 실행하지 않음
DoA 오차 실제 사용자 60도, DoA가 크게 벗어남 Vision 미감지 또는 confidence 실패로 이동 중단
Vision 거리 초과 사용자 4m 좌표 생성하지 않고 실패 처리
stale event 이전 task의 AMR/Vision event가 늦게 도착 task_id 불일치로 무시하고 stale event 기록

11. 관련 문서