기질진단 대화형 도구 — brain.crowny.org/diagnosis
개요
크라우니AI 사용자 기질DB 축적을 위한 대화형 에니어그램 기질 진단 도구 구현.
무엇을 했는지
한선씨 코어 엔진
/Users/ef/crowny-brain/기질진단대화.한선 — 대화형 진단 엔진 (6단계, 4상태 응답, KPS 의미어 분해)
server.js 대화형 API + 웹 UI
POST /api/diagnosis/start — 진단 세션 생성
POST /api/diagnosis/answer — 응답 처리 (T/O/A/U/X 5종)
GET /api/diagnosis/session/:id — 세션 조회
GET /diagnosis — 대화형 웹 UI (채팅 인터페이스)
10단계 진단 구조 (2026-05-19 확장)
- 기본정보 (2문항) — 성별 + 연령대 (20대이하/30-40대/50대이상)
- 유형 판별 (11문항) — 센터(본능/감정/사고) + 9유형 세부 점수
- 동기 판별 (3문항) — 강제선택 가중치5, 9유형 핵심동기 비교
- 성숙도 (5문항) — 9단계 (건강3/보통3/미흡3)
- 날개 (1문항) — 에니어그램 규칙 (인접 유형 A/B/균형)
- 언어 수준 (1문항) — 초등/일반/전문
- 대화 방식 (1-2문항) — 공감/해결/유머
- 뇌성향 (8문항) — 8뇌유형 + 5지수 보정
- 가정환경 (1문항) — 1인가구/부부/자녀있음
- 종교배경 (1문항) — 기독교/불교·기타/무교
- 학습역량 (1문항) — 자기주도/안내형/체험형
조합 규모
- 81 기본 유형: 9기질 × 9성숙도
- 243 날개 조합: 81 × 3(날개A/B/균형)
- 확장 프로필: × 3연령 × 3가정 × 3종교 × 3학습 = 최대 59,049 고유 프로필
4상태 응답 시스템
- 티(T) = 그래, 맞아
- 옴(O) = 잘 모르겠어
- 타(A) = 아니야
- 음(U) = 이해 안 돼 → 부연설명 후 재시도
- 타이핑(X) = 자유 입력 → KPS 의미어 분해 → 코드 변환 또는 재질문
핵심 화법
"~란 말씀이시죠?" — yes 유도 확인 화법
- 타이핑 분류 불가 시:
"'원문'이라고 하셨는데... ~란 말씀이시죠?" 재질문
티옴타 에니어그램 매핑
| 코드 | 번호 | 이름 | TOAU |
|---|
| 티 | 1 | 완벽주의자 | T |
| 옴 | 9 | 평화주의자 | O |
| 타 | 8 | 도전자 | A |
| 티티 | 4 | 예술가 | TT |
| 티타 | 7 | 열정가 | TA |
| 타티 | 2 | 조력자 | AT |
| 타타 | 5 | 탐구자 | AA |
| 옴티 | 3 | 성취자 | OT |
| 옴타 | 6 | 충성가 | OA |
관련 파일
/Users/ef/crowny-brain/기질진단대화.한선 — 한선씨 코어
/Users/ef/crowny-brain/server.js — 서버 (진단 API + UI)
/Users/ef/crowny-brain/메타인지코어.한선 — 기존 메타인지 엔진
/Users/ef/crowny-brain/메타인지설문.한선 — 기존 설문 엔진
/Users/ef/crowny-brain/data/diagnosis/ — 세션 저장소
/Users/ef/crowny-brain/data/profiles/ — 프로필 저장소
뇌성향 차트 통합 (BOSI 구조 참고, 크라우니 독자 명칭)
추가 구현 완료
- 8 뇌유형 (우뇌 4 + 좌뇌 4): 직관/소통/전략/컨셉 + 논리/탐구/통합/해결
- 5 지수: 뇌활성화, 진취성, 사회성, 실천성, 신체활동성
- 에니어그램↔뇌성향 교차매핑: 9유형 → 1차/2차 뇌유형 매핑
- 간이 8문항: 에니어그램 결과를 뇌성향으로 보정
- 프로필ID에 뇌성향 코드 포함:
티-1-옴-일반-공감-L1
- 결과 UI에 5지수 바 차트 표시
- MSC 브랜드 사용 안 함 — 크라우니 독자 용어 체계
추가 파일
/Users/ef/crowny-brain/뇌성향차트.한선 — 한선씨 뇌성향 코어
동적 버튼 레이블 (2026-05-18 구현)
- 모든 질문에
opts 객체 추가: T/O/A/U 버튼 텍스트가 질문 맥락에 맞게 변동
getNextQuestion()이 q.opts를 options 필드로 전달
- 프론트엔드
updateButtons(q) 함수가 실시간으로 버튼 텍스트 갱신
- 적용 범위: 성별, 유형(11문항), 성숙도(5문항), 날개(1문항), 언어수준, 대화방식, 뇌성향(8문항)
진단 정확도 개선 (2026-05-18)
- '타(A)' 응답 시 해당 유형에 -1 감점 추가 (기존: 0점)
- 점수 판정 시 maxScore 초기값 -Infinity로 변경 (음수 점수 처리)
동기(Motivation) 기반 강제선택 질문 추가 (2026-05-18)
- 문제: 성숙한 사람은 행동 질문에 여러 유형으로 긍정 응답 → 오판
- 해결: 동기 질문 3개 추가 (가중치 5, 행동 질문의 3보다 높음)
- Q12: "프로젝트 끝나고 가장 뿌듯한 순간?" → 티타(7)/타티(2)/티(1) 판별
- Q13: "어려운 상황 첫 반응?" → 옴티(3)/옴타(6)/타(8) 판별
- Q14: "혼자 시간에 하고 싶은 건?" → 타타(5)/옴(9)/티티(4) 판별
motiveMap 구조: 각 버튼(T/O/A)이 서로 다른 유형에 +5점
- 결과: 성숙한 7번 유형이 여러 행동에 T 답해도 동기 질문이 정확히 구분
- 테스트: 티타=8점(1위) vs 옴/옴티=6(2위) — 확실한 차별화
의미어코드 통합 (2026-05-19 구현)
의미어진단-질문.js — 36 질문 항목, 다국어(ko/en), 성별/연령 변형, 대체표현 2~3개씩
의미어진단-응답.js — 감성 응답 레이어
acks: 4 답변유형(T/O/A/U) × ko 10개 / en 5개 = 다양한 인정 응답
typeAcks: 9유형 × T/A = 18종 × 4변형 = 유형별 맞춤 인정
transitions: 9 단계전환 × 4~5변형 = 따뜻한 이음새 문구
explains: 8 카테고리 × 2~3변형 = U응답 시 재설명
resultNarration: 9유형 × ko/en = 따뜻한 결과 내레이션 (제목/요약/강점/성장)
maturityDesc: 3구역(건강/보통/불건강) × ko/en
의미어리졸버.js — 177줄 리졸버 엔진
resolveQuestion(): 코드→텍스트 (성별/연령/언어 맥락 반영, 30% 대체표현 랜덤)
resolveAck(): 답변 후 인정 응답 (유형별 우선, 제네릭 폴백)
resolveTransition(): 단계 전환 문구
resolveExplain(): 재설명 문구 (U 응답 시)
resolveResult(): 결과 내레이션 (유형+성숙도)
seededRand로 세션 내 결정론적 변형 선택
server.js 통합:
processAnswer() 모든 단계에서 ack + transition 반환
handleDiagnosisAnswer()가 프론트엔드에 ack/transition 전달
computeFinalResult()가 narration 객체 포함
프론트엔드 채팅에 ack→transition→질문 순서로 표시
결과 화면에 내레이션(제목/요약/성숙도설명/강점/성장방향) 표시잔여 이슈
- 다국어 전환 UI (현재 ko 고정, en 데이터는 준비됨)
- 의미어 질문뱅크로 getTypeQuestions/getMaturityQuestions 완전 교체 (현재 하드코딩 유지, 응답만 의미어화)
- 뇌인지 12축 질문을 대화형으로 전환 (현재는 메타인지 페이지에서만)
- 프로필 목록 조회 UI 구현
- crowny.org 메인에서 진단 시작 동선 연결
- 3대 분석영역 (잠재역량/관계적합/업무적합) 상세 구현