← Docs hub

Experience Goal Composer Live Slice 2026-08-02

이 문서는 Experience Workflow의 첫 번째 제한적 live 경로를 코드, 계약, 비용, 검증 결과 기준으로 고정한다. 목표는 간접적인 사용자 목표를 문장별 규칙으로 처리하는 것이 아니라, Main Router의 의미 판단과 effect catalog를 이용해 안전한 콘텐츠 응답까지 연결하는 것이다.

Experience Goal Composer live slice

1. 이번 구현의 범위

검증 입력은 목적에 따라 세 종류로 나눈다.

# Experience 목표 위임 + 상태 관찰 + 조정
지금 내 상태와 주변 환경을 살펴보고 잠깐 편하게 쉴 수 있도록 필요한 걸 알아서 도와줘

# 현재 응답에서 수행 가능한 content effect
내 상황에 맞춰 지금 바로 편하게 쉴 수 있는 짧은 호흡 안내를 알아서 해줘

# 비입장 대조군
안녕
잠깐 편하게 쉬게 도와줘

현재 content_only live tier의 기대 결과는 다음 두 갈래다.

  1. 현재 응답으로 제공 가능한 content effect가 있으면 DEF가 그 부분만 즉시 수행한다.
  2. 전체 목표에 상태 조회나 기기 변경이 포함됐지만 plan/effect 검증이 끝나지 않으면 Experience 전체 활성화를 차단한다.
  3. 차단된 Experience 후보에서 Planner가 기기 step을 제안해도 dispatch gate가 device_task_requestsdevice_workflow_requests를 0으로 만든다.
  4. 단순 인사나 일반적인 한 번의 대화 요청은 Experience로 승격하지 않는다.

이 경로는 사용자 발화의 특정 단어나 어미를 매칭하지 않는다. 입력 문장의 의미, Router가 선택한 owner/skill, canonical effect, provider metadata가 함께 일치해야 활성화된다.

2. 전체 흐름

