5.4 KiB
5.4 KiB
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:
-
Persona.java(Enum Enhancement):- Add
JUDITE(SAC/Telemarketing persona) andNARRADOR(Fantasy narrator). - Add
displayTag()(e.g. "Judite", "Zoeiro", "Amigão") andtagColor()(AdventureNamedTextColor). - Add persona-specific system prompts while maintaining the security invariant (
GUARD).
- Add
-
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.) ornull(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).
- Selected persona (
- Provides sliding-window compression: auto-condenses turns when memory exceeds thresholds.
- Manages
-
Tools.java(Expanded Function Calling):- Add
lugares_jogadorfunction: fetches recent deaths fromDeathLog, saved coordinates fromNotes, and current biome/world. - Update definitions JSON to make the tool discoverable to the LLM.
- Add
-
Ai.java(Orchestrator Updates):- Integrate
PlayerMemory. - Resolve effective persona per player (
playerMemory.persona(player)-> fallbacksettings.aiPersona()). - In
compose(): inject effective persona tone +playerMemory.formatContext(player)+ location summary. - In
deliver()andstyle(): render dynamic tagMsg.tag(persona.displayTag(), persona.tagColor())instead of fixed[IA]. - Update
saySomething()to support persona-specific spontaneous events.
- Integrate
-
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 padraoto reset preference. - Add
/ia statusand/ia esquecer.
- Enhance
-
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)
- Player joins (
- Wire expanded event triggers into
2. File Touches
src/main/java/dev/marcospaulo/canalhandia/Persona.java— AddJUDITE,NARRADOR, tags, colors, and prompts.src/main/java/dev/marcospaulo/canalhandia/PlayerMemory.java— New class for persistent per-player memory & compression.src/main/java/dev/marcospaulo/canalhandia/Tools.java— Addlugares_jogadortool and integration withDeathLog&Notes.src/main/java/dev/marcospaulo/canalhandia/Ai.java— IntegratePlayerMemory, dynamic persona tags, prompt composition.src/main/java/dev/marcospaulo/canalhandia/CanalhandiaCommand.java— Subcommands for/ia persona,/ia status,/ia esquecer.src/main/java/dev/marcospaulo/canalhandia/Canalhandia.java— WirePlayerMemorylifecycle, expand event hooks.src/test/java/dev/marcospaulo/canalhandia/PersonaTest.java— Unit tests for personas, tags, and system prompts.src/test/java/dev/marcospaulo/canalhandia/PlayerMemoryTest.java— Unit tests for YAML storage, compression, and per-player state.src/test/java/dev/marcospaulo/canalhandia/ToolsTest.java— Unit tests forlugares_jogadorand 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
PlayerMemoryreads/writes under monitor; snapshot memory context as immutable strings on main thread before async dispatch.
- Mitigation: Synchronize all
- Risk: API costs from spontaneous event comments.
- Mitigation: All events remain strictly governed by
Budgetwith cooldown windows and hourly/daily spend limits.
- Mitigation: All events remain strictly governed by