@startuml
!theme mono

title AI Service 내부 시퀀스 - 섹션AI요약재생성

participant "SectionController" as Controller
participant "SectionSummaryService" as Service
participant "LLMClient" as LLM
participant "SectionRepository" as Repo
database "Azure OpenAI<<E>>" as OpenAI
database "PostgreSQL<<E>>" as DB

== 섹션 AI 요약 재생성 요청 수신 ==

note over Controller
  API 요청:
  POST /api/ai/sections/{sectionId}/regenerate-summary
  Body: {
    "sectionContent": "**논의 사항:**\n- AI 기반...",
    "meetingId": "550e8400-..."
  }
end note

Controller -> Service: regenerateSummary(sectionId, sectionContent, meetingId)
activate Service

== 회의 맥락 조회 (선택적) ==

Service -> Repo: getMeetingContext(meetingId)
activate Repo

Repo -> DB: 회의 정보 조회\n- 회의 제목\n- 참석자\n- 안건
activate DB

DB --> Repo: 회의 맥락 정보
deactivate DB

Repo --> Service: meetingContext
deactivate Repo

note right of Service
  회의 맥락을 통해
  더 정확한 요약 생성

  예: "신규 프로젝트 킥오프"
  → 기술/일정 중심 요약
end note

== 프롬프트 생성 ==

Service -> Service: 요약 프롬프트 구성
note right
  시스템 프롬프트:
  - 역할: 회의록 섹션 요약 전문가
  - 목표: 핵심 내용을 2-3문장으로 압축
  - 스타일: 명확하고 간결한 문체

  사용자 프롬프트:
  - 회의 맥락: {meetingContext}
  - 섹션 내용: {sectionContent}

  요구사항:
  - 2-3문장으로 요약
  - 논의사항과 결정사항 구분
  - 핵심 키워드 포함
  - 불필요한 세부사항 제외
end note

== LLM 기반 요약 생성 ==

Service -> LLM: generateSummary(prompt, sectionContent)
activate LLM

LLM -> OpenAI: POST /chat/completions
activate OpenAI
note right
  요청 파라미터:
  - model: gpt-4o
  - temperature: 0.3
  - max_tokens: 200
  - messages: [system, user]
end note

OpenAI -> OpenAI: 섹션 내용 분석 및 요약
note right
  처리 단계:
  1. 섹션 내용 파싱
     - 논의사항 추출
     - 결정사항 추출
     - 보류사항 추출

  2. 핵심 내용 식별
     - 중요도 평가
     - 키워드 추출

  3. 요약 생성
     - 2-3문장으로 압축
     - 논의→결정 흐름 반영
     - 명확한 문장 구성

  4. 품질 검증
     - 길이 확인 (150자 이내)
     - 핵심 누락 여부 확인
end note

OpenAI --> LLM: 생성된 AI 요약
deactivate OpenAI

LLM --> Service: summaryText
deactivate LLM

== 생성된 요약 저장 (선택적) ==

Service -> Repo: saveSectionSummary(sectionId, summaryText)
activate Repo

Repo -> DB: AI 요약 저장
activate DB
note right
  저장 데이터:
  - section_id
  - summary_text
  - generated_at
  - model: "gpt-4o"
  - token_usage
end note

DB --> Repo: 저장 완료
deactivate DB

Repo --> Service: 완료
deactivate Repo

== 응답 반환 ==

Service -> Service: 응답 데이터 구성
note right
  응답 데이터:
  - summary: "AI 기반 회의록 자동화..."
  - generatedAt: "2025-01-23T11:00:00Z"
end note

Service --> Controller: 요약 생성 완료 응답
deactivate Service

Controller --> Controller: 200 OK 응답 반환

note over Controller, DB
처리 시간:
- 회의 맥락 조회: 50-100ms
- 프롬프트 구성: 10-20ms
- LLM 요약 생성: 2-4초
- 저장 처리: 50-100ms
총 처리 시간: 약 2-5초

정책:
- 섹션 내용이 변경되면 요약도 재생성
- 이전 요약은 이력으로 보관
- 사용자는 생성된 요약을 수정 가능
- 수정된 요약은 AI 재생성 가능

처리량:
- max_tokens: 200 (요약은 짧음)
- 비용 효율적 (전체 회의록 대비)
end note

@enduml
