botserver/docs/src/chapter-05/keyword-remember.md

259 lines
5.8 KiB
Markdown
Raw Normal View History

2025-11-22 16:12:32 -03:00
# REMEMBER
Store information in bot's long-term memory for future conversations.
## Syntax
```basic
REMEMBER key, value
```
## Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| `key` | String | Memory key/identifier |
| `value` | String | Information to remember |
## Description
The `REMEMBER` keyword stores information persistently across conversations. Unlike session variables that expire, remembered data persists:
- Across multiple conversations
- Between user sessions
- After bot restarts
- Indefinitely until explicitly forgotten
This enables bots to build user profiles, track preferences, and maintain context over time.
## Examples
### Store User Preferences
```basic
name = HEAR "What's your name?"
REMEMBER "user_name", name
TALK "Nice to meet you, " + name + ". I'll remember that!"
```
### Remember User Choices
```basic
language = HEAR "Preferred language? (English/Spanish/French)"
REMEMBER "preferred_language", language
TALK "I'll communicate in " + language + " from now on"
```
### Build User Profile
```basic
REMEMBER "signup_date", TODAY()
REMEMBER "user_tier", "premium"
REMEMBER "last_contact", NOW()
REMEMBER "interaction_count", interaction_count + 1
```
### Store Complex Information
```basic
' Store JSON-like data
preferences = "{theme: 'dark', notifications: true, timezone: 'EST'}"
REMEMBER "user_preferences", preferences
' Store lists
interests = "technology, science, sports"
REMEMBER "interests", interests
```
## Retrieval
Use `RECALL` to retrieve remembered information:
```basic
' In a future conversation
name = RECALL("user_name")
IF name != "" THEN
TALK "Welcome back, " + name + "!"
ELSE
TALK "Hello! I don't think we've met before."
END IF
```
## Memory Scope
Memories are scoped by:
- User ID (each user has separate memory)
- Bot ID (memories don't cross bots)
- Optional namespace (for organizing memories)
## Memory Management
### List All Memories
```basic
memories = GET_ALL_MEMORIES()
FOR EACH memory IN memories
PRINT memory.key + ": " + memory.value
NEXT
```
### Forget Specific Memory
```basic
FORGET "temporary_data"
```
### Clear All Memories
```basic
CLEAR_ALL_MEMORIES()
TALK "Memory wiped clean!"
```
### Memory with Expiration
```basic
' Remember for 30 days
REMEMBER_TEMP "trial_status", "active", 30
```
## Use Cases
### Customer Service
```basic
' Remember customer issues
issue = HEAR "What problem are you experiencing?"
REMEMBER "last_issue", issue
REMEMBER "issue_date", TODAY()
' In follow-up conversation
last_issue = RECALL("last_issue")
IF last_issue != "" THEN
TALK "Following up on your issue: " + last_issue
END IF
```
### Personal Assistant
```basic
' Remember important dates
birthday = HEAR "When is your birthday?"
REMEMBER "birthday", birthday
' Check on birthday
IF TODAY() = RECALL("birthday") THEN
TALK "Happy Birthday! 🎉"
END IF
```
### Learning System
```basic
' Track user corrections
correction = HEAR "Actually, that's not correct..."
REMEMBER "correction_" + topic, correction
corrections_count = RECALL("total_corrections") + 1
REMEMBER "total_corrections", corrections_count
```
### Preferences Tracking
```basic
' Remember communication preferences
IF time_of_day = "morning" AND response_time < 5 THEN
REMEMBER "active_time", "morning"
END IF
preferred_channel = GET_CHANNEL()
REMEMBER "preferred_channel", preferred_channel
```
## Performance Considerations
- Memories are indexed for fast retrieval
- Large values (>1MB) should be stored as files
- Frequently accessed memories are cached
- Memory operations are asynchronous
## Privacy and Security
### Data Protection
- Memories are encrypted at rest
- PII should be marked as sensitive
- Comply with data retention policies
- Support user data deletion requests
### GDPR Compliance
```basic
' Allow users to export their data
IF request = "export_my_data" THEN
data = EXPORT_USER_MEMORIES()
SEND_MAIL user_email, "Your Data", data
END IF
' Allow users to delete their data
IF request = "forget_me" THEN
DELETE_USER_MEMORIES()
TALK "Your data has been deleted"
END IF
```
## Best Practices
1. **Use descriptive keys**: Make memory keys self-documenting
2. **Validate before storing**: Check data quality
3. **Handle missing memories**: Always check if memory exists
4. **Organize with namespaces**: Group related memories
5. **Clean up old data**: Remove outdated memories
6. **Respect privacy**: Ask permission for sensitive data
7. **Document memories**: Keep track of what's stored
## Advanced Features
### Structured Memory
```basic
' Store structured data
user_profile = CREATE_MAP()
user_profile["name"] = name
user_profile["age"] = age
user_profile["interests"] = interests
REMEMBER "profile", JSON_STRINGIFY(user_profile)
' Retrieve and parse
profile_json = RECALL("profile")
profile = JSON_PARSE(profile_json)
```
### Memory Search
```basic
' Search memories by pattern
matching_memories = SEARCH_MEMORIES("pref_*")
FOR EACH mem IN matching_memories
PRINT mem.key + ": " + mem.value
NEXT
```
### Memory Analytics
```basic
' Track memory usage
stats = GET_MEMORY_STATS()
PRINT "Total memories: " + stats.count
PRINT "Storage used: " + stats.size_mb + "MB"
PRINT "Oldest memory: " + stats.oldest_date
```
## Error Handling
```basic
TRY
REMEMBER "important_data", data
CATCH "storage_full"
' Clean up old memories
DELETE_OLD_MEMORIES(30) ' Delete memories older than 30 days
RETRY
CATCH "invalid_data"
LOG "Cannot store invalid data"
END TRY
```
## Related Keywords
- [GET_BOT_MEMORY](./keyword-get-bot-memory.md) - Session-scoped memory
- [SET_BOT_MEMORY](./keyword-set-bot-memory.md) - Temporary memory
- [SET_USER](./keyword-set-user.md) - Set user context
- [SET_CONTEXT](./keyword-set-context.md) - Set conversation context
## Implementation
Located in `src/basic/keywords/remember.rs`
Uses persistent storage (PostgreSQL) with caching layer (Redis) for performance.