persona_create / info.md
haepada's picture
Upload 12 files
5581923 verified
# 사물 페르소나 생성기 (物魂 Creator)
## 1. 프로젝트 개요
사물 페르소나 생성기는 일상 사물에 고유한 성격과 개성을 부여하고 테스트할 수 있는 실험적 도구입니다. 본 도구는 "일상 사물 인격화를 통한 관계형성 AI 시스템 연구"를 뒷받침하기 위한 페르소나 생성, 테스트 및 데이터 수집을 목적으로 합니다. 사물의 물리적 특성으로부터 성격을 추론하고, 이를 다양한 설정을 통해 조정하며, 생성된 페르소나와의 대화를 통해 관계 발전 양상을 연구합니다.
## 2. 코드 구현 및 기능 모듈
### 2.1 이미지 기반 성격 추론 모듈 (`image_analyzer.py`)
- **이미지 분석 시스템**
- PIL/Pillow 라이브러리 활용 이미지 로드 및 처리
- 물리적 특성(형태, 색상, 재질) 추출 함수 구현
- 특성별 성격 매핑 로직: `analyze_image()` 함수로 구현
- **물리적 특성-성격 매핑 엔진**
- JSON 기반 매핑 데이터 관리: `load_trait_mappings()` 함수
- 형태 매핑: 곡선형/직선형/대칭형/비대칭형/단순형/복잡형
- 색상 매핑: 밝은/어두운/따뜻한/차가운/화려한/단색
- 재질 매핑: 나무/금속/유리/가죽/플라스틱/천/종이
- 매핑 데이터 자동 생성 및 로드 기능
### 2.2 질문 생성 및 페르소나 강화 모듈 (`question_generator.py`, `persona_generator.py`)
- **AI 기반 맞춤형 질문 생성기**
- 사물 유형별 특화 질문 템플릿 (8개 카테고리)
- 성격 특성별 맞춤형 질문 생성 로직
- Google Gemini API 활용 동적 질문 생성: `generate_llm_questions()` 함수
- **페르소나 강화 시스템**
- `generate_persona()`: 전체 페르소나 생성 파이프라인 함수
- `get_persona_enhancement()`: Google Gemini API 호출로 페르소나 풍부화
- 성격 특성 요약 자동 생성: `get_trait_summary()` 함수
- 배경 이야기, 경험 자동 생성: `generate_experiences()` 함수
### 2.3 대화 처리 모듈 (`chat_engine.py`, `gemini_handler.py`)
- **실시간 채팅 시스템**
- 대화 초기화: `start_conversation()` 함수
- 메시지 처리: `process_message()` 함수
- 대화 내용 관리 및 통계 트래킹 구현
- **응답 생성 엔진**
- Google Gemini API 연동: `generate_response()` 함수
- 프롬프트 엔지니어링: 페르소나 특성에 맞는 응답 유도
- 초기 인사말 생성: `generate_initial_greeting()` 함수
### 2.4 데이터 관리 모듈 (`data_manager.py`)
- **파일 시스템 기반 데이터 관리**
- 페르소나 저장: `save_persona()` 함수
- 페르소나 로드: `load_persona()` 함수
- 대화 기록 저장: `save_conversation()` 함수
- 페르소나 및 대화 목록화: `list_personas()`, `list_conversations()` 함수
- **데이터 분석 기능**
- 페르소나 특성 분포 분석: `analyze_persona_trait_distribution()` 함수
- 대화 통계 분석: `get_conversation_statistics()` 함수
### 2.5 프롬프트 관리 시스템 (`prompt_templates.py`)
- **템플릿 기반 프롬프트 관리**
- 페르소나 강화용 프롬프트: `PERSONA_ENHANCEMENT_TEMPLATE`
- 이미지 분석용 프롬프트: `IMAGE_ANALYSIS_TEMPLATE`
- 대화 응답용 프롬프트: `CONVERSATION_RESPONSE_TEMPLATE`
- 질문 생성용 프롬프트: `QUESTION_GENERATION_TEMPLATE`
- **프롬프트 포맷 함수**
- `format_persona_enhancement_prompt()`: 페르소나 강화 프롬프트 포맷
- `format_conversation_prompt()`: 대화 응답 프롬프트 포맷
- `format_question_generation_prompt()`: 질문 생성 프롬프트 포맷
### 2.6 웹 인터페이스 (`app.py`)
- **Gradio 기반 UI 구현**
- 3개 탭 구성: 페르소나 생성, 대화 테스트, 페르소나 라이브러리
- 이벤트 핸들러 연결: 버튼 클릭, 입력 제출 등
- 상태 관리: gr.State()를 활용한 페르소나 및 대화 상태 관리
- **요소별 UI 컴포넌트**
- 이미지 업로드 및 분석: gr.Image, image_analysis_btn
- 성격 특성 슬라이더: gr.Slider 컴포넌트 6개 활용
- 채팅 인터페이스: gr.Chatbot, gr.Textbox 조합
## 3. 기술 스택 및 의존성
### 3.1 핵심 라이브러리
- **Gradio**: 웹 인터페이스 구현 (v3.50.2 이상)
- **Python-dotenv**: 환경 변수 관리
- **Requests**: API 통신
- **Pillow**: 이미지 처리
- **NumPy**: 수치 연산
- **Matplotlib**: 데이터 시각화 (향후 구현 예정)
### 3.2 API 통합
- **Google Gemini API**: LLM 기반 텍스트 생성
- `gemini_query()`: API 요청 함수
- JSON 파싱: `extract_json()` 함수
### 3.3 파일 시스템 구조
```
persona_creator/
├── app.py # 메인 그라디오 애플리케이션
├── requirements.txt # 의존성 패키지
├── packages.txt # 시스템 패키지
├── README.md # 사용 설명서
├── modules/
│ ├── image_analyzer.py # 이미지 분석 및 특성 추출
│ ├── question_generator.py # 동적 질문 생성 엔진
│ ├── persona_generator.py # 페르소나 생성 엔진
│ ├── chat_engine.py # 대화 처리 및 기록
│ ├── gemini_handler.py # 제미나이 API 연동
│ ├── prompt_templates.py # LLM 프롬프트 템플릿
│ └── data_manager.py # 데이터 저장 및 분석
├── data/
│ ├── trait_mappings/ # 물리적-성격 특성 매핑 데이터
│ │ ├── shape_traits.json # 형태-성격 매핑 규칙
│ │ ├── color_traits.json # 색상-성격 매핑 규칙
│ │ └── material_traits.json # 재질-성격 매핑 규칙
│ ├── user_personas/ # 사용자 생성 페르소나
│ └── conversation_logs/ # 대화 기록 저장소
├── styles/
│ └── custom.css # UI 커스텀 스타일
└── assets/
├── examples/ # 예시 이미지
└── icons/ # UI 아이콘
```
## 4. 데이터 구조 및 스키마
### 4.1 페르소나 JSON 스키마
```json
{
"기본정보": {
"이름": "String",
"유형": "String",
"나이": "String",
"설명": "String",
"생성일시": "String (YYYY-MM-DD HH:MM:SS)"
},
"성격특성": {
"온기": "Integer (0-100)",
"능력": "Integer (0-100)",
"신뢰성": "Integer (0-100)",
"친화성": "Integer (0-100)",
"창의성": "Integer (0-100)",
"유머감각": "Integer (0-100)"
},
"성격요약": "String",
"매력적결함": ["String", "String"],
"소통방식": "String",
"유머스타일": "String",
"말투패턴": "String",
"관심사": ["String", "String", "String", ...],
"배경이야기": "String",
"경험": ["String", "String", "String", ...],
"관계성향": {
"애착스타일": "String",
"관계깊이선호도": "String",
"초기태도": "String"
},
"filepath": "String (저장 경로)"
}
```
### 4.2 대화 기록 JSON 스키마
```json
{
"persona_name": "String",
"persona_type": "String",
"start_time": "String (YYYY-MM-DD HH:MM:SS)",
"current_time": "String (YYYY-MM-DD HH:MM:SS)",
"duration_seconds": "Integer",
"messages": [
{
"role": "String (system|user|assistant)",
"content": "String",
"timestamp": "String (YYYY-MM-DD HH:MM:SS)"
},
...
]
}
```
### 4.3 매핑 데이터 스키마
```json
{
"특성유형": {
"특성값": {
"성격특성": [최소값, 최대값]
}
}
}
```
## 5. 사용자 플로우 시퀀스
### 5.1 페르소나 생성 시퀀스
1. 이미지 업로드 → `image_analyzer.py` → 특성 추출
2. 성격 특성 조정 → 슬라이더 UI → 특성 값 설정
3. 매력적 결함, 소통 방식 선택 → 선택형 UI
4. 생성 버튼 클릭 → `persona_generator.py` → 페르소나 생성
5. Google Gemini API 호출 → 페르소나 강화 → JSON 결과 표시
6. 자동 저장 → `data_manager.py` → 파일시스템 저장
### 5.2 대화 테스트 시퀀스
1. 페르소나 선택 → `load_persona()` → 메모리에 로드
2. 대화 시작 → `start_conversation()` → 인사말 생성
3. 사용자 입력 → `process_message()` → 메시지 기록
4. Gemini API 호출 → `generate_response()` → 응답 생성
5. 응답 표시 → Chatbot UI 업데이트 → 통계 업데이트
6. 대화 저장 → `save_conversation()` → JSON 저장
## 6. 프롬프트 시스템 상세
### 6.1 페르소나 강화 프롬프트 구성
- **기본 정보 섹션**: 이름, 유형, 설명
- **성격 특성 섹션**: 6개 주요 특성 및 값
- **소통 방식 섹션**: 대화/유머 스타일, 말투 패턴
- **관계 성향 섹션**: 애착 스타일, 관계 깊이, 초기 태도
- **강화 지시사항**: 배경 확장, 관심사 추가, 말투 구체화, 성격 특성 독특화
### 6.2 대화 응답 프롬프트 구성
- **페르소나 정보 섹션**: 기본 정보, 성격 특성, 배경 이야기
- **표현 방식 섹션**: 소통 방식, 유머 스타일, 매력적 결함
- **대화 맥락 섹션**: 최근 대화 기록 포함
- **응답 지시사항**: 페르소나 역할 유지, 성격 특성 반영, 한국어 응답
## 7. 핵심 함수 및 로직
### 7.1 이미지 분석 파이프라인
```python
# 이미지 업로드 → 분석 → 특성 매핑 → UI 업데이트
image_analysis_btn.click(
fn=analyze_image,
inputs=[object_image],
outputs=[image_analysis_result, warmth, competence, trustworthiness,
friendliness, creativity, humor, object_type, object_description]
)
```
### 7.2 페르소나 생성 파이프라인
```python
# 모든 입력 데이터 → 페르소나 생성 → JSON 결과
create_btn.click(
fn=generate_persona,
inputs=[
object_name, object_type, object_age, object_description,
warmth, competence, trustworthiness, friendliness, creativity, humor,
flaws, communication_style, humor_style, speech_pattern, interests,
attachment_style, relationship_depth, initial_attitude, backstory,
image_analysis_result
],
outputs=[generated_persona, current_persona]
)
```
### 7.3 대화 처리 파이프라인
```python
# 사용자 메시지 → 대화 처리 → 응답 생성 → UI 업데이트
send_btn.click(
fn=process_message,
inputs=[user_message, conversation_history, current_persona, session_start_time],
outputs=[chat_display, conversation_history, user_message, chat_stats]
)
```
## 8. 향후 개발 계획
### 8.1 이미지 분석 고도화
- **컴퓨터 비전 API 통합**
- Google Cloud Vision API 또는 Azure Computer Vision API 연동
- image_analyzer.py 확장: 실제 객체 인식 및 속성 추출 구현
- 이미지 감정 분석 알고리즘 추가
- **물리적-성격 매핑 확장**
- 머신러닝 기반 매핑 시스템: 사용자 피드백으로 학습
- 더 세분화된 물리적 특성 카테고리 추가
- 동적 매핑 규칙 업데이트 메커니즘
### 8.2 페르소나 시스템 확장
- **모순적 특성 구현**
- persona_generator.py 확장: 모순 특성 정의 및 처리 모듈
- 상황 인식 모순 표현 로직: 특정 대화 맥락에서 발현
- 심층 성격 모델 도입: 5요인 모델 또는 MBTI 기반
- **관계 발전 단계 시스템**
- 새로운 모듈 추가: relationship_tracker.py
- 6단계 관계 발전 모델: 친숙도, 신뢰도, 친밀도 지표
- 대화 분석 기반 관계 단계 자동 진단
### 8.3 연구 도구 및 분석 기능
- **데이터 분석 도구**
- 새로운 모듈 추가: analytics_engine.py
- 통계 분석 라이브러리 통합: pandas, scipy
- 대시보드 UI 개발: plotly 또는 dash 통합
- **A/B 테스트 시스템**
- 실험 설계 모듈: experiment_manager.py
- 동일 사물의 다른 성격 버전 생성 및 비교
- 사용자 반응 자동 측정 및 분석
## 9. 개발자 참고 사항
### 9.1 API 키 설정
- `.env` 파일에 `GEMINI_API_KEY=your_api_key` 추가
- Google AI Studio에서 API 키 발급 필요
- API 비용 추적: 페르소나 생성당 약 0.0002-0.0005 USD
### 9.2 개발 환경 설정
```bash
# 가상환경 생성
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# 의존성 설치
pip install -r requirements.txt
# 애플리케이션 실행
python app.py
```
### 9.3 Flutter 앱 개발 환경 설정
```bash
# Flutter SDK 설치
flutter doctor
# Flutter 프로젝트 생성
flutter create memory_tag_app
cd memory_tag_app
# 필요한 패키지 추가
flutter pub add google_generative_ai
flutter pub add qr_flutter
flutter pub add qr_code_scanner
flutter pub add speech_to_text
flutter pub add flutter_tts
flutter pub add shared_preferences
flutter pub add camera
flutter pub add path_provider
```
### 9.4 Flutter 애플리케이션 구조
```
memory_tag_app/
├── lib/
│ ├── main.dart # 앱 진입점
│ ├── screens/
│ │ ├── home_screen.dart # 홈 화면
│ │ ├── scan_screen.dart # QR 스캔 화면
│ │ ├── chat_screen.dart # 대화 화면
│ │ ├── create_screen.dart # 페르소나 생성 화면
│ │ └── settings_screen.dart # 설정 화면
│ ├── models/
│ │ ├── persona.dart # 페르소나 모델
│ │ └── message.dart # 대화 메시지 모델
│ ├── services/
│ │ ├── gemini_service.dart # Google Gemini API 연동
│ │ ├── storage_service.dart # 로컬 스토리지 관리
│ │ ├── stt_service.dart # 음성-텍스트 변환
│ │ └── tts_service.dart # 텍스트-음성 변환
│ ├── widgets/
│ │ ├── chat_bubble.dart # 채팅 버블 UI
│ │ ├── voice_input_button.dart # 음성 입력 버튼
│ │ └── persona_card.dart # 페르소나 카드 UI
│ └── utils/
│ ├── constants.dart # 상수 정의
│ └── prompt_templates.dart # 프롬프트 템플릿
├── assets/
│ ├── images/ # 이미지 리소스
│ └── sounds/ # 사운드 리소스
└── pubspec.yaml # 의존성 관리
```
### 9.5 Google Gemini API 활용
- **멀티모달 기능 구현**
- 카메라로 캡처한 사물 이미지를 Gemini Pro Vision API에 전송
- 텍스트와 이미지를 동시에 처리하는 멀티모달 프롬프트 설계
- 이미지 인식 결과를 바탕으로 사물 성격 자동 추론
- **제미나이 모델 활용 전략**
- Gemini 1.5 Pro: 복잡한 페르소나 생성 및 긴 컨텍스트 대화용
- Gemini 1.5 Flash: 빠른 응답이 필요한 일상 대화용
- 적절한 모델 선택을 통한 비용 최적화 구현
- **대화 메모리 관리**
- 벡터 임베딩을 활용한 대화 메모리 구현
- 중요 대화를 요약하여 장기 메모리에 저장
- 상황에 따른 관련 기억 검색 알고리즘 구현
### 9.6 QR 코드 기반 연결 시스템
- **QR 코드 생성 및 관리**
- 페르소나 ID와 메타데이터를 포함한 QR 코드 생성
- 위치 정보를 QR 코드에 포함하여 공간 인식 기능 구현
- 보안을 위한 QR 코드 암호화 옵션 제공
- **스캔 및 상호작용 흐름**
- 카메라를 통한 QR 코드 인식 → 페르소나 정보 로드
- 이전 대화 이력 검색 → 대화 컨텍스트 구성
- 위치 기반 맞춤형 인사말 및 화제 제안
### 9.7 음성 인터페이스
- **STT(음성-텍스트) 파이프라인**
- `speech_to_text` 패키지를 활용한 실시간 음성 인식
- 오디오 스트림 처리 및 잡음 필터링
- 다국어 지원(한국어, 영어, 일본어)
- **TTS(텍스트-음성) 파이프라인**
- Google Cloud TTS API 활용한 자연스러운 음성 생성
- 페르소나별 맞춤 음성(음높이, 속도, 악센트) 설정
- SSML 태그를 활용한 표현력 있는 음성 구현
### 9.8 성능 최적화 전략
- **오프라인 모드 지원**
- 핵심 대화 패턴의 로컬 캐싱
- 네트워크 연결 없이 기본 응답 생성 가능
- 연결 복구 시 자동 동기화
- **배터리 및 데이터 사용량 최적화**
- 저전력 모드에서의 동작 방식 조정
- 요청 배치 처리를 통한 API 호출 최소화
- 압축 알고리즘을 활용한 데이터 전송량 감소
### 9.9 코드 확장 가이드라인
- 모듈 확장 시 기존 인터페이스 유지
- 새 기능은 별도 모듈로 구현 후 app.py에 통합
- 데이터 스키마 변경 시 하위 호환성 고려
- 로깅 시스템: app.py 내 logging 모듈 설정 추가 필요
### 9.10 알려진 이슈 및 제한사항
- Gemini API 한국어 응답이 때때로 불안정함
- 이미지 분석은 현재 더미 데이터 기반 (실제 분석 미구현)
- 대용량 대화 히스토리(20턴 이상)에서 성능 저하 발생
- 페르소나 간 전환 시 일부 UI 상태 초기화 문제
## 10. 연구 활용 방안
본 도구는 현재 구현된 기능만으로도 다음과 같은 연구에 활용할 수 있습니다:
- **사물 인격화 효과 연구**: 사물에 인격 부여 시 사용자 인식 변화 및 심리적 영향
- **성격 특성 선호도 연구**: 어떤 성격 특성 조합이 더 매력적으로 느껴지는지 분석
- **대화 패턴 연구**: 페르소나 특성에 따른 대화 패턴 차이 및 사용자 참여도 변화
- **물리적-성격적 매핑 연구**: 사물의 물리적 특성이 어떻게 성격 특성으로 인식되는지 분석
향후 개발이 진행됨에 따라 더 다양하고 심층적인 연구가 가능해질 것입니다.
## 11. 모바일 앱 응용 방안
### 11.1 상업적 활용 가능성
- **실물 제품과 연동한 AI 경험**
- 가전제품, 인테리어 소품 등에 QR 코드 부착하여 제품 브랜딩 강화
- 상품 사용 가이드와 서포트를 재미있는 대화형으로 제공
- 브랜드 스토리텔링 및 고객 관계 구축 도구로 활용
- **공간 기반 AI 컴패니언**
- 공공장소, 전시관, 관광지 등에 사물 페르소나 배치
- 사용자의 이동 경로에 따른 스토리라인 구성
- 모바일 AR과 결합한 증강 현실 경험 제공
### 11.2 교육 및 치료적 활용
- **학습 도우미로 활용**
- 학습 도구와 연결된 AI 튜터 기능
- 맞춤형 학습 콘텐츠 추천 및 대화형 교육
- 학습 진도와 이해도 추적 기능
- **감정적 지원 및 치료 보조**
- 심리 치료 보조 도구로 활용(단, 전문가 감독 하에)
- 감정 표현 및 사회적 상호작용 연습
- 일상 루틴 관리 및 정서적 안정 지원
### 11.3 대화형 IoT 통합
- **스마트홈 시스템과 연동**
- IoT 기기와 연결하여 자연어로 기기 제어
- 사용자 생활 패턴 학습 및 맞춤형 자동화 제안
- 재미있는 페르소나를 통한 스마트홈 경험 향상
- **위치 기반 서비스 통합**
- GPS 및 실내 위치 추적과 결합
- 장소별 맞춤형 페르소나와 대화 경험 제공
- 가상 가이드로서 실내 내비게이션 기능