diff --git a/design/backend/sequence/inner/ai-회의록자동작성.puml b/design/backend/sequence/inner/ai-회의록자동작성.puml index d62bf2e..498a505 100644 --- a/design/backend/sequence/inner/ai-회의록자동작성.puml +++ b/design/backend/sequence/inner/ai-회의록자동작성.puml @@ -8,39 +8,34 @@ participant "TranscriptService" as Service participant "LLMClient" as LLM participant "VectorService" as Vector participant "TranscriptRepository" as Repo -database "Azure OpenAI<>" as OpenAI -database "Vector DB<>" as VectorDB -database "PostgreSQL<>" as DB +database "Azure OpenAI" as OpenAI <> +database "Vector DB" as VectorDB <> +database "PostgreSQL" as DB <> == TranscriptReady 이벤트 수신 == note over Controller - Azure Event Hubs로부터 - TranscriptReady 이벤트 수신 - (meetingId, transcriptText, timestamp) +Azure Event Hubs로부터 +TranscriptReady 이벤트 수신 end note -Controller -> Service: processTranscript(meetingId, transcriptText, timestamp) +Controller -> Service: processTranscript(meetingId, transcriptText) activate Service Service -> Service: 회의 맥락 정보 조회 준비 -note right - 회의 제목, 참석자 정보, - 이전 회의록 내용 -end note == 병렬 처리: 맥락 정보 수집 == -par "회의 정보 조회" +par 회의 정보 조회 Service -> Repo: getMeetingContext(meetingId) activate Repo - Repo -> DB: SELECT meeting_info, participants + Repo -> DB: SELECT meeting_info activate DB DB --> Repo: 회의 정보 반환 deactivate DB Repo --> Service: 회의 맥락 정보 deactivate Repo -else +else 이전 내용 조회 Service -> Repo: getPreviousTranscripts(meetingId) activate Repo Repo -> DB: SELECT previous_content @@ -53,41 +48,25 @@ end Service -> Service: 프롬프트 생성 note right - 시스템 프롬프트: - - 역할: 회의록 작성 전문가 - - 지시사항: 구어체→문어체 변환, - 주제별 분류, 발언자별 정리 - - 사용자 프롬프트: - - 회의 제목: {title} - - 참석자: {participants} - - 이전 내용: {previous} - - 현재 발언: {transcriptText} +시스템 프롬프트 생성 +- 역할 정의 +- 변환 규칙 적용 end note == LLM 기반 회의록 작성 == -Service -> LLM: generateMinutes(prompt, meetingContext) +Service -> LLM: generateMinutes(prompt, context) activate LLM LLM -> OpenAI: POST /chat/completions activate OpenAI note right - 요청 파라미터: - - model: gpt-4o - - temperature: 0.3 - - max_tokens: 2000 - - messages: [system, user] +model: gpt-4o +temperature: 0.3 +max_tokens: 2000 end note OpenAI -> OpenAI: 텍스트 분석 및 정리 -note right - 1. 주제별 분류 - 2. 발언자별 의견 정리 - 3. 중요 키워드 추출 - 4. 구어체→문어체 변환 - 5. 문법 교정 -end note OpenAI --> LLM: 정리된 회의록 내용 deactivate OpenAI @@ -98,27 +77,17 @@ deactivate LLM == 회의록 저장 == Service -> Service: 회의록 데이터 구조화 -note right - 구조화 항목: - - 논의 주제 - - 발언자별 의견 - - 결정 사항 - - 보류 사항 - - 요약문 -end note -Service -> Repo: saveTranscriptDraft(meetingId, content, timestamp) +Service -> Repo: saveTranscriptDraft(meetingId, content) activate Repo Repo -> DB: INSERT INTO ai_transcripts activate DB note right - 저장 데이터: - - meeting_id - - content (JSON) - - generated_at - - version - - status: DRAFT +저장 데이터: +- meeting_id +- content (JSON) +- status: DRAFT end note DB --> Repo: 저장 완료 @@ -127,7 +96,7 @@ deactivate DB Repo --> Service: transcriptId deactivate Repo -== 벡터 임베딩 생성 (비동기) == +== 벡터 임베딩 생성 == Service -> Vector: createEmbedding(transcriptId, content) activate Vector @@ -135,8 +104,7 @@ activate Vector Vector -> OpenAI: POST /embeddings activate OpenAI note right - model: text-embedding-3-large - input: 회의록 내용 +model: text-embedding-3-large end note OpenAI --> Vector: 임베딩 벡터 @@ -144,11 +112,6 @@ deactivate OpenAI Vector -> VectorDB: INSERT embedding activate VectorDB -note right - vector_id: transcriptId - embedding: [float array] - metadata: {meetingId, timestamp} -end note VectorDB --> Vector: 저장 완료 deactivate VectorDB @@ -156,30 +119,26 @@ deactivate VectorDB Vector --> Service: 임베딩 생성 완료 deactivate Vector -== TranscriptSummaryCreated 이벤트 발행 == +== 이벤트 발행 == Service -> Controller: 회의록 생성 완료 응답 deactivate Service -Controller -> Controller: TranscriptSummaryCreated 이벤트 발행 +Controller -> Controller: TranscriptSummaryCreated 발행 note right - 이벤트 데이터: - - meetingId - - transcriptId - - content - - generatedAt - - Partition Key: {meetingId} - Consumer: Meeting Service +이벤트 데이터: +- meetingId +- transcriptId +- content end note note over Controller, DB 처리 시간: -- 맥락 정보 조회: 100-200ms +- 맥락 조회: 100-200ms - LLM 생성: 3-5초 -- 저장 처리: 100-200ms -- 벡터 임베딩: 500ms-1초 (비동기) -총 처리 시간: 약 4-7초 +- 저장: 100-200ms +- 벡터화: 500ms-1초 +총: 약 4-7초 end note -@enduml +@enduml \ No newline at end of file