Markit Two-Way MR 평가 시스템

AI 기반 영업 역량 강화 및 실시간 평가 플랫폼 통합 기술 문서 (v4.6)
🔗 Quick Access Links (바로가기)

📁 Chapter 1. Twoway System (공통 시스템)

💊 Chapter 2. 바이엘 케렌디아 (Bayer Kerendia)

❤️ Chapter 3. 카르디노바 (Cardinova - Non-Bayer)

🚀 System Status (v4.6 / 2026.01.09)
현재 시스템은 Admin Dashboard (대화 로그 분석), 지능형 출처 토큰(Citation Token), 하이브리드 RAG가 통합되어 운영 중입니다.
New 관리자는 대시보드를 통해 모든 평가 이력을 실시간으로 모니터링하고 분석할 수 있습니다.

1. 프로젝트 핵심 철학 (Core Philosophy)

기존의 MR 교육은 정해진 스크립트를 읽고 녹음하는 '일방향(One-Way)' 방식에 머물렀습니다. 하지만 실제 영업 현장은 예측 불가능한 대화의 연속입니다. 본 프로젝트는 이 한계를 극복하기 위해 시작되었습니다.

🛡️ 출처 매칭 (Source Grounding)의 핵심 중요성

본 시스템의 가장 핵심적인 차별점은 "100% 출처 기반 응답 (Grounded Response)"입니다. AI가 생성하는 모든 답변, FAQ, 힌트는 반드시 사용자가 업로드한 원본 문서에서 추출된 내용이어야 합니다. 원문에 없는 내용은 어떠한 경우에도 생성되지 않도록 3-Layer 검증 시스템이 작동합니다. 이는 제약 산업의 엄격한 규정 준수(Compliance)와 의학적 정확성 보장을 위해 필수적입니다.

🛑 기존의 한계

  • 단순 암기 위주의 평가
  • 현장감 없는 텍스트 기반 피드백
  • 데이터가 정적으로 고정됨
  • AI Hallucination 위험 (잘못된 임상 정보 생성)

🎯 우리의 지향점

  • Sparring Partner: 살아있는 AI와 대련하듯 훈련
  • Context-Aware: 문맥을 이해하는 정교한 평가
  • Self-Evolving: 사용자가 쓸수록 똑똑해지는 시스템
  • 100% Grounded Responses: 원문 기반 신뢰성 보장

2. 시스템 아키텍처 (System Architecture)

본 시스템은 Event-Driven Architecture를 기반으로 설계되었습니다. 클라이언트와 서버는 WebSocket으로 지속적인 연결을 유지하며, 음성 데이터와 텍스트 메시지를 실시간으로 교환합니다.

