docs: 개발 계획 오버뷰 대시보드(진행현황·로드맵·산출물·리스크)

This commit is contained in:
Yun Chan 2026-06-25 22:23:01 +09:00
parent 84eb6e2173
commit 859ab26314
2 changed files with 749 additions and 0 deletions

147
docs/taxonomy.md Normal file
View file

@ -0,0 +1,147 @@
# 발화 라벨 Taxonomy v1.0 — 0615 파란색 라벨 정의서
> SoT(라벨 정의). 코드 구현: `apps/api/app/taxonomy.py`. 예시 데이터: `docs/golden_schema.jsonl`.
> 근거: `데이터/README.md`(파랑 #3057B9 = 3종 혼재), `MASTERPLAN.md` §3.1~§3.2(89개·77종, 3축 분리),
> `MEMORY_KNOWLEDGE_PERSONA_DESIGN.md` §3.6(kb.chunk.label_id FK).
> **버전 = 1.0.0** (`TAXONOMY_VERSION`). 라벨 코드는 불변, 추가는 append-only.
## 0. 설계 원칙
0615 축어록의 파란색(#3057B9) 주석은 **한 셀에 3종이 혼재**한다(기법/내담자 상태/슈퍼바이저 논평).
학습 신호 오염을 막기 위해 **3개의 독립 축으로 분리**한다. 이것이 평가 AI 정답셋과 페르소나
상태전이 정답의 단일 원천이다.
- **3축 분리**: (A) 기법 태그(상담자 발화) · (B) 내담자 상태 태그(내담자 발화) · (C) 슈퍼바이저 논평(둘 다).
- **위계**: 기법은 5개 군집(category) 아래에 둔다 → 분포·과다/과소 집계·리뷰 게이지 축.
- **복수 부착**: 한 발화에 기법·상태·논평이 각각 여러 개 붙을 수 있다.
- **부착 규칙**: 기법은 상담자 발화에만, 상태는 내담자 발화에만(코드에서 강제, `Annotation.__post_init__`).
- **원본 미적재**: 0615 원문(미성년·자살사고)은 절대 적재하지 않는다. 예시는 합성 변형(`source="0615_synthetic"`).
## 1. 회기 단계 (Stage)
결정론 상태머신이 소유(LLM 아님). 발화는 발화 시점의 단계를 단일 값으로 기록한다.
| code | 단계 | 정의 |
|---|---|---|
| `라포` | 라포 형성 | 안전감·관계 구축, 비밀보장 구조화, 비자발성 완화 |
| `탐색` | 탐색 | 호소문제·정서·인지·위험요인(자살/자해) 탐색 |
| `개입` | 개입 | 직면·해석·인지재구성·교정적 정서체험 |
| `정리` | 정리 | 요약·과제·다음 회기 연결·종결 |
## 2. 화자 (Speaker)
| code | 화자 | 0615 대응 |
|---|---|---|
| `counselor` | 상담자(수련생/상담사 AI) | "상N" |
| `client` | 내담자(가상내담자 AI) | "내N" |
## 3. (A) 기법 라벨 (Technique) — 상담자 발화
> 각 라벨: **조작적 정의**(무엇을 했을 때 부착하는가) + **0615 예시**(실제 파랑 라벨에서 정규화).
### 3.1 RELATIONAL (관계 형성)
| code | 한글 | 조작적 정의 | 0615 표면 라벨 예시 |
|---|---|---|---|
| `empathy` | 공감 | 내담자의 감정·입장을 정확히 알아차리고 그대로 되돌려, "이해받고 있다"를 전달 | "공감" / "한숨이 무겁게 느껴지네요" |
| `reflection` | 반영 | 내담자 발화·비언어의 핵심(정서/내용)을 거울처럼 재진술 | "반영", "정서 반영", "내담자의 반응을 반영함" |
| `validation` | 타당화 | 내담자의 감정·반응이 그 상황에서 자연스럽고 정당함을 인정 | "타당화", "감정 노출의 타당화" |
| `holding` | 홀딩 | 침묵·머뭇거림을 재촉 없이 견디며 안전한 공간을 유지(기다려 줌) | "홀딩", "탐색과 홀딩" |
| `self_disclosure` | 자기공개 | 상담자 자신의 정보·경험·마음을 라포 목적으로 적절히 개방 | "라포형성을 위한 상담자의 자기 개방" |
| `affect_conveyance` | 정서 전달 | 내담자를 향한 상담자 자신의 정서·태도를 명시적으로 전달 | "상담자의 정서 전달" |
| `humor` | 유머 | 무거운 분위기를 가볍게 만들어 참여를 촉진(상황·관계 고려) | "유머" |
### 3.2 EXPLORATORY (탐색)
| code | 한글 | 조작적 정의 | 0615 표면 라벨 예시 |
|---|---|---|---|
| `exploration` | 탐색 | 경험·맥락·의미를 더 드러내도록 묻거나 머무름 | "탐색", "탐색질문" |
| `facilitative_question` | 촉진질문 | 내담자가 더 말하도록 여는 개방형/참여 촉진 질문 | "촉진", "참여 촉진 질문" |
| `risk_assessment` | 위험사정 | 자살/자해/타해 위험 요인·경험·계획을 직접 탐색 | "위험요인 탐색", "자해 위험 및 경험 탐색" |
| `consent_motivation_check` | 동의·동기 확인 | 상담 동의·문제의식·변화 동기 수준을 확인 | "동의확인, 동기수준 확인" |
| `opinion_check` | 의견 확인 | 내담자의 생각·반응·주호소를 되짚어 확인 | "내담자 의견 확인", "주호소 문제 재확인" |
### 3.3 INTERVENTION (개입)
| code | 한글 | 조작적 정의 | 0615 표면 라벨 예시 |
|---|---|---|---|
| `confrontation` | 직면 | 내담자 발화·행동의 불일치/모순을 근거와 함께 마주하게 함 | "기초자료를 활용하여 반응의 불일치에 직면시킴" |
| `interpretation` | 해석 | 표면 너머의 의미·동기·패턴을 가설로 제시 | "모순의 의미를 해석함", "비언어적 자극 해석", "행동의 재해석" |
### 3.4 STABILIZING (안정/지지)
| code | 한글 | 조작적 정의 | 0615 표면 라벨 예시 |
|---|---|---|---|
| `stabilization` | 안정화 | 각성·정서를 진정시켜 안전 범위로 되돌림 | "안정화" |
| `hope_instillation` | 희망고취 | 변화 가능성·욕구를 비추어 희망을 불어넣음 | "동기부여, 희망고취", "희망 고취, 욕구 반영" |
| `reinforcement` | 강화 | 바람직한 개방·시도를 인정·격려해 지속을 촉진 | "강화" |
| `normalization` | 정상화 | 반응(감정 노출 등)을 보편적 경험으로 정상화 | "감정 반응을 노출하는 것을 정상화함" |
### 3.5 STRUCTURING (구조화)
| code | 한글 | 조작적 정의 | 0615 표면 라벨 예시 |
|---|---|---|---|
| `principle_explanation` | 상담원칙 설명 | 비밀보장·예외 등 상담 원칙·틀을 안내 | "상담원칙에 대한 설명", "비밀보장 제외 원칙 설명" |
| `psychoeducation` | 심리교육 | 보편적 교범·정보를 주관적 해석과 구별해 전달 | "보편적 교범 전달, 주관적 해석과 구별" |
| `homework` | 과제 부여 | 회기 간 실천 과제를 이해 가능하게 제시·확인 | "다음 회기까지 해 와야 하는 과제 설명" |
## 4. (B) 내담자 상태 태그 (ClientState) — 내담자 발화/비언어
> 페르소나 저항 엔진의 상태전이 정답 + 평가 AI '반응 읽기' 채점 근거.
| code | 한글 | 조작적 정의 | 0615 표면 라벨 예시 |
|---|---|---|---|
| `involuntary` | 비자발적 태도 | 단답·회피·거부 등 상담에 비자발적 신호 | "(아니오)는 비자발적 태도", "(쓴웃음)은 비자발적 태도" |
| `defensive` | 방어 | 주제 회피·차단·거리두기 | "방어", "부모자녀 관계에 대한 방어적 태도" |
| `suicidal_ideation_admit` | 자살사고 인정 | 자살/죽음 생각을 직간접 인정(★안전 핵심) | "자살사고 인정" |
| `negative_self_perception` | 부정적 자기인식 | 자기에 대한 부정·평가절하 표현 | "부정적 자기인식" |
| `conflicted` | 갈등 상태 | 양가·상충하는 욕구/감정 사이의 갈등 | "갈등 상태" |
| `lack_of_confidence` | 확신 부족 | 자신감/확신의 결여 표현 | "확신의 부족" |
| `affect_contact` | 정서 접촉/표현 | 자기 감정에 접촉하고 표현하기 시작 | "정서와 접촉함", "정서와 사고의 표현" |
| `thought_organizing` | 생각 정리 | 침묵 속에서 자기 생각을 정리 중 | "생각을 정리함" |
| `responds_to_exploration` | 탐색에 반응 | 상담자 탐색에 응답·협조 | "상담자의 탐색에 반응함" |
| `expresses_plan` | 계획/욕구 표현 | 자기 계획·욕구·바람을 표현 | "자신의 계획을 표현함" |
| `defense_loosening` | 방어 완화 | 누적된 반영/탐색으로 방어가 서서히 풀림(진전 신호) | "방어가 서서히 풀어지고 있음" |
## 5. (C) 슈퍼바이저 논평 (SupervisorComment)
2종으로 분리한다. critique 는 `intent_deviation`(의도 vs 실제)을 구조화한다(윤찬: 1급 시민).
| kind | 정의 | 0615 예시 |
|---|---|---|
| `rationale` | 왜 이 반응이 적절한가 — 근거·의도 설명 | "비자발적 내담자의 초기 상담에서는 상담자의 적극적인 안내가 필요함" |
| `critique` | 개선점·주의 — 과도/부족/평가적 시각 등 | "과도한 자기개방일 수 있음", "비언어적 반응의 반영이 더 되었으면 좋았을 것임", "평가적인 시각을 줄 수 있음" |
`critique` 선택 필드: `dimension`(평가 차원) · `expected`(권장 의도) · `actual`(실제) · `severity`(minor/moderate/major) · `author`(ai/supervisor).
## 6. 발화 Annotation 스키마 (golden 단위)
`docs/golden_schema.jsonl` 한 줄 = `Annotation` 하나. README JSONL 스키마를 3축 분리로 격상.
```jsonc
{
"utterance_id": "0615-C-001", // 화자(C=상담자/K=내담자)+seq 인코딩
"speaker": "counselor", // counselor | client
"stage": "라포", // 라포 | 탐색 | 개입 | 정리
"seq": 0, // 회기 내 발화 순서(0-based)
"text": "…", // 발화 텍스트(합성 변형, 원문 미적재)
"techniques": ["self_disclosure"], // (A) 상담자 발화만
"client_states": [], // (B) 내담자 발화만
"comments": [{"kind": "rationale", "text": "…", "author": "ai"}], // (C)
"nonverbal": ["(쓴웃음)"], // 비언어 단서 원문 표기(상태판정 보조)
"source": "0615_synthetic" // provenance
}
```
## 7. DB 코드테이블 동기화
`MASTERPLAN.md` §3.2 코드테이블에 enum `value`(code)를 적재, 다대다 연결.
| taxonomy 축 | DB 코드테이블 | 다대다 연결 | label_id 참조 |
|---|---|---|---|
| `Technique` | `technique_label_def(code, category, ko)` | `turn_technique(turn_id, label_id)` | `kb.chunk.label_id` |
| `ClientState` | `client_state_def(code, ko)` | `turn_client_state(turn_id, label_id)` | — |
| `Stage` | `stage_def(code)` | `turns.stage` | — |
| `SupervisorComment` | `supervisor_comment(turn_id, kind, text, intent_deviation JSONB)` | (1:N) | — |
> 라벨 추가 시: enum 에 append → `technique_label_def` seed → `TAXONOMY_VERSION` minor++. 기존 code 변경 금지(골든셋 재현성).