# 발화 라벨 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 변경 금지(골든셋 재현성).