Files
agents_and_robots/dev/issues/completed/002-bot-memory.md
T
egutierrez f561f686c4 refactor: migrar tasks/ a dev/issues/ con estructura de desarrollo
Se mueve la documentación de issues/tasks de .claude/tasks/ a dev/issues/
para separar la planificación de desarrollo de la configuración de Claude.
Se añade dev/README.md como índice de la carpeta de desarrollo. Los issues
completados se mueven a dev/issues/completed/. Esto permite que dev/ sea
el punto central de documentación interna del proyecto.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:41:16 +00:00

2.7 KiB

Plan: Memoria para los bots

Objetivo

Que cada bot recuerde conversaciones anteriores, hechos importantes sobre usuarios y contexto de salas. Memoria a corto plazo (ventana de conversación) y largo plazo (SQLite persistente).

Estado: completado ✓


Tipos de memoria

1. Memoria de conversación (corto plazo)

  • Ventana deslizante de N mensajes por room
  • Se pasa como historial al LLM en cada llamada
  • Vive en RAM; se pierde al reiniciar (aceptable)

2. Memoria episódica (largo plazo)

  • Hechos extraídos de conversaciones: nombre del usuario, preferencias, eventos
  • Guardados en SQLite (agents/<id>/data/memory.db)
  • El LLM puede leer y escribir hechos mediante herramientas (remember, recall)

Diseño capa pura (pkg/memory/)

// Tipos puros — sin I/O
type Message struct {
    Role    string    // "user" | "assistant"
    Content string
    At      time.Time
}

type Fact struct {
    Subject string
    Key     string
    Value   string
    At      time.Time
}

// Ventana de conversación
type Window struct {
    RoomID   string
    Messages []Message
    MaxSize  int
}

func (w Window) Append(m Message) Window { ... }  // pura
func (w Window) ToLLMMessages() []llm.Message { ... }  // pura

Diseño capa shell (shell/memory/)

// Acceso a SQLite — impuro
type Store interface {
    SaveFact(ctx, agentID, fact) error
    GetFacts(ctx, agentID, subject) ([]Fact, error)
    GetHistory(ctx, agentID, roomID, limit) ([]Message, error)
    AppendMessage(ctx, agentID, roomID, msg) error
}

Herramientas LLM para memoria

  • remember(subject, key, value) — guardar un hecho
  • recall(subject, key) — recuperar hechos sobre alguien/algo
  • forget(subject, key) — borrar un hecho

Integración con el flujo actual

  1. agents/runtime.go mantiene un map[roomID]memory.Window en RAM
  2. Antes de llamar al LLM, inyectar historial de la ventana al request
  3. Después de la respuesta, hacer Append con el mensaje del bot
  4. Las herramientas remember/recall van al Store SQLite

Archivos a crear/modificar

  • pkg/memory/types.go — Message, Fact, Window (puros)
  • pkg/memory/window.go — operaciones sobre Window (puras)
  • shell/memory/sqlite_store.go — Store SQLite
  • shell/memory/migrations/001_init.sql — schema
  • agents/runtime.go — inyectar historial antes del LLM call
  • agents/<id>/agent.go — registrar herramientas remember/recall

Notas

  • Schema SQLite: tabla facts(agent_id, subject, key, value, updated_at), tabla messages(agent_id, room_id, role, content, created_at)
  • El tamaño de la ventana se configura en storage.max_context_messages (añadir al schema de config)