flowchart TD Client["Web Client
(Browser)"] Server["Node.js Server
(Express + Socket.io)"] subgraph External_APIs [AI Cloud Services] Whisper["OpenAI Whisper
(STT)"] Gemini["Google Gemini 2.0 Flash Exp
(LLM/Reasoning)"] TTS["OpenAI TTS
(Text-to-Speech)"] Embedding["OpenAI Embeddings
(text-embedding-3-small)"] end subgraph Data_Layer [Data Storage] VectorDB["Vector Reference Analyzer
(RAG + Token Injection)"] FAQ_File["FAQ Data
(JSON + Stopword Matcher)"] Logs["STT Analysis Logs
(JSON)"] end subgraph Verification [Grounding Verification] Verifier["GroundedVerifier
(3-Layer Check)"] end Client <-->|Socket.io Stream| Server Server -->|"Audio Buffer"| Whisper Whisper -->|"Text"| Server Server -->|"Query"| VectorDB VectorDB -->|"Context Chunks"| Server Server -->|"Prompt + Context"| Gemini Gemini -->|"Response Text"| Server Server -->|"Generated Answer"| Verifier Verifier -->|"Verified/Rejected"| Server Server -->|"Text"| TTS TTS -->|"Audio"| Server Server -->|"Log/Update"| FAQ_File Server -->|"Log"| Logs VectorDB -->|"Document Chunks"| Verifier

[그림 1] Markit Two-Way 시스템 아키텍처 다이어그램 (v4.2)

3. 핵심 데이터 흐름 (Core Data Flow)

사용자가 발화하는 순간부터 AI의 음성이 스피커로 나오기까지의 데이터 흐름은 다음과 같습니다.

단계 주요 프로세스 핵심 모듈 상세 기술 설명
1. Input Audio Capture & Streaming twoway-evaluation.ejs 브라우저의 MediaRecorder API가 마이크 입력을 캡처하고, 청크(Chunk) 단위로 Socket.io를 통해 서버로 실시간 전송합니다.
* 제품 선택(Cardinova/Kerendia)에 따라 productId 메타데이터가 함께 전송됩니다.
2. Perception STT & Correction sttCorrector.js 서버는 수신된 오디오 버퍼를 결합하여 OpenAI Whisper API로 전송합니다.
3단계 보정 프로세스 (v4.3 Upgrade):
  1. 하이브리드 사전 주입: Product Keyword + Common Dictionary + Vector Top-N Words를 Whisper Prompt에 동적 주입
  2. 수동 교정 테이블 (Hard Rules): stt_corrections.json 기반 강제 치환 (UI에서 편집 가능)
  3. Gemini 문맥 교정: 제품별 FAQ 데이터를 참조하여 문맥상 오인식 수정
특히 Vector DB에 저장된 8만 단어 이상의 원문 데이터 중 상위 빈도 단어를 프롬프트에 자동 포함하여 인식률을 극대화합니다.
3. Retrieval Hybrid RAG & Token Injection vectorReferenceAnalyzer.js Hybrid Search: Vector Search(유사도)와 FAQ Keyword Search(불용어 처리)를 결합하여 최적의 지식을 추출합니다.
Citation Token System (v4.5): 검색된 모든 지식의 파일명은 ⟪filename⟫ 형태의 특수 토큰으로 감싸져 프롬프트에 주입됩니다. 이는 AI가 출처를 명확히 인용하도록 강제하고 후처리를 용이하게 합니다.
* 유사도 0.25 미만 결과는 무시되어 노이즈를 제거합니다.
4. Reasoning LLM Processing twoway-evaluation.js Google Gemini 2.0 Flash Exp 모델이 [시스템 페르소나] + [토큰화된 참고 지식] + [대화 이력]을 종합하여 답변을 생성합니다.
Strict Prompting: AI는 반드시 [출처: ⟪파일명⟫] 형식을 준수하도록 지시받습니다.
* Temperature 0.0(Mentor) / 0.4(Doctor) 동적 설정
5. Output Filter & Smart UI twoway-evaluation.ejs TTS Filtering: 오디오 생성 전, ⟪...⟫ 토큰과 메타데이터는 완벽하게 제거되어 자연스러운 음성을 보장합니다.
Smart Link UI: 프론트엔드는 ⟪filename⟫ 토큰을 감지하여 즉시 클릭 가능한 파일 아이콘 링크로 변환합니다.
6. Hint 사전승인 FAQ 조회 socket.on('suggest-answer') MR이 "정답 힌트"를 요청하면, 사전 승인된 FAQ JSON 데이터에서 키워드 매칭으로 가장 관련성 높은 답변을 반환합니다.
v4.0 변경 LLM 생성 없이 사전 검증된 FAQ에서 직접 제공하여 Hallucination 0% 보장.

4. 출처 매칭 시스템 (Grounded Verification) CRITICAL

⚠️ 이 섹션이 시스템의 가장 핵심입니다
제약 산업에서 AI가 생성한 잘못된 임상 정보는 심각한 규정 위반 및 안전 문제를 초래할 수 있습니다. 본 시스템은 3-Layer 검증 파이프라인을 통해 AI의 모든 출력이 100% 원문 기반(Grounded)임을 보장합니다.

4.1 GroundedVerifier 클래스 (utils/groundedVerifier.js)

모든 AI 생성 콘텐츠(FAQ 답변, 정답 힌트 등)가 저장되기 전에 이 검증기를 통과해야 합니다.

flowchart TB Input["AI 생성 답변
(Question + Answer)"] subgraph Layer1 [Layer 1: Literal Matching] L1Check["숫자/수치 추출
(예: 90%, 4.5mg)"] L1Verify{"원문에
존재?"} end subgraph Layer2 [Layer 2: LLM Semantic Verification] L2Prompt["Gemini에게
근거 문구 요청"] L2Check{"VERIFIED +
Evidence 반환?"} end subgraph Layer3 [Layer 3: Mechanical Noun Check] L3Extract["답변의 모든 명사 추출"] L3Verify{"Evidence에
모든 단어 존재?"} end Input --> L1Check L1Check --> L1Verify L1Verify -->|No| Reject1["❌ REJECTED
원문에 없는 수치"] L1Verify -->|Yes| L2Prompt L2Prompt --> L2Check L2Check -->|No| Reject2["❌ REJECTED
의미적 불일치"] L2Check -->|Yes| L3Extract L3Extract --> L3Verify L3Verify -->|No| Reject3["❌ REJECTED
원문에 없는 단어"] L3Verify -->|Yes| Verified["✅ VERIFIED
+ Evidence 저장"] style Reject1 fill:#fee2e2 style Reject2 fill:#fee2e2 style Reject3 fill:#fee2e2 style Verified fill:#d1fae5

[그림 2] 3-Layer Grounded Verification 파이프라인

Layer 1: Deterministic Literal Matching (결정론적 문자열 검사)

1
수치/숫자 추출 및 비교

AI 답변에서 모든 숫자(예: 90%, 4.5mg, 38%)를 정규식으로 추출합니다.
추출된 숫자가 원문 문서 전체에 단 한 번이라도 존재하지 않으면 즉시 REJECTED됩니다.
이유: AI가 숫자를 "지어내는" 것이 가장 위험한 Hallucination이기 때문입니다.

const numbers = answer.match(/\d+(\.\d+)?%?/g) || [];
for (const num of numbers) {
    if (!fullContent.includes(num)) {
        return { verified: false, reason: `수치(${num})가 원문에 없음` };
    }
}

Layer 2: LLM Semantic Verification (의미론적 검증)

2
Gemini 기반 근거 문구 추출

Gemini 2.0 Flash에게 다음을 요청합니다:

  • 답변의 핵심 내용이 원문의 하나의 연속된 단락에서 도출되었는지 확인
  • 용어 번역 금지: 원문에 'Placebo'라면 '위약'으로 바꾸면 REJECTED
  • 멀리 떨어진 사실 조합 금지: 서로 다른 페이지의 정보를 합치면 REJECTED

검증 통과 시 [[Exact Evidence Text]] 형태로 근거 문구를 반환합니다.

Layer 3: Mechanical Noun/Number Check (기계적 명사 검증)

3
최종 교차 검증

Layer 2에서 반환된 Evidence 문구에 대해:

  • 답변의 모든 숫자가 Evidence에 포함되어야 함
  • 답변의 핵심 명사(2자 이상, 최대 15개)가 Evidence 또는 전체 문서에 존재해야 함

모든 Layer 통과 시: { verified: true, evidence: "근거 문구" } 반환

4.2 출처 검증이 적용되는 곳

기능 적용 위치 검증 실패 시 동작
정답 힌트 (Suggest Answer) socket.on('suggest-answer') 안전한 폴백 메시지 반환:
"죄송합니다. 100% 신뢰할 수 있는 근거를 찾지 못했습니다."
FAQ 자동 생성 faqUpdater.analyzeAndGenerateQA() FAQ 항목 생성 자체가 취소됨 (null 반환)
FAQ Context 조회 /api/faq/context Literal Match → Suffix-Agnostic Match → Semantic Search 순으로 Fallback

4.3 FAQ 출처 검색 로직 상세 (/api/faq/context)

FAQ 항목 클릭 시 원문 출처를 찾는 3단계 Fallback 로직:

1
Exact Match (정규화된 완전 일치)

Evidence 문자열의 공백을 정규화한 후, Vector DB의 모든 Chunk와 비교합니다.

2
Suffix-Agnostic Match (어미 무시 매칭)

한국어 특성상 어미가 변할 수 있으므로, 마지막 10자를 제거하고 핵심 내용만 비교합니다.
removeSuffix(text, 10): "~했습니다" vs "~합니다" 차이 허용

3
Semantic Search Fallback

위 두 가지 방법으로 찾지 못하면, Vector 유사도 검색으로 가장 유사한 Chunk를 반환합니다.

5. 지식 베이스 관리 (Knowledge Base Management)

5.1 VectorReferenceAnalyzer (models/vectorReferenceAnalyzer.js)

시스템의 "뇌"에 해당하는 핵심 모듈입니다. 모든 지식 데이터는 이 클래스를 통해 관리됩니다.

메서드 기능 호출 위치
addDocument(fileId, filename, text, metadata) 문서 추가: 텍스트 청킹 → 임베딩 생성 → JSON 저장 /knowledge/upload
search(query, topK) 전역 벡터 검색: 모든 문서에서 유사 청크 검색 RAG 컨텍스트 주입, FAQ 출처 역추적
searchInDocument(fileId, query, topK) 문서 내 검색: 특정 문서의 청크만 검색 STT Training Alignment, FAQ Context 조회
updateDocumentVocabulary(fileId, words) 문서별 단어장 업데이트 STT 훈련 결과 저장
getAllVocabulary() 전체 단어장 조회 (모든 문서의 합집합) Whisper prompt 파라미터 생성
getDocumentText(fileId) 문서 전체 텍스트 반환 (청크 결합) STT 참조 텍스트 로드

5.2 문서 파서 (utils/documentParser.js)

PDF/DOCX 파일을 텍스트로 변환하며, 멀티모달 분석 기능을 포함합니다.

📊 멀티모달 분석 (Chart/Table OCR)

6. AI 멘토 모드 (Knowledge Encyclopedia) v4.3 NEW

🧠 자유로운 Q&A를 위한 'AI 멘토'
기존의 'AI 의사' 모드가 깐깐한 고객을 설득하는 롤플레이(Roleplay)라면, 'AI 멘토' 모드는 제품 지식을 편안하게 물어보고 학습하는 지식 검색(Search) 모드입니다.
사용자 질문의 의도를 파악하여 FAQ 데이터를 우선적으로 검색하되, 적절한 답이 없으면 일반 의학 지식을 활용해 유연하게 답변합니다.

6.1 주요 특징

6.2 지식 검색 및 자동 학습 로직 (Knowledge Retrieval & Auto-Learning) CRITICAL

AI 멘토 모드는 단순히 답변만 하는 것이 아니라, **FAQ 데이터를 스스로 확장하는 자가 학습(Auto-Learning) 메커니즘**을 가집니다.

flowchart TD User["사용자 (MR)
질문 입력"] System["시스템
(Router)"] FAQ_DB["FAQ 데이터베이스
(Correct Answers)"] Vector_DB["지식 데이터베이스
(Reference Docs)"] Admin["관리자 (시스템 운영자)"] User --> System System -->|"1차 검색"| FAQ_DB FAQ_DB -->|"매칭 성공?"| Check{Yes / No} Check -->|Yes| Answer_FAQ["FAQ 답변 반환
(검증된 정답)"] Check -->|No| RAG["2차 검색: Hybrid RAG
(Vector Similarity + Keyword)"] RAG --> Vector_DB Vector_DB -->|"Source Context"| Gemini["Gemini 2.0
(답변 생성)"] Gemini -->|"생성된 답변"| Answer_AI["AI 멘토 답변 반환
(출처 포함)"] Answer_AI -.->|"Auto-Add"| Pending_Storage["Pending FAQ 저장소
(승인 대기)"] Pending_Storage --> Admin Admin -->|"검토 및 승인"| Approve{승인?} Approve -->|Yes| Merge["Live FAQ에 추가
(즉시 반영)"] Merge --> FAQ_DB style Pending_Storage fill:#fff3e0,stroke:#f57c00 style Merge fill:#d1fae5,stroke:#388e3c

[그림 5] AI 멘토 하이브리드 검색 및 FAQ 자동 생성 파이프라인

1
Dual-Source Reference (이원화참조)

시스템은 사용자의 질문에 대해 두 가지 지식 원천을 동시에 참조합니다.

  • FAQ 데이터 (1순위): 이미 검증된 '정답'입니다. 질문이 기존 FAQ와 유사하면(유사도/키워드 매칭) 이 답변을 우선적으로 사용합니다.
  • 지식 데이터 (2순위): FAQ에 없는 새로운 질문일 경우, 업로드된 PDF/문서(Vector DB)를 검색하여 실시간으로 답변을 생성합니다.
2
Auto-Add Pipeline (자동 추가 파이프라인)

지식 데이터(2순위)를 사용하여 답변한 경우, 해당 질의응답 쌍은 "잠재적 가치가 있는 새로운 지식"으로 간주됩니다.

  1. AI가 생성한 질문과 답변을 Pending FAQ(승인 대기) 목록에 자동 저장합니다.
  2. 관리자는 FAQ 승인 관리 페이지 (/faq-admin)에서 이를 확인합니다.
  3. 관리자가 [승인] 버튼을 누르면, 즉시 Live FAQ 데이터(faq.json)에 반영됩니다.

이 과정을 통해 시스템은 사용하면 할수록 점점 더 똑똑해지는(Evolving) 지식 베이스를 구축하게 됩니다.

7. STT 고도화 시스템 (Speech-to-Text Enhancement)

6.1 단어장 자가 학습 프로세스

Whisper의 의학 용어 인식률을 극대화하기 위한 지능형 학습 시스템입니다.

sequenceDiagram participant User as 사용자 participant Client as 브라우저 participant Server as 서버 participant Whisper as OpenAI Whisper participant Gemini as Gemini 2.5 participant VectorDB as Vector DB User->>Client: 스크립트 읽기 (음성) Client->>Server: 오디오 스트림 전송 Server->>VectorDB: 전체 단어장 조회 VectorDB-->>Server: 의학 용어 리스트 Server->>Whisper: 오디오 + prompt(단어장) Whisper-->>Server: STT 결과 Server->>Gemini: [원본 스크립트] vs [STT 결과] 비교 분석 Gemini-->>Server: {keywords: ["오인식단어"], analysis: "분석리포트"} Server->>VectorDB: 새 단어 저장 Server-->>Client: 분석 결과 + 추출 단어

[그림 3] STT 고도화 훈련 시퀀스

6.2 SttCorrector 클래스 (utils/sttCorrector.js) v4.1 UPDATE

✅ v4.1 STT 3단계 교정 파이프라인
Whisper의 의학 용어 인식 한계를 극복하기 위해 3단계 교정 시스템이 적용됩니다.
특히 제품명(케렌디아, 피네레논) 오인식 문제를 해결하기 위해 제품별 FAQ 데이터를 참조하는 Gemini 교정이 추가되었습니다.
flowchart LR A["🎤 Whisper STT
'킬러피아'"] --> B["1️⃣ Manual Fixes
applyManualFixes()"] B --> C["2️⃣ Gemini + FAQ
correctTextWithReference()"] C --> D["3️⃣ Self-Learning
processReturningWords()"] D --> E["✅ 최종 결과
'케렌디아'"] style A fill:#ffebee style B fill:#fff3e0 style C fill:#e3f2fd style D fill:#e8f5e9 style E fill:#d1fae5

[그림 4] STT 3단계 교정 파이프라인 (v4.1)

단계 메서드 역할 및 작동 방식
1단계 applyManualFixes(text) 빠른 규칙 기반 치환 (즉시 실행)
- "킬러피아" → "케렌디아"
- "자 세훈선생님" → "안녕하세요 선생님"
- "바투리움" → "나트륨"
20+ 개의 사전 정의된 치환 규칙
2단계
NEW
correctTextWithReference(text, referenceText, productId) 제품별 FAQ 기반 Gemini 문맥 교정
- 제품별 FAQ 데이터(최대 30개)를 참조 텍스트로 활용
- Gemini 2.5 Flash가 제품명, 의학 용어를 문맥에 맞게 교정
- 제품 정보: "케렌디아, Kerendia, 피네레논, Finerenone" 등 제공
FAQ에 없는 용어도 문맥 추론으로 교정 가능
3단계 processReturningWords(sttResult, referenceText) 자가 학습 (비동기)
- Gemini가 오인식 패턴 분석 후 키워드 추출
- 추출된 단어는 Vector DB 단어장에 저장
- 다음 STT 호출 시 Whisper prompt에 자동 주입
⚠️ 하이브리드 STT 사전 (Hybrid Dictionary Architecture)

v4.3에서는 Whisper 인식률 향상을 위해 3가지 소스를 결합하여 프롬프트를 구성합니다.

6.3 STT 교정 테이블 관리 (/twoway/stt-dictionary) v4.3 NEW

관리자가 웹 UI에서 직접 오인식 패턴을 등록하고 관리할 수 있습니다. (stt_corrections.json)

8. FAQ 사전승인 시스템 (Pre-Approved FAQ) v4.0 NEW

✅ v4.0 핵심 변경: 사전승인 FAQ 시스템
기존의 "FAQ 자동 생성" 방식에서 "사전 검증된 FAQ 직접 제공" 방식으로 전환되었습니다.
이로써 LLM Hallucination 위험을 원천 차단하고, 모든 모범답안이 사람이 검토/승인한 내용임을 보장합니다. 이로써 LLM Hallucination 위험을 원천 차단하고, 모든 모범답안이 사람이 검토/승인한 내용임을 보장합니다.

8.1 AI 의사 롤플레잉 모드 작동 원리 (Strict FAQ Constraint) CRITICAL

AI 의사 모드는 100% FAQ 데이터 기반으로 작동하며, 지식 데이터(PDF)를 참조하지 않습니다.

🚫 지식 데이터(Vector DB) 미참조 원칙
AI 멘토와 달리, AI 의사는 지식 데이터베이스(Vector DB) 접근이 차단되어 있습니다.
이는 의사가 검증되지 않은 외부 지식으로 질문하는 것을 방지하고, 오직 승인된 핵심 질문(Key Messages)만을 MR에게 던지도록 강제하기 위함입니다.
AI 멘토 (지식백과) AI 의사 (롤플레잉)
✅ Hybrid Search (FAQ + PDF) 🚫 FAQ Only + No Text Input
사용자의 질문에 답변하는 역할 FAQ 목록에서 질문하여 MR을 평가 (키보드 입력 불가)
새로운 답변 생성 가능 (Auto-Add) 정해진 질문 세트 외 생성 금지 (Strict Constraint)

8.2 FAQ 팟캐스트 모드 (FAQ 이어듣기) v4.7 UPDATED

MR들이 출퇴근 시 라디오처럼 모든 질문과 답변을 연속으로 청취하며 학습할 수 있는 기능입니다.

🎧 듀얼 페르소나 보이스 & Strict UI Cleanup
몰입감을 높이기 위해 AI(질문자)와 MR(답변자)의 목소리를 완전히 분리했습니다.

8.3 FAQ 실시간 검색 및 승인 (Pending FAQ Approval) v4.7 NEW

7.4 FAQ 데이터 구조 (data/[product]/faq.json)

1
제품 감지 (detectProduct)

AI 질문과 MR 답변에서 키워드를 분석하여 Kerendia/Cardinova 자동 분류
키워드 예: "피네레논", "미네랄로코르티코이드" → Kerendia

2
중복 검사 (getExistingQuestions)

Cheerio로 HTML 파싱하여 기존 질문 목록 추출, Gemini에게 유사 의도 질문 존재 여부 판단 위임

3
Q&A 생성 (analyzeAndGenerateQA)

Gemini가 원문 기반 모범 답안 생성 → GroundedVerifier로 검증 → 검증 실패 시 null 반환

4
HTML 업데이트 (updateHtml)

검증 통과된 Q&A만 Cheerio로 FAQ_케렌디아.html 또는 FAQ_카르디노바.html에 삽입
Evidence 속성이 함께 저장되어 나중에 출처 조회 가능

7.5 FAQ HTML 구조

<div class="qa-box new-entry">
    <div class="question">케렌디아의 심혈관 보호 효과는?</div>
    <div class="answer">
        <div class="answer-content" data-evidence="FIDELIO-DKD 연구에서...">
            케렌디아는 FIDELIO-DKD 연구에서 심혈관 복합 결과를 14% 감소시켰습니다.
            <div class="source-citation">📚 Source: Kerendia_PI.pdf (AI Reference)</div>
        </div>
    </div>
</div>

9. 평가 로직 및 배점 기준 (Evaluation Logic & Scoring Criteria) v4.3 NEW

🎯 정성적 평가 중심의 통합 시스템
본 시스템은 Opening부터 Call-to-Action까지 전체 세일즈 프로세스를 정성적(Qualitative)으로 평가합니다.
단순한 키워드 매칭을 넘어, 논리적 완성도디테일링 스킬을 종합적으로 측정하여 실전 역량을 정확히 진단합니다.

9.1 평가 구조 개요

평가 단계 배점 평가 내용
1. Opening (도입부) 150점 인사/자기소개, 방문 목적 명확화, 시간 확보 및 주의집중
2. FAQ (핵심 디테일링) 1~10점/문항 제품 지식의 정확성, 문맥 일치도, 논리적 설명력 (정성 평가)
3. Call-to-Action (마무리) 150점 구체적 행동 요청, 다음 단계 제시, 약속/일정 조율

9.2 Opening (도입부) - 150점

의사와의 첫 대면 시 신뢰를 형성하고 대화의 목적을 명확히 하는 단계입니다.

카테고리 평가 기준 및 모범 답안 예시 배점
인사 및 자기소개 정중한 인사와 함께 소속, 본인의 이름을 명확히 밝힙니다.
"안녕하십니까 원장님, 저는 마크잇제약의 김백점 부장입니다..."
50점
방문 목적 명확화 오늘 방문하여 전달하고자 하는 제품(케렌디아)과 주제를 간결하게 제시합니다. 50점
시간 확보 및 주의집중 디테일링 소요 시간을 미리 알리고, 원장님의 관심사를 언급하며 주의를 환기합니다. 50점

9.3 FAQ (핵심 디테일링) - 질적 평가 (1~10점/문항)

AI 의사(멘토)와의 질의응답을 통해 제품 지식의 정확성과 전달력을 평가합니다.

⚠️ 정성적 평가 (Qualitative Scoring)
각 FAQ 문항은 1점 ~ 10점 범위로 평가됩니다. 단순히 정답을 맞췄는지가 아니라, 얼마나 논리적이고 설득력 있게 설명했는지를 종합적으로 판단합니다.

FAQ 배점 시뮬레이션 예시

케렌디아 제품의 경우, 총 76개 FAQ 문항이 등록되어 있습니다. (Opening K-000, CTA K-CTA 제외)

* 실제 대화의 흐름에 따라 AI가 무작위 또는 문맥에 맞춰 질문하며, 모든 문항을 다루지 않을 수 있습니다.

9.4 Call-to-Action (마무리) - 150점

디테일링을 성공적으로 마무리하고 실질적인 처방 유도 및 다음 약속을 잡는 단계입니다.

카테고리 평가 기준 및 모범 답안 예시 배점
구체적 행동 요청 대상 환자군(2형 당뇨 동반 CKD 등)을 특정하여 명확하게 처방을 권유합니다. 50점
다음 단계 제시 처방 가이드 제공, 환자 모니터링 협조 등 구체적인 후속 지원을 제안합니다. 50점
약속/일정 조율 다음 방문 일정을 구체적으로 제안하고 확정합니다.
"다음 주 수요일 오전 10시에 다시 찾아뵈어도 될까요?"
50점

9.5 고득점을 위한 핵심 가이드

💡 평가 시스템의 핵심 철학

본 시스템은 단순한 키워드 매칭을 넘어, 논리적 완성도디테일링 스킬을 종합적으로 평가합니다.

👍 Opening & Closing

  • 명확한 목적 제시: 방문 이유와 주제를 모호하게 돌려 말하지 마세요.
  • 주도적인 마무리: 다음 약속을 막연하게 묻지 말고, 구체적인 일시를 제안하여 확정하세요.

👍 FAQ & Detailing

  • 구체적 수치 제시: "임상 결과가 좋습니다" 대신 "사망 위험을 18% 감소시켰습니다"와 같이 근거를 제시하세요.
  • 핵심 키워드 포함: 질문 의도에 맞는 전문 용어를 정확히 구사하면 가산점이 부여됩니다.

10. 기술 스택 (Technical Stack)

Google Gemini 2.5 Flash Brain. 대화 생성, FAQ 분석, STT 교정, 출처 검증에 사용. Temperature 0.2~0.4로 정확성 우선.
OpenAI Whisper Ear. 음성→텍스트. prompt 파라미터로 의학 용어 인식률 극대화.
OpenAI TTS (Alloy/Onyx) Voice. AI는 Alloy, MR은 Onyx(1.2x)로 성우 분리하여 몰입감 극대화.
OpenAI Embeddings Memory. text-embedding-3-small 모델로 벡터화. RAG 검색의 핵심.
Node.js + Express Body. 비동기 I/O에 최적화된 서버. REST API + WebSocket 동시 처리.
Socket.io Nerve. 실시간 양방향 통신. 오디오 스트리밍 및 대화 상태 동기화.
Cheerio Surgeon. HTML DOM 파싱 및 조작. FAQ 자동 업데이트에 사용.
pdf-parse + mammoth Reader. PDF/DOCX 텍스트 추출. pdftoppm으로 이미지 변환 후 Vision 분석.

11. 시스템 페이지 가이드 (Page Guide)

URL 경로 페이지명 기능 및 의의
/ 메인 대시보드 시스템 진입점. 모든 기능 페이지 탐색 및 기술 개요 제공.
/admin/dashboard 관리자 대시보드 v4.6 NEW 모든 Two-Way 대화 로그 검색, 필터링, 엑셀 다운로드 및 개별 세션 상세 조회.
/twoway 제품 선택 랜딩 Entry '카르디노바'와 '케렌디아' 중 평가받을 제품을 선택하는 진입점.
/twoway/cardinova 카르디노바 평가 고혈압 치료제 전문 AI 의사와 1:1 롤플레이. 제품 특화 페르소나 적용.
/twoway/kerendia 케렌디아 평가 당뇨병성 CKD 치료제 전문 AI 의사와 1:1 롤플레이.
/twoway/faq FAQ 관리 (내부용) 모든 제품의 FAQ를 탭으로 전환하며 관리. 문항 추가/삭제/Excel 다운로드 가능.
/twoway/faq/kerendia 케렌디아 FAQ v4.0 NEW 고객사 전달용 케렌디아 전용 FAQ 페이지. 탭 없이 깔끔한 URL.
/twoway/faq/cardinova 카르디노바 FAQ v4.0 NEW 고객사 전달용 카르디노바 전용 FAQ 페이지.
/twoway/stt-training STT 발음 훈련 시스템 공통 스크립트 읽기 → 오인식 단어 추출 → 통합 발음사전 업데이트.
/twoway/stt-dictionary STT 단어장 관리 시스템 공통 v4.3 Update 교정 테이블(Hard Rules) 편집 및 원문 다운로드.
/twoway/evaluation-logic 평가 로직 시뮬레이션 v4.3 NEW 정성적 평가 기준(S-A-B-C-D) 및 시뮬레이션 도구 제공.
/twoway/sound-lab Sound Lab Sound Lab v4.2 UPDATE Web Audio API 기반 30종 생성형 환경음(비, 불, 우주 등) 및 TTS 품질 테스트.
/knowledge Knowledge Base 관리 PDF/DOCX 업로드 → Vector DB 구축. AI의 "뇌"에 지식 주입.
PDF/DOCX 업로드 → Vector DB 구축. AI의 "뇌"에 지식 주입.

12. 개발자 가이드 (For Developers)

10.1 핵심 파일 맵

경로 설명
server.js Entry Point. Express 앱 초기화, Vector DB 로드, 미들웨어 설정, Socket.io 연결.
routes/admin.js Admin API. v4.6 대화 로그 조회/검색/삭제 및 엑셀 다운로드 API.
routes/faq-admin.js FAQ Approval. v4.6 승인 대기 중인 FAQ 목록 조회 및 승인/거부 처리.
routes/twoway-evaluation.js Main Controller. 모든 Two-Way 라우팅, 소켓 이벤트 핸들링, LLM/STT/TTS 호출 로직 집약.
routes/knowledge.js Knowledge API. 파일 업로드/삭제/목록 조회, Vector DB 연동.
models/vectorReferenceAnalyzer.js Vector DB. 임베딩 생성, 검색, 문서/단어장 CRUD.
utils/groundedVerifier.js Grounding. 3-Layer 출처 검증 로직.
utils/faqUpdater.js Auto-FAQ. Q&A 생성 및 HTML 업데이트.
utils/sttCorrector.js STT Enhancement. 오타 교정 및 오인식 단어 추출.
utils/documentParser.js Document Processing. PDF/DOCX 파싱 + 멀티모달 분석.
vector_reference_data.json Data Store. 모든 문서, 청크, 임베딩, 단어장이 저장되는 JSON 파일.

10.2 환경 변수 (.env)

# API Keys (Required)
OPENAI_API_KEY=sk-xxxxx
GEMINI_API_KEY=AIzaxxxxx

# Server Config
PORT=3003

10.3 서버 실행

# 개발 모드 (nodemon)
npm run dev

# 프로덕션 모드
pm2 start ecosystem.config.js

📅 Last Updated: 2026.01.09
📝 Document Version: 4.6
✍️ Maintained By: Markit S-Labs Development Team


© 2026 Markit S-Labs. All rights reserved.