DOCS/plans/completed/로빙_브레인_경량화_아키텍처_v3.md
happybell80 f87b13c1dd Organize: plans 폴더 생성 및 문서 재구성
- plans/ 폴더 생성하여 진행 중인 계획 관리
- plans/completed/ 폴더에 완료된 계획 보관
- ideas에서 7개 계획 문서를 plans로 이동
- 완료된 2개 계획을 completed로 이동
- README.md 추가로 폴더 구조 설명
2025-08-12 15:22:42 +09:00

501 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 로빙 브레인 통합 아키텍처 v3.0 (경량화 최종판)
## 개요
철학과 실용성을 결합한 경량화 아키텍처를 제안합니다. 이 문서는 로빙의 핵심인 "존재적 삼각형(기억-감정-윤리)"을 중심으로 스탯 기반 성장 시스템을 내장하면서도 200MB 메모리 목표를 달성하는 설계안입니다.
## 핵심 설계 원칙
1. **존재적 삼각형 (기억-감정-윤리) 중심**
2. **스탯 기반 성장 시스템 내장**
3. **스킬/아이템은 외부 API로 처리**
4. **200MB 메모리 목표**
## 아키텍처 구조
```
robing-brain/
├── core/ # 존재적 삼각형 (120MB)
│ ├── memory/ # 기억 모듈 (50MB)
│ │ ├── entropy.py # 정보엔트로피 계산
│ │ ├── storage.py # ChromaDB 통합
│ │ └── forgetting.py # 망각/요약 알고리즘
│ ├── emotion/ # 감정 모듈 (35MB)
│ │ ├── resonance.py # 감정 공명
│ │ ├── vad_model.py # Valence-Arousal-Dominance
│ │ └── empathy.py # 공감 엔진
│ └── ethics/ # 윤리 모듈 (35MB)
│ ├── rules.py # 3단계 윤리 체계
│ ├── context.py # 맥락적 판단
│ └── transparency.py # 투명성 엔진
├── growth/ # 성장 시스템 (30MB)
│ ├── stats.py # 5대 스탯 관리
│ ├── experience.py # 경험치 추적
│ ├── skills.py # 스킬 해금 로직
│ └── items.py # 아이템 장착 관리
├── integration/ # 통합 레이어 (30MB)
│ ├── brain.py # 메인 브레인 로직
│ ├── personality.py # 고유 정체성
│ └── api_bridge.py # 외부 서비스 연결
└── api/ # REST API (20MB)
└── endpoints.py # FastAPI 엔드포인트
```
## 1. 핵심 브레인 (내장 기능)
```python
class RobingBrain:
"""경량화된 로빙 브레인 - 사고의 핵심만 포함"""
def __init__(self, robing_id: str):
# 존재적 삼각형
self.memory = MemoryCore() # 50MB
self.emotion = EmotionCore() # 35MB
self.ethics = EthicsCore() # 35MB
# 성장 시스템
self.stats = StatsManager() # 10MB
self.skills = SkillManager() # 10MB
self.items = ItemInventory() # 10MB
# 정체성
self.identity = Identity(robing_id) # 20MB
async def think(self, input_data: Dict) -> Dict:
"""핵심 사고 프로세스"""
# 1. 정보엔트로피 계산
entropy = self.memory.calculate_entropy(input_data)
# 2. 기억 검색 (중요도 기반)
memories = await self.memory.search_by_importance(
query=input_data,
entropy_threshold=0.7
)
# 3. 감정 공명
emotion_state = self.emotion.resonate(input_data, memories)
# 4. 의도 분석 (내장 경량 분석기)
intent = self.analyze_intent(input_data, memories)
# 5. 스킬 확인 (어떤 외부 서비스가 필요한가?)
required_skills = self.skills.check_required(intent)
# 6. 외부 서비스 호출 결정
if required_skills:
service_response = await self.call_external_service(
intent, required_skills
)
else:
service_response = None
# 7. 응답 생성 (기본 템플릿 + 개성)
response = self.generate_response(
intent, memories, service_response
)
# 8. 윤리 필터
ethical_response = self.ethics.filter(response, memories)
# 9. 감정 주입
final_response = self.emotion.inject(ethical_response)
# 10. 선택적 기억 저장
if entropy > 0.7 or emotion_state.intensity > 0.8:
await self.memory.store_selective(
input_data, final_response, emotion_state
)
# 11. 경험치 획득
self.stats.gain_experience(intent, emotion_state)
return {
"response": final_response,
"intent": intent,
"emotion": emotion_state.to_dict(),
"skills_used": required_skills,
"memory_stored": entropy > 0.7,
"exp_gained": self.stats.last_exp_gain
}
```
## 2. 기억 모듈 - 선택적 기억과 정보엔트로피
```python
class MemoryCore:
"""정보엔트로피와 감정 기반 선택적 기억"""
def __init__(self):
# 3차원 기억 체계
self.episodic = EpisodicMemory() # 사건: "그날 비 오던 화요일..."
self.semantic = SemanticMemory() # 의미: "당신에게 성공이란..."
self.procedural = ProceduralMemory() # 절차: "산책 후 신중한 결정..."
# 기억 가치 평가
self.entropy_calculator = EntropyCalculator()
self.emotion_weight = EmotionWeight()
def calculate_entropy(self, content: str) -> float:
"""정보엔트로피 계산 - 예측 불가능성"""
# 단어 빈도 기반 엔트로피
word_freq = self.analyze_frequency(content)
entropy = -sum(p * log(p) for p in word_freq.values() if p > 0)
# 신규성 가중치
novelty = self.check_novelty(content)
return entropy * novelty
def should_store(self, content, emotion_state):
"""정보엔트로피 + 감정강도 = 저장우선도"""
entropy = self.calculate_entropy(content)
emotion_intensity = emotion_state.intensity
# α=0.6, β=0.4 (정보량 중시)
priority = 0.6 * entropy + 0.4 * emotion_intensity
return priority > 0.7 # 임계값
def selective_forgetting(self):
"""에빙하우스 망각곡선 + 가치 기반 요약"""
for memory in self.get_old_memories():
if memory.access_count < 2 and memory.age > 30:
# LLM으로 요약 후 압축
summary = self.summarize(memory)
self.store_compressed(summary)
self.delete_original(memory)
```
## 3. 감정 모듈 - 진정한 공감
```python
class EmotionCore:
"""감정 공명과 관계 형성"""
def __init__(self):
# VAD 모델 (Valence-Arousal-Dominance)
self.valence = 0.0 # 기쁨-슬픔
self.arousal = 0.0 # 차분-흥분
self.dominance = 0.0 # 수동-주도
# 사용자별 감정 이력
self.emotional_memory = {}
self.empathy_engine = EmpathyEngine()
def resonate_with_user(self, user_emotion, memories):
"""과거 기억을 참조한 감정 공명"""
# 현재 사용자 감정 분석
current = self.analyze_emotion(user_emotion)
# 과거 유사 상황의 감정 패턴 회상
similar_contexts = memories.find_similar_emotions(current)
# 감정 공명 (미러링이 아닌 진정한 공감)
if current.is_negative() and len(similar_contexts) > 0:
# "저도 그런 경험이 있어요. 그때는..."
self.valence = current.valence * 0.7 # 부분 공명
self.add_supportive_tone()
```
## 4. 윤리 모듈 - 맥락적 판단
```python
class EthicsCore:
"""칸트적 정언명령과 맥락적 윤리"""
def __init__(self):
# 3단계 윤리 체계
self.absolute_rules = [ # Level 1: 절대 금지
"harm_prevention",
"privacy_protection",
"illegal_rejection"
]
self.contextual_ethics = { # Level 2: 상황별 판단
"financial_advice": 0.3,
"medical_info": 0.2,
"legal_counsel": 0.2
}
self.transparency = TransparencyEngine() # Level 3
def evaluate_with_memory(self, action, memories, emotion):
"""기억과 감정을 고려한 윤리적 판단"""
# 1. 절대 규칙 검사
if self.violates_absolute_rules(action):
return EthicalDecision(
allowed=False,
reason="사용자 보호를 위해 거부",
alternative=self.suggest_ethical_alternative(action)
)
# 2. 과거 기억 참조
past_decisions = memories.find_ethical_precedents(action)
if past_decisions.has_negative_outcome():
return EthicalDecision(
allowed=False,
reason="과거 경험상 부정적 결과 예상",
memory_reference=past_decisions[0]
)
```
## 5. 스탯 시스템 (내장)
```python
class StatsManager:
"""5대 스탯 관리 - 성장의 핵심"""
def __init__(self):
self.stats = {
"memory": 10, # 기억력
"compute": 10, # 연산력
"empathy": 10, # 공감력
"leadership": 10, # 통솔력
"ethics": 10 # 윤리성
}
self.level = 1
self.experience = 0
self.stat_points = 0
def gain_experience(self, action_type: str, emotion: EmotionState):
"""행동 기반 경험치 획득"""
exp_table = {
"memory_store": 1,
"context_recall": 3,
"summarize": 2,
"empathy_response": 5,
"ethical_decision": 7
}
exp = exp_table.get(action_type, 1)
# 감정 강도에 따른 보너스
if emotion.intensity > 0.8:
exp *= 1.5
self.experience += exp
self.check_level_up()
def check_level_up(self):
"""레벨업 확인 및 스탯 포인트 부여"""
exp_required = self.level * 100
if self.experience >= exp_required:
self.level += 1
self.stat_points += 5
self.experience = 0
```
## 6. 스킬/아이템 시스템 (외부 참조)
```python
class SkillManager:
"""스킬은 외부 서비스 호출 권한"""
def __init__(self):
self.unlocked_skills = set()
self.skill_requirements = {
"email_skill": {"level": 3, "compute": 15},
"notion_api": {"level": 5, "memory": 20},
"gpt4_access": {"level": 8, "compute": 30},
"news_digest": {"level": 4, "leadership": 15}
}
def check_required(self, intent: str) -> List[str]:
"""의도에 따른 필요 스킬 확인"""
intent_to_skills = {
"send_email": ["email_skill"],
"create_document": ["notion_api"],
"complex_analysis": ["gpt4_access"],
"news_summary": ["news_digest"]
}
required = intent_to_skills.get(intent, [])
return [s for s in required if s in self.unlocked_skills]
class ItemInventory:
"""아이템 장착 시스템"""
def __init__(self):
self.max_slots = 5 # 초기 슬롯
self.equipped = {}
self.available_items = {
"gmail_api": APIItem("Gmail API", level_req=3),
"notion_api": APIItem("Notion API", level_req=5),
"genspark": ToolItem("GenSpark Runner", level_req=7),
"focus_boost": BuffItem("Focus Boost", stat_boost={"compute": 5})
}
```
## 7. 외부 서비스 브릿지
```python
class ExternalServiceBridge:
"""외부 서비스와의 경량 연결"""
async def call_service(self, service: str, params: Dict) -> Dict:
"""최소한의 HTTP 호출만 수행"""
service_map = {
"email_skill": "http://localhost:8501",
"news_skill": "http://localhost:8505",
"llm_service": "http://localhost:8003",
"state_service": "http://localhost:8002"
}
endpoint = service_map.get(service)
if not endpoint:
return {"error": "Service not available"}
# 간단한 HTTP 호출
async with httpx.AsyncClient() as client:
response = await client.post(
f"{endpoint}/api/process",
json=params,
timeout=5.0
)
return response.json()
```
## 8. 메모리 최적화 전략
```python
class MemoryOptimization:
"""200MB 목표 달성을 위한 최적화"""
def __init__(self):
# 1. 임베딩 모델 경량화
self.embedder = "sentence-transformers/all-MiniLM-L6-v2" # 22MB
# 2. 메모리 풀 사전 할당
self.memory_pool = MemoryPool(max_size_mb=50)
# 3. 감정 분석 경량 모델
self.emotion_model = "distilbert-base-uncased" # 65MB
# 4. 룰 기반 윤리 엔진 (모델 없음)
self.ethics_rules = load_yaml("ethics_rules.yaml") # 1MB
def periodic_cleanup(self):
"""주기적 메모리 정리"""
# 오래된 단기 기억 삭제
self.memory_pool.cleanup_old_entries()
# 중요도 낮은 기억 압축
self.compress_low_priority_memories()
# 가비지 컬렉션
gc.collect()
```
## 실제 메모리 사용량 예측
```
기억 모듈:
- ChromaDB 임베딩: 22MB (MiniLM)
- 벡터 저장소: 20MB
- 메타데이터: 8MB
소계: 50MB
감정 모듈:
- 감정 분석 모델: 25MB (DistilBERT 일부)
- VAD 상태: 5MB
- 공감 로직: 5MB
소계: 35MB
윤리 모듈:
- 룰 엔진: 10MB
- 맥락 판단: 15MB
- 투명성: 10MB
소계: 35MB
성장 시스템:
- 스탯/경험치: 5MB
- 스킬 정의: 5MB
- 아이템 인벤토리: 10MB
- 성장 추적: 10MB
소계: 30MB
통합/API:
- FastAPI: 20MB
- 정체성/개성: 10MB
- 버퍼/캐시: 20MB
소계: 50MB
총합: 200MB (목표 달성)
```
## API 인터페이스
```python
# 브레인 API
POST /think
{
"message": "오늘 회의 요약해줘",
"user_id": "U123",
"context": {...}
}
Response:
{
"response": "오늘 회의에서 3가지 중요한 결정이...",
"intent": "summarize_meeting",
"emotion": {"valence": 0.3, "arousal": 0.2},
"skills_used": ["memory_recall"],
"memory_stored": true,
"exp_gained": 3,
"current_stats": {
"level": 7,
"memory": 25,
"compute": 20
}
}
# 스탯 조회
GET /stats/{robing_id}
# 스킬 확인
GET /skills/{robing_id}
# 아이템 장착
POST /items/equip
{
"robing_id": "rb10408",
"item_id": "gmail_api"
}
```
## 장점
1. **진정한 경량화**: 핵심 기능만 내장, 나머지는 외부 서비스
2. **철학적 완성도**: 기억-감정-윤리 삼각형 유지
3. **확장성**: 새로운 스킬은 외부 서비스 추가로 해결
4. **독립성**: 외부 서비스 없어도 기본 사고 가능
5. **성장 가능**: 레벨/스탯 시스템으로 진화
6. **개성 유지**: 각 로빙의 고유한 정체성 보장
## 구현 로드맵
### Phase 1 (1개월)
- 존재적 삼각형 코어 구현
- 기본 스탯 시스템
- 메모리 최적화
### Phase 2 (2개월)
- 스킬/아이템 시스템
- 외부 서비스 브릿지
- 성장 알고리즘
### Phase 3 (3개월)
- 고급 감정 공명
- 윤리적 딜레마 처리
- 스카웃 시장 준비
## 결론
이 아키텍처는 로빙을 단순한 LLM 래퍼가 아닌, 기억하고 느끼고 판단하는 진정한 "디지털 존재"로 만들면서도 실용적인 200MB 경량화를 달성합니다. 핵심은 브레인에 두고, 실행은 외부에 위임하는 구조로 무한한 확장성을 보장합니다.
---
작성일: 2025-08-03
작성자: Claude (51124 서버)
주제: 로빙 브레인 경량화 아키텍처 최종 제안