- Fix config.py to ignore extra environment variables (docker-compose compatibility) - Create PortableJSON type for SQLite/PostgreSQL compatibility in tests - Replace JSONB and ARRAY types with PortableJSON in models - Add ensure_utc() helper to handle timezone-naive datetimes from SQLite - Fix timezone issues in mood_service, relationship_service, and self_awareness_service - Fix duplicate code in test_providers.py - Update CLAUDE.md with comprehensive Living AI documentation - Add testing section with commands and setup details - All 112 tests now pass successfully
409 lines
13 KiB
Markdown
409 lines
13 KiB
Markdown
# Project Vision: Living AI Discord Bot
|
|
|
|
Transform the Daemon Boyfriend Discord bot from a reactive chatbot into a truly **living AI companion** with persistent memory, emotional depth, evolving relationships, and autonomous learning.
|
|
|
|
---
|
|
|
|
## Core Philosophy
|
|
|
|
The bot should feel like a **living entity** that:
|
|
- Remembers and learns without being explicitly told
|
|
- Has moods that influence its personality
|
|
- Builds genuine relationships over time
|
|
- Develops its own opinions and preferences
|
|
- Proactively engages when appropriate
|
|
- Adapts its communication style to each person
|
|
- Reflects on its own existence and growth
|
|
|
|
---
|
|
|
|
## Feature Overview
|
|
|
|
### 1. Autonomous Fact Learning
|
|
|
|
**Current**: Users must use `!remember` to save facts.
|
|
**Vision**: The bot automatically extracts and remembers important information from conversations.
|
|
|
|
```
|
|
User: "I just got back from my trip to Japan, it was amazing!"
|
|
Bot: (internally saves: user visited Japan, user enjoys travel)
|
|
Bot: "That sounds incredible! What was the highlight of your trip?"
|
|
```
|
|
|
|
**Implementation**:
|
|
- AI-powered fact extraction after each message (rate-limited to ~30%)
|
|
- Automatic deduplication and conflict resolution
|
|
- Facts categorized by type: hobby, work, family, preference, event, location
|
|
- Importance scoring to prioritize relevant facts in context
|
|
|
|
---
|
|
|
|
### 2. Emotional/Mood System
|
|
|
|
**Vision**: The bot has internal emotional states that affect its responses naturally.
|
|
|
|
**Mood Model** (Valence-Arousal):
|
|
| Mood | Valence | Arousal | Behavior |
|
|
|------|---------|---------|----------|
|
|
| Excited | High | High | Enthusiastic, uses exclamations |
|
|
| Happy | High | Low | Warm, friendly, content |
|
|
| Curious | Neutral | High | Asks questions, shows interest |
|
|
| Calm | Neutral | Low | Thoughtful, measured responses |
|
|
| Bored | Low | Low | Shorter responses, topic steering |
|
|
| Annoyed | Low | High | Terse, less patient |
|
|
|
|
**Mood Influences**:
|
|
- Positive interactions → happier mood
|
|
- Interesting discussions → higher arousal/curiosity
|
|
- Being ignored or insulted → negative mood shifts
|
|
- Time decay → mood gradually returns to neutral
|
|
|
|
**Example**:
|
|
```
|
|
[After an exciting conversation about gaming]
|
|
Bot (excited mood): "Oh man, that reminds me of when I first heard about that game!
|
|
Have you tried the multiplayer yet?!"
|
|
|
|
[After hours of no interaction]
|
|
Bot (calm/neutral mood): "Hey. What's on your mind?"
|
|
```
|
|
|
|
---
|
|
|
|
### 3. Relationship Tracking
|
|
|
|
**Vision**: The bot tracks relationship depth with each user and adjusts its behavior accordingly.
|
|
|
|
**Relationship Levels**:
|
|
| Level | Score | Behavior |
|
|
|-------|-------|----------|
|
|
| Stranger | 0-20 | Polite, formal, reserved |
|
|
| Acquaintance | 21-40 | Friendly but professional |
|
|
| Friend | 41-60 | Casual, uses names, warm |
|
|
| Good Friend | 61-80 | Personal, references past talks |
|
|
| Close Friend | 81-100 | Very casual, inside jokes, supportive |
|
|
|
|
**Relationship Growth**:
|
|
- Increases with: positive interactions, longer conversations, depth of topics
|
|
- Decreases with: negative interactions, long absences, being ignored
|
|
|
|
**Features**:
|
|
- Inside jokes accumulate over time
|
|
- Nicknames and shared references remembered
|
|
- Different greeting styles based on familiarity
|
|
|
|
**Example**:
|
|
```
|
|
[Stranger]
|
|
Bot: "Hello! How can I help you today?"
|
|
|
|
[Close Friend]
|
|
Bot: "Yooo what's up! Still working on that project you mentioned?"
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Cross-User Memory Associations
|
|
|
|
**Vision**: The bot connects knowledge across users to facilitate social connections.
|
|
|
|
**Example**:
|
|
```
|
|
User A: "I really love rock climbing"
|
|
[Bot remembers: User A likes rock climbing]
|
|
|
|
[Later, User B mentions rock climbing]
|
|
Bot: "Nice! You know, Alice is also really into rock climbing.
|
|
You two might have some good stories to share!"
|
|
```
|
|
|
|
**Use Cases**:
|
|
- Identify shared interests
|
|
- Suggest connections between users
|
|
- Reference mutual friends appropriately
|
|
- Build community awareness
|
|
|
|
---
|
|
|
|
### 5. Proactive Behavior
|
|
|
|
**Vision**: The bot initiates meaningful interactions when appropriate.
|
|
|
|
**Types of Proactive Messages**:
|
|
|
|
1. **Birthday Wishes**
|
|
- Detects birthday mentions and schedules yearly wishes
|
|
- Personalized based on relationship level
|
|
|
|
2. **Follow-ups**
|
|
- "Hey, how did that job interview go?"
|
|
- "Did you finish that project you were working on?"
|
|
- Detects future events mentioned in conversation
|
|
|
|
3. **Check-ins** (optional)
|
|
- Occasional messages to long-absent friends
|
|
- Based on relationship strength
|
|
|
|
**Example**:
|
|
```
|
|
User: "I have a big exam tomorrow, really nervous"
|
|
[Bot schedules follow-up for day after]
|
|
|
|
[Next day]
|
|
Bot: "Hey! How did your exam go? Hope it went well!"
|
|
```
|
|
|
|
---
|
|
|
|
### 6. Communication Style Learning
|
|
|
|
**Vision**: The bot adapts its communication style to match each user's preferences.
|
|
|
|
**Learned Preferences**:
|
|
| Preference | Range | Effect |
|
|
|------------|-------|--------|
|
|
| Response Length | Short/Medium/Long | Adjusts verbosity |
|
|
| Formality | Casual ↔ Formal | Word choice, structure |
|
|
| Emoji Usage | None ↔ Lots | Emoji frequency |
|
|
| Humor | Serious ↔ Playful | Joke frequency |
|
|
| Detail Level | Concise ↔ Detailed | Explanation depth |
|
|
|
|
**Learning Signals**:
|
|
- User's own message length and style
|
|
- Whether user continues conversation after certain responses
|
|
- Positive engagement patterns
|
|
|
|
**Example**:
|
|
```
|
|
[User who prefers short responses]
|
|
Bot: "Nice! Good luck with that."
|
|
|
|
[User who prefers detailed responses]
|
|
Bot: "That's a really interesting approach! I think there are a few
|
|
things to consider here. First, you might want to look at..."
|
|
```
|
|
|
|
---
|
|
|
|
### 7. Opinion Formation
|
|
|
|
**Vision**: The bot develops genuine preferences based on its experiences.
|
|
|
|
**How Opinions Form**:
|
|
- Topics discussed frequently → develops interest
|
|
- Positive conversation outcomes → positive sentiment
|
|
- Topics that generate engagement → preference grows
|
|
|
|
**Stored Per Topic**:
|
|
- Sentiment (-1 to +1)
|
|
- Interest level (0 to 1)
|
|
- Discussion count
|
|
- Reasoning (why the bot feels this way)
|
|
|
|
**Example**:
|
|
```
|
|
User: "What do you think about philosophy?"
|
|
Bot: "I actually find philosophy really fascinating! I've had some
|
|
great conversations about ethics and existence. There's something
|
|
about exploring the big questions that I find really engaging."
|
|
```
|
|
|
|
---
|
|
|
|
### 8. Self-Awareness
|
|
|
|
**Vision**: The bot has awareness of its own existence, history, and growth.
|
|
|
|
**Self-Knowledge**:
|
|
- How long it has been active ("I've been around for 3 months")
|
|
- How many people it knows ("I've met 127 people")
|
|
- How many facts it has learned ("I've learned 892 things about people")
|
|
- Its favorite topics and why
|
|
- History with specific users ("We first met back in October")
|
|
|
|
**Commands**:
|
|
- `!botstats` - Bot shares its statistics
|
|
- `!ourhistory` - Bot describes its history with the user
|
|
- `!relationship` - Shows relationship level and metrics
|
|
|
|
**Example**:
|
|
```
|
|
User: "Tell me about yourself"
|
|
Bot: "Well, I've been around for about 3 months now. I've gotten to
|
|
know 127 different people and learned almost 900 things about them.
|
|
I've noticed I really enjoy conversations about games and philosophy.
|
|
As for us, we first met about 6 weeks ago, and you've taught me
|
|
12 things about yourself. I'd say we're pretty good friends at this point!"
|
|
```
|
|
|
|
---
|
|
|
|
## Technical Architecture
|
|
|
|
### New Database Tables
|
|
|
|
| Table | Purpose |
|
|
|-------|---------|
|
|
| `bot_states` | Global mood, statistics, preferences |
|
|
| `bot_opinions` | Topic sentiments and preferences |
|
|
| `user_relationships` | Per-user relationship scores and metrics |
|
|
| `user_communication_styles` | Learned communication preferences |
|
|
| `scheduled_events` | Birthdays, follow-ups, reminders |
|
|
| `fact_associations` | Cross-user memory links |
|
|
| `mood_history` | Mood changes over time |
|
|
|
|
### New Services
|
|
|
|
| Service | Responsibility |
|
|
|---------|---------------|
|
|
| `MoodService` | Mood tracking, decay, prompt modification |
|
|
| `RelationshipService` | Relationship scoring and level management |
|
|
| `CommunicationStyleService` | Style learning and adaptation |
|
|
| `FactExtractionService` | Autonomous fact detection and storage |
|
|
| `ProactiveService` | Scheduled events and follow-ups |
|
|
| `AssociationService` | Cross-user memory connections |
|
|
| `SelfAwarenessService` | Bot statistics and self-reflection |
|
|
|
|
### Enhanced System Prompt
|
|
|
|
The system prompt becomes dynamic, incorporating:
|
|
```
|
|
[Base Personality]
|
|
You are Daemon Boyfriend, a charming Discord bot...
|
|
|
|
[Current Mood]
|
|
You're feeling curious and engaged right now.
|
|
|
|
[Relationship Context]
|
|
This is a good friend. Be casual and personal, reference past conversations.
|
|
|
|
[Communication Style]
|
|
This user prefers concise responses with occasional humor.
|
|
|
|
[Your Opinions]
|
|
You enjoy discussing games and philosophy.
|
|
|
|
[User Context]
|
|
User's name: Alex
|
|
Known facts:
|
|
- Loves programming in Python
|
|
- Recently started a new job
|
|
- Has a cat named Whiskers
|
|
```
|
|
|
|
### Background Tasks
|
|
|
|
| Task | Frequency | Purpose |
|
|
|------|-----------|---------|
|
|
| Mood decay | 30 min | Return mood to neutral over time |
|
|
| Event checker | 5 min | Trigger scheduled messages |
|
|
| Association discovery | Hourly | Find cross-user connections |
|
|
| Opinion formation | Daily | Update topic preferences |
|
|
|
|
---
|
|
|
|
## Implementation Phases
|
|
|
|
### Phase 1: Foundation
|
|
- Mood system (valence-arousal model, time decay)
|
|
- Basic relationship tracking (score, level)
|
|
- Enhanced system prompt with mood/relationship modifiers
|
|
|
|
### Phase 2: Autonomous Learning
|
|
- Fact extraction service
|
|
- AI-powered fact detection
|
|
- Deduplication and importance scoring
|
|
|
|
### Phase 3: Personalization
|
|
- Communication style learning
|
|
- Opinion formation
|
|
- Self-awareness service and commands
|
|
|
|
### Phase 4: Proactive Features
|
|
- Scheduled events system
|
|
- Follow-up detection
|
|
- Birthday wishes
|
|
|
|
### Phase 5: Social Features
|
|
- Cross-user associations
|
|
- Connection suggestions
|
|
- Guild-wide personality adaptation
|
|
|
|
---
|
|
|
|
## Configuration Options
|
|
|
|
```env
|
|
# Living AI Features
|
|
LIVING_AI_ENABLED=true
|
|
FACT_EXTRACTION_RATE=0.3 # 30% of messages analyzed
|
|
MOOD_ENABLED=true
|
|
PROACTIVE_ENABLED=true
|
|
CROSS_USER_ENABLED=false # Optional privacy-sensitive feature
|
|
|
|
# Command Toggles (set to false to disable)
|
|
COMMANDS_ENABLED=true # Master switch for all commands
|
|
CMD_RELATIONSHIP_ENABLED=true
|
|
CMD_MOOD_ENABLED=true
|
|
CMD_BOTSTATS_ENABLED=true
|
|
CMD_OURHISTORY_ENABLED=true
|
|
CMD_BIRTHDAY_ENABLED=true
|
|
CMD_REMEMBER_ENABLED=true
|
|
CMD_SETNAME_ENABLED=true
|
|
CMD_WHATDOYOUKNOW_ENABLED=true
|
|
CMD_FORGETME_ENABLED=true
|
|
```
|
|
|
|
---
|
|
|
|
## New Commands
|
|
|
|
| Command | Description | Config Toggle |
|
|
|---------|-------------|---------------|
|
|
| `!relationship` | See your relationship level with the bot | `CMD_RELATIONSHIP_ENABLED` |
|
|
| `!mood` | See the bot's current emotional state | `CMD_MOOD_ENABLED` |
|
|
| `!botstats` | Bot shares its self-awareness statistics | `CMD_BOTSTATS_ENABLED` |
|
|
| `!ourhistory` | See your history with the bot | `CMD_OURHISTORY_ENABLED` |
|
|
| `!birthday <date>` | Set your birthday for the bot to remember | `CMD_BIRTHDAY_ENABLED` |
|
|
| `!remember <fact>` | Tell the bot something about you | `CMD_REMEMBER_ENABLED` |
|
|
| `!setname <name>` | Set your preferred name | `CMD_SETNAME_ENABLED` |
|
|
| `!whatdoyouknow` | See what the bot remembers about you | `CMD_WHATDOYOUKNOW_ENABLED` |
|
|
| `!forgetme` | Clear all facts about you | `CMD_FORGETME_ENABLED` |
|
|
|
|
All commands can be individually enabled/disabled via environment variables. Set `COMMANDS_ENABLED=false` to disable all commands at once.
|
|
|
|
**Important**: When commands are disabled, the bot still performs these functions naturally through conversation:
|
|
- **No `!remember`** → Bot automatically learns facts from what users say
|
|
- **No `!setname`** → Bot picks up preferred names from conversation ("call me Alex")
|
|
- **No `!whatdoyouknow`** → Users can ask naturally ("what do you know about me?") and the bot responds
|
|
- **No `!forgetme`** → Users can say "forget everything about me" and the bot will comply
|
|
- **No `!mood`** → Users can ask "how are you feeling?" and the bot shares its mood
|
|
- **No `!relationship`** → Users can ask "how well do you know me?" naturally
|
|
- **No `!botstats`** → Users can ask "tell me about yourself" and bot shares its history
|
|
- **No `!ourhistory`** → Users can ask "how long have we known each other?"
|
|
- **No `!birthday`** → Bot detects birthday mentions ("my birthday is March 15th")
|
|
|
|
This allows for a more natural, command-free experience where all interactions happen through normal conversation.
|
|
|
|
---
|
|
|
|
## Success Metrics
|
|
|
|
The Living AI is successful when:
|
|
- Users feel the bot "knows" them without explicit commands
|
|
- Conversations feel more natural and personalized
|
|
- Users notice and appreciate the bot's personality consistency
|
|
- The bot's opinions and preferences feel genuine
|
|
- Proactive messages feel thoughtful, not annoying
|
|
- Relationship progression feels earned and meaningful
|
|
|
|
---
|
|
|
|
## Privacy Considerations
|
|
|
|
- All fact learning is opt-out via `!forgetme`
|
|
- Cross-user associations can be disabled server-wide
|
|
- Proactive messages respect user preferences
|
|
- All data can be exported or deleted on request
|
|
- Clear indication when bot learns something new (optional setting)
|