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"

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:
- Si el agente tiene acceso a la herramienta en absoluto
- 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 agente | Herramienta oculta para el agente |
|---|---|
✅ Base de datos | ❌ Sistema de pagos |
✅ Correo | ❌ Panel admin |
✅ Almacenamiento de archivos | ❌ Configuració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 datos | Prohibido en base de datos |
|---|---|
| ✅ Ver registros | ❌ Modificar existentes |
| ✅ Crear nuevos | ❌ Eliminar registros |
Cómo funciona todo junto
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:
{
"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:
- Si la herramienta está permitida
- Si la acción está permitida
- 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:
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:
ALLOWED_TOOLS = {"database"}
ALLOWED_ACTIONS = {
"database": {"read_user"} # delete_user está prohibida
}
Ahora el modelo forma la solicitud (qué quiere hacer exactamente):
model_output = {
"tool": "database",
"action": "read_user",
"parameters": {"user_id": 123}
}
El sistema recibe esta solicitud y verifica las reglas antes de ejecutar:
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:
result = run_tool_call(model_output)
# {"id": 123, "name": "Anna"}
Si el modelo pide una acción prohibida (delete_user), el sistema devuelve:
{
"error": "Acción no permitida"
}
Ejemplo completo de implementación con LLM conectada
Analogía de la vida real
Imagina que le das una tarjeta bancaria a un asistente. Pero con límite.
| El asistente puede | El 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:
{
"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.