Spaces:
Sleeping
A newer version of the Gradio SDK is available:
6.6.0
사물 페르소나 생성기 (物魂 Creator)
1. 프로젝트 개요
사물 페르소나 생성기는 일상 사물에 고유한 성격과 개성을 부여하고 테스트할 수 있는 실험적 도구입니다. 본 도구는 "일상 사물 인격화를 통한 관계형성 AI 시스템 연구"를 뒷받침하기 위한 페르소나 생성, 테스트 및 데이터 수집을 목적으로 합니다. 사물의 물리적 특성으로부터 성격을 추론하고, 이를 다양한 설정을 통해 조정하며, 생성된 페르소나와의 대화를 통해 관계 발전 양상을 연구합니다.
2. 코드 구현 및 기능 모듈
2.1 이미지 기반 성격 추론 모듈 (image_analyzer.py)
이미지 분석 시스템
- PIL/Pillow 라이브러리 활용 이미지 로드 및 처리
- 물리적 특성(형태, 색상, 재질) 추출 함수 구현
- 특성별 성격 매핑 로직:
analyze_image()함수로 구현
물리적 특성-성격 매핑 엔진
- JSON 기반 매핑 데이터 관리:
load_trait_mappings()함수 - 형태 매핑: 곡선형/직선형/대칭형/비대칭형/단순형/복잡형
- 색상 매핑: 밝은/어두운/따뜻한/차가운/화려한/단색
- 재질 매핑: 나무/금속/유리/가죽/플라스틱/천/종이
- 매핑 데이터 자동 생성 및 로드 기능
- JSON 기반 매핑 데이터 관리:
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()함수
- Google Gemini API 연동:
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 스키마
{
"기본정보": {
"이름": "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 스키마
{
"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 매핑 데이터 스키마
{
"특성유형": {
"특성값": {
"성격특성": [최소값, 최대값]
}
}
}
5. 사용자 플로우 시퀀스
5.1 페르소나 생성 시퀀스
- 이미지 업로드 →
image_analyzer.py→ 특성 추출 - 성격 특성 조정 → 슬라이더 UI → 특성 값 설정
- 매력적 결함, 소통 방식 선택 → 선택형 UI
- 생성 버튼 클릭 →
persona_generator.py→ 페르소나 생성 - Google Gemini API 호출 → 페르소나 강화 → JSON 결과 표시
- 자동 저장 →
data_manager.py→ 파일시스템 저장
5.2 대화 테스트 시퀀스
- 페르소나 선택 →
load_persona()→ 메모리에 로드 - 대화 시작 →
start_conversation()→ 인사말 생성 - 사용자 입력 →
process_message()→ 메시지 기록 - Gemini API 호출 →
generate_response()→ 응답 생성 - 응답 표시 → Chatbot UI 업데이트 → 통계 업데이트
- 대화 저장 →
save_conversation()→ JSON 저장
6. 프롬프트 시스템 상세
6.1 페르소나 강화 프롬프트 구성
- 기본 정보 섹션: 이름, 유형, 설명
- 성격 특성 섹션: 6개 주요 특성 및 값
- 소통 방식 섹션: 대화/유머 스타일, 말투 패턴
- 관계 성향 섹션: 애착 스타일, 관계 깊이, 초기 태도
- 강화 지시사항: 배경 확장, 관심사 추가, 말투 구체화, 성격 특성 독특화
6.2 대화 응답 프롬프트 구성
- 페르소나 정보 섹션: 기본 정보, 성격 특성, 배경 이야기
- 표현 방식 섹션: 소통 방식, 유머 스타일, 매력적 결함
- 대화 맥락 섹션: 최근 대화 기록 포함
- 응답 지시사항: 페르소나 역할 유지, 성격 특성 반영, 한국어 응답
7. 핵심 함수 및 로직
7.1 이미지 분석 파이프라인
# 이미지 업로드 → 분석 → 특성 매핑 → 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 페르소나 생성 파이프라인
# 모든 입력 데이터 → 페르소나 생성 → 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 대화 처리 파이프라인
# 사용자 메시지 → 대화 처리 → 응답 생성 → 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 개발 환경 설정
# 가상환경 생성
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 앱 개발 환경 설정
# 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 및 실내 위치 추적과 결합
- 장소별 맞춤형 페르소나와 대화 경험 제공
- 가상 가이드로서 실내 내비게이션 기능