diff --git a/design/backend/sequence/inner/ai-실시간Todo추출.puml b/design/backend/sequence/inner/ai-실시간Todo추출.puml deleted file mode 100644 index cee7c00..0000000 --- a/design/backend/sequence/inner/ai-실시간Todo추출.puml +++ /dev/null @@ -1,274 +0,0 @@ -@startuml -!theme mono - -title AI Service 내부 시퀀스 - 실시간Todo추출 - -participant "SuggestionController" as Controller -participant "RealtimeTodoService" as Service -participant "LLMClient" as LLM -participant "TranscriptRepository" as TranscriptRepo -database "Azure OpenAI<>" as OpenAI -database "Redis Cache<>" as Cache -database "PostgreSQL<>" as DB - -== 실시간 액션아이템 추출 요청 == - -note over Controller - TranscriptService로부터 호출 - (회의록 자동작성 프로세스 내부) -end note - -Controller -> Service: extractRealtimeActionItems(meetingId, transcriptText) -activate Service - -== 회의 맥락 및 참석자 정보 조회 == - -Service -> TranscriptRepo: getMeetingContext(meetingId) -activate TranscriptRepo - -TranscriptRepo -> DB: SELECT meeting_info, participants, roles\nFROM meeting_context -activate DB - -DB --> TranscriptRepo: 회의 및 참석자 정보 -deactivate DB - -TranscriptRepo --> Service: meetingContext -deactivate TranscriptRepo - -Service -> Cache: GET action-items:{meetingId} -activate Cache -note right - 이전에 추출한 액션아이템 조회 - (중복 제거용) -end note - -Cache --> Service: previousActionItems -deactivate Cache - -== LLM 기반 액션아이템 패턴 감지 == - -Service -> Service: 액션아이템 추출 프롬프트 생성 -note right - 시스템 프롬프트: - - 역할: 액션아이템 추출 전문가 - - 목표: 실시간으로 Todo 발생 감지 - - 액션아이템 패턴 예시: - - "제가 ~하겠습니다" - - "~까지 완료하겠습니다" - - "~을 담당하겠습니다" - - "~을 해보겠습니다" - - "~를 처리하겠습니다" - - "[이름]님, ~해주시겠어요?" - - "~하기로 했습니다" (결정 + 액션) - - 사용자 프롬프트: - - 회의 참석자: {participants} - - 이미 추출된 Todo: {previousActionItems} - - 현재 대화 내용: {transcriptText} - - 지시사항: - - 위 패턴이 포함된 문장 찾기 - - Todo 내용 명확화 - - 담당자 식별 (발언자 또는 지정된 사람) - - 마감일 추출 (명시적 또는 추정) - - 우선순위 판단 - - 신뢰도 점수 계산 - - 응답 형식: - { - "actionItems": [ - { - "content": "할 일 내용", - "assignee": "담당자 이름", - "dueDate": "YYYY-MM-DD" or null, - "priority": "HIGH|MEDIUM|LOW", - "confidence": 0.0-1.0, - "extractedFrom": "원문 발췌", - "relatedDecision": "관련 결정사항 ID" - } - ] - } -end note - -Service -> LLM: detectActionItemPatterns(prompt) -activate LLM - -LLM -> OpenAI: POST /chat/completions -activate OpenAI -note right - 요청 파라미터: - - model: gpt-4o - - temperature: 0.2 - (정확한 추출 위해 낮은 값) - - response_format: json_object - - max_tokens: 1500 -end note - -OpenAI -> OpenAI: 대화 텍스트 분석 -note right - 처리 단계: - 1. 문장별로 액션아이템 패턴 검사 - 2. "하겠습니다" 등 키워드 탐지 - 3. 할 일 내용 추출 및 명확화 - - 동사로 시작하도록 정리 - - 구체적인 작업으로 변환 - 4. 담당자 식별 - - 발언자 자신이 하는 경우 - - 다른 사람을 지정한 경우 - 5. 마감일 추출 - - 명시적: "내일까지", "이번 주 금요일" - - 암묵적: "빨리", "다음 회의 전" - - 없으면 null - 6. 우선순위 판단 - - HIGH: 긴급, 중요, 블로커 - - MEDIUM: 중요하지만 여유 있음 - - LOW: 추가 작업, 선택적 - 7. 신뢰도 계산 - - 명확한 약속: 0.9-1.0 - - 추정 약속: 0.7-0.9 - - 암묵적 합의: 0.5-0.7 -end note - -OpenAI --> LLM: 액션아이템 후보 목록 (JSON) -deactivate OpenAI - -LLM --> Service: actionItemSuggestions -deactivate LLM - -== 제안 검증 및 필터링 == - -Service -> Service: 액션아이템 검증 -note right - 검증 기준: - - 신뢰도 70% 이상만 선택 - - 중복 제거 - * 이미 추출된 것과 비교 - * 유사도 90% 이상이면 제외 - - 담당자 검증 - * 참석자 목록에 있는지 확인 - * 없으면 "미지정"으로 표시 - - 내용 명확성 검증 - * 동사가 있는지 - * 구체적인 작업인지 - - 마감일 형식 검증 - - 우선순위별 정렬 -end note - -loop 각 제안마다 - - Service -> Service: 제안 메타데이터 보강 - note right - 추가 정보: - - 생성 시각 - - 회의 진행 시점 (분) - - 원문 위치 정보 - - 고유 ID (UUID) - end note - -end - -== 임시 캐시 저장 (선택적) == - -Service -> Cache: APPEND action-items:{meetingId} -activate Cache -note right - Redis에 임시 저장: - - Key: action-items:{meetingId} - - Value: JSON array (제안 목록) - - TTL: 2시간 (회의 시간) - - APPEND로 기존 목록에 추가 - - 목적: - - 중복 감지용 - - 재접속 시 복원용 -end note - -Cache --> Service: 저장 완료 -deactivate Cache - -== 응답 반환 == - -Service -> Service: 응답 데이터 구성 -note right - 프론트엔드 전달 형식: - { - "suggestions": [ - { - "id": "suggestion-uuid", - "content": "할 일 내용", - "assignee": "김철수", - "dueDate": "2025-02-01", - "priority": "HIGH", - "confidence": 0.85, - "extractedFrom": "원문 발췌", - "relatedDecision": "decision-uuid" - } - ], - "totalCount": 제안 개수, - "timestamp": "생성 시각" - } -end note - -Service --> Controller: 액션아이템 제안 목록 -deactivate Service - -Controller --> Controller: 이벤트 데이터에 포함하여 반환 -note right - TranscriptSummaryCreated 이벤트에 - actionItemSuggestions 필드로 포함 - - 프론트엔드 처리: - - 오른쪽 "추천" 탭의 "액션아이템" 섹션 표시 - - "적용" 버튼 활성화 - - 담당자별로 그룹화 표시 - - 우선순위별 색상 코딩 - - 마감일 표시 (없으면 "미정") - - 신뢰도 표시 (%) -end note - -== 사용자가 제안 적용 시 == - -note over Controller - 사용자가 "적용" 버튼 클릭 시: - 프론트엔드에서 직접 Meeting Service 호출 - - POST /api/meetings/{meetingId}/todos - Body: { - "content": "할 일 내용", - "assignee": "김철수", - "dueDate": "2025-02-01", - "priority": "HIGH", - "relatedSection": "관련 회의록 섹션" - } - - Meeting Service에서: - - Todo 생성 - - TodoCreated 이벤트 발행 - - 담당자에게 알림 발송 -end note - -note over Controller, DB -처리 시간: -- 맥락 조회: 100-200ms -- LLM 패턴 감지: 1-2초 -- 검증 및 필터링: 100-200ms -- 캐시 저장: 50-100ms -총 처리 시간: 약 1.5-2.5초 - -특징: -- DB 영구 저장 없음 (임시 데이터) -- Redis 캐시만 활용 - * 중복 감지용 - * 재접속 복원용 -- 프론트엔드 메모리에서 관리 -- "적용" 시에만 Todo 생성 - -차이점 (회의 종료 후 Todo 추출과): -- 실시간: 5초마다 즉시 추출, 임시 제안 -- 종료 후: 전체 회의록 기반 종합 추출, 자동 생성 -- 실시간은 "후보"로 제시, 사용자 선택 -- 종료 후는 "확정" 추출 후 자동 생성 -end note - -@enduml diff --git a/design/backend/sequence/inner/ai-회의록자동작성.puml b/design/backend/sequence/inner/ai-회의록자동작성.puml index ad437d4..79b1459 100644 --- a/design/backend/sequence/inner/ai-회의록자동작성.puml +++ b/design/backend/sequence/inner/ai-회의록자동작성.puml @@ -201,45 +201,6 @@ else 결정사항 제안 생성 deactivate DB deactivate Repo -else 실시간 액션아이템 추출 - SuggestService -> LLM: extractRealtimeActionItems(meetingId, transcript) - activate LLM - - LLM -> OpenAI: POST /chat/completions - activate OpenAI - note right - 프롬프트: - - "~까지 하겠습니다" 패턴 감지 - - "제가 담당하겠습니다" 패턴 감지 - - 담당자 및 마감일 추출 - - 응답 형식: - { - "actionItems": [ - { - "content": "할 일 내용", - "assignee": "담당자", - "dueDate": "YYYY-MM-DD", - "priority": "HIGH|MEDIUM|LOW" - } - ] - } - end note - - OpenAI --> LLM: 액션아이템 후보 목록 - deactivate OpenAI - - LLM --> SuggestService: actionItemSuggestions - deactivate LLM - - SuggestService -> Repo: saveSuggestions(meetingId, "ACTION_ITEM", suggestions) - activate Repo - Repo -> DB: INSERT INTO ai_suggestions - activate DB - DB --> Repo: 저장 완료 - deactivate DB - deactivate Repo - end SuggestService --> Service: 모든 추천사항 생성 완료 @@ -259,7 +220,6 @@ note right - suggestions: * discussionTopics: [] * decisions: [] - * actionItems: [] end note note over Controller, DB @@ -268,11 +228,10 @@ note over Controller, DB - LLM 회의록 생성: 3-5초 - 저장: 100-200ms - 벡터화: 500ms-1초 -- 실시간 추천 병렬 처리: 5-8초 +- 실시간 추천 병렬 처리: 4-6초 * 논의사항 제안: 2-3초 * 결정사항 제안: 2-3초 - * 액션아이템 추출: 1-2초 -총: 약 9-15초 +총: 약 8-13초 end note @enduml diff --git a/design/backend/sequence/outer/회의시작및실시간회의록작성.puml b/design/backend/sequence/outer/회의시작및실시간회의록작성.puml index 756980f..d52726e 100644 --- a/design/backend/sequence/outer/회의시작및실시간회의록작성.puml +++ b/design/backend/sequence/outer/회의시작및실시간회의록작성.puml @@ -92,12 +92,6 @@ else 결정사항 제안 "~하기로 함", "~로 결정" 등의 결정 패턴 감지 및 구조화 end note -else 실시간 액션아이템 추출 - AI -> AI: [6] 실시간 액션아이템 추출 (LLM) - note right - "~까지 하겠습니다" 등 - 즉시 감지하여 Todo 후보 추출 - end note end AI -> AI: AI 분석 결과 저장 @@ -109,7 +103,6 @@ note right - 전문용어 목록 - 논의사항 제안 목록 - 결정사항 제안 목록 - - 액션아이템 후보 목록 end note AI --> EventHub: AI 분석 완료 @@ -134,7 +127,6 @@ note right - 회의록 내용 - 논의사항 제안 (오른쪽 탭) - 결정사항 제안 (오른쪽 탭) - - 액션아이템 후보 (오른쪽 탭) - 전문용어 하이라이트 end note @@ -153,7 +145,7 @@ deactivate Frontend User -> Frontend: 추천 항목 "적용" 버튼 클릭 activate Frontend note right - 논의사항/결정사항/액션아이템 중 + 논의사항/결정사항 중 원하는 항목 선택하여 적용 end note @@ -185,13 +177,12 @@ end note over User, EventHub 처리 시간: - STT 변환: 1-3초 -- AI 병렬 처리: 8-12초 +- AI 병렬 처리: 7-10초 * 회의록 정리: 3-5초 * 전문용어: 2-4초 * 논의사항 제안: 2-3초 * 결정사항 제안: 2-3초 - * 액션아이템 추출: 1-2초 - 회의록 저장: 1-2초 -- 총 처리 시간: 10-17초 +- 총 처리 시간: 9-15초 end note @enduml