mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 23:06:23 +00:00
- 총 21개 PlantUML 파일 생성 (Meeting 10개, AI 6개, STT 2개, Notification 3개) - 서브 에이전트를 활용한 병렬 설계로 효율성 극대화 - 모든 시나리오는 유저스토리 및 외부 시퀀스와 1:1 매칭 - Controller → Service → Repository 계층 구조 명확히 표현 - Redis Cache, Azure Event Hubs 등 인프라 컴포넌트 표시 - 동기(→)/비동기(-->) 구분 명확 - 외부 참여자 <<E>> 표시 적용 - PlantUML 문법 검사 및 오류 수정 완료 (13개 파일 수정) - par/and 블록 문법 오류 수정 - return 형식 적용으로 참여자 없는 화살표 오류 해결 설계 특징: - 캐시 전략: Cache-Aside 패턴, TTL 관리, 즉시 무효화 - 비동기 처리: Azure Event Hubs 기반 이벤트 구독 - 실시간 협업: WebSocket 기반 동기화, 변경 델타 전송 - 데이터 일관성: 버전 관리, 양방향 연결, 트랜잭션 처리 추가 파일: - claude/sequence-inner-design.md: 내부시퀀스설계 가이드 - tools/check-plantuml.ps1: PlantUML 문법 검사 스크립트 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
225 lines
4.6 KiB
Plaintext
225 lines
4.6 KiB
Plaintext
@startuml
|
|
!theme mono
|
|
|
|
title AI Service 내부 시퀀스 - 회의록개선
|
|
|
|
participant "ImproveController" as Controller
|
|
participant "ImproveService" as Service
|
|
participant "LLMClient" as LLM
|
|
participant "PromptTemplateService" as Template
|
|
participant "ImproveRepository" as Repo
|
|
database "Azure OpenAI<<E>>" as OpenAI
|
|
database "PostgreSQL<<E>>" as DB
|
|
|
|
== 회의록 개선 요청 수신 ==
|
|
|
|
note over Controller
|
|
API 요청:
|
|
POST /api/ai/transcripts/{meetingId}/improve
|
|
Body: {
|
|
"promptType": "1PAGE_SUMMARY",
|
|
"customPrompt": "optional"
|
|
}
|
|
end note
|
|
|
|
Controller -> Service: improveTranscript(meetingId, promptType, customPrompt)
|
|
activate Service
|
|
|
|
== 원본 회의록 조회 ==
|
|
|
|
Service -> Repo: getOriginalTranscript(meetingId)
|
|
activate Repo
|
|
|
|
Repo -> DB: SELECT content, version\nFROM ai_transcripts\nWHERE meeting_id = {meetingId}\nAND status = 'FINALIZED'\nORDER BY created_at DESC LIMIT 1
|
|
activate DB
|
|
|
|
DB --> Repo: 원본 회의록 내용
|
|
deactivate DB
|
|
|
|
Repo --> Service: originalContent, version
|
|
deactivate Repo
|
|
|
|
== 프롬프트 템플릿 선택 ==
|
|
|
|
Service -> Template: getPromptTemplate(promptType)
|
|
activate Template
|
|
|
|
Template -> Template: 프롬프트 유형별 템플릿 선택
|
|
note right
|
|
지원 프롬프트 유형:
|
|
|
|
1. 1PAGE_SUMMARY
|
|
- A4 1장 분량 요약
|
|
- 핵심 내용만 압축
|
|
|
|
2. CORE_SUMMARY
|
|
- 3-5개 핵심 포인트
|
|
- 불릿 포인트 형식
|
|
|
|
3. DETAILED_REPORT
|
|
- 시간순 상세 기록
|
|
- 타임스탬프 포함
|
|
|
|
4. DECISION_FOCUSED
|
|
- 의사결정 중심
|
|
- 결정 사항과 근거
|
|
|
|
5. ACTION_FOCUSED
|
|
- 액션 아이템 중심
|
|
- Todo와 담당자 강조
|
|
|
|
6. EXECUTIVE_REPORT
|
|
- 경영진 보고용
|
|
- 간결하고 임팩트 있게
|
|
|
|
7. CUSTOM
|
|
- 사용자 정의 프롬프트
|
|
end note
|
|
|
|
Template --> Service: promptTemplate
|
|
deactivate Template
|
|
|
|
== 프롬프트 생성 ==
|
|
|
|
Service -> Service: 최종 프롬프트 구성
|
|
note right
|
|
시스템 프롬프트:
|
|
- 역할: 회의록 개선 전문가
|
|
- 지시사항: {promptTemplate}
|
|
|
|
사용자 프롬프트:
|
|
- 원본 회의록: {originalContent}
|
|
- 개선 요구사항: {promptType}
|
|
- 추가 지시사항: {customPrompt}
|
|
|
|
출력 형식 지정:
|
|
- 구조화된 마크다운
|
|
- 적절한 헤딩과 섹션
|
|
- 가독성 최적화
|
|
end note
|
|
|
|
== LLM 기반 회의록 재구성 ==
|
|
|
|
Service -> LLM: regenerateTranscript(prompt, originalContent)
|
|
activate LLM
|
|
|
|
LLM -> OpenAI: POST /chat/completions
|
|
activate OpenAI
|
|
note right
|
|
요청 파라미터:
|
|
- model: gpt-4o
|
|
- temperature: 0.3
|
|
- max_tokens: 3000
|
|
- messages: [system, user]
|
|
end note
|
|
|
|
OpenAI -> OpenAI: 회의록 재구성
|
|
note right
|
|
처리 단계:
|
|
1. 원본 분석
|
|
2. 프롬프트 의도 파악
|
|
3. 중요도 기반 필터링
|
|
4. 형식에 맞춰 재배치
|
|
5. 불필요한 내용 제거
|
|
6. 스타일 조정
|
|
- 문체 변환
|
|
- 길이 조정
|
|
7. 구조화
|
|
end note
|
|
|
|
OpenAI --> LLM: 개선된 회의록
|
|
deactivate OpenAI
|
|
|
|
LLM --> Service: improvedContent
|
|
deactivate LLM
|
|
|
|
== 개선된 회의록 저장 ==
|
|
|
|
Service -> Service: 새 버전 생성
|
|
note right
|
|
버전 정보:
|
|
- base_version: 원본 버전 번호
|
|
- improvement_type: {promptType}
|
|
- version: 새 버전 번호
|
|
end note
|
|
|
|
Service -> Repo: saveImprovedTranscript(meetingId, improvedContent, metadata)
|
|
activate Repo
|
|
|
|
Repo -> DB: INSERT INTO ai_transcripts
|
|
activate DB
|
|
note right
|
|
저장 데이터:
|
|
- meeting_id
|
|
- content (개선된 내용)
|
|
- version (새 버전)
|
|
- base_version (원본 버전)
|
|
- improvement_type
|
|
- prompt_type
|
|
- custom_prompt
|
|
- created_at
|
|
- status: IMPROVED
|
|
end note
|
|
|
|
DB --> Repo: newTranscriptId
|
|
deactivate DB
|
|
|
|
Repo --> Service: transcriptId, version
|
|
deactivate Repo
|
|
|
|
== 버전 연결 저장 ==
|
|
|
|
Service -> Repo: linkVersions(originalId, improvedId)
|
|
activate Repo
|
|
|
|
Repo -> DB: INSERT INTO transcript_versions
|
|
activate DB
|
|
note right
|
|
버전 연결 정보:
|
|
- original_transcript_id
|
|
- improved_transcript_id
|
|
- improvement_type
|
|
- created_at
|
|
end note
|
|
|
|
DB --> Repo: 연결 완료
|
|
deactivate DB
|
|
|
|
Repo --> Service: 완료
|
|
deactivate Repo
|
|
|
|
== 응답 반환 ==
|
|
|
|
Service -> Service: 응답 데이터 구성
|
|
note right
|
|
응답 데이터:
|
|
- transcriptId (새 버전)
|
|
- version
|
|
- baseVersion
|
|
- improvementType
|
|
- content (개선된 내용)
|
|
- originalLink
|
|
- createdAt
|
|
end note
|
|
|
|
Service --> Controller: 개선 완료 응답
|
|
deactivate Service
|
|
|
|
Controller --> Controller: 200 OK 응답 반환
|
|
|
|
note over Controller, DB
|
|
처리 시간:
|
|
- 원본 조회: 100-200ms
|
|
- 템플릿 선택: 10-50ms
|
|
- LLM 재구성: 4-8초
|
|
- 저장 처리: 200-300ms
|
|
총 처리 시간: 약 5-9초
|
|
|
|
정책:
|
|
- 원본 회의록은 항상 보존
|
|
- 여러 버전 동시 생성 가능
|
|
- 버전 간 비교 기능 제공
|
|
end note
|
|
|
|
@enduml
|