d3ro-voice/docs/phases/phase-15-meeting-pro.md
Yun Chan 2b17bf47b7 Phase 15 구현: Auto Polish + AI 채팅 + 마인드맵 + 공유
- Auto Polish: LLM으로 전사 다듬기 (필러 제거, 문장 교정)
- AI 채팅: 회의 전사 기반 Q&A (LocalLLMService.chatStream 활용, 스트리밍)
- 마인드맵: 빌트인 템플릿 추가 (마크다운 계층 트리)
- 공유: 클립보드 복사 메뉴 추가
- MeetingChatPanel UI (접기/펼치기, 스트리밍 인디케이터)
- TranscriptTab에 AI 다듬기 버튼 추가
- 12개 locale i18n 키 추가
2026-04-08 10:18:42 +09:00

6.1 KiB

Phase 15: 회의 모드 Pro — Auto Polish + AI 채팅 + 마인드맵 + 공유

Phase 14.5 기반 확장: AI 전사 다듬기, 회의록 기반 AI 채팅, 마인드맵 생성, 공유 링크


1. 개요

1.1 기능 4종

기능 설명 난이도
Auto Polish 전사 텍스트 AI 다듬기 (필러 제거, 가독성 향상) 소
마인드맵 전사 내용에서 AI 마인드맵 생성 (마크다운 트리) 소
AI 채팅 회의 전사 기반 Q&A 채팅 중
공유 마크다운 → 클립보드 복사 + 파일 공유 소

화자 구분: sidecar에 pyannote-audio 추가 필요 → TODO로 유지


2. Auto Polish

2.1 동작 방식

  1. Transcript 탭에서 [AI 다듬기] 버튼 클릭
  2. rawTranscript를 LLM에 전달 (refine 프롬프트)
  3. 결과를 editedTranscript에 저장
  4. "원본/AI 다듬기본" 토글 가능

2.2 IPC

MEETING_MODE.POLISH_TRANSCRIPT: 'meetingMode:polishTranscript'

2.3 서비스 메서드

async polishTranscript(sessionId: string): Promise<string> {
  // rawTranscript → LLM refine → editedTranscript 저장 → 반환
}

2.4 UI

TranscriptTab에 [AI 다듬기] PhysicalButton 추가. 처리 중 LinearProgress.


3. 마인드맵

3.1 동작 방식

MeetingDocTemplateType에 'mindmap' 추가. 빌트인 템플릿으로 등록. LLM이 마크다운 트리 구조로 마인드맵 생성. DocumentTab에서 렌더링.

3.2 프롬프트

전사록을 분석하여 마인드맵을 작성하세요.
마크다운 계층 구조를 사용하세요:
# 중심 주제
## 주요 주제 1
  - 세부 항목 A
  - 세부 항목 B
## 주요 주제 2
  - 세부 항목 C

3.3 DB 변경

meetingDocuments.templateType enum에 'mindmap' 추가. meetingSessions.templateType (schema.ts) enum에 'mindmap' 추가.


4. AI 채팅

4.1 동작 방식

  1. 상세 페이지 하단에 채팅 바 (고정, 탭과 별개)
  2. 사용자가 질문 입력 → 전사+문서를 컨텍스트로 LLM 질문
  3. 스트리밍 응답 표시
  4. 대화 히스토리는 메모리에만 유지 (DB 저장 안 함)

4.2 IPC

MEETING_CHAT: {
  SEND: 'meetingChat:send',
  CANCEL: 'meetingChat:cancel',
  CLEAR: 'meetingChat:clear',
  // Main → Renderer
  DELTA: 'meetingChat:delta',
  MESSAGE: 'meetingChat:message',
  ERROR: 'meetingChat:error',
}

4.3 서비스

MeetingModeService에 채팅 메서드 추가 (별도 서비스 불필요):

async chatWithMeeting(sessionId: string, userMessage: string): Promise<void>
cancelMeetingChat(): void
clearMeetingChatHistory(): void

LocalLLMService.chatStream() 활용. 시스템 프롬프트에 전사 내용 포함.

4.4 UI

MeetingDetailTabs 하단에 고정 채팅 바:

┌──────────────────────────────────────┐
│ [탭 콘텐츠...]                        │
├──────────────────────────────────────┤
│ 🤖 AI: 예산은 5000만원으로 확정...    │
│ 👤 다음 회의 일정은?                   │
│ 🤖 AI: 다음 주 수요일...              │
│ ┌──────────────────────────┐ [Send]  │
│ │ 질문을 입력하세요...       │        │
│ └──────────────────────────┘        │
└──────────────────────────────────────┘

4.5 타입

interface MeetingChatMessage {
  role: 'user' | 'assistant'
  content: string
  timestamp: number
}

interface MeetingChatSendParams {
  sessionId: string
  message: string
}

interface MeetingChatDelta {
  token: string
}

5. 공유

5.1 동작 방식

  1. 클립보드 복사: 문서/전사 마크다운을 클립보드에 복사
  2. 파일 공유: 기존 내보내기(MD/PDF/TXT/DOCX)로 파일 저장
  3. 향후: 웹 서비스 연동 (TODO)

5.2 UI

ExportMenu에 "클립보드 복사" 항목 추가.


6. 에러 코드

MeetingPolishFailed = 893,
MeetingChatFailed = 894,

7. i18n 키

"meeting.polish": "AI 다듬기",
"meeting.polishing": "AI가 전사를 다듬고 있습니다...",
"meeting.polished": "AI 다듬기 완료",
"meeting.mindmapTemplate": "마인드맵",
"meeting.chat": "AI 채팅",
"meeting.chatPlaceholder": "회의 내용에 대해 질문하세요...",
"meeting.chatSend": "전송",
"meeting.chatClear": "대화 초기화",
"meeting.copyToClipboard": "클립보드 복사",
"meeting.copied": "복사됨"

8. 구현 순서

Step A: 기반 (타입 + IPC + 에러)

Step B: Auto Polish (서비스 + IPC + UI)

Step C: 마인드맵 (템플릿 추가 + DB enum)

Step D: AI 채팅 (서비스 + IPC + UI)

Step E: 공유 (클립보드 복사)

Step F: i18n + 검증


파일 목록

신규

파일 설명
src/renderer/components/meeting/MeetingChatPanel.tsx AI 채팅 UI

수정

파일 변경
src/shared/types.ts MeetingChatMessage, MeetingChatSendParams, MeetingChatDelta, MeetingDocTemplateType에 mindmap 추가
src/shared/ipc-channels.ts MEETING_MODE.POLISH_TRANSCRIPT + MEETING_CHAT 그룹
src/shared/errors.ts 893-894
src/main/db/schema.ts meetingDocuments templateType enum에 mindmap
src/main/services/MeetingModeService.ts polishTranscript, chatWithMeeting, cancelMeetingChat, clearMeetingChatHistory
src/main/services/MeetingDocTemplateService.ts 빌트인 마인드맵 템플릿
src/main/ipc/meeting-mode-handlers.ts 4개 핸들러 추가
src/preload/index.ts meetingChat 그룹 + polishTranscript
src/renderer/components/meeting/TranscriptTab.tsx AI 다듬기 버튼
src/renderer/components/meeting/MeetingDetailTabs.tsx 하단 채팅 패널
src/renderer/components/meeting/ExportMenu.tsx 클립보드 복사
src/renderer/i18n/*.json 12개 locale