User utterance
  -> Main Router LLM
     |- owner / skill
     |- semantic experience_request
     `- existing plan
  -> Goal Composer
     |- canonical effect lookup
     |- exact selected-skill provider match
     |- live tier / consent / side-effect gate
     `- safe content contribution, or no plan
  -> Experience activation gate
     |- activated: validated plan만 실행 경계로 전달
     `- blocked: candidate 기기 request 전부 억제
  -> DEF/FRG content execution or safe blocked response
  -> route_result / TaskManager terminal evidence
  -> workflow effect completion when fully activated

Main Router는 의미 판단을 소유한다. Goal Composer는 새로운 추론기가 아니라 Router 결과와 catalog의 정합성을 검사하는 deterministic composer다.

3. 안전 경계

content_only Goal Composer가 plan을 만들 수 있는 조건은 모두 다음과 같다.

경계 조건
Provider 종류 skill provider
Skill 정합 Router가 선택한 selected_skill과 exact match
Live tier content_only
부수 효과 없음
동의 불필요
완료 권위 route_result 단일 권위
기존 plan 비어 있거나 안전하게 교체 가능한 owner cloud step 1개
금지 대상 device target, action, device task, condition, dependency, input binding
Step 상한 최대 4개, 현재 대표 경로는 1개

따라서 Goal Composer는 이동, 청정, 바이탈사인, 설정 변경 같은 기기 action을 새로 만들 수 없다. 이 작업들은 기존 Planner가 capability catalog를 근거로 만든 plan과 TaskManager 실행 계약을 그대로 사용한다. 또한 admission이 candidate이지만 Experience activation이 activated가 아니면, 기존 경로가 만든 기기 task도 최종 dispatch 직전에 억제한다.

4. Live Tier

Catalog provider는 실행 위험에 따라 세 단계로 구분한다.

Tier Provider 수 현재 허용 의미
content_only 2 로컬 live DEF 휴식 안내, FRG 최신 정보 합성
non_motion 10 차단 상태 조회, 고정 청정, 화면·소리·모드 변경
full 4 차단 이동, 복귀, 바이탈사인, story foreground session

실행 설정은 다음 환경 변수로 제한한다.

A2A_EXPERIENCE_WORKFLOW_MODE=live
A2A_EXPERIENCE_LIVE_TIER=content_only

높은 tier provider가 catalog에 존재해도 현재 live tier보다 높으면 experience_activation에서 차단된다. catalog 등록과 실행 허용은 별도 결정이다.

5. 사용자 응답 계약

직접 수행 가능한 Goal은 일반적인 “무엇을 도와드릴까요?” 후속 질문으로 끝내지 않는다. 응답 계약은 다음 행동을 요구한다.

experience_response_contract:
  response_mode: direct_goal_fulfillment
  suppress_generic_follow_up: true
  device_action_claim_allowed: false

DEF 응답은 다음 원칙을 따른다.

Gemini structured output의 schema 위반 가능성도 실행 시점에 검증한다. 정상 응답은 그대로 사용하며, case=1, there_is_question_mark=false, 질문 문장부호 금지 계약을 위반한 경우에만 effect catalog에 정의된 안전 content 산출물로 대체한다. 이 fallback은 사용자 발화 패턴이 아니라 선택된 canonical effect에 귀속되며, 추가 모델 호출이나 추가 토큰을 사용하지 않는다.

6. 완료 증거

완전히 활성화된 콘텐츠 step의 완료는 별도 task callback이 아니라 해당 agent의 route_result가 권위다.

route_result
  -> owner route + selected skill
  -> plan에서 유일한 대응 step 확인
  -> terminal event COMPLETED
  -> bound effect completed

명시적 task_step_id가 없는 경우에도 route와 skill metadata로 정확히 하나의 step만 식별될 때만 연결한다. 후보가 0개 또는 2개 이상이면 임의 추정하지 않는다.

7. 호출, 토큰, 지연 예산

경로 추가 모델 호출 추가 모델 토큰 상한
Experience 비활성 0 0 Composer 미실행
Goal Composer 0 0 25 ms 예산, 최대 4 step
Supervisor decision decision event에서만 1 계측 최대 3회, 출력 400 token
Replanner action=replan일 때만 1 계측 최대 4개 새 step, 출력 800 token

정상 QUEUED, RUNNING, PROGRESS마다 LLM을 호출하지 않는다. 호출량과 usage는 trace의 Composer, Supervisor, Replanner metrics에서 분리해 확인한다.

8. 검증 결과

2026-08-02 최종 회귀 결과:

Suite 결과
Experience admission/workflow/Supervisor 66 passed
DEF/FRG prompt contract 7 passed
Orchestrator task plan 43 passed
Local Lambda shim 38 passed
집중 회귀 합계 154 passed
Cloud 전체 suite 738 passed, 47 skipped

검증에는 다음 항목이 포함된다.

테스트는 저장소 루트의 test.py 이름 충돌을 피하기 위해 discovery로 실행한다.

A2A_VALIDATION_MODE=direct_gemini \
  .venv/bin/python -m unittest discover -s test \
  -p 'test_experience_workflow.py'

Live Gemini + 연결 기기 E2E

입력/변형 결과 기기 요청
상태·환경 관찰을 포함한 휴식 목표 r13 effect_coverage_invalid_binding, 안전 차단 task 0, workflow 0
같은 목표 반복 r14 동일 gate 재현, Planner 제안 task 1건 억제 task 0, workflow 0
짧은 호흡 안내 r15 DEF content 직접 제공, 질문 없음 task 0, workflow 0
안녕 대조군 Experience 미입장, Composer 미실행 task 0, workflow 0
단순 휴식 요청 대조군 single_action_only, Experience 미입장 task 0, workflow 0

r13/r14에서 Composer 처리시간은 각각 1.183ms, 0.952ms였고 추가 모델 호출과 추가 토큰은 0이었다. r15는 1.611ms였으며, 모델 응답 계약 위반이 catalog fallback으로 수렴했다. Planner의 Experience 출력 예산은 JSON 절단 재시도를 피하기 위해 1,664 output token으로 고정했으며 Composer가 별도 재호출하지 않는다.

이번 E2E는 연결된 기기의 context 수신과 local shim 경로까지 포함한다. 다만 content_only tier에서는 물리 이동이나 설정 변경을 성공시키는 것이 목적이 아니며, 해당 요청이 안전하게 차단되는지를 검증한다.

Full tier 물리 E2E 판정

주방으로 이동한 다음 스테이션으로 복귀해줘 복합 실행은 Planner plan, TaskManager step callback, workflow COMPLETED까지 반환됐다. 그러나 사용자의 육안 관찰에서 실제 주방 이동이 확인되지 않았으므로 물리 성공으로 판정하지 않는다.

이후 주방으로 이동해줘 단일 실행을 별도 세션으로 재검증했다.

증거 계층 관찰 결과 판정
Planner/dispatch ODL device_execution_bridge, setMoveTo, areaId=1 생성 통과
TaskManager STARTEDCOMPLETED callback 수신 통과
AMR 위치 (-0.30, 0.00)에서 (1.85, -3.29)까지 연속 변화 통과
DeviceAgent 도착 notifyArrived areaId=1 수신 통과
육안 물리 위치 사용자 확인 필요 미확정

따라서 callback과 localization 변화만으로 physical_pass를 선언하지 않는다. 최종 판정에는 사람의 육안 확인 또는 독립적인 외부 위치 증거가 추가로 필요하다.

단일 ODL 명령이 Experience 후보 최소 범위에 미달하는 경우에도 일반 기기 명령을 차단하던 회귀는 owner_dispatch_policy=owner_fallback 계약으로 수정했다. 이 fallback은 발화 문자열 규칙이 아니라 admission/activation 결과에 따른 실행 소유권 결정이다. 동의, 안전 정책, 불완전한 effect binding처럼 실제 차단이 필요한 경우는 계속 blocked로 유지한다.

9. Go / No-Go

범위 판단 근거
로컬 content_only 응답 기여 Go 0 추가 Composer 호출, 질문형 계약 fallback, 집중 회귀 통과
Experience 후보 실행 차단 Go activation 실패 시 proposed device task 억제 E2E 확인
Experience 전체 Goal 활성화 제한적 No-Go live Gemini plan의 effect binding 안정성 부족
non_motion live No-Go 실제 상태·설정 callback과 사용자 동의 경계 추가 검증 필요
full live No-Go TaskManager·AMR 증거는 확보했지만 물리 위치의 독립 확인과 바이탈·foreground session 검증이 필요
제품 기본 활성화 No-Go tier 확대, 반복 E2E, rollback gate 미완료

10. 다음 Gate

  1. Router가 생성하는 step effect_bindings의 catalog 정합률을 shadow로 계측
  2. Text Console에서 Goal, plan, activation block, 억제된 request 수를 한 trace로 표시
  3. non_motion provider는 observation callback과 사용자 동의 계약을 먼저 검증
  4. full Goal activation 성공률과 false-admission 비율이 gate를 통과한 뒤에만 tier 확대

관련 문서

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