Cómo limitar el acceso a herramientas

Tool calls es el lugar donde los agentes rompen producción: schema drift, retries, efectos secundarios (cambios de estado), y ese mismo token admin de 'oops'. Así es como se sobrevive.
En esta página
  1. Qué significa "herramienta permitida"
  2. Dos niveles de acceso
  3. 1️⃣ Acceso a la herramienta
  4. 2️⃣ Acciones dentro de la herramienta
  5. Cómo funciona todo junto
  6. Cómo se establecen estos límites
  7. En código se ve así
  8. Analogía de la vida real
  9. Qué pasa si el agente sale de los límites
  10. En resumen
  11. FAQ
  12. Qué sigue

Cuando un agente recibe acceso a herramientas, recibe la capacidad de actuar.

Puede:

  • Leer datos
  • Llamar APIs
  • Iniciar procesos
  • Cambiar el estado del sistema

Y justo aquí aparece un riesgo nuevo.

Porque el agente no sabe que:

  • Esta API cuesta dinero
  • Este proceso puede romper el sistema
  • Estos datos no se pueden cambiar

Solo ve el objetivo.

Y si para lograrlo necesita ejecutar una acción, intentará ejecutarla.

Aunque esa acción sea:

  • Costosa
  • Peligrosa
  • O irreversible

Por eso, en sistemas reales al agente no se le da acceso total a todo.

Se le limita:

  • Qué herramientas están disponibles
  • Qué acciones están permitidas
  • Y cuándo debe detenerse

Sin estos límites, un agente no es un ejecutor.
Es un proceso que puede ir demasiado lejos.

Qué significa "herramienta permitida"

Agente de IA: qué significa "herramienta permitida"

No toda herramienta que existe en el sistema debe estar disponible para el agente.

Antes de empezar, se le pasan solo las herramientas que tiene derecho a usar.

Pero acceso a una herramienta no lo es todo.

Incluso si el agente recibió una herramienta, eso no significa que pueda hacer todo con ella.

Existen dos niveles de acceso:

Dos niveles de acceso

Cuando decimos que el agente tiene una “herramienta permitida”, eso puede significar dos cosas distintas:

  1. Si el agente tiene acceso a la herramienta en absoluto
  2. Qué exactamente puede hacer dentro de esa herramienta

1️⃣ Acceso a la herramienta

Primero, el sistema decide:

Qué herramientas el agente ve en absoluto

Herramienta entregada al agenteHerramienta oculta para el agente
Base de datosSistema de pagos
CorreoPanel admin
Almacenamiento de archivosConfiguración del sistema

Si una herramienta no se entrega, el agente no sabe que existe.

No puede:

  • Llamarla
  • Pedirla
  • Usarla por accidente

2️⃣ Acciones dentro de la herramienta

Pero incluso si la herramienta está disponible, eso no significa control total.

Una herramienta puede soportar varias acciones.

Por ejemplo: Base de datos

Permitido en base de datosProhibido en base de datos
✅ Ver registros❌ Modificar existentes
✅ Crear nuevos❌ Eliminar registros

Cómo funciona todo junto

Diagram

Es decir: ve la herramienta, pero puede usar solo una parte de sus capacidades.

Si intenta una acción prohibida, el sistema simplemente no lo permite.

La solicitud será rechazada.

Y el agente recibe:

JSON
{
  "error": "Acción no permitida"
}

Después de eso, tiene que elegir otro paso.

Cómo se establecen estos límites

En un sistema real, los límites se definen antes de que el agente empiece a trabajar.

Se le define:

  • Qué herramientas están disponibles
  • Qué acciones están permitidas
  • Qué parámetros se pueden pasar

Por ejemplo:

  • Permitir leer datos solo de una tabla específica
  • Enviar correos solo dentro de la empresa
  • Trabajar solo con archivos en una carpeta específica

Es decir, el agente recibe no solo herramientas, sino reglas claras de uso.

Cuando pide ejecutar una acción, el sistema verifica:

  1. Si la herramienta está permitida
  2. Si la acción está permitida
  3. Si los parámetros cumplen las reglas

Y solo después la ejecuta.

Si al menos una condición no se cumple, la solicitud queda bloqueada.

En código se ve así

Abajo está el mismo principio en formato simple (como en tool-calling-basics).

Primero tenemos herramientas:

PYTHON
def read_user(user_id: int):
    return {"id": user_id, "name": "Anna"}


def delete_user(user_id: int):
    return {"deleted": user_id}


TOOLS = {
    "database": {
        "read_user": read_user,
        "delete_user": delete_user,
    }
}

Aquí definimos qué está permitido exactamente:

PYTHON
ALLOWED_TOOLS = {"database"}
ALLOWED_ACTIONS = {
    "database": {"read_user"}  # delete_user está prohibida
}

Ahora el modelo forma la solicitud (qué quiere hacer exactamente):

