Memoria del Agente
Por defecto, cada llamada a tu agente es stateless: el agente solo ve el mensaje que acabas de enviar. Está bien para tareas one-shot (clasificación, extracción, respuestas únicas), pero se rompe para cualquier cosa conversacional.
DYPAI incluye memoria integrada para que el agente recuerde lo que se dijo antes — dentro de una conversación o a través de todas las conversaciones que un usuario haya tenido.
Modos de memoria
| Parameter | Type | Description |
|---|---|---|
none | por defecto | Stateless. Cada request es independiente. Bueno para consultas one-shot. |
session | modo | Memoria por session_id. Una ventana de chat = una sesión. Úsalo para chatbots estándar. |
user | modo | Memoria por usuario autenticado. El agente recuerda al usuario a través de todas sus sesiones. |
Elige el modo en el campo Memory del nodo agent.
Cómo funciona la memoria de sesión
Cuando memory_mode = session:
- Tu frontend genera (o guarda) un
session_idpor cada conversación. - Cada vez que el usuario envía un mensaje, pasas el mismo
session_id. - El agente carga los mensajes previos de esa sesión, añade el nuevo mensaje del usuario, llama al modelo y persiste la nueva respuesta del asistente.
Un session_id nuevo = una conversación nueva, sin memoria arrastrada. El hook useChat() del SDK gestiona esto automáticamente.
Cómo funciona la memoria de usuario
Cuando memory_mode = user:
- No hace falta
session_id. El agente usa el ID del usuario autenticado del JWT. - Cada mensaje de ese usuario en cualquier parte de tu app se combina en un historial rodante.
- Bueno para experiencias de "asistente personal" donde quieres continuidad entre días y dispositivos.
La memoria de usuario requiere auth
La memoria por usuario necesita un caller autenticado. Si tu endpoint de agente es public, la memoria de usuario cae a stateless.
La ventana de memoria
Cargar todos los mensajes para siempre explotaría el context window del modelo y tu factura de tokens. DYPAI lo controla con dos knobs:
| Parameter | Type | Description |
|---|---|---|
memory_window | número (defecto 20) | Máximo de mensajes cargados del historial. Los más antiguos se descartan. |
memory_max_tokens | número (defecto 4000) | Tope duro de tokens a cargar. Si añadir otro mensaje superaría este límite, se descarta. Evita que conversaciones largas llenen todo el context window. |
Los dos límites se aplican a la vez — el que salte primero gana. El agente siempre ve los mensajes más recientes.
Dónde se guarda la memoria
La memoria vive en la base de datos de tu propio proyecto, en dos tablas del sistema:
system.ai_chats— una fila por sesión de chat, conid,user_id,endpoint_idy metadatasystem.ai_messages— una fila por mensaje, conchat_id,roleyparts(el formato completo de mensaje del Vercel AI SDK)
Estas tablas se crean automáticamente la primera vez que un agente con memoria se ejecuta. Puedes consultarlas con execute_sql como cualquier otra tabla — útil para construir UIs de historial de chat o dashboards de moderación.
Listar conversaciones pasadas
El SDK te da un hook para listar las sesiones pasadas de un usuario:
import { useChatList } from '@dypai-ai/client-sdk/react'
function ConversationsSidebar() {
const { chats, isLoading } = useChatList('my_agent_endpoint')
return (
<ul>
{chats.map(c => (
<li key={c.id}>
<a href={`/chat/${c.id}`}>{c.title ?? 'Sin título'}</a>
</li>
))}
</ul>
)
}
Combinado con useChat(endpoint, { sessionId }), esto te da el clásico "sidebar con todas mis conversaciones pasadas" estilo ChatGPT sin coste.
Limpiar memoria
Los usuarios a veces quieren empezar de cero. Tienes dos opciones:
- Nueva sesión: Genera un
session_idnuevo en el frontend. La conversación antigua sigue guardada pero no se carga. - Borrar: Elimina la fila de
system.ai_chats(cascadea a los mensajes). Monta un botón "borrar esta conversación" que llame a un endpointdelete_chatque hayas creado.
Memoria y llamadas a tools
Las llamadas a tools se guardan como parte de la conversación. Cuando se carga la memoria, el modelo ve:
- Mensajes del usuario
- Respuestas del asistente
- Tool calls que hizo el asistente
- Resultados de tools
Esto significa que el agente recuerda qué datos consultó antes y no tiene que llamar a la misma tool dos veces. Si el usuario pregunta "¿cuáles eran mis pedidos otra vez?", el agente puede responder desde memoria sin volver a consultar tu DB.
Notas sobre privacidad
- La memoria se escopa por proyecto — agentes de un proyecto no pueden ver conversaciones de otro.
- La memoria de usuario se escopa por usuario — los usuarios no pueden ver el historial de otros.
- Los datos de memoria se guardan en la base de datos de tu proyecto junto con tus tablas normales. Se aplican tus backups, controles de acceso y flujos de borrado de datos existentes.
- Para borrado estilo GDPR, simplemente elimina filas de
system.ai_chatsdel usuario afectado.