Blog GenAI AI/ML agentes

Patrones de Almacenamiento de Historial de Chat en Microsoft Agent Framework

Ilustración sobre almacenamiento de historial de chat en agentes inteligentes

Introducción

El almacenamiento del historial de chat es una pieza clave en la arquitectura de agentes inteligentes basados en Microsoft Agent Framework. Aunque los modelos, prompts y herramientas suelen acaparar la atención, la forma en que se gestiona el historial de conversación tiene un impacto directo en la experiencia del usuario y en la capacidad de respuesta del agente. Este artículo explora patrones fundamentales para almacenar y gestionar el historial de chat, con ejemplos prácticos y consideraciones arquitectónicas.


Tipos de Almacenamiento de Historial de Chat

1. Almacenamiento en Memoria

El almacenamiento en memoria es el enfoque más sencillo. Los datos del historial se mantienen en la RAM del servidor mientras dura la sesión del usuario. Este patrón es ideal para escenarios de baja complejidad o cuando el historial no necesita persistencia.

Note: Este enfoque puede ser insuficiente para aplicaciones que requieren escalabilidad o recuperación de conversaciones pasadas.

Ejemplo: Implementación en Python

class MemoryChatHistory:
    def __init__(self):
        self.history = []

    def add_message(self, user_message, agent_response):
        self.history.append({"user": user_message, "agent": agent_response})

    def get_history(self):
        return self.history

# Uso
chat_history = MemoryChatHistory()
chat_history.add_message("¿Cuál es la capital de Francia?", "La capital de Francia es París.")
print(chat_history.get_history())

2. Almacenamiento en Bases de Datos Relacionales

Las bases de datos relacionales como Azure SQL Database son una opción robusta para almacenar conversaciones. Este enfoque permite persistencia y consultas estructuradas, lo cual es útil para auditorías o análisis posteriores.

Ejemplo: Estructura de Tabla en SQL

CREATE TABLE ChatHistory (
    id INT PRIMARY KEY IDENTITY(1,1),
    user_message NVARCHAR(MAX),
    agent_response NVARCHAR(MAX),
    timestamp DATETIME DEFAULT GETDATE()
);

Integración con Python y SQLAlchemy

from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import datetime

Base = declarative_base()

class ChatHistory(Base):
    __tablename__ = 'ChatHistory'
    id = Column(Integer, primary_key=True)
    user_message = Column(String)
    agent_response = Column(String)
    timestamp = Column(DateTime, default=datetime.datetime.utcnow)

# Configuración de la base de datos
engine = create_engine('mssql+pyodbc://<usuario>:<contraseña>@<servidor>/<base_datos>?driver=ODBC+Driver+17+for+SQL+Server')
Session = sessionmaker(bind=engine)
session = Session()

# Ejemplo de almacenamiento
new_entry = ChatHistory(user_message="¿Cuál es la capital de España?", agent_response="La capital de España es Madrid.")
session.add(new_entry)
session.commit()

Warning: Asegúrate de implementar medidas de seguridad como cifrado de datos sensibles y restricciones de acceso en la base de datos.

3. Almacenamiento en Bases de Datos NoSQL

Para aplicaciones que requieren alta velocidad y escalabilidad, las bases de datos NoSQL como Azure Cosmos DB son una excelente opción. Este enfoque es ideal para agentes que manejan grandes volúmenes de datos o estructuras dinámicas.

Ejemplo: Modelo de Documento en JSON

{
  "id": "12345",
  "conversation_id": "67890",
  "messages": [
    {"user": "¿Qué hora es?", "agent": "Son las 3:00 PM."},
    {"user": "Gracias", "agent": "De nada."}
  ],
  "timestamp": "2026-04-25T15:00:00Z"
}

Integración con Azure Cosmos DB

from azure.cosmos import CosmosClient

# Configuración de Cosmos DB
endpoint = "<URL_COSMOS_DB>"
key = "<CLAVE_COSMOS_DB>"
client = CosmosClient(endpoint, key)
database = client.create_database_if_not_exists(id="ChatDatabase")
container = database.create_container_if_not_exists(id="ChatContainer", partition_key={"paths": ["/conversation_id"]})

# Ejemplo de almacenamiento
chat_document = {
    "id": "12345",
    "conversation_id": "67890",
    "messages": [
        {"user": "¿Qué hora es?", "agent": "Son las 3:00 PM."},
        {"user": "Gracias", "agent": "De nada."}
    ],
    "timestamp": "2026-04-25T15:00:00Z"
}
container.create_item(body=chat_document)

Consideraciones Clave para Elegir un Patrón

  1. Escalabilidad: ¿El sistema necesita manejar miles de usuarios simultáneamente?
  2. Persistencia: ¿Es necesario recuperar conversaciones pasadas?
  3. Latencia: ¿Qué tan rápido debe responder el agente?
  4. Costo: ¿Cuál es el presupuesto para almacenamiento y mantenimiento?

Conclusión

El almacenamiento del historial de chat en Microsoft Agent Framework no es solo una cuestión técnica; es una decisión estratégica que afecta directamente la experiencia del usuario y la funcionalidad del agente. Desde soluciones en memoria hasta bases de datos relacionales y NoSQL, cada patrón tiene sus ventajas y desventajas. La clave está en analizar las necesidades específicas de tu aplicación y elegir el enfoque que mejor se adapte.

Para profundizar en temas relacionados, consulta los siguientes artículos:

Note: Si tienes dudas sobre la implementación de alguno de estos patrones, revisa la documentación oficial de Microsoft Agent Framework o consulta con tu equipo técnico.