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