PYTHON
model_output = {
    "tool": "database",
    "action": "read_user",
    "parameters": {"user_id": 123}
}

El sistema recibe esta solicitud y verifica las reglas antes de ejecutar:

PYTHON
def run_tool_call(call: dict):
    tool = call["tool"]
    action = call["action"]
    params = call["parameters"]

    if tool not in ALLOWED_TOOLS:
        return {"error": "Herramienta no permitida"}

    if action not in ALLOWED_ACTIONS.get(tool, set()):
        return {"error": "Acción no permitida"}

    if action == "read_user" and "user_id" not in params:
        return {"error": "Parámetros inválidos"}

    return TOOLS[tool][action](**params)

Si todo está bien, obtenemos un resultado:

PYTHON
result = run_tool_call(model_output)
# {"id": 123, "name": "Anna"}

Si el modelo pide una acción prohibida (delete_user), el sistema devuelve:

JSON
{
  "error": "Acción no permitida"
}

Ejemplo completo de implementación con LLM conectada

PYPython
TSTypeScript · pronto

Analogía de la vida real

Imagina que le das una tarjeta bancaria a un asistente. Pero con límite.

El asistente puedeEl asistente no puede
✅ Pagar una suscripción❌ Retirar efectivo
✅ Pedir un taxi❌ Hacer una transferencia
✅ Comprar papelería❌ Gastar más de $100

La tarjeta es la misma.
Pero las reglas de uso son diferentes.


Lo mismo con herramientas.

El agente puede tener acceso a la base de datos. Pero solo para lectura.

Puede enviar correos. Pero solo dentro de la empresa.

Puede llamar APIs. Pero solo con presupuesto limitado.


Ve la herramienta, pero no puede usarla como quiera.

Qué pasa si el agente sale de los límites

El agente puede pedir ejecutar cualquier acción.

Pero eso no significa que vaya a ser ejecutada.

Si:

  • Llama una herramienta prohibida
  • Pasa parámetros no permitidos
  • O supera un límite establecido

El sistema simplemente bloquea la solicitud.

Y devuelve:

JSON
{
  "error": "Acción no permitida"
}

Para el agente, esto se ve como otro resultado de su acción.

Ve que ese camino está cerrado y tiene que elegir otro.

Tal vez:

  • Usar otra herramienta
  • Cambiar parámetros
  • O terminar la tarea con lo que tiene

Así es como los límites no detienen al agente por completo.

Solo definen dónde puede actuar y dónde debe detenerse.

En resumen

El acceso a herramientas no es solo "permitido" o "prohibido".

Es un conjunto de reglas que define:

  • Qué herramientas puede usar el agente
  • Qué acciones dentro de ellas están permitidas
  • Qué parámetros se pueden pasar

Cuando el agente sale de los límites, el sistema bloquea la solicitud.
Pero eso no detiene el trabajo. Obliga a elegir otro camino.

Así es como los límites convierten al agente en un ejecutor controlado, no en un proceso sin control.

FAQ

Q: ¿Acceso a una herramienta significa control total sobre ella?
A: No. El agente puede tener acceso a una herramienta, pero usar solo acciones permitidas.

Q: ¿Qué pasa si el agente pide una acción prohibida?
A: El sistema verifica la solicitud y la bloquea si rompe las reglas establecidas.

Q: ¿El agente se detiene después de que se bloquea una acción?
A: No. Recibe el resultado y debe elegir otro paso disponible.

Qué sigue

Ahora ya sabes cómo limitar el acceso del agente a herramientas.

Pero aparece otra pregunta:

¿Cómo decide el agente qué hacer en general?

Cuando recibe una tarea, ¿planifica todos los pasos por adelantado, como una persona con lista de tareas?
¿O reacciona a la situación y elige el siguiente paso obvio?

No son solo enfoques distintos.
Esto define cómo se comporta el agente durante el trabajo y cuándo puede irse por el camino incorrecto.

⏱️ 8 min de lecturaActualizado Mar, 2026Dificultad: ★★☆
Continuación práctica

Ejemplos de implementación del patrón

Continúa con la implementación usando proyectos de ejemplo.

Integrado: control en producciónOnceOnly
Guardrails para agentes con tool-calling
Lleva este patrón a producción con gobernanza:
  • Presupuestos (pasos / topes de gasto)
  • Permisos de herramientas (allowlist / blocklist)
  • Kill switch y parada por incidente
  • Idempotencia y dedupe
  • Audit logs y trazabilidad
Mención integrada: OnceOnly es una capa de control para sistemas de agentes en producción.
Autor

Esta documentación está curada y mantenida por ingenieros que despliegan agentes de IA en producción.

El contenido es asistido por IA, con responsabilidad editorial humana sobre la exactitud, la claridad y la relevancia en producción.

Los patrones y las recomendaciones se basan en post-mortems, modos de fallo e incidentes operativos en sistemas desplegados, incluido durante el desarrollo y la operación de infraestructura de gobernanza para agentes en OnceOnly.