Ejemplo: un agente programado
Despierta un agente con una programación cron real de ColdBox, sin necesidad de un demonio cron aparte.
En esta página
Ejemplo: un agente programado
examples/scheduled-agent/ despierta un agente cada noche mediante una clase de scheduler ColdBox real, escrita a mano, bajo schedules/ - la prueba de que las Programaciones no son un DSL inventado por BxAgents, sino código ColdBox real que el build deja pasar intacto.
El proyecto
scheduled-agent/
├── Agent.bx
├── instructions.md
└── schedules/
└── Scheduler.bx
Agent.bx tiene la misma forma que en todos los demás ejemplos - no hace falta nada especial en el lado del agente para que lo dirija una programación:
class extends="bxModules.bxai.models.runnables.AiAgent" {
function init() {
super.init(
name : "scheduled-agent",
description : "An agent that wakes up on a cron schedule via schedules/.",
model : aiModel( provider: "mock", params: { model: "mock-model" } )
)
return this
}
}
El scheduler
schedules/Scheduler.bx extiende el propio ColdBoxScheduler de ColdBox y usa su DSL fluido de tareas real:
class extends="coldbox.system.web.tasks.ColdBoxScheduler" {
function configure() {
task( "nightly" )
.call( () => getInstance( "scheduled-agent" ).run( "cleanup" ) )
.everyDayAt( "00:00" )
.withNoOverlaps()
}
}
Como build copia este archivo a la aplicación generada esencialmente tal cual (consulta schedules/), tienes disponible el DSL completo de scheduler de ColdBox - everyDayAt(), everyMinute(), withNoOverlaps(), onFailure(), y todo lo demás que soporte el propio scheduler de ColdBox, no un subconjunto reimplementado por BxAgents.
getInstance( "scheduled-agent" ) resuelve por el name declarado en el propio Agent.bx de este proyecto - cada agente del árbol de un proyecto queda registrado con su propio nombre en WireBox, no solo la raÃz, y eso es lo que hace que esta lÃnea funcione sin ningún cableado adicional.
Instrucciones para el prompt programado
Las instrucciones describen qué debe hacer el agente cuando se dispara run( "cleanup" ) - desde el punto de vista del agente no hay diferencia entre un despertar programado y un mensaje de chat; ambos son simplemente una llamada a run() con algo de texto de entrada:
## Scheduled Agent
You run periodic housekeeping prompts. When asked to "cleanup", summarize
what a cleanup pass would involve for a typical project.
Construir y ejecutar
A diferencia de chat (que nunca llega a arrancar ColdBox - consulta Limitaciones conocidas), el scheduler solo se dispara de verdad bajo un arranque real de ColdBox, asà que este ejemplo necesita serve, no chat:
cd examples/scheduled-agent
bxAgents build
bxAgents serve
La tarea nightly se dispara automáticamente en cuanto serve está en marcha - sin ningún demonio cron aparte, sin ninguna entrada cron a nivel de sistema operativo. Lo mueve el propio hilo de scheduler en proceso de ColdBox, con la programación declarada en Scheduler.bx.
build no puede validar de forma significativa el contenido de Scheduler.bx más allá de comprobar que el archivo existe - una errata en una llamada a getInstance() o una referencia a un nombre de agente que no existe pasarán build limpiamente y solo saldrán a la luz cuando la aplicación generada arranque de verdad. Consulta Limitaciones conocidas para el estado actual de esa carencia.
Dónde ir a continuación
- Programaciones para el DSL completo del scheduler y para ver dónde acaba el
config/Scheduler.bxgenerado dentro de la salida del build. - Ejemplo: un agente mÃnimo si aún no has visto la forma base de un proyecto.
- Ejemplo: construir un agente de chat web para un agente accesible de forma interactiva en lugar de por temporizador.