MandAPI
Español ▾
Flujos de aplicación

Detén llamadas repetidas y bucles de agentes

Aplica un límite de pasos y detecta llamadas idénticas mediante registros de la aplicación.

Usa esta guía con tu asistente de programación

Leer las instrucciones
Añade un control local a las operaciones solicitadas por el modelo. Valida cada llamada antes de ejecutarla, calcula un hash de acción y argumentos normalizados, limita los pasos por ejecución y detén llamadas idénticas consecutivas excesivas. Excluye fechas variables del hash. Registra el motivo y ofrece derivación humana. Prueba solo operaciones locales simuladas, sin prometer una Decisions API ni detección semántica de MandAPI.
TXT

Define cuándo detener el flujo

Un modelo puede proponer la misma llamada varias veces cuando falta un resultado o no lo entiende. Pon un límite en la aplicación que ejecuta el bucle. No dependas únicamente de que la siguiente respuesta del modelo decida detenerse.

Empieza con dos reglas: un máximo de pasos por ejecución y un máximo de llamadas idénticas consecutivas. Ajusta los límites a tu proceso. Repetir una lectura puede ser útil; repetir una escritura puede tener consecuencias. Este ejemplo local detiene una operación antes de ejecutarla y no llama a MandAPI ni a herramientas.

Comprueba las llamadas antes de ejecutarlas

Normaliza la acción y los argumentos, y calcula un hash de su representación. Incluye solo campos que definan la operación. Fechas de solicitud o identificadores aleatorios harían que operaciones equivalentes parecieran distintas.

python
import hashlib
import json

class LoopGuard:
    def __init__(self, max_steps=8, max_identical=2):
        self.max_steps = max_steps
        self.max_identical = max_identical
        self.steps = 0
        self.last = None
        self.repeated = 0

    def check(self, name, arguments):
        if self.steps >= self.max_steps:
            raise RuntimeError("Limite de pasos alcanzado")
        raw = json.dumps(
            {"name": name, "arguments": arguments},
            sort_keys=True, separators=(",", ":"),
        )
        fingerprint = hashlib.sha256(raw.encode()).hexdigest()
        self.repeated = self.repeated + 1 if fingerprint == self.last else 1
        self.last = fingerprint
        if self.repeated > self.max_identical:
            raise RuntimeError("Operacion repetida detenida")
        self.steps += 1
        return {"step": self.steps, "fingerprint": fingerprint}

guard = LoopGuard()
print(guard.check("lookup_order", {"order_id": "demo-001"}))
print(guard.check("lookup_order", {"order_id": "demo-001"}))
try:
    guard.check("lookup_order", {"order_id": "demo-001"})
except RuntimeError as error:
    print(error)

Conéctalo al bucle del modelo

Aplica la comprobación después de validar la propuesta y antes de ejecutar la operación. Guarda el registro con el identificador de ejecución, resultado y motivo de parada. Cuando se detenga, devuelve una explicación o deriva la tarea a una persona. Las reglas pertenecen a tu aplicación; no intervienen una Decisions API ni puntuaciones de confianza.

Comprueba el resultado

La demostración permite dos consultas idénticas y detiene la tercera. Prueba también llamadas diferentes hasta alcanzar el máximo de pasos. El hash detecta repetición exacta normalizada, no equivalencia semántica; mantén el límite de pasos como control independiente.

Referencias

Temas inspirados en documentación pública; instrucciones y ejemplos adaptados para MandAPI.