85 lines
5.4 KiB
Markdown
85 lines
5.4 KiB
Markdown
# Plan: AI Multi-Personalities, Judite (SAC), Dynamic Tags, Persistent Memory & Event Expansion
|
|
|
|
## 1. Architecture & Component Design
|
|
|
|
```
|
|
┌───────────────────────────┐
|
|
│ CanalhandiaCommand │
|
|
│ (/ia, /iap, /ia persona) │
|
|
└─────────────┬─────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────┐ ┌──────────────┐ ┌────────────────────────┐
|
|
│ PlayerMemory │◄───────►│ Ai │◄───────►│ Tools / Wiki │
|
|
│ (ia-memoria.yml)│ │(Orchestrator)│ │ (lugares_jogador, etc.)│
|
|
└─────────────────┘ └──────┬───────┘ └────────────────────────┘
|
|
│
|
|
┌─────────────┴─────────────┐
|
|
│ MiniMax │
|
|
│ (HTTP / Tools / Chat) │
|
|
└───────────────────────────┘
|
|
```
|
|
|
|
### Components:
|
|
1. **`Persona.java` (Enum Enhancement):**
|
|
- Add `JUDITE` (SAC/Telemarketing persona) and `NARRADOR` (Fantasy narrator).
|
|
- Add `displayTag()` (e.g. "Judite", "Zoeiro", "Amigão") and `tagColor()` (Adventure `NamedTextColor`).
|
|
- Add persona-specific system prompts while maintaining the security invariant (`GUARD`).
|
|
|
|
2. **`PlayerMemory.java` (New Persistent Service):**
|
|
- Manages `plugins/Canalhandia/ia-memoria.yml`.
|
|
- Thread-safe, cached in-memory with disk persistence.
|
|
- Stores per-player:
|
|
- Selected persona (`judite`, `zoeiro`, etc.) or `null` (inherit server default).
|
|
- Persistent compressed summary of past conversations.
|
|
- List of key facts learned about the player (e.g., base coordinates, preferred building materials, fear of mobs).
|
|
- Provides sliding-window compression: auto-condenses turns when memory exceeds thresholds.
|
|
|
|
3. **`Tools.java` (Expanded Function Calling):**
|
|
- Add `lugares_jogador` function: fetches recent deaths from `DeathLog`, saved coordinates from `Notes`, and current biome/world.
|
|
- Update definitions JSON to make the tool discoverable to the LLM.
|
|
|
|
4. **`Ai.java` (Orchestrator Updates):**
|
|
- Integrate `PlayerMemory`.
|
|
- Resolve effective persona per player (`playerMemory.persona(player)` -> fallback `settings.aiPersona()`).
|
|
- In `compose()`: inject effective persona tone + `playerMemory.formatContext(player)` + location summary.
|
|
- In `deliver()` and `style()`: render dynamic tag `Msg.tag(persona.displayTag(), persona.tagColor())` instead of fixed `[IA]`.
|
|
- Update `saySomething()` to support persona-specific spontaneous events.
|
|
|
|
5. **`CanalhandiaCommand.java` (CLI & Interaction):**
|
|
- Enhance `/ia persona [nome]` to set per-player persona or list available personas with descriptions and click-to-select suggestions.
|
|
- Add `/ia persona padrao` to reset preference.
|
|
- Add `/ia status` and `/ia esquecer`.
|
|
|
|
6. **`Canalhandia.java` & Event Hooks (Event Expansion):**
|
|
- Wire expanded event triggers into `saySomething()`:
|
|
- Player joins (`aiWelcome`)
|
|
- Player death streaks / notable deaths (`onDeath`)
|
|
- Milestones & custom achievements (`onMilestone`)
|
|
- Raid and boss victories (`onBossDefeat`)
|
|
|
|
---
|
|
|
|
## 2. File Touches
|
|
|
|
1. `src/main/java/dev/marcospaulo/canalhandia/Persona.java` — Add `JUDITE`, `NARRADOR`, tags, colors, and prompts.
|
|
2. `src/main/java/dev/marcospaulo/canalhandia/PlayerMemory.java` — New class for persistent per-player memory & compression.
|
|
3. `src/main/java/dev/marcospaulo/canalhandia/Tools.java` — Add `lugares_jogador` tool and integration with `DeathLog` & `Notes`.
|
|
4. `src/main/java/dev/marcospaulo/canalhandia/Ai.java` — Integrate `PlayerMemory`, dynamic persona tags, prompt composition.
|
|
5. `src/main/java/dev/marcospaulo/canalhandia/CanalhandiaCommand.java` — Subcommands for `/ia persona`, `/ia status`, `/ia esquecer`.
|
|
6. `src/main/java/dev/marcospaulo/canalhandia/Canalhandia.java` — Wire `PlayerMemory` lifecycle, expand event hooks.
|
|
7. `src/test/java/dev/marcospaulo/canalhandia/PersonaTest.java` — Unit tests for personas, tags, and system prompts.
|
|
8. `src/test/java/dev/marcospaulo/canalhandia/PlayerMemoryTest.java` — Unit tests for YAML storage, compression, and per-player state.
|
|
9. `src/test/java/dev/marcospaulo/canalhandia/ToolsTest.java` — Unit tests for `lugares_jogador` and tool execution.
|
|
|
|
---
|
|
|
|
## 3. Risks & Mitigations
|
|
|
|
- **Risk:** Token context blowup from memory/chat history.
|
|
- *Mitigation:* Hard-cap memory summary length (max 300 chars) and max facts (max 5 items) per player.
|
|
- **Risk:** Thread safety when reading player memory in async AI tasks.
|
|
- *Mitigation:* Synchronize all `PlayerMemory` reads/writes under monitor; snapshot memory context as immutable strings on main thread before async dispatch.
|
|
- **Risk:** API costs from spontaneous event comments.
|
|
- *Mitigation:* All events remain strictly governed by `Budget` with cooldown windows and hourly/daily spend limits.
|