- 비전 및 철학: 존재형 AI 에이전트 개념 - 윤리 원칙과 안전 기준 - 사용자 시나리오 및 유즈케이스 - 게임화 요소 (레벨업, 스탯, 스킬) - 기술 아키텍처 (기억 시스템, 감정 모델, DB 설계) - 멀티 에이전트 협업 구조 - DID 기반 신원 체계 - 장기 로드맵 (1년, 3년 비전)
14 KiB
14 KiB
장기/단기 기억 저장 포맷과 경계 조건
메모리 아키텍처 개요
3단계 기억 시스템
class MemoryArchitecture:
def __init__(self):
self.sensory_memory = SensoryMemory(capacity=1000, duration_ms=500)
self.short_term_memory = ShortTermMemory(capacity=7, duration_min=30)
self.long_term_memory = LongTermMemory(capacity=float('inf'))
# 메모리 간 전이 임계값
self.stm_to_ltm_threshold = {
'repetition_count': 3,
'importance_score': 0.7,
'emotional_weight': 0.8,
'time_in_stm': 300 # seconds
}
단기 기억 (Short-Term Memory) 포맷
STM 데이터 구조
{
"stm_entry": {
"id": "stm_20250818_143052_001",
"timestamp": "2025-08-18T14:30:52.123Z",
"content": {
"raw_input": "사용자가 내일 오후 3시 투자 미팅 언급",
"processed": {
"intent": "schedule_meeting",
"entities": {
"date": "2025-08-19",
"time": "15:00",
"type": "investment_meeting"
}
}
},
"context": {
"conversation_id": "conv_892734",
"user_state": "busy",
"priority": "high"
},
"metadata": {
"access_count": 2,
"last_accessed": "2025-08-18T14:31:15.000Z",
"decay_factor": 0.85,
"consolidation_score": 0.4
},
"encoding": {
"vector": [0.23, -0.45, 0.67, ...], // 768차원
"attention_weights": [0.8, 0.6, 0.3, ...]
}
}
}
STM 관리 알고리즘
class ShortTermMemory:
def __init__(self, capacity=7):
self.capacity = capacity
self.buffer = deque(maxlen=capacity)
self.rehearsal_buffer = []
def add_memory(self, item):
"""Miller의 마법의 숫자 7±2 규칙 적용"""
if len(self.buffer) >= self.capacity:
# 가장 오래된 또는 가장 약한 기억 제거
weakest = self.find_weakest_memory()
self.buffer.remove(weakest)
# 제거된 기억 중 중요한 것은 LTM으로 전송
if self.should_consolidate(weakest):
self.consolidate_to_ltm(weakest)
self.buffer.append(item)
def chunking(self, items):
"""청킹을 통한 용량 확장"""
chunk = {
'type': 'chunk',
'items': items,
'pattern': self.detect_pattern(items),
'compressed': True
}
return chunk
def rehearsal_loop(self):
"""시연을 통한 기억 유지"""
for item in self.rehearsal_buffer:
item['rehearsal_count'] += 1
item['decay_factor'] *= 1.1 # 감쇠 지연
장기 기억 (Long-Term Memory) 포맷
LTM 계층 구조
long_term_memory:
episodic: # 일화 기억
structure:
- event_id: "ep_20250815_001"
what: "첫 투자 미팅 성공"
when: "2025-08-15T10:00:00Z"
where: "강남 투자사 사무실"
who: ["user", "investor_kim"]
emotion: "excitement"
significance: 0.95
semantic: # 의미 기억
structure:
- concept_id: "sem_investment_001"
knowledge: "Series A는 보통 10-50억 규모"
relations:
- "linked_to": "venture_capital"
- "prerequisite": "seed_funding"
confidence: 0.88
source: "learned_from_experience"
procedural: # 절차 기억
structure:
- skill_id: "proc_email_001"
procedure: "investment_email_template"
steps:
- "greeting"
- "context_reminder"
- "main_content"
- "call_to_action"
- "signature"
success_rate: 0.92
working: # 작업 기억
structure:
- task_id: "work_current_001"
active_goals: ["complete_presentation", "schedule_meeting"]
temporary_bindings:
"presentation": "investor_deck_v3"
"meeting_slot": "tomorrow_3pm"
LTM 저장 포맷 상세
class LongTermMemoryFormat:
def __init__(self):
self.schema_version = "1.0.0"
def create_episodic_memory(self, event):
return {
"type": "episodic",
"id": self.generate_id("ep"),
"timestamp": event.timestamp,
"duration": event.duration,
# 핵심 정보
"content": {
"narrative": event.description,
"key_moments": event.highlights,
"outcome": event.result
},
# 맥락 정보
"context": {
"spatial": {
"location": event.location,
"environment": event.environment_desc
},
"temporal": {
"absolute_time": event.datetime,
"relative_time": event.time_from_now,
"sequence_position": event.order_in_day
},
"social": {
"participants": event.people,
"relationships": event.social_dynamics
}
},
# 감정 태그
"emotional_encoding": {
"valence": event.emotional_valence, # -1 to 1
"arousal": event.emotional_arousal, # 0 to 1
"dominance": event.emotional_dominance, # 0 to 1
"discrete_emotions": event.emotion_labels
},
# 연결 정보
"associations": {
"causes": event.antecedents,
"effects": event.consequences,
"similar_events": event.similar_episodes,
"semantic_links": event.related_concepts
},
# 메타데이터
"metadata": {
"importance": event.importance_score,
"vividness": event.detail_level,
"confidence": event.memory_confidence,
"last_recalled": event.last_access_time,
"recall_count": event.access_count,
"consolidation_state": "distributed"
},
# 인코딩
"encoding": {
"embedding_vector": event.vector_representation,
"compression_level": event.compression_ratio,
"storage_location": "hippocampus" # 또는 "neocortex"
}
}
def create_semantic_memory(self, concept):
return {
"type": "semantic",
"id": self.generate_id("sem"),
# 개념 정보
"concept": {
"term": concept.name,
"definition": concept.definition,
"category": concept.category,
"abstraction_level": concept.abstraction # 1-5
},
# 관계 네트워크
"relations": {
"is_a": concept.superclasses,
"has_a": concept.components,
"part_of": concept.containers,
"similar_to": concept.similar_concepts,
"opposite_of": concept.antonyms,
"causes": concept.causal_relations,
"used_for": concept.functions
},
# 속성
"attributes": {
"properties": concept.properties,
"constraints": concept.constraints,
"typical_values": concept.defaults
},
# 예시와 반례
"examples": {
"positive": concept.positive_examples,
"negative": concept.negative_examples,
"edge_cases": concept.boundary_cases
},
# 학습 정보
"learning": {
"acquisition_date": concept.learned_date,
"source": concept.learning_source,
"reinforcement_history": concept.practice_log,
"mastery_level": concept.understanding_score
}
}
메모리 전이 메커니즘
STM → LTM 전이 조건
class MemoryConsolidation:
def __init__(self):
self.consolidation_queue = []
def evaluate_for_consolidation(self, stm_item):
"""단기→장기 기억 전이 평가"""
scores = {
'repetition': self.calculate_repetition_score(stm_item),
'importance': self.calculate_importance_score(stm_item),
'emotion': self.calculate_emotional_weight(stm_item),
'association': self.calculate_association_strength(stm_item),
'utility': self.predict_future_utility(stm_item)
}
# 가중 평균
weights = {
'repetition': 0.2,
'importance': 0.3,
'emotion': 0.2,
'association': 0.15,
'utility': 0.15
}
total_score = sum(scores[k] * weights[k] for k in scores)
return total_score > 0.65 # 임계값 초과 시 전이
def consolidate(self, stm_item):
"""실제 consolidation 프로세스"""
# 1. 압축 및 추상화
compressed = self.compress_information(stm_item)
# 2. 기존 지식과 통합
integrated = self.integrate_with_existing(compressed)
# 3. 다중 인코딩
encoded = {
'verbal': self.verbal_encoding(integrated),
'visual': self.visual_encoding(integrated),
'spatial': self.spatial_encoding(integrated),
'temporal': self.temporal_encoding(integrated)
}
# 4. 분산 저장
ltm_entry = self.distribute_storage(encoded)
return ltm_entry
def synaptic_consolidation(self, memory):
"""시냅스 수준 강화 (처음 몇 시간)"""
memory['synaptic_strength'] *= 1.5
memory['protein_synthesis'] = True
return memory
def systems_consolidation(self, memory):
"""시스템 수준 강화 (며칠-몇 년)"""
# 해마에서 신피질로 점진적 이동
if memory['age_days'] > 30:
memory['storage_location'] = 'neocortex'
memory['hippocampus_dependency'] *= 0.8
return memory
경계 조건 정의
메모리 타입 간 경계
class MemoryBoundaries:
@staticmethod
def stm_ltm_boundary():
"""STM-LTM 경계 조건"""
return {
'temporal': {
'min_duration': 30, # seconds
'max_duration': 1800 # 30 minutes
},
'capacity': {
'stm_max': 9, # 7±2 items
'chunked_max': 5 # chunks
},
'consolidation_triggers': [
'sleep_cycle',
'repetition_threshold',
'emotional_peak',
'explicit_save_command'
]
}
@staticmethod
def episodic_semantic_boundary():
"""일화-의미 기억 경계"""
return {
'abstraction_level': 3, # 1-5 scale
'context_dependency': 0.5, # 0-1 scale
'generalization_degree': 0.7,
'personal_relevance': 0.3
}
@staticmethod
def working_ltm_boundary():
"""작업-장기 기억 경계"""
return {
'active_maintenance': True,
'task_relevance': 1.0,
'temporal_scope': 'current_session',
'update_frequency': 'real_time'
}
저장 최적화 전략
계층적 저장 구조
class HierarchicalStorage:
def __init__(self):
self.storage_tiers = {
'hot': { # 자주 접근
'medium': 'RAM',
'format': 'uncompressed',
'index': 'hash_table'
},
'warm': { # 가끔 접근
'medium': 'SSD',
'format': 'lightly_compressed',
'index': 'b_tree'
},
'cold': { # 드물게 접근
'medium': 'HDD',
'format': 'heavily_compressed',
'index': 'bloom_filter'
},
'archive': { # 거의 접근 안함
'medium': 'cloud',
'format': 'maximum_compression',
'index': 'metadata_only'
}
}
def auto_tiering(self, memory_item):
"""접근 패턴에 따른 자동 계층 이동"""
access_frequency = memory_item['access_count'] / memory_item['age_days']
if access_frequency > 10:
return 'hot'
elif access_frequency > 1:
return 'warm'
elif access_frequency > 0.1:
return 'cold'
else:
return 'archive'
압축 포맷
class MemoryCompression:
def compress_episodic(self, memory):
"""일화 기억 압축"""
return {
'gist': self.extract_gist(memory), # 핵심만
'key_frames': self.extract_keyframes(memory), # 중요 순간
'emotional_peaks': self.extract_emotions(memory),
'causal_chain': self.extract_causality(memory)
}
def compress_semantic(self, memory):
"""의미 기억 압축"""
return {
'prototype': self.extract_prototype(memory),
'distinguishing_features': self.extract_unique(memory),
'hierarchical_position': self.find_taxonomy(memory)
}
메모리 인덱싱
다차원 인덱스 구조
-- 메모리 검색을 위한 인덱스 구조
CREATE TABLE memory_index (
memory_id UUID PRIMARY KEY,
memory_type ENUM('stm', 'episodic', 'semantic', 'procedural'),
timestamp TIMESTAMP,
-- 내용 인덱스
content_hash VARCHAR(64),
embedding_vector VECTOR(768),
-- 시간 인덱스
temporal_position INTEGER,
temporal_context VARCHAR(255),
-- 연관 인덱스
association_graph JSONB,
semantic_tags TEXT[],
-- 접근 패턴
access_count INTEGER DEFAULT 0,
last_accessed TIMESTAMP,
importance_score FLOAT,
-- 인덱스
INDEX idx_temporal (timestamp, temporal_position),
INDEX idx_semantic (semantic_tags),
INDEX idx_importance (importance_score DESC),
INDEX idx_vector (embedding_vector) USING ivfflat
);