@startuml
!theme mono

title 03. 전문용어 이해 지원 - 이벤트스토밍 플로우

actor "회의록 작성자" as User
participant "회의록 시스템" as System
participant "RAG 시스템" as RAG
participant "LLM" as LLM
participant "문서 저장소" as DocStore

== 전문용어 자동 감지 ==

System -> System : **커맨드**: 전문용어 감지하기\n(데이터: 회의록 텍스트, 용어 사전)
activate System
System -> System : 회의록 텍스트 분석
System --> System : **이벤트**: 전문용어가 감지됨\n(데이터: 용어, 감지 위치, 신뢰도)
deactivate System

note right of System
**Policy/Rule**:
전문용어 감지 시 →
RAG 시스템이 과거 회의록 및
사내 문서에서 자동 검색
end note

== RAG 검색 수행 ==

System -> RAG : **커맨드**: 용어 설명 요청하기\n(데이터: 용어, 회의 맥락, 조직 정보)
activate RAG
RAG --> System : **이벤트**: RAG 검색이 시작됨\n(데이터: 검색 ID, 쿼리)

RAG -> DocStore : **커맨드**: RAG 검색 수행하기\n(데이터: 검색 쿼리, 문서 데이터베이스)
activate DocStore
DocStore -> DocStore : 벡터 유사도 검색
DocStore --> RAG : **이벤트**: 관련 문서가 검색됨\n(데이터: 문서 목록, 관련도 점수)
deactivate DocStore

== LLM 설명 생성 ==

RAG -> LLM : 검색된 문서 전달
activate LLM
LLM -> LLM : 문서 내용 분석
LLM -> LLM : 용어 설명 생성
LLM --> RAG : **이벤트**: 용어 설명이 생성됨\n(데이터: 설명 ID, 설명 내용, 참조 출처)
deactivate LLM

RAG --> System : 설명 반환
deactivate RAG

== 사용자에게 설명 제공 ==

System -> User : **커맨드**: 설명 제공하기\n(데이터: 용어, 설명 내용, 참조 문서)
activate System
System --> User : **이벤트**: 설명이 제공됨\n(데이터: 제공 시간, 수신자)
deactivate System

User -> User : 용어 이해 완료

== 설명을 찾지 못한 경우 ==

alt 설명을 찾지 못함
    note right of System
    **Policy/Rule**:
    설명을 찾지 못하면 →
    전문가(회의 참석자)에게
    설명 요청
    end note

    System -> User : 전문가에게 설명 요청 알림
    User -> System : 수동으로 설명 입력

    note right of System
    **Policy/Rule**:
    새로운 용어 설명이 추가되면 →
    용어 사전에 자동 저장
    end note

    System -> DocStore : 용어 사전 업데이트
end

note over User, DocStore
**Actor**: 회의록 작성자, AI 시스템
**External System**: RAG 시스템 (벡터 DB, 임베딩), LLM, 문서 저장소
**커맨드 데이터**: 용어, 회의 맥락, 검색 쿼리
**이벤트 데이터**: 감지된 용어, 설명 내용, 참조 출처
end note

@enduml
