🇻🇪🇨🇱 Dev.to LinkedIn GitHub Twitter Instagram YouTube
Parte 2 de la Serie AgentCore
🧠 El Problema de la Memoria Entre Sesiones
Desplegaste tu primer agente de IA en producción con AgentCore Runtime. Funciona perfectamente dentro de las conversaciones.
AgentCore Runtime ya proporciona memoria a corto plazo – tu agente recuerda el contexto dentro de la misma sesión (hasta 8 horas o 15 minutos de inactividad).
Pero esto es lo que pasa cuando los usuarios regresan:
- Nueva sesión inicia → El agente olvida todo 😤
- Preferencias del usuario perdidas → Sin personalización entre visitas 🤦
- Insights previos desaparecidos → Cada interacción empieza desde cero 📝
- Sin aprendizaje entre sesiones → Las mismas preguntas respondidas repetidamente 🔄
Tu agente tiene amnesia entre sesiones. Cada nuevo ID de sesión significa empezar de nuevo, incluso para el mismo ID de usuario.
Amazon Bedrock AgentCore Memory resuelve esto. Tus agentes recuerdan a los usuarios entre sesiones, aprenden de interacciones pasadas y proporcionan experiencias personalizadas que persisten más allá de los límites de sesión.
Este tutorial te muestra cómo agregar memoria inteligente a largo plazo a tus agentes.
🧠 Arquitectura de Memoria Explicada
AgentCore Runtime (Integrado)
- Memoria de sesión – Contexto dentro de conversaciones (automático)
- Persistencia de contenedor – Hasta 8 horas o 15 minutos de inactividad
- Mismo ID de sesión – Historial completo de conversación mantenido
AgentCore Memory (Este Tutorial)
- Persistencia entre sesiones – Recordar entre diferentes IDs de sesión
- Extracción a largo plazo – Insights clave almacenados automáticamente
- Almacenamiento centrado en el usuario – Mismo ID de usuario, diferentes sesiones
- Recuperación inteligente – Contexto relevante cuando se necesita
Prerrequisitos
Antes de comenzar, verifica que tengas:
- Cuenta de AWS con permisos apropiados
- Entorno Python 3.10+
- AWS CLI configurado con
aws configure
Los nuevos clientes de AWS reciben hasta $200 en créditos
Comienza sin costo con AWS Free Tier. Obtén $100 USD al registrarte más $100 USD adicionales explorando servicios clave.
Agreguemos memoria entre sesiones a tus agentes. 🧠
Hoja de Ruta del Tutorial:
Configuración ⚙️ → Codificar Agente 💻 → Probar Memoria ✅ → Desplegar 🚀 → Validar 🔍
Tiempo estimado: 20 minutos
Instalar Dependencias
pip install -r requirements.txt
Paquetes requeridos:
bedrock-agentcore
strands-agents
strands-agents-tools
Implementación del Agente con Memoria Entre Sesiones
Configuración de Memoria y Creación del Agente
"""
Agente de IA Listo para Producción con Memoria
Recuerda conversaciones y preferencias del usuario entre sesiones
"""
import os
from strands import Agent
from strands_tools import calculator
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig
from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager
app = BedrockAgentCoreApp()
MEMORY_ID = os.getenv("BEDROCK_AGENTCORE_MEMORY_ID")
REGION = os.getenv("AWS_REGION", "us-west-2")
MODEL_ID = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
# Instancia global del agente
_agent = None
def get_or_create_agent(actor_id: str, session_id: str) -> Agent:
"""
Obtener agente existente o crear uno nuevo con configuración de memoria.
Como el contenedor está vinculado al ID de sesión, solo necesitamos un agente por contenedor.
"""
global _agent
if _agent is None:
# Configurar memoria con recuperación para hechos y preferencias del usuario
memory_config = AgentCoreMemoryConfig(
memory_id=MEMORY_ID,
session_id=session_id,
actor_id=actor_id,
retrieval_config={
f"/users/{actor_id}/facts": RetrievalConfig(top_k=3, relevance_score=0.5),
f"/users/{actor_id}/preferences": RetrievalConfig(top_k=3, relevance_score=0.5)
}
)
# Crear agente con administrador de sesión de memoria
_agent = Agent(
model=MODEL_ID,
session_manager=AgentCoreMemorySessionManager(memory_config, REGION),
system_prompt="Eres un asistente útil con memoria. Recuerda las preferencias del usuario y hechos entre conversaciones. Usa la herramienta de cálculo para problemas matemáticos.",
tools=[calculator]
)
return _agent
Punto de Entrada de AgentCore
@app.entrypoint
def invoke(payload, context):
"""Punto de entrada de AgentCore Runtime con agente de carga perezosa"""
if not MEMORY_ID:
return {"error": "Memoria no configurada. Establece la variable de entorno BEDROCK_AGENTCORE_MEMORY_ID."}
# Extraer información de sesión y actor
actor_id = context.request_headers.get('X-Amzn-Bedrock-AgentCore-Runtime-Custom-Actor-Id', 'user') if context.request_headers else 'user'
session_id = context.session_id or 'default_session'
# Obtener o crear agente (carga perezosa)
agent = get_or_create_agent(actor_id, session_id)
prompt = payload.get("prompt", "¡Hola!")
result = agent(prompt)
return {
"response": result.message.get('content', [{}])[0].get('text', str(result))
}
if __name__ == "__main__":
app.run()
Estrategias de Memoria
AgentCore Memory proporciona tres estrategias integradas para diferentes casos de uso:
Estrategia de Preferencias del Usuario
Identifica y extrae automáticamente las preferencias, elecciones y estilos del usuario de las conversaciones. Esto crea un perfil persistente de cada usuario para interacciones personalizadas.
Ejemplo: Un agente de comercio electrónico recuerda las marcas favoritas del usuario y el tamaño preferido, ofreciendo recomendaciones de productos personalizadas en sesiones futuras.
Estrategia Semántica
Identifica y extrae información factual clave y conocimiento contextual de las conversaciones. Esto construye una base de conocimiento persistente sobre entidades importantes, eventos y detalles.
Ejemplo: Un agente de soporte al cliente recuerda que el pedido #ABC-123 se relaciona con un ticket de soporte específico, por lo que no necesitas proporcionar el número de pedido nuevamente.
Estrategia de Resúmenes de Sesión
Crea resúmenes condensados y continuos de conversaciones dentro de una sola sesión. Esto captura temas clave y decisiones para una rápida recuperación de contexto.
Ejemplo: Después de una sesión de resolución de problemas de 30 minutos, el agente accede a un resumen: “El usuario reportó un problema con el software v2.1, intentó un reinicio y se le proporcionó un enlace al artículo de la base de conocimientos.”
Para casos de uso avanzados, puedes configurar estrategias personalizadas con anulaciones para ajustar finamente la extracción de memoria con tus propios prompts y modelos de fundación.
Probar Memoria Localmente
Inicia tu agente habilitado con memoria:
python my_agent_memory.py
Prueba dentro de la sesión (Runtime maneja esto automáticamente):
curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Mi nombre es Juan y me encanta la pizza"}'
curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "¿Qué recuerdas sobre mí?"}'
Desplegar con Memoria Entre Sesiones
Despliega tu agente habilitado con memoria:
Configurar Agente
agentcore configure -e my_agent_memory.py
Selecciona ‘sí’ para memoria cuando se te pregunte
Selecciona ‘sí’ para extracción de memoria a largo plazo
Lanzar a Producción
agentcore launch
AgentCore automáticamente:
- Crea almacén de memoria entre sesiones
- Configura pipelines de extracción a largo plazo
- Establece persistencia centrada en el usuario
- Proporciona endpoint de producción
Probar Memoria Entre Sesiones en Producción
Prueba de Memoria a Corto Plazo (Misma Sesión)
import json
import uuid
import boto3
def test_short_memory(agent_arn, region=None):
"""Probar memoria a corto plazo dentro de una sola sesión"""
# Extraer región del ARN si no se proporciona
if not region:
region = agent_arn.split(':')[3]
# Inicializar cliente
client = boto3.client('bedrock-agentcore', region_name=region)
# Generar ID de sesión
session_id = str(uuid.uuid4())
print(f"Probando memoria a corto plazo en sesión: {session_id}")
print(f"Región: {region}")
print("-" * 50)
try:
# Primer mensaje - establecer contexto
print("Mensaje 1: Estableciendo contexto...")
payload1 = json.dumps({"prompt": "Mi nombre es Alicia y me gusta el helado de chocolate"}).encode()
response1 = client.invoke_agent_runtime(
agentRuntimeArn=agent_arn,
runtimeSessionId=session_id,
payload=payload1,
qualifier="DEFAULT"
)
content1 = []
for chunk in response1.get("response", []):
content1.append(chunk.decode('utf-8'))
result1 = json.loads(''.join(content1))
print(f"Agente: {result1.get('response', 'Sin respuesta')}")
print()
# Segundo mensaje - probar recuperación de memoria
print("Mensaje 2: Probando recuperación de memoria...")
payload2 = json.dumps({"prompt": "¿Cuál es mi nombre y qué me gusta?"}).encode()
response2 = client.invoke_agent_runtime(
agentRuntimeArn=agent_arn,
runtimeSessionId=session_id, # Misma sesión
payload=payload2,
qualifier="DEFAULT"
)
content2 = []
for chunk in response2.get("response", []):
content2.append(chunk.decode('utf-8'))
result2 = json.loads(''.join(content2))
print(f"Agente: {result2.get('response', 'Sin respuesta')}")
print("\n✓ Prueba de memoria a corto plazo completada")
except Exception as e:
print(f"Error: {e}")
Ejecuta la prueba:
python test_short_memory.py "AGENT_ARN"
Prueba de Memoria a Largo Plazo (Diferentes Sesiones)
import json
import uuid
import boto3
import time
def test_long_memory(agent_arn, region=None):
"""Probar memoria a largo plazo entre diferentes sesiones"""
# Extraer región del ARN si no se proporciona
if not region:
region = agent_arn.split(':')[3]
# Inicializar cliente
client = boto3.client('bedrock-agentcore', region_name=region)
# Generar IDs de sesión
session_1 = str(uuid.uuid4())
session_2 = str(uuid.uuid4())
print(f"Probando memoria a largo plazo entre sesiones")
print(f"Región: {region}")
print("-" * 50)
try:
# Sesión 1: Almacenar información del usuario
print(f"Sesión 1: {session_1}")
print("Almacenando preferencias del usuario...")
payload1 = json.dumps({"prompt": "Mi nombre es Sara y soy ingeniera de software. Prefiero Python sobre JavaScript."}).encode()
response1 = client.invoke_agent_runtime(
agentRuntimeArn=agent_arn,
runtimeSessionId=session_1,
payload=payload1,
qualifier="DEFAULT"
)
content1 = []
for chunk in response1.get("response", []):
content1.append(chunk.decode('utf-8'))
result1 = json.loads(''.join(content1))
print(f"Agente: {result1.get('response', 'Sin respuesta')}")
print()
# Esperar extracción de memoria a largo plazo
print("Esperando 25 segundos para extracción de memoria a largo plazo...")
time.sleep(25)
# Sesión 2: Probar recuperación de memoria
print(f"Sesión 2: {session_2}")
print("Probando recuperación de memoria entre sesiones...")
payload2 = json.dumps({"prompt": "¿Qué recuerdas sobre mí? ¿Cuál es mi nombre y qué prefiero?"}).encode()
response2 = client.invoke_agent_runtime(
agentRuntimeArn=agent_arn,
runtimeSessionId=session_2, # Sesión diferente
payload=payload2,
qualifier="DEFAULT"
)
content2 = []
for chunk in response2.get("response", []):
content2.append(chunk.decode('utf-8'))
result2 = json.loads(''.join(content2))
print(f"Agente: {result2.get('response', 'Sin respuesta')}")
print("\n✓ Prueba de memoria a largo plazo completada")
except Exception as e:
print(f"Error: {e}")
Ejecuta la prueba:
python test_long_memory.py "AGENT_ARN"
# O usando variables de entorno
export AGENT_ARN="tu-agent-arn"
python test_long_memory.py
Esta prueba verifica la persistencia entre sesiones de AgentCore Memory:
- Almacena preferencias del usuario en sesión 1
- Espera 25 segundos para extracción de memoria a largo plazo
- Prueba recuperación en sesión diferente 2 (mismo ID de usuario)
- Verifica que la memoria entre sesiones funciona
Operaciones de Gestión de Memoria
AgentCore Memory proporciona capacidades de gestión integrales:
Beneficios de la Arquitectura de Memoria
Solo Runtime | Runtime + AgentCore Memory |
---|---|
✅ Contexto de sesión (8 horas) | ✅ Contexto de sesión (8 horas) |
❌ Perdido después de que termina la sesión | ✅ Persistente entre sesiones |
❌ Sin aprendizaje del usuario | ✅ Preferencias del usuario recordadas |
❌ Repetir información | ✅ Recuperación inteligente de contexto |
❌ Respuestas genéricas | ✅ Interacciones personalizadas |
Características Clave Entre Sesiones
- Persistencia del usuario – Mismo ID de usuario, diferentes IDs de sesión recordados
- Extracción automática – Insights clave almacenados durante conversaciones
- Recuperación inteligente – Contexto pasado relevante cuando se necesita
- Aprendizaje de preferencias – Las elecciones del usuario persisten entre visitas
- Arquitectura escalable – Servicio completamente administrado entre sesiones
Limpiar
Remover todos los recursos:
agentcore destroy
Esto remueve el despliegue de AgentCore, almacenes de memoria, repositorio ECR, roles IAM y logs de CloudWatch.
🎉 ¡Construiste Agentes de IA con Memoria Entre Sesiones!
Tus agentes ahora recuerdan usuarios entre sesiones, aprenden de interacciones pasadas y proporcionan experiencias personalizadas que persisten más allá de los límites de sesión. ¿Qué aplicaciones inteligentes construirás? 🚀
❤️ Si Esto Te Ayudó
❤️ Dale corazón: ayuda a otros a descubrir este tutorial
🦄 Dale unicornio: si te voló la mente
🔖 Guárdalo: para cuando lo necesites después
📤 Compártelo: con tu equipo o en redes sociales
📚 Recursos
AWS Free Tier:
Mis Otros Tutoriales:
Happy building! 🚀
¡Gracias!