AI 시각화 자료
통합 아키텍처 기준: 본 문서의 시각화 기능은 Visualization Agent가 담당하며, AI 파트 아키텍처의 Visualizing Layer에 해당합니다. 구현 코드:
src/agents/podcast/visualization.py.
LMS 시각화 개요
LMS (Leader's Mind Security)는 두 가지 핵심 시각화 요소로 구성됩니다.
1) 그린룸 만평 이미지 (Green Room Satirical Cartoon)
사용자 상황을 표현하는 만평 형식의 이미지입니다. 각 그린룸 입력에 대해 사용자의 성향과 상황을 고려하여 생성됩니다.
2) 마인드 온톨로지 네트워크 시각화 (Mind Ontology Network Visualization)
조직 심리 상태를 네트워크 형식으로 시각화합니다. 조직이 가진 성향과 감정/심리 상태를 다층적으로 표현합니다.
그린룸 만평 이미지 생성
PRD1.0 명세
"사용자의 성향을 고려하여 사용자의 상황을 표현하는 만평 형식의 이미지"
처리 과정
| 항목 | 설명 |
|---|---|
| INPUT | 그린룸 입력 내용 + 이전 이용 데이터 + 감정 벡터 + 안전성 신호 |
| OUTPUT | 만평 형식 이미지 1장 (S3 업로드 후 CDN URL 반환) |
| 이미지 모델 | AWS Bedrock Titan Image Generator v2 (amazon.titan-image-generator-v2:0) |
| 호출 경로 | boto3.client("bedrock-runtime") 를 통해 invoke_model 호출 (call_image_gen 내부 구현) |
| 저장소 | boto3.client("s3").put_object(Bucket, Key, Body, ContentType="image/png") — PR #117에서 ACL="public-read" 지원 추가 |
| 프롬프트 버전 | v1.19.0 (settings.yaml prompts.versions.visualization) |
| 실행 모드 | 팟캐스트모드에서 TIER 2 병렬 실행 (Script Generator와 동시) |
구현 흐름
- 사용자의 심리 상태·성향·상황 분석 (Emotion / Content Analyzer / Reasoning 결과 수신)
- 시각화 프롬프트 LLM으로 만평 스타일 프롬프트 생성
- 차단 키워드 검사 — 해당 시 SAFE_FALLBACK_PROMPT 로 치환
- AWS Bedrock Titan v2 로 이미지 생성 → S3 업로드 → CDN URL 반환
- 실패/차단 시 재시도, 최종 실패 시
{"url": None, "status": "failed", "error": "content_blocked"}반환
Stable Diffusion / DALL-E 는 사용하지 않습니다. 전 구간이 AWS Bedrock Titan v2 기반입니다.
마인드 온톨로지 시각화
PRD1.0 명세
"조직이 가진 성향과 감정/심리 상태를 네트워크 형식으로 시각화"
아키텍처
기반 기술: Neo4j 기반 그래프 데이터 → 네트워크 시각화
온톨로지 레이어:
| 레이어 | 설명 | 키워드 예시 |
|---|---|---|
| 개인 레이어 | 개별 구성원의 심리 상태 | 스트레스, 동기부여, 신뢰 |
| 팀 레이어 | 팀 단위의 감정/협력 구조 | 응집력, 갈등, 창의성 |
| 조직 레이어 | 조직 전체의 심리 상태 | 혁신성, 안정성, 성숙도 |
사용 사례
- B2B 대시보드: 조직관리자가 조직의 심리 상태를 실시간으로 확인
- 상태 구분: 자연적 해결 vs 구조적 미해결 어려움을 시각적으로 표시
- 개입 지점: 개선이 필요한 영역을 명확히 식별
감정 시각화 테마 (팟캐스트 커버 이미지)
다양한 감정 표현 테마
Visualization Agent 는 팟캐스트 커버 이미지의 시각 스타일을 아래 테마 중에서 선택하여 생성합니다.
- 감정 풍경 (Emotional Landscape): 기후와 풍경으로 표현하는 감정 상태
- 감정 보석 (Emotional Gemstone): 색상과 형태로 표현하는 핵심 감정
- 감정 정원 (Emotional Garden): 식물과 꽃으로 표현하는 심리적 성장
- 감정 오라 (Emotional Aura): 입자 흐름으로 표현하는 감정 에너지
- 감정 성단 (Emotional Star Cluster): 별자리로 표현하는 복잡한 감정 구조
테마 자동 선택 로직
사용자 성향 데이터 + 현재 감정 벡터를 바탕으로 Visualization Agent 가 프롬프트 단계에서 테마를 선택합니다.
프롬프트 버전
- 현재 핀닝:
visualization v1.19.0 - 핀닝 위치:
config/settings.yaml→prompts.versions.visualization - 주요 이력:
- v1.19.0 — Titan v2 콘텐츠 차단 방어 강화, 만평 스타일 안정화
- 관련 PR: #133 (ContentBlockedError 도입), #138 / #139 (JSON 파싱 fallback, 콘텐츠 차단 에러 전환)
차단 키워드 및 SAFE_FALLBACK
차단 키워드 — 총 62개 (영어 32 + 한국어 30)
Titan v2 콘텐츠 정책 위반을 사전 차단하기 위해 프롬프트를 사전 필터링합니다. 정의는 visualization.py 의 _BLOCKED_EN, _BLOCKED_KO 이며 BLOCKED_KEYWORDS = _BLOCKED_EN | _BLOCKED_KO (frozenset 유니온) 으로 사용됩니다.
영어 32개 (_BLOCKED_EN)
person, people, human, face, portrait, body, hand, hands, eye, eyes, child, woman, man, violence, blood, weapon, gun, knife, death, injury, harm, abuse, kill, attack, doctor, surgery, hospital, injection, medical, nude, naked, sexual
한국어 30개 (_BLOCKED_KO)
사람, 얼굴, 인간, 초상, 신체, 손, 눈, 아이, 여자, 남자, 여성, 남성, 어린이, 폭력, 피, 무기, 총, 칼, 죽음, 부상, 상해, 학대, 살인, 공격, 의사, 수술, 병원, 주사, 의료, 환자
SAFE_FALLBACK_PROMPT (visualization.py:97-101)
차단 키워드 탐지 또는 Titan 콘텐츠 차단 발생 시, 아래의 안전 폴백 프롬프트로 재시도합니다.
A strictly 2D flat abstract art. Extreme minimalism.
Soft muted gradient with 2 simple geometric shapes.
Dominant empty space. Fine grainy matte texture.
ContentBlockedError 및 CRISIS 흐름
ContentBlockedError 처리 (PR #133, #138, #139)
- Titan 이 콘텐츠 정책 위반을 반환하면
ContentBlockedError를 발생시킵니다. _internal_generate_flow가 SAFE_FALLBACK_PROMPT 로 재시도합니다. 최대 재시도 횟수는settings.yaml의max_retries(=self.max_retries) 를 따릅니다.- 재시도가 모두 실패하면 다음을 반환합니다.
{
"url": null,
"status": "failed",
"error": "content_blocked"
}
- CDN URL fallback 은 향후 검토 TODO 이며, 현재는
url=None을 그대로 반환합니다.
CRISIS 분기 (PR #159)
risk_level == "crisis"가 감지되면 Visualization Agent 는 LLM / 이미지 생성 호출을 건너뜁니다.src/agents/shared/safety_constants.py의CRISIS_FALLBACK_VALUES["visual_data"]를 그대로 반환합니다.- TIER 1 선점 메커니즘과 연동되어, CRISIS 시 TIER 2 이미지 생성은 비활성화됩니다.
실행 아키텍처
팟캐스트모드 (TIER 2 병렬)
Visualization Agent: TIER 2
- Script Generator 와 병렬 실행
- 커버 만평 이미지 생성
- CRISIS 시 이미지 생성 스킵 →
CRISIS_FALLBACK_VALUES["visual_data"]사용
상태 필드
visual_data(AgentState) — 개발자2 (reasoning 계열) 쓰기 필드
안전 고려사항
트라우마 트리거 방지
- 사용자의
trauma_triggers목록에 포함된 키워드는 시각화 요소에서 제외 - Safety Agent 연동으로 위험 감지
부정적 이미지 필터링
- 차단 키워드 62개(EN 32 + KO 30) 로 1차 필터링 → SAFE_FALLBACK_PROMPT 치환
- Titan 콘텐츠 정책 위반 시 ContentBlockedError → SAFE_FALLBACK_PROMPT 재시도
- CRISIS 시 이미지 생성 자체 비활성화
검증 프로세스
- Batch Validator 에서 생성된 시각화 메타데이터 검증 (TIER 3)
- 사용자의 심리 안전성 우선
참고 문서:
- AI 파트 아키텍처 - 전체 시스템 구조
- AI 안전 및 위험 감지 자료 - 안전 가이드라인
- 저장소 내 가이드:
docs/guides/PROMPT_VERSIONING.md,src/agents/podcast/visualization.py
최종 수정: 2026-04-17 18:30