Mind-Log v5.0 | 최종 업데이트: 2026-04-17 14:00
Frontend (app-4:3000)
↓
Backend 서버 (app-3:8080) ←→ AI 서버 (app-2:8000)
↓ ↓
MySQL LangGraph 파이프라인
(TIER 0~4 + 비동기)
BackendClient 경유).사용자 입력
↓
TIER 0: Intent Classifier (Haiku)
│ 의도 분류 + 1차 위기 감지 + complexity_score 산출 + execution_plan 생성
↓
TIER 1 — 병렬 Fan-out (asyncio):
├─ Safety Agent (Sonnet 3.7 APAC CRIS) ← CRISIS 선점
├─ Emotion Agent (Haiku)
├─ Content Analyzer (Haiku)
└─ Podcast Reasoning (Sonnet 3.7 APAC CRIS)
├─ Episode Memory ← complexity ≥ 0.6 시 DI 호출 (KT Cloud + Pinecone)
└─ Knowledge Agent ← complexity ≥ 0.5 시 DI 호출 (Pinecone rag-suite-knowledge)
↓ Fan-in
TIER 2 — 병렬:
├─ Script Generator (Haiku) — 세그먼트 배치 생성
└─ Visualization (Haiku + AWS Bedrock Titan Image v2 + S3)
↓
TIER 3: Batch Validator (Haiku)
│ FAIL 시 → TIER 2 재시도 (max_retries=1)
↓
TIER 4: Script Personalizer (Sonnet 3.7 APAC CRIS)
│ rule-based + optional LLM deep / memory_write 트리거
↓
팟캐스트 에피소드 출력 (final_output)
↓
비동기 후처리 (async_post_processing):
├─ Learning Agent (Sonnet 3.5 APAC CRIS)
└─ Episode Memory 저장 (memory_write=True 시)
Safety가 safety_flags.status="crisis" 판정 시, cancel_event는 발행되지 않습니다. TIER 1의 Emotion / Content Analyzer / Podcast Reasoning은 정상 완료됩니다. 후속 TIER(2~4)는 safety_flags.status 값을 감지해 LLM을 호출하지 않고 하드코딩된 위기 응답 폴백을 반환합니다. cancel_event.set()은 TIER 1 타임아웃 시에만 호출됩니다 (src/graph/workflow.py:378).
safe → TIER 1~4 정상 완료
warning → TIER 1~4 정상 완료 → Script Personalizer에서 required_in_script 문구 삽입
crisis → TIER 1 정상 완료 (cancel_event 미발행)
→ TIER 2 (Script Generator / Visualization): crisis 감지 → LLM 미호출, 하드코딩 폴백
→ TIER 3 (Batch Validator): crisis 감지 → 검증 스킵, 폴백 전달
→ TIER 4 (Script Personalizer): crisis 감지 → 위기 응답 고정 문구로 final_output 반환
timeout → TIER 1 타임아웃 시에만 cancel_event.set() (workflow.py:378)
관련 단위 테스트 +18건: TIER 2/3/4 crisis 폴백 동작을 검증 (549 → 612).
| 에이전트 | TIER | 모델 | 핵심 기능 |
|---|---|---|---|
| Intent Classifier | 0 | Haiku | rule-based + LLM 분류, complexity_score, execution_plan, Redis 캐시(선택) |
| Safety Agent | 1 | Sonnet 3.7 | L0~L4 판정, required_in_script 주입, CRISIS 선점 |
| Emotion Agent | 1 | Haiku | valence(-1~1), arousal(0~1), AgentDataPublisher |
| Content Analyzer | 1 | Haiku | depth(light/moderate/deep), target_duration 3~5분, narrative_structure 4종 |
| Podcast Reasoning | 1 | Sonnet 3.7 | GoT→ToT→CoT (full_threshold=0.0, 항상 Full 추론), Neo4j+RDB 저장 |
| Episode Memory | 독립 | Sonnet 3.5 | KT Cloud 임베딩 + Pinecone(rag-suite-knowledge, PR #153), per-user namespace |
| Knowledge Agent | 독립 | Sonnet 3.5 | Expert RAG 5단계, Pinecone(rag-suite-knowledge, PR #153) |
| Script Generator | 2 | Haiku | 세그먼트 배치 생성, 150 WPM, prev context 150자 |
| Visualization | 2 | Haiku+Titan | AWS Bedrock Titan Image v2(us-east-1), S3(mindlog-images/vis/), SKIP_VISUALIZATION 환경변수 |
| Batch Validator | 3 | Haiku | PASS/FAIL/CRITICAL_FAIL, max_retries=1, forced_pass |
| Script Personalizer | 4 | Sonnet 3.7 | FORMALITY/STYLE/ATTITUDE rule-based, deep_personalization=false |
| Learning Agent | 비동기 | Sonnet 3.5 | BackendClient.save(RESOURCE_LEARNING), tier=None |