mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 21:56:24 +00:00
- 프롬프트 기반 회의록 개선 → 섹션 AI 요약 재생성으로 변경
- UFR-AI-030 → UFR-AI-035로 유저스토리 교체
- API 엔드포인트: POST /sections/{sectionId}/regenerate-summary
- 내부 시퀀스, 외부 시퀀스, API 설계서, 유저스토리 일관성 확보
- 프로토타입의 "AI 재생성" 버튼 기능과 정확히 매칭
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
168 lines
3.6 KiB
Plaintext
168 lines
3.6 KiB
Plaintext
@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
|