This commit is contained in:
2025-09-02 04:41:06 +02:00
parent 45eb2b8bc5
commit 793213a834
19 changed files with 955 additions and 805 deletions

180
docs/trait-system.md Normal file
View File

@@ -0,0 +1,180 @@
# Dynamic Trait Development System
An incremental personality development system that builds character traits from experiences and observations.
## 🎯 System Philosophy
Characters develop personality traits naturally through their experiences, rather than having fixed, predefined
personalities. This creates more realistic, evolving characters that feel genuinely shaped by their interactions.
## 🧬 Trait Structure
### CharacterTrait Data Model
```python
@dataclass
class CharacterTrait:
name: str # Single word (shy, romantic, studious)
strength: int # 1-10 intensity scale
description: str # How trait manifests behaviorally
updated: datetime # When last modified
```
### Integration with Character
```python
@dataclass
class Character:
# ... other fields ...
traits: List[CharacterTrait] = field(default_factory=list)
def has_trait(self, trait_name: str) -> bool
def get_trait(self, trait_name: str) -> Optional[CharacterTrait]
def get_trait_strength(self, trait_name: str) -> int
```
## 🔄 Incremental Development Process
### 1. Observation Analysis
When new memories are added, system analyzes trait impact:
```python
# Every new observation is evaluated
memory = await agent.add_observation("I felt nervous talking to Emma")
# System asks: Does this reveal or change personality traits?
# - Create new traits?
# - Strengthen existing traits?
# - Weaken contradicting traits?
# - No significant impact?
```
### 2. Trait Impact Assessment
Uses structured LLM analysis to determine changes:
**Input**: New observation + current trait list
**Output**: Specific trait updates with reasoning
```json
{
"trait_updates": [
{
"trait_name": "shy",
"action": "strengthen",
"new_strength": 8,
"description": "gets nervous in social interactions",
"reasoning": "felt nervous talking shows social anxiety"
}
]
}
```
### 3. Trait Updates Applied
- **Create**: New trait discovered from behavior
- **Strengthen**: Evidence reinforces existing trait (+1 strength)
- **Weaken**: Contradicting evidence reduces trait (-1 strength)
## 🎯 Design Principles
### Conservative Analysis
- **Avoid Over-Interpretation**: Single events rarely create major traits
- **Require Clear Evidence**: Traits must be obviously demonstrated
- **Skip Non-Behavioral**: Physical descriptions don't create personality traits
- **Focus on Patterns**: Look for consistent behavioral indicators
### Single-Word Traits
- **Simplicity**: Easy to understand and reference
- **Clarity**: Unambiguous personality descriptors
- **Consistency**: Standard vocabulary across characters
- **Examples**: shy, confident, romantic, studious, helpful, creative
### Evidence-Based Development
- **Every Change Justified**: All trait updates have clear reasoning
- **Observation-Driven**: Traits emerge from actual experiences
- **Gradual Evolution**: Strength changes incrementally over time
- **Realistic Growth**: Matches how real personality develops
## 🎪 Trait Impact on Behavior
### Behavioral Consistency
Characters with established traits should act accordingly:
- **High Shy (8/10)**: Avoids eye contact, speaks quietly, gets nervous
- **High Romantic (9/10)**: Focuses on attractive people, seeks connections
- **High Studious (7/10)**: Prioritizes learning, discusses academic topics
### Dynamic Responses
Traits influence how characters react to situations:
```python
# Character with "shy" trait (strength 8)
response = "I looked down at my hands and mumbled quietly..."
# Character with "confident" trait (strength 9)
response = "I smiled broadly and spoke up clearly..."
```
### Trait Interactions
Multiple traits create complex, realistic personalities:
- **Shy + Romantic**: Wants connection but too nervous to approach
- **Studious + Creative**: Academic pursuits with artistic expression
- **Helpful + Confident**: Takes charge to assist others
## 📊 Trait Analytics
### Personality Summaries
```python
# Get dominant traits
strong_traits = character.get_active_traits(min_strength=7)
# Returns: {shy: 8/10, romantic: 9/10, studious: 7/10}
# Generate personality description
summary = character.get_personality_summary()
# Returns: "shy (8/10), romantic (9/10), studious (7/10)"
```
### Trait Evolution Tracking
- **Strength Changes**: Monitor how traits develop over time
- **New Discoveries**: Track when traits first emerge
- **Behavioral Patterns**: Observe consistency between traits and actions
- **Character Growth**: See personality evolution through experiences
## 🎯 Benefits
### Realistic Development
- **Gradual Change**: Personality evolves naturally over time
- **Experience-Driven**: Traits emerge from actual interactions
- **Individual Variation**: Each character develops uniquely
- **Authentic Growth**: Matches real psychological development
### Improved Roleplay
- **Consistent Characters**: Behavior matches established personality
- **Dynamic Evolution**: Characters grow and change realistically
- **Rich Personalities**: Complex trait combinations create depth
- **Believable Responses**: Actions align with developed traits
### System Intelligence
- **Automatic Development**: No manual trait assignment needed
- **Evidence-Based**: Every trait justified by specific experiences
- **Scalable Growth**: Works across unlimited characters and interactions
- **Self-Improving**: Characters become more defined over time
This creates characters that feel genuinely alive and psychologically realistic, with personalities that develop
naturally from their experiences and relationships.