Agentes de consulta en asistentes de IA: 11 patrones de implementación
Patrones de polling confiables para agentes de IA.
Los agentes de sondeo (polling agents) son una de las partes menos glamorosas de la arquitectura de los asistentes de IA, pero también son una de las más útiles.
Un asistente de chat normal espera a que el usuario le haga una pregunta. Un agente de sondeo mantiene la vigilancia. Revisa una fuente, nota los cambios, decide si algo es importante y, a continuación, actúa. Esa acción puede ser una notificación, un resumen, un borrador, una llamada a una herramienta o un flujo de trabajo completo.
Así es como un asistente pasa de “responde a mi pregunta” a “mantén vigilado esto para mí”. En lugar de ser reactivo, se convierte en un proceso en segundo plano que nota cosas en nombre del usuario y actúa cuando se cumplen las condiciones.

El punto de diseño importante es simple: no hagas responsable al modelo de lenguaje del tiempo, el estado, los reintentos o el bloqueo. Utiliza la infraestructura de backend normal para eso. Utiliza el modelo donde es valioso: interpretando contextos desordenados, realizando juicios semánticos y produciendo lenguaje útil.
¿Qué es un agente de sondeo?
Un agente de sondeo es un proceso en segundo plano que revisa repetidamente una fuente y desencadena una acción del asistente cuando se cumple una condición. En el sistema de IA más amplio — donde el asistente combina un LLM, memoria, herramientas, enrutamiento y observabilidad — la capa de sondeo es lo que hace que el asistente sea proactivo en lugar de puramente reactivo. Para ver la imagen completa de las cinco capas, consulta Arquitectura del Asistente de IA: LLM, Memoria, Herramientas, Enrutamiento, Observabilidad.
Ejemplos:
- Revisar un buzón cada mañana y resumir los mensajes importantes.
- Vigilar una lista de tareas en Notion y ejecutar el siguiente elemento pendiente.
- Monitorear un problema en GitHub hasta que cambie de estado.
- Consultar una tarea de IA de larga ejecución hasta que el resultado esté listo.
- Revisar una disponibilidad de reserva hasta que haya una disponible.
- Vigilar un portal de proveedores hasta que aparezca un documento.
- Escanear nuevos artículos de investigación una vez por semana y resumir los relevantes.
Un agente de sondeo práctico tiene cinco responsabilidades:
- Despertarse en el momento adecuado.
- Leer desde la fuente.
- Recordar lo que ya ha visto.
- Decidir si el nuevo estado es importante.
- Actuar una vez, de forma segura, sin repetirse.
Un flujo de producción típico se ve así:
programador
-> trabajador de sondeo
-> sistema fuente
-> almacén de estado
-> filtros deterministas
-> evaluación de LLM opcional
-> acción del asistente
Esta estructura es aburrida de la mejor manera posible. Los sistemas aburridos son más fáciles de depurar a las 2 de la madrugada.
El estado que todo agente de sondeo necesita
Los agentes de sondeo necesitan un estado duradero. El historial de la conversación no es suficiente. El asistente puede recordar la conversación, pero el sistema necesita un registro operativo fiable.
Un buen registro de estado de sondeo suele contener:
{
"poll_id": "poll_123",
"user_id": "user_456",
"source_type": "notion",
"source_ref": "database_tasks",
"condition": "tomar una tarea en estado Todo y ejecutarla",
"interval_seconds": 600,
"last_run_at": "2026-06-19T01:00:00Z",
"next_run_at": "2026-06-19T01:10:00Z",
"last_seen_cursor": "cursor_or_timestamp",
"last_result_hash": "b64e8a...",
"failure_count": 0,
"status": "active"
}
El esquema exacto depende de la fuente, pero la mayoría de los sistemas necesitan estos conceptos.
Definición del sondeo
Esto describe qué está observando el agente y por qué.
poll_id
user_id
workspace_id
source_type
source_ref
condition_text
priority
status
Por ejemplo:
source_type: notion
source_ref: Base de datos de Tareas
condition_text: Encontrar una tarea Todo, reclamarla, ejecutarla y marcarla como Completada.
Programación
Esto describe cuándo debe ejecutarse el agente.
interval_seconds
cron_expression
timezone
last_run_at
next_run_at
jitter
Para un agente de Hermes que revisa Notion cada 10 minutos:
interval_seconds: 600
timezone: Australia/Melbourne
Cursor o instantánea
Esto ayuda al agente a evitar reprocesar los mismos datos.
Dependiendo de la fuente, esto puede ser:
last_seen_id
last_seen_timestamp
api_cursor
etag
version
content_hash
Para una cola de tareas de Notion, el cursor puede ser menos importante que el estado de la tarea y los campos de reclamación. Para Gmail, GitHub o una API de sincronización, el cursor suele ser crítico.
Reclamación o arrendamiento
Esto evita que dos trabajadores tomen el mismo trabajo.
claimed_by
claimed_at
claim_expires_at
run_id
Por ejemplo, una tarea de Notion puede cambiarse de:
Status: Todo
a:
Status: InProgress
ClaimedBy: hermes
ClaimedAt: 2026-06-19T01:00:00Z
ClaimExpiresAt: 2026-06-19T01:30:00Z
RunId: run_789
Esta es la diferencia entre “espero que solo un trabajador lo elija” y “el sistema tiene un protocolo de reclamación”.
Registro de ejecución
Esto registra lo que sucedió durante una ejecución.
run_id
poll_id
source_object_id
started_at
finished_at
status
items_checked
items_changed
decision_summary
error
El registro de ejecución debe vivir en el backend del asistente, no solo en Notion u otra herramienta externa. Notion es bueno para la visibilidad humana. No es ideal como único registro de ejecución.
Registro de deduplicación
Esto evita notificaciones duplicadas o acciones repetidas.
dedupe_key
poll_id
source_object_id
condition_version
action_type
delivered_at
Por ejemplo:
user_456:poll_123:notion_page_999:execute:v1
Si se intenta la misma acción nuevamente, el sistema puede suprimirla.
Método 1: Trabajador de sondeo programado
Este es el patrón más simple y fiable.
Un programador se despierta cada intervalo fijo y llama a un trabajador. El trabajador lee la fuente, actualiza el estado y desencadena una acción del asistente si es necesario.
programador
-> trabajador
-> API de la fuente
-> base de datos
-> acción del asistente
Cómo se ejecuta
El programador es responsable del tiempo. Puede ser cron, un programador en la nube, un CronJob de Kubernetes o un pequeño programador interno.
Cada intervalo, inicia una ejecución del trabajador. El trabajador carga su configuración, consulta la fuente objetivo, compara el resultado con el estado almacenado y actúa si es necesario.
Para un asistente simple, esto suele ser suficiente. Un único programador y un proceso de trabajador ligero pueden manejar decenas de revisiones diarias sin requerir colas, arrendamientos o coordinación distribuida.
Modelo de estado
El programador almacena muy poco. Por lo general, solo sabe cuándo desencadenar un trabajo.
La base de datos de la aplicación almacena el estado importante:
definición del sondeo
programación
cursor o instantánea
última hora de ejecución
conteo de errores
estado
El trabajador debe ser sin estado. Puede contener datos temporales mientras se ejecuta, pero la verdad duradera pertenece a la base de datos.
Flujo de ejemplo
Cada 10 minutos:
activar el trabajador de sondeo de Hermes
Trabajador:
cargar configuración de sondeo activo
consultar la fuente
comparar con el estado anterior
ejecutar comprobaciones deterministas
llamar al LLM solo si es necesario
actualizar el estado
emitir evento del asistente
Mejor uso
Utiliza trabajadores de sondeo programados para:
- Resúmenes diarios.
- Revisiones horarias.
- Automatizaciones internas pequeñas.
- Tareas simples de “vigilar esto”.
- Tareas de asistente de volumen bajo a medio.
Debilidades
El sondeo programado es fácil de entender, pero puede volverse frágil a gran escala. Si muchos sondeos se ejecutan al mismo tiempo, puedes sobrecargar tus trabajadores o alcanzar los límites de velocidad del proveedor. Los reintentos también pueden volverse desordenados si el programador inicia el trabajo directamente.
Método 2: Trabajadores de sondeo basados en colas
El sondeo basado en colas suele ser la opción predeterminada mejor para asistentes de IA en producción.
El programador no ejecuta el sondeo directamente. Coloca un trabajo en una cola. Los procesos trabajadores consumen trabajos de la cola.
programador
-> cola
-> grupo de trabajadores
-> API de la fuente
-> almacén de estado
-> acción del asistente
Cómo se ejecuta
Un programador busca sondeos vencidos y pone trabajos en cola. Los trabajadores extraen trabajos cuando tienen capacidad.
Esto te da contrapresión. Si el sistema está ocupado, los trabajos esperan en la cola en lugar de abrumar la API de la fuente o el proveedor de LLM.
Modelo de estado
La base de datos almacena el estado del sondeo:
poll_id
user_id
source_ref
condition_text
next_run_at
cursor
status
failure_count
El mensaje de la cola debe mantenerse pequeño:
{
"poll_id": "poll_123",
"scheduled_for": "2026-06-19T01:10:00Z",
"attempt": 1
}
El trabajador carga el estado completo desde la base de datos cuando comienza.
Flujo de ejemplo
Cada minuto:
el programador encuentra sondeos donde next_run_at <= ahora
el programador pone trabajos en cola
Trabajadores:
extraer trabajos de la cola
bloquear o arrendar el sondeo
consultar la fuente
actualizar el estado
emitir acción del asistente si es necesario
establecer next_run_at
Mejor uso
Utiliza el sondeo basado en colas para:
- Asistentes de IA multiusuario.
- Muchos sondeos simultáneos.
- Integraciones con límites de velocidad.
- Trabajo en segundo plano reintenable.
- Trabajos que pueden tardar diferentes cantidades de tiempo.
- Productos SaaS donde la fiabilidad importa.
Debilidades
Las colas añaden infraestructura. Necesitas manejo de cartas muertas, idempotencia, tiempos de visibilidad y políticas de reintento. Vale la pena para sistemas en producción, pero probablemente sea excesivo para un prototipo pequeño.
Método 3: Herramienta externa como cola de tareas
Este es el patrón en el ejemplo de Notion más Hermes.
La herramienta externa no es solo una fuente de datos. Se convierte en la cola de tareas visible para humanos. El agente revisa periódicamente la herramienta, reclama una tarea, la ejecuta y actualiza el estado de la tarea.
programador
-> trabajador de Hermes
-> base de datos de Notion
-> reclamar una tarea
-> ejecutar tarea
-> actualizar estado de Notion
Cómo se ejecuta
Cada 10 minutos, Hermes consulta la base de datos de Notion para encontrar una tarea en estado Todo. Elige la siguiente tarea, generalmente por prioridad y tiempo de creación. Luego reclama la tarea estableciéndola en InProgress.
Después de eso, Hermes ejecuta la tarea. Si la ejecución tiene éxito, marca la tarea como Complete. Si la ejecución falla, marca la tarea como Failed o la devuelve a Todo con un conteo de reintento.
Modelo de estado
Notion almacena el estado de la tarea visible para humanos:
Título
Descripción
Estado: Todo | InProgress | Complete | Failed
Prioridad
CreatedAt
ClaimedBy
ClaimedAt
ClaimExpiresAt
RunId
RetryCount
LastError
CompletedAt
El backend de Hermes almacena el estado de ejecución operativa:
run_id
notion_page_id
started_at
finished_at
execution_status
tool_calls
LLM trace
error details
idempotency_key
Esta división importa. Notion es excelente para visibilidad y edición manual. El backend de Hermes es mejor para registros, reintentos, deduplicación e historial de auditoría.
Flujo de ejemplo
Cada 10 minutos:
Hermes se despierta
Hermes:
consultar Notion para una tarea donde Status = Todo
ordenar por Prioridad, CreatedAt
actualizar la tarea seleccionada a InProgress
establecer ClaimedBy, ClaimedAt, ClaimExpiresAt, RunId
ejecutar la tarea
escribir registro de ejecución
establecer tarea en Complete o Failed
Mejor uso
Utiliza este patrón cuando:
- Los humanos ya gestionan el trabajo en Notion, Jira, Linear, Trello u otra herramienta.
- Quieres que el asistente procese tareas visibles.
- El tablero de tareas es la interfaz de usuario.
- Necesitas un modelo de automatización simple con supervisión humana.
Debilidades
Las herramientas externas rara vez son colas perfectas. Las reclamaciones atómicas pueden ser limitadas. La consistencia de las consultas puede retrasarse. Pueden aplicarse límites de velocidad. Si el agente puede ejecutarse en múltiples instancias, necesitas una estrategia de reclamación o arrendamiento cuidadosa.
La recomendación práctica es usar Notion como el buzón de tareas visible para humanos mientras se mantienen todos los registros de ejecución, registros de reintento, trazas y claves de idempotencia en Hermes. Notion da visibilidad a los usuarios; Hermes mantiene el sistema fiable. Para ver los mecanismos de despachador y concurrencia que están detrás de este patrón en Hermes, consulta Kanban en Hermes Agent para Flujos de Trabajo de LLM Autohospedados.
Método 4: Bucle de trabajador de larga ejecución
Un bucle de larga ejecución es la implementación más simple.
while True:
due_polls = db.find_due_polls()
for poll in due_polls:
run_poll(poll)
sleep(30)
Este patrón combina la programación y la ejecución en un solo servicio, lo que lo convierte en el punto de partida más simple posible para el trabajo del agente en segundo plano.
Cómo se ejecuta
El proceso del trabajador se ejecuta continuamente. Cada pocos segundos o minutos, revisa la base de datos en busca de sondeos vencidos y los ejecuta. Es fácil de construir, fácil de razonar y rápido de iterar durante el desarrollo.
Modelo de estado
La base de datos aún almacena un estado duradero:
configuración del sondeo
next_run_at
cursor
último resultado
conteo de errores
estado
La memoria del proceso solo debe contener estado temporal:
lote actual
caché de corta duración
ejecución en vuelo
Nunca almacenes progreso importante solo en la memoria. Si el proceso falla, cualquier estado que no se haya escrito en el almacenamiento duradero desaparece, y la siguiente ejecución no tendrá forma de saber dónde se quedó.
Mejor uso
Utiliza bucles de larga ejecución para:
- Prototipos.
- Desarrollo local.
- Herramientas internas.
- Sistemas de un solo inquilino.
- Agentes de bajo volumen.
Debilidades
Este patrón se vuelve arriesgado con múltiples réplicas. Sin arrendamientos, dos trabajadores pueden ejecutar el mismo sondeo. También carece de las características operativas de una cola real o un motor de flujo de trabajo.
Un bucle de larga ejecución no está mal como punto de partida, pero no es un programador distribuido y no debería tratarse como tal. En cuanto necesites múltiples réplicas o garantías de fiabilidad más fuertes, tendrás que pasar a uno de los patrones más estructurados anteriores.
Método 5: Webhooks primero con respaldo de sondeo
Si la fuente admite webhooks, úsalos. El sondeo debería ser a menudo el respaldo, no el mecanismo principal.
sistema externo
-> extremo del webhook
-> almacén de eventos
-> acción del asistente
sondeo de reconciliación
-> API de la fuente
-> comparar con el almacén de eventos
-> reparar eventos perdidos
Cómo se ejecuta
El sistema externo envía eventos a tu extremo del webhook cuando algo cambia. Tu sistema almacena el evento y lo procesa de forma asíncrona.
Un sondeo de reconciliación más lento se ejecuta cada pocas horas o una vez al día. Revisa si se perdieron algún evento.
Modelo de estado
El almacén de eventos registra los webhooks entrantes:
event_id
source_type
source_object_id
event_type
received_at
payload_hash
processed_at
signature_valid
El sondeo de reconciliación almacena:
last_reconciliation_at
last_seen_cursor
last_seen_version
La tabla de objetos fuente almacena el último estado conocido:
external_id
current_status
external_updated_at
last_processed_event_id
Mejor uso
Utiliza la arquitectura de webhooks primero para:
- Eventos de GitHub.
- Eventos de Stripe.
- Eventos de Slack.
- Actualizaciones de CRM.
- Notificaciones de implementación.
- Sistemas de ticketing.
Debilidades
Los webhooks requieren un extremo público, validación de firma, protección contra reproducción y deduplicación de eventos. Algunos proveedores también envían eventos incompletos, por lo que aún puede ser necesario obtener el objeto completo.
Aún así, si existen buenos webhooks, sondear cada minuto suele ser un desperdicio.
Método 6: Sondeo de trabajos en segundo plano del lado del proveedor
A veces, lo que se sondea es el trabajo de IA en sí mismo.
La aplicación inicia un trabajo de larga ejecución del proveedor, almacena el ID del trabajo y revisa más tarde si se ha completado.
aplicación
-> iniciar trabajo en segundo plano de IA
-> almacenar ID de trabajo del proveedor
-> sondear estado
-> obtener resultado
-> notificar usuario
Cómo se ejecuta
El asistente inicia un trabajo con el proveedor. El proveedor devuelve un ID. Tu backend almacena ese ID y revisa su estado hasta que el trabajo tenga éxito, falle, expire o se agote el tiempo.
Modelo de estado
Tu backend almacena:
assistant_task_id
provider_job_id
user_id
status
created_at
last_checked_at
expires_at
result_ref
El proveedor almacena el estado temporal del trabajo y la salida.
Si la salida importa, cópiala en tu propio almacenamiento duradero tan pronto como se complete el trabajo. El almacenamiento de resultados del lado del proveedor tiene ventanas de retención cortas y no es un sustituto de un archivo adecuado en tu propio sistema.
Mejor uso
Utiliza el sondeo de trabajos en segundo plano del lado del proveedor para:
- Tareas de investigación de IA largas.
- Procesamiento de documentos grandes.
- Análisis de base de código.
- Generación de informes.
- Trabajos de extracción de datos.
- Tareas que exceden los tiempos de espera normales de solicitudes HTTP.
Debilidades
Este patrón resuelve un problema: esperar un trabajo de proveedor largo. No reemplaza tu motor de flujo de trabajo, programador, cola o almacén de estado de negocio.
Método 7: Motor de flujo de trabajo duradero
Un motor de flujo de trabajo duradero gestiona la ejecución de larga duración, temporizadores, reintentos y recuperación. Temporal es la opción más común para backends de asistentes basados en Go y Python; para una guía de implementación completa, consulta Implementación de Aplicaciones de Flujo de Trabajo con Temporal en Go.
En lugar de cablear manualmente cada espera y reintento, modelas el proceso como un flujo de trabajo.
motor de flujo de trabajo
-> actividad: verificar fuente
-> temporizador: esperar
-> actividad: evaluar resultado
-> actividad: notificar usuario
Cómo se ejecuta
El flujo de trabajo comienza una vez y luego controla su propia espera. Puede dormir durante minutos, días o semanas. Si el proceso del trabajador falla, el motor de flujo de trabajo puede reanudar desde el estado registrado.
Modelo de estado
El motor de flujo de trabajo almacena:
workflow_id
historial de ejecución
estado del temporizador
intentos de actividad
política de reintento
estado actual del flujo de trabajo
Tu base de datos de la aplicación almacena:
definición de sondeo visible para el usuario
referencias de autorización
registros de negocio
registros de notificación
El motor de flujo de trabajo posee el estado del proceso: historial de ejecución, temporizadores, reintentos e intentos de actividad. Tu base de datos posee el estado de negocio: configuraciones de usuario, registros de autorización, notificaciones y registros de auditoría. Mantener estos separados evita que cada capa se convierta en un híbrido confuso de ambos.
Mejor uso
Utiliza flujos de trabajo duraderos para:
- Procesos de negocio de múltiples pasos.
- Automatizaciones de larga ejecución.
- Flujos de aprobación humana.
- Reintentos fiables.
- Trabajo en segundo plano auditable.
- Procesos que deben reanudarse después de una falla.
Debilidades
Los motores de flujo de trabajo añaden conceptos e infraestructura. Son excelentes cuando el proceso es importante, pero pesados para revisiones horarias simples.
Método 8: Tiempo de ejecución persistente del agente
Algunos marcos de agentes pueden persistir el estado del agente, crear puntos de control de ejecución y reanudar más tarde.
Esto es útil cuando el agente en sí tiene un proceso de razonamiento de múltiples pasos.
programador o flujo de trabajo
-> tiempo de ejecución del agente
-> cargar punto de control
-> llamar a herramientas
-> guardar punto de control
-> reanudar más tarde
Cómo se ejecuta
Un programador externo o flujo de trabajo inicia el agente. El tiempo de ejecución del agente carga el estado anterior, ejecuta el siguiente paso, llama a herramientas si es necesario y escribe un punto de control.
El tiempo de ejecución del agente no debería ser tu único programador. Es mejor tratarlo como la capa de razonamiento dentro de una arquitectura de backend más grande.
Modelo de estado
El almacenamiento de puntos de control del agente contiene:
nodo actual
mensajes
salidas de herramientas
estado de razonamiento intermedio
acción pendiente
La memoria a largo plazo contiene:
preferencias estables del usuario
hechos
contexto del proyecto
referencias de fuente
El estado operativo sigue perteneciendo en otro lugar:
programación de sondeo
cursor
estado
conteo de reintento
registros de deduplicación
Una regla útil: la memoria no es un cursor, y un punto de control no es una cola. La memoria del agente almacena lo que el modelo sabe; el estado operativo rastrea dónde está el proceso y qué ha hecho. Confluir los dos conduce a errores sutiles que solo aparecen bajo concurrencia o después de un reinicio. El espacio de diseño completo para memoria de trabajo, estado duradero y capas de recuperación se cubre en Sistemas de Memoria en Asistentes de IA.
Mejor uso
Utiliza el tiempo de ejecución persistente del agente para:
- Investigación de múltiples pasos.
- Agentes que hacen pausa y reanudan.
- Trabajo con supervisión humana.
- Razonamiento intensivo en herramientas.
- Tareas donde el contexto se acumula con el tiempo.
Debilidades
La persistencia del agente no es lo mismo que la fiabilidad operativa. Aún necesitas programación, bloqueo, reintentos, límites de velocidad y registros de auditoría.
Método 9: Sincronización de base de datos más evaluación de cambios
En este patrón, el sondeo se utiliza para sincronizar datos externos en tu propia base de datos. El asistente luego reacciona a los cambios locales de la base de datos en lugar de consultar APIs externas directamente en cada ciclo de evaluación.
sondeador de sincronización
-> API externa
-> base de datos local
-> evaluador de cambios
-> acción del asistente
Esto separa la sincronización de datos de la inteligencia del asistente. El trabajador de sincronización es responsable de mantener los registros locales actualizados; el evaluador es responsable de decidir qué hacer con los cambios. Cada capa puede ser probada, monitoreada y escalada de forma independiente.
Cómo se ejecuta
El trabajador de sincronización obtiene periódicamente cambios externos y escribe registros normalizados en tu base de datos. Un segundo trabajador o flujo de cambios detecta las filas actualizadas y decide si el asistente debe actuar.
Modelo de estado
La tabla de sincronización almacena:
external_id
source_type
raw_payload
normalized_fields
external_updated_at
synced_at
version
content_hash
El estado de sincronización almacena:
source_cursor
last_sync_at
rate_limit_status
failure_count
La tabla de evaluación del asistente almacena:
object_id
evaluation_status
last_evaluated_hash
decision
notification_id
Mejor uso
Utiliza este patrón para:
- Sincronización de CRM.
- Sistemas de ticketing.
- Documentos contables.
- Inventario de productos.
- Revisión de cumplimiento.
- Indexación de búsqueda.
- Paneles internos.
Debilidades
Sincronizar todo puede ser costoso e innecesario. También puede crear obligaciones de privacidad y retención. Utiliza este patrón cuando los datos locales tienen valor más allá de una sola acción del asistente.
Método 10: Sondeo adaptativo
El sondeo adaptativo cambia la frecuencia según el estado, la urgencia o la actividad reciente.
objeto activo: sondear cada 1 minuto
objeto esperando: sondear cada 1 hora
objeto obsoleto: sondear una vez al día
objeto completado: dejar de sondear
Cómo se ejecuta
Después de cada ejecución, el trabajador decide cuándo debería ocurrir la siguiente ejecución.
Si el objeto cambió recientemente, sondea antes. Si nada ha cambiado por mucho tiempo, ralentiza. Si la tarea está completa, para.
Modelo de estado
El estado del sondeo incluye:
current_interval
minimum_interval
maximum_interval
backoff_policy
last_activity_at
priority
stop_condition
La instantánea de la fuente incluye:
status
updated_at
activity_level
expected_next_change
Mejor uso
Utiliza el sondeo adaptativo para:
- Estado de implementación.
- Seguimiento de entregas.
- Disponibilidad de slots del calendario.
- Monitoreo de precios.
- Trabajos de compilación.
- Tareas de proveedor de larga ejecución.
- Cualquier fuente con actualizaciones intermitentes.
Debilidades
El sondeo adaptativo puede ser más difícil de razonar. Si una tarea debe ejecutarse en un estricto momento, manténla estricta. No hagas que los trabajos de cumplimiento sean inteligentes.
Método 11: Sondeo semántico con un evaluador de LLM
El sondeo semántico se utiliza cuando la condición es difusa.
El código puede responder:
¿El estado es igual a Completado?
¿El precio es inferior a 100?
¿Hay un nuevo mensaje?
Un LLM puede ayudar a responder:
¿Este correo electrónico suena urgente?
¿Es probable que este cliente esté insatisfecho?
¿Este artículo de investigación es relevante?
¿Este cambio requiere mi atención?
Cómo se ejecuta
El trabajador primero aplica filtros deterministas baratos. Solo los elementos candidatos van al LLM.
¿nuevo elemento?
¿coincide con los filtros de la fuente?
¿no ya procesado?
¿no obviamente irrelevante?
Luego el LLM evalúa el conjunto de candidatos más pequeño y devuelve una salida estructurada.
{
"should_notify": true,
"urgency": "high",
"reason": "El cliente informa una interrupción en producción."
}
Modelo de estado
La definición del sondeo almacena:
semantic_condition
examples
negative_examples
user_preference_summary
model_config
El registro de evaluación almacena:
input_reference
model
prompt_version
structured_output
confidence
cost
latency
El estado del sondeo almacena:
last_seen_ids
last_evaluated_hashes
last_decision
last_decision_reason
Mejor uso
Utiliza el sondeo semántico para:
- Detección de correos electrónicos importantes.
- Monitoreo de sentimiento del cliente.
- Alertas de investigación.
- Detección de oportunidades de ventas.
- Triaje de seguridad.
- Resúmenes ejecutivos.
Debilidades
Las llamadas al LLM cuestan dinero y añaden latencia. También pueden ser inconsistentes si los prompts y esquemas son flojos. Utiliza filtros deterministas primero. Pregunta al modelo solo cuando realmente se necesite juicio.
Tabla de decisiones: Elegir un método de agente de sondeo
| Método | Mejor Aplicación | Pros | Cons |
|---|---|---|---|
| Trabajador de sondeo programado | Tareas recurrentes simples del asistente | Fácil de construir, fácil de depurar, infraestructura mínima | Escalabilidad limitada, reintentos básicos, puede sobrecargar trabajadores si muchos sondeos se disparan juntos |
| Trabajadores de sondeo basados en colas | Asistentes SaaS en producción con muchos usuarios | Escalable, resiliente, soporta reintentos y contrapresión | Requiere infraestructura de cola, idempotencia, manejo de cartas muertas |
| Herramienta externa como cola de tareas | Ejecución de tareas basada en Notion, Jira, Linear, Trello | Amigable para humanos, fácil de inspeccionar, funciona con flujos de trabajo existentes | Las herramientas externas no son colas perfectas, la reclamación atómica puede ser difícil |
| Bucle de trabajador de larga ejecución | Prototipos y herramientas internas | Muy simple, rápido de implementar, pocas partes móviles | Fiabilidad débil, mal comportamiento multi-réplica, control operativo limitado |
| Webhooks primero con respaldo de sondeo | Integraciones impulsadas por eventos | Reacción rápida, menos llamadas a API, la reconciliación captura eventos perdidos | Necesita extremo público, validación de eventos, deduplicación, soporte de webhook del proveedor |
| Sondeo de trabajos en segundo plano del lado del proveedor | Trabajos de proveedor de IA de larga ejecución | Maneja tareas de IA lentas, modelo de estado simple, bueno para UX asíncrona | Solo gestiona el estado del trabajo del proveedor, no el flujo de trabajo de negocio completo |
| Motor de flujo de trabajo duradero | Procesos de múltiples pasos de larga ejecución | Reintentos fuertes, temporizadores, historial de auditoría, recuperación después de fallas | Más infraestructura y conceptos, pesado para sondeo simple |
| Tiempo de ejecución persistente del agente | Agentes de razonamiento de múltiples pasos | Preserva el contexto del agente, soporta pausa y reanudación, bueno para tareas intensivas en herramientas | No es un reemplazo de programador o cola, aún necesita backend operativo |
| Sincronización de base de datos más evaluación de cambios | Sistemas donde los datos externos tienen valor local | Separación limpia, informes locales, menos llamadas externas repetidas | Más almacenamiento, más complejidad de sincronización, posibles preocupaciones de privacidad y retención |
| Sondeo adaptativo | Fuentes intermitentes o tareas de urgencia variable | Reduce costos, respeta límites de velocidad, reacciona más rápido cuando la actividad es alta | Más difícil de razonar, no ideal para horarios estrictos |
| Sondeo semántico con evaluador de LLM | Condiciones difusas que requieren juicio | Maneja intención de lenguaje natural, resúmenes útiles, decisiones flexibles | Costo, latencia, riesgo de calidad del prompt, no debería reemplazar comprobaciones de código simples |
Arquitectura predeterminada recomendada
Para la mayoría de los asistentes de IA en producción, comienza con esto:
tabla de sondeos
-> programador
-> cola
-> trabajadores sin estado
-> filtros deterministas
-> evaluador de LLM opcional
-> notificación o acción del asistente
Un esquema mínimo:
CREATE TABLE polls (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
source_type TEXT NOT NULL,
source_ref TEXT NOT NULL,
condition_text TEXT NOT NULL,
schedule_type TEXT NOT NULL,
interval_seconds INTEGER,
timezone TEXT,
next_run_at TIMESTAMP NOT NULL,
last_run_at TIMESTAMP,
cursor_value TEXT,
last_hash TEXT,
status TEXT NOT NULL,
failure_count INTEGER NOT NULL DEFAULT 0,
last_error TEXT,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
);
CREATE TABLE poll_runs (
id TEXT PRIMARY KEY,
poll_id TEXT NOT NULL,
started_at TIMESTAMP NOT NULL,
finished_at TIMESTAMP,
status TEXT NOT NULL,
items_checked INTEGER,
items_matched INTEGER,
decision_summary TEXT,
error TEXT
);
CREATE TABLE notifications (
id TEXT PRIMARY KEY,
poll_id TEXT NOT NULL,
user_id TEXT NOT NULL,
dedupe_key TEXT NOT NULL,
title TEXT NOT NULL,
body TEXT NOT NULL,
delivered_at TIMESTAMP,
UNIQUE (dedupe_key)
);
Esto te da una separación limpia:
el programador posee el tiempo
la cola posee el amortiguamiento
el trabajador posee la ejecución
la base de datos posee el estado
el LLM posee el juicio semántico
el asistente posee la interacción con el usuario
Esa separación es el corazón de un agente de sondeo fiable.
Ejemplo: Agente Hermes procesando tareas de Notion
Ahora apliquemos la arquitectura a un caso concreto.
Supongamos que una base de datos de Notion contiene tareas. Hermes debería ejecutarse cada 10 minutos, tomar una tarea en estado Todo, establecerla en InProgress, ejecutarla y luego marcarla como Complete.
Esto se describe mejor como:
herramienta externa como cola de tareas
+
trabajador de sondeo programado
+
ejecución basada en reclamación o arrendamiento
Para una versión en producción, se convierte en:
sondeo basado en colas con Notion como el buzón de tareas visible para humanos
Propiedades de la tarea de Notion
La base de datos de Notion debería contener campos como:
Nombre
Estado: Todo | InProgress | Complete | Failed
Prioridad
CreatedAt
ClaimedBy
ClaimedAt
ClaimExpiresAt
RunId
RetryCount
LastError
CompletedAt
Los campos importantes son ClaimedAt, ClaimExpiresAt y RunId. Hacen que la reclamación de la tarea sea visible y recuperable.
Estado de ejecución de Hermes
Hermes también debería mantener su propio registro de ejecución:
run_id
notion_page_id
started_at
finished_at
status
input_snapshot
tool_calls
result_summary
error
idempotency_key
Esto te protege si Notion se edita manualmente, si una llamada a la API falla o si necesitas auditar lo que Hermes realmente hizo.
Flujo de ejecución
Cada 10 minutos:
el programador de Hermes crea una ejecución
Trabajador de Hermes:
encuentra una tarea de Notion donde Status = Todo
ordena por Prioridad y CreatedAt
reclama la tarea estableciendo Status = InProgress
escribe ClaimedBy, ClaimedAt, ClaimExpiresAt y RunId
ejecuta la tarea
escribe registros de ejecución en el backend de Hermes
establece Status de Notion = Complete en caso de éxito
establece Status de Notion = Failed en caso de falla
Si Hermes falla después de reclamar una tarea, el arrendamiento puede expirar:
Status = InProgress
ClaimExpiresAt < ahora
Una ejecución futura puede luego recuperar la tarea o marcarla como fallida.
Manejo de errores
En caso de éxito:
Status = Complete
CompletedAt = ahora
LastError = vacío
En caso de falla recuperable:
Status = Todo
RetryCount = RetryCount + 1
LastError = mensaje de error corto
En caso de falla no recuperable:
Status = Failed
LastError = explicación clara
Para seguridad, Hermes también debería usar una clave de idempotencia:
notion_page_id + task_version + action_type
Esto evita que la misma tarea se ejecute dos veces si ocurre un reintento en el momento equivocado.
Por qué esto no es solo sondeo
La parte del sondeo es solo el mecanismo de despertar. La arquitectura real es la reclamación de tareas y la ejecución fiable.
Una implementación ingenua dice:
Cada 10 minutos, encuentra una tarea Todo y hazla.
Una implementación fiable dice:
Cada 10 minutos, reclama exactamente una tarea elegible, registra la ejecución, ejecuta de forma idempotente y mueve la tarea a un estado terminal.
Esa es la diferencia entre una demostración y un agente en el que puedes confiar.
Errores comunes de los agentes de sondeo
Error 1: Sin protocolo de reclamación
Si dos trabajadores pueden ver la misma tarea, ambos pueden ejecutarla.
Utiliza:
ClaimedBy
ClaimedAt
ClaimExpiresAt
RunId
Incluso si actualmente ejecutas un trabajador, diseña como si un segundo trabajador pudiera aparecer más tarde.
Error 2: Sin clave de deduplicación
Cada acción externa debería tener una clave de deduplicación.
user_id + poll_id + source_object_id + action_type + condition_version
Esto evita notificaciones repetidas, correos electrónicos repetidos, ejecución de tareas repetidas y llamadas a herramientas repetidas. Los principios más amplios detrás del alcance, almacenamiento y prueba de estas claves se aplican igualmente aquí — consulta Idempotencia en Sistemas Distribuidos que Realmente Funciona.
Error 3: Llamar al LLM demasiado temprano
No pidas al modelo que haga filtrado de base de datos.
Malo:
Enviar todas las tareas al LLM y preguntar cuál es Todo.
Mejor:
Usar el filtro de la API de Notion para obtener tareas Todo.
Luego usar el LLM solo si se necesita interpretación de tareas.
Error 4: Tratar Notion como el único backend
Notion es una buena interfaz humana. No es un backend de ejecución completo.
Mantén los registros de ejecución, reintentos, trazas y registros de idempotencia en Hermes.
Error 5: Sondeo infinito
Cada sondeo debería tener una condición de parada.
Ejemplos:
parar después del éxito
parar después de la fecha
parar después de reintentos máximos
parar cuando el usuario lo desactive
parar después de fallas de autorización repetidas
Un agente de sondeo sin una condición de parada es una fuga de costos silenciosa.
Error 6: Sin observabilidad
Deberías poder responder:
¿Qué ejecutó el agente?
¿Por qué se ejecutó?
¿Qué leyó?
¿Qué cambió?
¿Por qué falló?
¿Notificó al usuario?
¿Se ejecutó dos veces?
Si no puedes responder esas preguntas, el sistema no está listo para trabajo importante.
Lista de verificación de observabilidad
Rastrea métricas como:
polls_due
polls_started
polls_succeeded
polls_failed
tasks_claimed
tasks_completed
tasks_failed
claim_expired_count
duplicate_suppressed_count
llm_calls
llm_cost
rate_limit_count
average_run_duration
Registra campos como:
poll_id
run_id
source_type
source_object_id
claim_id
cursor_before
cursor_after
decision
dedupe_key
error
Construye una vista de administración para:
sondeos activos
tareas InProgress atascadas
fallas recientes
tareas de reintento alto
trabajos de cartas muertas
evaluaciones de LLM costosas
integraciones deshabilitadas
Los agentes de sondeo se ejecutan en segundo plano, donde las fallas son silenciosas y los problemas pueden acumularse antes de que alguien se dé cuenta. Los sistemas en segundo plano necesitan visibilidad integrada desde el principio, no añadida como un pensamiento posterior cuando algo sale mal. Para la pila completa de observabilidad para sistemas de IA y LLM — métricas, trazas, registros estructurados y SLOs — consulta Observabilidad para Sistemas de LLM: Métricas, Trazas, Registros y Pruebas en Producción.
Recomendación final
Para un asistente de IA serio, comienza con trabajadores de sondeo basados en colas y un almacén de estado duradero. Añade webhooks donde los proveedores los admiten. Utiliza el sondeo adaptativo cuando los límites de velocidad importen. Utiliza un motor de flujo de trabajo duradero cuando el proceso sea de larga ejecución y múltiples pasos. Utiliza el tiempo de ejecución persistente del agente cuando el agente necesite razonar a lo largo del tiempo.
Para el ejemplo de Hermes y Notion, la arquitectura correcta es:
Notion como el buzón de tareas visible para humanos
Programador de Hermes cada 10 minutos
Trabajador de Hermes con lógica de reclamación o arrendamiento
Backend de Hermes para registros de ejecución e idempotencia
Actualizaciones de estado de Notion para visibilidad
El intervalo de sondeo no es la parte difícil. La parte difícil es asegurarse de que el agente reclame una tarea, la ejecute una vez, registre lo que sucedió y deje el sistema en un estado que los humanos puedan entender.
Eso es lo que convierte un script de sondeo en un asistente de IA fiable — no el intervalo, no el modelo, sino la disciplina alrededor de reclamar el trabajo, registrarlo y dejar el sistema en un estado que tanto humanos como ejecuciones futuras puedan entender.