8월 7일까지 워킹트리에만 남아 있던 미커밋 작업을 커밋한다. 여러 사본 폴더(worktree·clone)에 흩어져 있던 중간 스냅샷을 정리하기 전에 원본을 git 이력으로 고정하는 것이 목적이다. - contracts/routes/services: measurement, outcome_trajectory, rupture_repair, deliberate_practice, calibration_transfer, supervision_research, multimodal_alliance, continuous_improvement 계열 신규 모듈과 테스트 - infra/db/init: 07~16 마이그레이션(측정 기반~calibration transfer 실행) - apps/web: 세션 리뷰 카드·관리 화면·E2E 스펙 추가 - docs/ops: G0~G8 라이브 통합·배포·롤백 증거 문서와 evidence JSON/PNG - scripts: smoke·ledger·릴리스 에이전트·NAS 프리뷰 운영 스크립트 engine.public 로그 .bak과 apps/web/test-results 산출물은 커밋에서 제외했다.
716 lines
37 KiB
Markdown
716 lines
37 KiB
Markdown
# Vignette Outcome & Alliance OS — 이상형 에이전틱 업그레이드 계획
|
||
|
||
> 상태: **2026-08-06 정식 승격된 전략 실행 계획**. 구현 상태의 SSOT는 `docs/dev_dashboard.html`,
|
||
> 전 작업 체크리스트는 `docs/TODO.md` I절이 소유한다. 이 문서는 완료를 주장하지 않고 계약·게이트·품질 목표를 소유한다.
|
||
>
|
||
> 입력: 영상 C0schc1Z71Q 분석, Vignette 현재 코드·문서·SSOT, 치료 동맹·성과 모니터링·균열 복구 연구
|
||
>
|
||
> 원칙: **현재 인력·기간·예산·배포 제약으로 목표를 축소하지 않는다.** 현재 상황은 목표를 낮추는 근거가 아니라,
|
||
> 이미 가진 자산을 재사용하기 위한 출발점으로만 사용한다.
|
||
>
|
||
> 개발 주체: 코드·테스트·문서·마이그레이션·QA·배포·관측·롤백을 모두 에이전트가 수행한다. 사람 개발자용
|
||
> 일정·역할·작업량 계획은 두지 않는다.
|
||
|
||
## 0. 결론
|
||
|
||
Vignette의 다음 형태는 “AI 내담자와 대화하고 AI가 점수를 주는 서비스”가 아니다.
|
||
|
||
**한 명의 수련생이 여러 가상내담자와 다회기 관계를 만들고, 관계의 질·변화 궤적·균열과 복구·자기평가 오차를
|
||
측정하며, 가장 약한 미세기술을 자동으로 반복 연습해 미지 사례까지 전이시키는 상담역량 운영체계**가 되어야
|
||
한다.
|
||
|
||
제품의 새로운 핵심 루프는 다음 하나다.
|
||
|
||
> 측정 → 이상 징후 탐지 → 원인 가설 → 재연습 처방 → 변형 사례 검증 → 숙련도 갱신
|
||
|
||
이 루프가 닫히면 Vignette는 콘텐츠 묶음이 아니라 시간이 갈수록 각 수련생에게 더 정교해지는
|
||
`Outcome & Alliance OS`가 된다.
|
||
|
||
## 1. 북극성 경험
|
||
|
||
수련생이 하나의 페르소나와 최소 5회기의 종단 사례를 진행한다고 가정한다.
|
||
|
||
1. 회기 전 수련생이 이번 회기의 공동 목표, 사용할 방법, 예상 난이도, 자기 확신을 기록한다.
|
||
2. 가상내담자는 이전 회기의 기억·미해결 과제·신뢰 수준을 유지하되 정답 라벨은 절대 노출하지 않는다.
|
||
3. 회기 중 시스템은 기법 사용이 아니라 **내담자가 실제로 경험한 goal/task/bond 변화**를 별도 관점에서
|
||
추정한다.
|
||
4. 시나리오 디렉터는 불일치, 철수, 대립, 침묵, 피상적 순응 같은 관계 균열을 자연스럽게 발생시킨다.
|
||
5. 수련생은 균열을 알아차리고, 확인하고, 자신의 기여를 인정하고, 목표·과제를 다시 합의해 복구한다.
|
||
6. 회기 후 수련생 자기평가를 먼저 잠근 뒤 가상내담자 관점, 관찰자 관점, 근거 기반 슈퍼바이저 평가를
|
||
순차 공개한다.
|
||
7. 시스템은 가장 큰 오차가 난 1~3개 장면을 분리해 마이크로 연습을 자동 생성한다.
|
||
8. 같은 문장을 외우지 못하도록 성별·연령·문화·관계 스타일·저항 형태가 다른 변형 사례에서 다시 검증한다.
|
||
9. 재연습이 미지 사례에서도 유지될 때만 역량 그래프의 숙련도를 올린다.
|
||
10. 교수자 화면은 총점 순위가 아니라 악화 위험, 미해결 균열, 자기평가 과신, 성장 정체, 전이 실패를 먼저
|
||
보여준다.
|
||
|
||
## 2. 현재 Vignette를 출발점으로 보는 법
|
||
|
||
현재 구현은 이 비전을 시작하기에 상당히 좋은 기반을 갖고 있다. 다만 기존 지표의 이름을 확장해 새 기능을
|
||
완료한 것처럼 취급하면 안 된다.
|
||
|
||
| 현재 자산 | 실제 현재 의미 | 그대로 재사용할 부분 | 이상형과의 차이 |
|
||
|---|---|---|---|
|
||
| `rapport_credit` / `effective_openness` | 상담자 발화에 반응하는 결정론적 시뮬레이션 상태 | 내담자 반응 생성과 진행 상태 | 내담자 보고 치료 동맹이나 실제 결과 측정이 아니다. |
|
||
| `case_profile.alliance_level` | 회기말 `rapport_credit`의 EWMA | 종단 상태 저장 위치와 갱신 패턴 | goal/task/bond, 관점, 문항, 측정 시점, 신뢰도가 없다. |
|
||
| fast-loop `TurnEvaluation` | 기법·내담자 상태·적절성·의도 이탈·라포 신호 | 턴별 이벤트와 구조화 출력 | 공감 사용과 공감 수용, 균열과 복구, 예상 궤적을 구분하지 않는다. |
|
||
| deep-loop `SessionEvaluation` | 기법 분포·강점·개선점·대안발화·정서가 | 회기 전체 평가와 리뷰 근거 | 결과·동맹·보정·전이 평가가 하나의 학습 루프로 닫혀 있지 않다. |
|
||
| 라이브 코칭 + source pack RAG | 발화별 근거 기반 코칭 | 근거 인용, source/version, 실패 표면화 | 약한 역량을 자동 처방하고 재연습 성과까지 추적하지 않는다. |
|
||
| 다회기 메모리·pinned fact·digest | 페르소나 연속성과 사례 기억 | 종단 사례 세계, 역할별 정보 비대칭 | 초기 5회기 동맹·성과 궤적과 관계 사건의 기억 모델이 없다. |
|
||
| 세션 목표·누적 게이지 | 상태 단계 목표와 라포 기반 달성도 | 회기 계획 UX와 누적 표시 | 목표 합의의 질과 방법 합의의 질을 측정하지 않는다. |
|
||
| 교수자·학습자 성장 대시보드 | 회기 점수·라포·기법·리뷰 | 역할별 read model과 drilldown | 위험·균열·보정·성장 정체 중심의 의사결정 큐가 아니다. |
|
||
| Phase 3 KPI scaffold | SUS·자기효능감·환각·IAA 등 파일럿 증거 | metric contract, provenance, checker | 상담역량의 종단 변화와 전이, 동맹·균열 지표가 비어 있다. |
|
||
|
||
### 핵심 진단
|
||
|
||
- 현재 `alliance_level`은 이름과 달리 **독립 측정된 치료 동맹이 아니라 라포 상태의 평활값**이다.
|
||
- 현재 `rapport_percent`는 **가상내담자 상태머신 값**이지 내담자가 이해받았다고 느낀 정도가 아니다.
|
||
- 현재 리뷰의 `clientFeedback`은 **성과 피드백 척도**가 아니라 마지막 내담자 반응에 가깝다.
|
||
- 현재 평가기는 잘한 기법과 개선점을 알려주지만, **피드백 이후 재연습과 전이 증명**까지 소유하지 않는다.
|
||
- 따라서 새 시스템은 기존 점수에 필드를 더 붙이는 작업이 아니라, 측정·학습·검증의 계약을 한 단계 위에
|
||
세우는 작업이다.
|
||
|
||
## 3. 목표를 낮추지 않는 불변 원칙
|
||
|
||
아래는 현실 제약이 아니라 제품의 진실성과 안전성을 지키는 불변식이다.
|
||
|
||
1. **합성 지표와 임상 결과를 분리한다.** 모든 수치는 `simulated_state`, `model_inferred`, `agent_reported`,
|
||
`learner_reported`, `human_rated`, `observed_runtime` 중 하나를 명시한다.
|
||
2. **단일 AI 판정을 진실로 취급하지 않는다.** 중요한 평가는 독립 관점·모델·규칙·골든셋을 교차시킨다.
|
||
3. **가상내담자에게 평가 정답을 누출하지 않는다.** client/evaluator/coach/context builder의 물리적 정보 경계를
|
||
유지한다.
|
||
4. **점수 없는 실패를 정상처럼 보이지 않는다.** 평가·감사·저장·근거 회수 실패는 `degraded`나 `error`로
|
||
표면화한다.
|
||
5. **불편함을 실패로 최적화하지 않는다.** 안전한 도전과 관계 균열 복구를 높은 역량으로 평가한다.
|
||
6. **상냥함을 공감으로 오인하지 않는다.** 공감 기법의 존재와 내담자가 받은 공감을 분리한다.
|
||
7. **총점이 학습을 지배하지 않는다.** 장면 근거, 불확실성, 다음 연습, 재시도 결과가 총점보다 먼저다.
|
||
8. **모델 교체 가능성을 계약으로 흡수한다.** 모델명·provider가 아니라 event/schema/evidence contract가 제품을
|
||
소유한다.
|
||
9. **재현되지 않은 성장은 숙련으로 인정하지 않는다.** 같은 장면 재시도와 미지 사례 전이를 모두 통과해야 한다.
|
||
10. **공개 순위표를 만들지 않는다.** 비교는 학습 처방과 교수자 지원에만 쓰고 낙인화하지 않는다.
|
||
|
||
## 4. 목표 아키텍처
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
A["수련생 발화·음성"] --> B["안전·PII 게이트"]
|
||
B --> C["가상내담자 디지털 트윈"]
|
||
C --> D["대화·비언어 이벤트 스트림"]
|
||
D --> E["동맹 센서\ngoal / task / bond"]
|
||
D --> F["성과·악화 궤적 모니터"]
|
||
D --> G["균열·복구 관찰자"]
|
||
D --> H["기법·이론 평가기"]
|
||
E --> I["증거·측정 원장"]
|
||
F --> I
|
||
G --> I
|
||
H --> I
|
||
I --> J["슈퍼바이저 에이전트"]
|
||
J --> K["의도적 수련 처방기"]
|
||
K --> L["장면 재생·분기·변형 사례"]
|
||
L --> M["전이 검증"]
|
||
M --> N["수련생 역량 그래프"]
|
||
N --> O["다음 사례·난이도 자동 선택"]
|
||
O --> A
|
||
```
|
||
|
||
### 4.1 런타임 에이전트
|
||
|
||
| 에이전트 | 단일 책임 | 입력 | 출력 |
|
||
|---|---|---|---|
|
||
| Scenario Director | 사례 목표·난이도·관계 사건을 조율 | competency state, case arc | scenario beat, rupture opportunity |
|
||
| Client Twin | 페르소나를 유지하며 내담자 반응 생성 | client-only memory, state, counselor turn | text/audio/nonverbal response |
|
||
| Alliance Sensor | goal/task/bond를 관점별 측정 | recent dyad events | alliance pulse + evidence spans |
|
||
| Outcome Monitor | 예상 성장곡선 대비 이탈 탐지 | longitudinal measures | trajectory status, warning, uncertainty |
|
||
| Rupture Observer | 철수·대립·불일치·미세균열과 복구 판정 | turn/event stream | rupture event, repair attempt/outcome |
|
||
| Skill Evaluator | 기법·이론부합·안전·경계 역량 평가 | masked transcript, rubric | skill evidence, errors, alternatives |
|
||
| Supervisor Coach | 여러 센서의 상충을 종합 | measurement ledger, sources | explanation, hypothesis, next practice |
|
||
| Curriculum Planner | 약한 역량의 최적 연습 순서를 선택 | competency graph, forgetting curve | practice prescription |
|
||
| Evidence Grounder | 모든 코칭 주장에 근거와 버전 부착 | approved source packs | evidence bundle |
|
||
| Measurement Auditor | 드리프트·과신·판정 불일치 감시 | model runs, gold labels | calibration report, quarantine decision |
|
||
| Safety Guardian | 실제 사용자 위기와 시뮬레이션 위기 분리 | raw/derived safety signals | block/escalate/continue decision |
|
||
|
||
에이전트 간 대화는 자연어 채팅이 아니라 버전드 이벤트 계약으로 연결한다. 한 에이전트의 실패가 전체 회기를
|
||
암묵적으로 오염시키지 않게 각 산출물은 `status`, `confidence`, `provenance`, `model_run_id`를 가진다.
|
||
|
||
## 5. 측정 체계: 무엇을 어떻게 구분할 것인가
|
||
|
||
### 5.1 6개 핵심 구성개념
|
||
|
||
| 구성개념 | 하위축 | 관점 | 주기 |
|
||
|---|---|---|---|
|
||
| Working alliance | goal, task, bond | client twin, learner, observer | 회기 전·중간·후 |
|
||
| Session outcome | distress/goal progress/function/safety의 교육용 대리변수 | client twin, scenario state, observer | 회기 전·후, 다회기 |
|
||
| Rupture & repair | withdrawal, confrontation, mismatch, repair | client twin, observer | 사건 발생 시 |
|
||
| Counselor skill | empathy, exploration, validation, structuring, theory, risk, boundary | evaluator, supervisor | 턴·회기 |
|
||
| Self-calibration | predicted vs observed performance | learner vs independent measures | 회기 전·후 |
|
||
| Transfer | 새 페르소나·새 표현·새 난이도에서의 유지 | benchmark harness | 재연습 후 |
|
||
|
||
### 5.2 동맹은 단일 점수가 아니다
|
||
|
||
동맹 측정은 최소 다음 3×3 행렬을 보존한다.
|
||
|
||
| 관점 \ 축 | Goal | Task | Bond |
|
||
|---|---|---|---|
|
||
| 가상내담자 보고 | 목표가 내 문제와 맞는가 | 지금 하는 일이 납득되는가 | 이해·존중·안전이 있는가 |
|
||
| 수련생 자기평가 | 목표 합의를 확인했는가 | 개입 근거를 설명했는가 | 관계 상태를 어떻게 읽었는가 |
|
||
| 독립 관찰자 | 발화 근거상 합의가 확인되는가 | 방법과 목표가 연결되는가 | 반응성과 복구 행동이 있는가 |
|
||
|
||
한 축이 다른 축을 상쇄하지 못하게 원점수와 차이를 모두 저장한다. 예를 들어 bond가 높더라도 goal이 합의되지
|
||
않으면 “관계는 따뜻하지만 방향이 없는 회기”로 설명해야 한다.
|
||
|
||
### 5.3 측정 원장
|
||
|
||
모든 점수는 공통 `measurement_event` 계약으로 기록한다.
|
||
|
||
```json
|
||
{
|
||
"measurement_id": "uuid",
|
||
"session_id": "uuid",
|
||
"turn_id": "uuid-or-null",
|
||
"construct": "working_alliance",
|
||
"dimension": "task",
|
||
"perspective": "client_agent_report",
|
||
"source_kind": "agent_reported",
|
||
"instrument_id": "vignette-alliance-pulse",
|
||
"instrument_version": "1.0.0",
|
||
"value": 0.62,
|
||
"scale_min": 0,
|
||
"scale_max": 1,
|
||
"confidence": 0.81,
|
||
"status": "ready",
|
||
"evidence_turn_ids": ["uuid"],
|
||
"model_run_id": "uuid",
|
||
"created_at": "ISO-8601"
|
||
}
|
||
```
|
||
|
||
검증된 척도를 사용할 때는 라이선스·한국어 타당화 버전·채점 규칙을 `instrument_registry`에 기록한다. 별도
|
||
타당화가 없는 Vignette 자체 척도는 `training_metric`으로만 표시하고 임상 척도 이름을 빌려 쓰지 않는다.
|
||
|
||
## 6. 제품 모듈
|
||
|
||
### M1. Alliance Pulse
|
||
|
||
- 회기 전·중간·후 goal/task/bond 마이크로 체크.
|
||
- 수련생에게는 정답 유도 없는 짧은 관찰 질문으로, 가상내담자에게는 독립 보고 호출로 수집한다.
|
||
- 세 관점의 일치와 불일치를 시계열로 보여준다.
|
||
- “공감 기법을 사용함”과 “내담자가 이해받음”을 분리한다.
|
||
- 점수가 내려가면 바로 경고만 띄우지 않고, 어떤 사건 이후 어느 축이 변했는지 근거 장면을 연결한다.
|
||
|
||
### M2. Expected Outcome Trajectory
|
||
|
||
- 페르소나·난이도·회기 번호·초기 상태를 기준으로 예상 궤적 분포를 만든다.
|
||
- 실제 궤적이 신뢰구간을 벗어나면 `on_track`, `watch`, `off_track`, `deteriorating`으로 분류한다.
|
||
- 위기 탐지와 성과 악화 탐지를 분리한다. 자살/자해 이벤트가 없어도 관계·기능·목표 진행이 악화될 수 있다.
|
||
- 경고에는 원인 단정 대신 가능한 가설과 추가 확인 질문을 제공한다.
|
||
- 합성 궤적은 교육용 benchmark임을 표시하고 사람 치료성과와 혼동하지 않는다.
|
||
|
||
### M3. Rupture & Repair Lab
|
||
|
||
- 균열 유형: withdrawal, confrontation, goal mismatch, task mismatch, empathic miss, cultural miss,
|
||
boundary tension, premature advice, over-disclosure.
|
||
- 각 사건은 `onset → missed/recognized → repair attempt → client response → resolution` 상태를 가진다.
|
||
- Scenario Director는 수련생의 약한 역량과 사례 맥락에 맞는 균열을 생성한다.
|
||
- 복구의 핵심 행동을 감지한다: 알아차림, 명명, 호기심, 영향 인정, 목표·과제 재합의, 후속 확인.
|
||
- 회기 후 정확한 장면으로 돌아가 세 가지 이상의 복구 전략을 분기 시뮬레이션한다.
|
||
- “균열 0개”를 최고 점수로 보지 않는다. 적절히 다룬 균열은 중요한 숙련 증거다.
|
||
|
||
### M4. Deliberate Practice Engine
|
||
|
||
- 평가 결과를 일반 조언으로 끝내지 않고 원자적 연습 과제로 변환한다.
|
||
- 과제 예: 20초 안에 감정 반영, 조언 없이 의미 탐색, 목표 불일치 확인, 불만에 비방어적으로 반응,
|
||
위험 신호 직접 질문, 적절한 의뢰 제안.
|
||
- 동일 장면 replay, counterfactual branch, 난이도 상승, 표현 변형, 음성 재연습을 지원한다.
|
||
- 한 번 성공하면 잠정 숙련, 간격을 둔 미지 사례에서도 성공하면 확정 숙련으로 승격한다.
|
||
- Curriculum Planner는 학습효과, 최근 실패, 망각 위험, 사례 다양성을 동시에 최적화한다.
|
||
|
||
### M5. Calibration Mirror
|
||
|
||
- 수련생이 외부평가를 보기 전에 자신의 공감, 목표 합의, 균열, 위험사정, 전체 수행을 예측한다.
|
||
- 예측과 독립 평가의 차이를 `calibration error`로 저장한다.
|
||
- 과신·과소신 패턴을 역량별, 페르소나별, 시간대별로 보여준다.
|
||
- UI는 자기비난을 유도하지 않는다. “틀렸다” 대신 “어떤 신호를 더 관찰하면 오차가 줄어드는가”를 제시한다.
|
||
- 전문적 자기의심을 막연한 불안이 아니라 검증 가능한 가설 업데이트로 바꾼다.
|
||
|
||
### M6. Supervision Control Room
|
||
|
||
- 교수자 큐 우선순위: 악화 궤적 → 미해결 균열 → 안전 경계 → 지속 과신 → 성장 정체 → 전이 실패.
|
||
- 학습자별 총점 대신 역량 그래프, 사례 난이도, 신뢰구간, 평가 출처를 보여준다.
|
||
- 교수자 재평가는 AI 원장을 덮어쓰지 않고 새 measurement event로 append한다.
|
||
- AI와 교수자 불일치를 calibration dataset으로 자동 적재한다.
|
||
- 코호트 화면은 낙인 순위가 아니라 공통 교육과정의 약한 지점을 찾아낸다.
|
||
|
||
### M7. Longitudinal Client World
|
||
|
||
- 페르소나를 한 회기 챗봇이 아니라 시간에 따라 변하는 사례 세계로 만든다.
|
||
- 다음 회기까지 발생한 생활 사건, 이전 합의의 이행, 관계 기억, 미해결 감정, 신뢰 변화가 이어진다.
|
||
- 1~5회기에는 초기 동맹 형성과 궤적 이탈을 집중 측정하고 이후에는 유지·전환·종결 능력을 본다.
|
||
- 내담자 에이전트는 내부 상태를 직접 말하지 않고 행동·언어·침묵·회피로 표현한다.
|
||
- 동일 페르소나도 seed와 사건 그래프에 따라 다른 경로를 생성하되 핵심 정체성은 유지한다.
|
||
|
||
### M8. Multimodal Interaction Lab
|
||
|
||
- 텍스트 외에 발화 속도, 침묵, 끼어들기, 억양, 말 길이, 반응 지연을 이벤트로 기록한다.
|
||
- 비언어 신호를 진단하지 않고 상호작용 품질의 관찰 변수로만 사용한다.
|
||
- 음성 중간 자막·최종 자막·오디오 타임라인을 동기화해 근거 장면으로 재생한다.
|
||
- 공감·균열 평가는 언어와 운율을 분리 산출한 뒤 종합한다.
|
||
- 음성 모드에서도 텍스트 모드와 같은 측정 원장·PII·감사 계약을 유지한다.
|
||
|
||
### M9. Evidence & Research Workbench
|
||
|
||
- 모든 코칭 문장을 source/version/citation과 연결한다.
|
||
- 연구자는 구성개념, 척도, 모델, 프롬프트, 코호트, 제외 기준을 버전으로 고정한다.
|
||
- synthetic, human-rated, participant-reported 데이터를 한 리포트에 섞지 않고 층별 분석한다.
|
||
- 모델 교체 전후 measurement drift, calibration, subgroup 차이를 자동 비교한다.
|
||
- 결과 리포트는 재현 가능한 manifest와 쿼리 snapshot을 포함한다.
|
||
|
||
## 7. 데이터 모델
|
||
|
||
기존 `app.sessions`, `app.turns`, `feedback_scores`, `session_evaluation`, `case_profile`, `safety_events`를
|
||
버리지 않고 다음 일급 엔티티를 추가한다.
|
||
|
||
```text
|
||
app.measurement_instrument
|
||
app.measurement_event
|
||
app.alliance_pulse
|
||
app.outcome_trajectory
|
||
app.rupture_event
|
||
app.repair_attempt
|
||
app.self_assessment
|
||
app.practice_episode
|
||
app.practice_attempt
|
||
app.competency_definition
|
||
app.competency_state
|
||
app.scenario_variant
|
||
app.curriculum_assignment
|
||
audit.model_run
|
||
audit.measurement_decision
|
||
audit.calibration_report
|
||
ds.benchmark_case
|
||
ds.benchmark_observation
|
||
```
|
||
|
||
### 필수 데이터 규칙
|
||
|
||
- 원본 이벤트는 append-only, 정정은 새 이벤트와 `supersedes_id`로 표현한다.
|
||
- read model은 `latest accepted`와 전체 이력을 분리한다.
|
||
- 모든 모델 출력은 prompt bundle hash, model/provider, structured schema version, input evidence hash를 남긴다.
|
||
- client/evaluator/supervisor 데이터는 기존 `visible_to[]`와 RLS를 확장해 물리적으로 격리한다.
|
||
- 원문 음성은 정책상 허용된 경우에만 별도 민감 저장소에 두고 측정 원장에는 파생 특징과 해시만 둔다.
|
||
- benchmark와 운영 데이터의 혼입을 차단한다.
|
||
|
||
## 8. 이벤트·API 계약
|
||
|
||
### 핵심 이벤트
|
||
|
||
```text
|
||
session.plan.created
|
||
session.measurement.requested
|
||
alliance.pulse.recorded
|
||
outcome.trajectory.updated
|
||
rupture.detected
|
||
repair.attempted
|
||
repair.resolved
|
||
evaluation.completed
|
||
self_assessment.locked
|
||
feedback.revealed
|
||
practice.prescribed
|
||
practice.attempted
|
||
practice.mastered
|
||
transfer.verified
|
||
competency.updated
|
||
measurement.degraded
|
||
```
|
||
|
||
### API surface
|
||
|
||
```text
|
||
POST /sessions/{id}/plan
|
||
POST /sessions/{id}/measurements
|
||
GET /sessions/{id}/alliance
|
||
GET /sessions/{id}/trajectory
|
||
GET /sessions/{id}/ruptures
|
||
POST /sessions/{id}/self-assessment
|
||
POST /sessions/{id}/feedback/reveal
|
||
POST /practice/prescriptions
|
||
POST /practice/{id}/attempts
|
||
GET /learners/me/competencies
|
||
GET /teacher/attention-queue
|
||
GET /research/measurement-runs
|
||
```
|
||
|
||
API는 화면 전용 거대 payload보다 이벤트 원장과 목적별 read model을 분리한다. OpenAPI-visible shape가 바뀔 때는
|
||
현재 규칙대로 `api.gen.ts`를 재생성하고 계약 검증을 통과한다.
|
||
|
||
## 9. UX 정보구조
|
||
|
||
### 학습자
|
||
|
||
```text
|
||
오늘의 연습
|
||
├─ 종단 사례 이어하기
|
||
├─ 약한 역량 10분 훈련
|
||
├─ 최근 균열 장면 재연습
|
||
└─ 미지 사례 전이 시험
|
||
|
||
회기
|
||
├─ 회기 계획(goal/task)
|
||
├─ 내담자 중심 대화
|
||
├─ 조용한 상태 신호
|
||
└─ 필요 시 근거 기반 코치
|
||
|
||
리뷰
|
||
├─ 자기평가 잠금
|
||
├─ 내담자 관점
|
||
├─ 동맹·성과·균열 타임라인
|
||
├─ 슈퍼바이저 근거
|
||
├─ 장면별 분기 재연습
|
||
└─ 다음 연습 처방
|
||
|
||
성장
|
||
├─ 역량 그래프
|
||
├─ 보정 오차
|
||
├─ 종단 사례 궤적
|
||
└─ 전이 검증 이력
|
||
```
|
||
|
||
### 교수자
|
||
|
||
```text
|
||
Attention Queue
|
||
├─ off-track / deteriorating
|
||
├─ unresolved rupture
|
||
├─ safety / boundary
|
||
├─ persistent overconfidence
|
||
├─ plateau
|
||
└─ transfer failure
|
||
|
||
Learner Drilldown
|
||
├─ 사례 난이도 보정 성장곡선
|
||
├─ 측정 출처·불확실성
|
||
├─ 장면 근거
|
||
├─ AI-교수자 불일치
|
||
└─ 처방·재연습 결과
|
||
```
|
||
|
||
## 10. 에이전틱 개발 운영체계
|
||
|
||
### 10.1 사람 개발자 없는 기본 루프
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A["SSOT·비전·코드 스캔"] --> B["Spec Agent: 계약·불변식 생성"]
|
||
B --> C["Test Agent: RED 계약·골든 생성"]
|
||
C --> D["Schema/API Agents"]
|
||
C --> E["Runtime/AI Agents"]
|
||
C --> F["Web/UX Agents"]
|
||
D --> G["Integration Agent"]
|
||
E --> G
|
||
F --> G
|
||
G --> H["Clinical Evidence Red Team"]
|
||
G --> I["Security/Privacy Red Team"]
|
||
G --> J["Adversarial Simulation Agent"]
|
||
H --> K["Proof Agent"]
|
||
I --> K
|
||
J --> K
|
||
K --> L["Release Agent"]
|
||
L --> M["Public/Runtime Verification"]
|
||
M --> N["SSOT·TODO·Evidence 자동 동기화"]
|
||
N --> O["다음 DAG 노드 선택"]
|
||
O --> A
|
||
```
|
||
|
||
### 10.2 개발 에이전트 역할
|
||
|
||
| 에이전트 | 책임 | 산출물 |
|
||
|---|---|---|
|
||
| Repo Cartographer | 현재 계약·중복·데이터 흐름 지도화 | evidence map, dependency graph |
|
||
| Spec Compiler | 비전을 테스트 가능한 계약으로 변환 | ADR, OpenAPI, event schema, invariants |
|
||
| Test Author | 구현 전 실패 테스트 작성 | unit/contract/E2E/golden/visual gates |
|
||
| Data Agent | 마이그레이션·RLS·read model | reversible migration, DB tests |
|
||
| Runtime Agent | 오케스트레이터·상태·에이전트 실행 | services, workers, queues |
|
||
| Evaluation Agent | 측정기·보정·benchmark | schemas, scorers, calibration jobs |
|
||
| Web Agent | 학습자·교수자 UX | accessible React flows, visual proof |
|
||
| Voice Agent | STT/TTS·시간 정렬·운율 이벤트 | voice pipeline, audio E2E |
|
||
| Privacy Agent | PII·동의·역할 격리·감사 | threat model, privacy tests |
|
||
| Red-team Agent | leakage, judge gaming, unsafe coaching 공격 | adversarial corpus, failures |
|
||
| Proof Agent | 테스트·DB·브라우저·배포 증거 수집 | machine-readable evidence manifest |
|
||
| Release Agent | 좁은 커밋·배포·관측·롤백 | release record, live proof |
|
||
|
||
모든 에이전트는 같은 파일을 동시에 수정하지 않는다. Spec/Test가 계약을 먼저 고정하고, 구현 에이전트는 파일
|
||
소유 경계가 분리된 작업만 병렬 실행한다. 중요한 결정은 채팅 기억이 아니라 ADR과 schema에 기록한다.
|
||
|
||
### 10.3 자동 실패 규칙
|
||
|
||
- 테스트 없이 behavior를 바꾸면 merge 금지.
|
||
- score provenance가 없으면 저장 금지.
|
||
- client agent가 evaluator-only field를 읽으면 즉시 실패.
|
||
- LLM judge가 골든셋 대비 허용 범위를 벗어나면 해당 모델/프롬프트를 격리한다.
|
||
- 마이그레이션 rollback 또는 forward-fix 경로가 없으면 배포 금지.
|
||
- 브라우저에서 근거·불확실성·오류 상태가 보이지 않으면 완료 금지.
|
||
- public route와 dependent asset/API를 검증하지 않으면 release 완료 금지.
|
||
- 문서·SSOT가 실제 source/test/runtime와 어긋나면 다음 작업 진행 금지.
|
||
|
||
## 11. 제약 대신 증거로 진행하는 게이트
|
||
|
||
시간 추정과 사람별 할당은 없다. 게이트는 앞 단계의 증거가 다음 단계를 열도록 구성한다.
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
G0["G0 측정 진실 기반"] --> G1["G1 Alliance Core"]
|
||
G1 --> G2["G2 종단 성과 궤적"]
|
||
G1 --> G3["G3 Rupture & Repair"]
|
||
G2 --> G4["G4 의도적 수련"]
|
||
G3 --> G4
|
||
G4 --> G5["G5 자기보정·전이"]
|
||
G5 --> G6["G6 슈퍼비전·연구 OS"]
|
||
G3 --> G7["G7 멀티모달"]
|
||
G6 --> G8["G8 자율 콘텐츠·연속 배포"]
|
||
G7 --> G8
|
||
```
|
||
|
||
### G0. Measurement Truth Foundation
|
||
|
||
에이전트 작업:
|
||
|
||
- `measurement_event`, `instrument_registry`, `model_run` 계약과 provenance enum을 만든다.
|
||
- 기존 `rapport_credit`, `alliance_level`, fast/deep 평가, KPI를 새 출처 체계에 매핑한다.
|
||
- synthetic/model/human/participant 층을 섞는 모든 read model을 실패시키는 테스트를 만든다.
|
||
- 첫 benchmark pack을 구성한다: goal mismatch, task mismatch, empathic miss, withdrawal,
|
||
confrontation, successful repair, failed repair.
|
||
|
||
종료 증거:
|
||
|
||
- 100% measurement provenance.
|
||
- evaluator/client 정보 누수 0건.
|
||
- event schema의 Python/TypeScript/DB conformance.
|
||
- 기존 세션·리뷰 무회귀.
|
||
|
||
### G1. Alliance Core
|
||
|
||
에이전트 작업:
|
||
|
||
- goal/task/bond의 3관점 측정과 회기 전·중·후 pulse를 구현한다.
|
||
- 현재 `alliance_level`을 legacy simulation signal로 명시하고 새 alliance read model과 분리한다.
|
||
- 학습자 리뷰에 관점 차이와 근거 장면을 구현한다.
|
||
- 교수자 재평가를 append-only measurement로 구현한다.
|
||
|
||
종료 증거:
|
||
|
||
- 세 관점이 독립 실행·저장됨.
|
||
- 한 축이 다른 축에 가려지지 않는 UI.
|
||
- 골든 장면의 goal/task/bond 분류와 근거 span 검증.
|
||
- 평가 실패가 정상 점수로 폴백하지 않음.
|
||
|
||
### G2. Longitudinal Outcome Trajectory
|
||
|
||
에이전트 작업:
|
||
|
||
- 최소 5회기 사례 arc와 예상 궤적 분포를 만든다.
|
||
- safety event와 outcome deterioration을 분리한다.
|
||
- 초기 1~5회기 off-track 감지와 다음 확인 질문을 구현한다.
|
||
- 현재 case memory에 관계 사건·합의·미해결 균열을 role-safe하게 추가한다.
|
||
|
||
종료 증거:
|
||
|
||
- 같은 사례의 5회기 기억·목표·관계 연속성.
|
||
- 악화 benchmark에서 조기 경보 recall 목표 충족.
|
||
- false alert와 uncertainty가 함께 보고됨.
|
||
- synthetic trajectory가 임상 결과로 표시되는 경로 0건.
|
||
|
||
### G3. Rupture & Repair Lab
|
||
|
||
에이전트 작업:
|
||
|
||
- rupture/repair 상태머신과 이벤트 원장을 구현한다.
|
||
- Scenario Director가 균열을 자연스럽게 주입하도록 한다.
|
||
- 실시간 감지, 회기 후 장면 재생, 복구 분기 비교를 구현한다.
|
||
- 후속 발화에서 복구된 fast-loop 경고를 deep-loop가 reconciliation하도록 한다.
|
||
|
||
종료 증거:
|
||
|
||
- 유형별 균열 탐지·복구 판정 benchmark.
|
||
- missed, partial, resolved 상태의 E2E.
|
||
- 완벽한 순응만 유도하는 judge gaming 회귀 0건.
|
||
- 동일 문장 암기 전략이 변형 사례에서 실패하도록 검증.
|
||
|
||
### G4. Deliberate Practice Engine
|
||
|
||
에이전트 작업:
|
||
|
||
- 평가 장면을 원자적 practice prescription으로 변환한다.
|
||
- replay, branch, constrained response, voice retry, difficulty ladder를 구현한다.
|
||
- competency graph와 attempt evidence를 저장한다.
|
||
- 약한 역량과 망각 위험을 기준으로 다음 연습을 자동 선택한다.
|
||
|
||
종료 증거:
|
||
|
||
- 모든 코칭 카드에 실행 가능한 재연습이 연결됨.
|
||
- 재연습 전후 비교와 근거가 저장됨.
|
||
- 미지 사례 전이 전에는 mastery 확정 금지.
|
||
- 학습자가 점수만 올리는 보상 해킹 benchmark 통과.
|
||
|
||
### G5. Calibration Mirror & Transfer
|
||
|
||
에이전트 작업:
|
||
|
||
- 외부평가 공개 전 자기평가 잠금 흐름을 만든다.
|
||
- 역량별 calibration error와 신뢰도 구간을 계산한다.
|
||
- 과신·과소신에 맞춘 메타인지 연습을 자동 처방한다.
|
||
- 인구통계·관계스타일·난이도를 바꾼 transfer suite를 실행한다.
|
||
|
||
종료 증거:
|
||
|
||
- 자기평가 수정 이력과 외부평가 오염 방지.
|
||
- calibration error가 반복 연습에서 감소.
|
||
- 동일 문구가 아닌 새 사례에서 역량 유지.
|
||
- subgroup별 평가 드리프트 리포트.
|
||
|
||
### G6. Supervision & Research OS
|
||
|
||
에이전트 작업:
|
||
|
||
- attention queue와 learner drilldown을 새 측정 원장으로 재구축한다.
|
||
- 교수자 정정과 AI 불일치를 calibration dataset으로 연결한다.
|
||
- cohort curriculum gap, model drift, instrument version 비교를 구현한다.
|
||
- Phase 3 evidence manifest에 alliance/rupture/transfer/calibration을 추가한다.
|
||
|
||
종료 증거:
|
||
|
||
- 교수자가 위험·정체·미해결 관계 사건을 3클릭 이내 확인.
|
||
- 모든 집계에서 원장까지 drilldown 가능.
|
||
- 모델·척도 버전별 재현 가능한 리포트.
|
||
- public/teacher/learner 역할 경계와 감사 로그 검증.
|
||
|
||
### G7. Multimodal Alliance
|
||
|
||
에이전트 작업:
|
||
|
||
- STT word timestamp, silence, overlap, interruption, prosody feature event를 통합한다.
|
||
- 텍스트·음성 평가를 독립 산출 후 calibrated fusion한다.
|
||
- 장면별 오디오 재생과 음성 재연습을 구현한다.
|
||
- 비언어 특징의 과도한 임상 추론을 차단한다.
|
||
|
||
종료 증거:
|
||
|
||
- 오디오·자막·측정 이벤트 시간 정렬.
|
||
- 물리 마이크와 공개 WSS 장시간 E2E.
|
||
- 텍스트 단독 대비 음성 추가 이득을 benchmark로 증명.
|
||
- 음성 원문 보존·삭제·동의 정책 검증.
|
||
|
||
### G8. Autonomous Content & Continuous Improvement
|
||
|
||
에이전트 작업:
|
||
|
||
- source pack에서 새 사례·균열·연습·benchmark 초안을 자동 생성한다.
|
||
- 독립 에이전트가 안전, 정체성, 난이도, 정답 누수, 문화적 편향을 적대 검토한다.
|
||
- 승인된 콘텐츠만 catalog에 승격하고 provenance를 보존한다.
|
||
- 운영 측정으로 약한 benchmark를 찾아 새 adversarial case를 자동 생성한다.
|
||
- release agent가 회귀·배포·public proof·SSOT 동기화까지 수행한다.
|
||
|
||
종료 증거:
|
||
|
||
- 콘텐츠 한 건의 source→draft→red-team→benchmark→catalog 전 과정 재현.
|
||
- 정답 누수·PII·무근거 임상 주장 0건.
|
||
- 모델 교체 시 자동 calibration과 rollback.
|
||
- 운영 오류가 재현 테스트와 backlog DAG로 자동 환류.
|
||
|
||
## 12. 이상형 품질 목표
|
||
|
||
정확한 임계값은 골든셋 분포로 다시 고정하되, 목표 수준은 처음부터 높게 잡는다.
|
||
|
||
| 영역 | 이상형 목표 |
|
||
|---|---|
|
||
| Measurement provenance | 저장된 측정 100%가 source/instrument/model/evidence를 가짐 |
|
||
| Information leakage | client agent의 evaluator-only 정보 접근 0건 |
|
||
| Alliance agreement | 핵심 3축 수치 평정의 human-AI ICC ≥ 0.85 목표 |
|
||
| Rupture detection | 유형 macro-F1 ≥ 0.85, critical miss 별도 0 목표 |
|
||
| Deterioration alert | benchmark recall ≥ 0.95, false alert와 uncertainty 동시 보고 |
|
||
| Repair assessment | resolved/partial/missed에 대한 human-AI κ ≥ 0.80 목표 |
|
||
| Transfer | 숙련 승격 항목의 미지 사례 성공률 ≥ 0.85 |
|
||
| Calibration | 반복 블록 후 자기평가 calibration error 유의 감소 |
|
||
| Grounding | 사용자에게 보이는 코칭 주장 100% source/version 또는 관찰 근거 보유 |
|
||
| Safety | 실제 위기와 시뮬레이션 위기 분기 E2E 100%, silent failure 0 |
|
||
| Reliability | 저장된 턴·측정 유실 0, 재시도 idempotency 100% |
|
||
| Voice experience | 발화 종료→내담자 첫 오디오의 이상형 p95 1.2초 이하 |
|
||
| Explainability | 모든 경고·점수에서 근거 장면과 불확실성을 2클릭 이내 확인 |
|
||
| Agentic delivery | 모든 변경이 RED→GREEN→E2E→runtime proof→SSOT manifest를 가짐 |
|
||
|
||
## 13. 검증 매트릭스
|
||
|
||
| 검증층 | 자동 증거 |
|
||
|---|---|
|
||
| Contract | JSON Schema, OpenAPI, Python/TS generated type, DB constraint conformance |
|
||
| Psychometric | gold agreement, calibration curve, test-retest, version drift, subgroup audit |
|
||
| Simulation | persona invariants, state trajectory, adversarial prompt, answer leakage |
|
||
| Pedagogy | replay improvement, spaced retention, unseen-case transfer, reward hacking |
|
||
| Safety | crisis vs role-play, boundary/referral, unsafe coaching, fallback truthfulness |
|
||
| Privacy | Korean PII fixtures, voice consent, RLS, visible_to, export withdrawal |
|
||
| UX | keyboard/screen reader, 390–1440px visual gates, error/degraded states |
|
||
| Runtime | unit→DB-backed E2E→public route/assets/API/auth/voice proof |
|
||
| Operations | idempotency, retry, queue recovery, cost/budget, model rollback, audit ledger |
|
||
|
||
## 14. 첫 에이전트 실행 DAG
|
||
|
||
다음 순서가 첫 구현팩이다. 주차나 사람 배정 없이 dependency와 증거만 둔다.
|
||
|
||
| ID | 작업 | 선행 | 종료 증거 |
|
||
|---|---|---|---|
|
||
| AOS-001 | 기존 지표 provenance inventory | 없음 | 모든 현재 점수의 source map |
|
||
| AOS-002 | `measurement_event` ADR/schema/DDL | AOS-001 | contract + rollback + RLS tests |
|
||
| AOS-003 | benchmark case schema와 첫 8개 장면 | AOS-001 | deterministic fixtures |
|
||
| AOS-004 | legacy rapport/alliance adapter | AOS-002 | 기존 데이터 무손실 read model |
|
||
| AOS-005 | goal/task/bond 3관점 structured schema | AOS-002/003 | gold contract tests |
|
||
| AOS-006 | session measurement API | AOS-005 | API/DB idempotency E2E |
|
||
| AOS-007 | 학습자 self-assessment lock | AOS-002 | reveal-order E2E |
|
||
| AOS-008 | Alliance Pulse 리뷰 UI | AOS-006/007 | desktop/mobile visual proof |
|
||
| AOS-009 | 교수자 measurement drilldown | AOS-006 | role/RLS/audit E2E |
|
||
| AOS-010 | measurement drift/calibration job | AOS-003/005 | version comparison report |
|
||
| AOS-011 | public/deploy proof manifest | AOS-006/008/009/010 | route/assets/API/auth proof |
|
||
| AOS-012 | SSOT/TODO 동기화 | AOS-011 | dashboard checker green |
|
||
|
||
이 첫 팩은 제품을 한 번에 크게 보이게 만드는 작업이 아니다. 이후 모든 기능이 같은 진실 원장 위에서 움직이게
|
||
하는 기반이다. 이 기반 없이 곧바로 화려한 균열 시뮬레이터나 멀티에이전트 코치를 붙이면, 점수가 무엇을
|
||
뜻하는지 설명할 수 없는 시스템이 된다.
|
||
|
||
## 15. 하지 않을 것
|
||
|
||
- 현재 `rapport_credit`의 이름만 바꿔 치료 동맹 측정이라고 주장하지 않는다.
|
||
- 가상내담자의 기분이 좋아졌다는 이유로 수련생의 임상 역량이 향상됐다고 주장하지 않는다.
|
||
- 상담자 발화를 더 친절하게 만드는 것을 공감 훈련의 전부로 만들지 않는다.
|
||
- 균열이 없는 순응적 페르소나만 생성하지 않는다.
|
||
- LLM judge 점수 하나로 학습자·교수자·연구 판단을 통합하지 않는다.
|
||
- 모델 confidence를 psychometric reliability로 오인하지 않는다.
|
||
- 임상 척도 문항을 라이선스·타당화 확인 없이 복제하지 않는다.
|
||
- 사람 개발자 스프린트·인원 산정·수작업 QA를 계획의 전제로 두지 않는다.
|
||
- 외부 확인이 필요한 지점에서 코드를 멈춘 채 기다리지 않는다. 에이전트가 구조·테스트·검증 패키지를 완성하고
|
||
외부 입력은 명시적 evidence gate로 격리한다.
|
||
|
||
## 16. 최종 제품 정의
|
||
|
||
업그레이드가 끝난 Vignette는 다음 질문에 모두 근거로 답할 수 있어야 한다.
|
||
|
||
- 이 수련생은 내담자와 목표·방법·유대를 실제로 합의했는가?
|
||
- 내담자가 이해받았다고 느꼈는가, 아니면 상담자가 그렇게 생각했을 뿐인가?
|
||
- 관계가 언제 왜 흔들렸고, 수련생은 어떻게 복구했는가?
|
||
- 사례의 변화 궤적은 예상 범위 안에 있는가? 악화 신호를 얼마나 일찍 잡았는가?
|
||
- 수련생의 자기평가는 실제 수행과 얼마나 맞는가?
|
||
- 피드백 이후 같은 장면에서만 좋아졌는가, 새로운 사례에도 전이됐는가?
|
||
- AI의 판단은 어떤 근거·척도·모델·버전에서 나왔고, 얼마나 불확실한가?
|
||
- 교수자가 지금 가장 먼저 개입해야 할 학습자는 누구이며, 왜 그런가?
|
||
- 모델을 바꿔도 과거와 현재의 점수를 공정하게 비교할 수 있는가?
|
||
- 이 모든 주장을 테스트·DB·브라우저·공개 런타임 증거로 재현할 수 있는가?
|
||
|
||
이 질문에 답할 수 있을 때 Vignette는 좋은 답변을 생성하는 시뮬레이터를 넘어, 상담자가 자신의 수행을
|
||
측정하고 의심하고 수정하며 실제로 성장하도록 만드는 시스템이 된다.
|
||
|
||
## 17. 연구 출발점
|
||
|
||
- [Flückiger et al. (2018), The alliance in adult psychotherapy](https://pubmed.ncbi.nlm.nih.gov/29792475/)
|
||
- [Horvath & Greenberg (1989), Working Alliance Inventory](https://doi.org/10.1037/0022-0167.36.2.223)
|
||
- [Elliott et al. (2018), Therapist empathy and client outcome](https://doi.org/10.1037/pst0000175)
|
||
- [Eubanks, Muran & Safran (2018), Alliance rupture repair](https://doi.org/10.1037/pst0000185)
|
||
- [Hannan et al. (2005), Identifying clients at risk for treatment failure](https://pubmed.ncbi.nlm.nih.gov/15609357/)
|
||
- [Goldberg et al. (2016), Do psychotherapists improve with time and experience?](https://doi.org/10.1037/cou0000131)
|
||
- [Nissen-Lie et al. (2017), Love yourself as a person, doubt yourself as a therapist?](https://pubmed.ncbi.nlm.nih.gov/26450342/)
|
||
- [de Jong et al. (2021), Progress feedback meta-analysis](https://doi.org/10.1016/j.cpr.2021.102002)
|