Manejo De Estados

Hasta ahora, hemos discutido cómo construir componentes en una aplicación multi-agente: agentes, equipos, condiciones de terminación. En muchos casos, es útil guardar el estado de estos componentes en el disco y cargarlos más tarde. Esto es particularmente útil en una aplicación web donde los endpoints sin estado responden a solicitudes y necesitan cargar el estado de la aplicación desde un almacenamiento persistente.

En este cuaderno, discutiremos cómo guardar y cargar el estado de agentes, equipos y terminación.


Agentes de Ahorro y Carga

Podemos obtener el estado de un agente llamando al método save_state() en un AssistantAgent.

import asyncio

from saptiva_agents import SAPTIVA_LEGACY
from saptiva_agents.agents import AssistantAgent
from saptiva_agents.conditions import MaxMessageTermination
from saptiva_agents.messages import TextMessage
from saptiva_agents.teams import RoundRobinGroupChat
from saptiva_agents.ui import Console
from saptiva_agents.core import CancellationToken
from saptiva_agents.base import SaptivaAIChatCompletionClient

model_client = SaptivaAIChatCompletionClient(
        model=SAPTIVA_LEGACY,
        api_key="TU_SAPTIVA_API_KEY",
)
assistant_agent = AssistantAgent(
    name="assistant_agent",
    system_message="You are a helpful assistant",
    model_client=model_client
)

async def main() -> None:
    # Utilice `asyncio.run(...)` cuando lo ejecute en un script
    response = await assistant_agent.on_messages(
        [TextMessage(content="Write a 3 line poem on lake tangayika", source="user")], CancellationToken()
    )
    print(response.chat_message.content)
    await model_client.close()
    
asyncio.run(main())

Nota

Para AssistantAgent, su estado consiste en el modelo_context. Si escribes tu propio agente personalizado, considera sobrescribir los métodos save_state() y load_state() para personalizar el comportamiento. Las implementaciones predeterminadas guardan y cargan un estado vacío.


Equipos de Ahorro y Carga

Podemos obtener el estado de un equipo llamando al método save_state en el equipo y cargarlo de nuevo llamando al método load_state en el equipo.

Cuando llamamos a save_state en un equipo, guarda el estado de todos los agentes en el equipo.

Comenzaremos creando un equipo simple de RoundRobinGroupChat con un solo agente y le pediremos que escriba un poema.

Si reiniciamos el equipo (simulando la creación del equipo) y hacemos la pregunta ¿What was the last line of the poem you wrote?, vemos que el equipo no puede lograrlo ya que no hay referencia a la ejecución anterior.

A continuación, cargamos el estado del equipo y hacemos la misma pregunta. Vemos que el equipo es capaz de devolver con precisión la última línea del poema que escribió.


Estado Persistente (Archivo o Base de Datos)

En muchos casos, es posible que deseemos persistir el estado del equipo en disco (o en una base de datos) y cargarlo posteriormente. El estado es un diccionario que puede ser serializado a un archivo o escrito en una base de datos.

Última actualización