Definir una Tool del servidor
En NocoBase, una Tool (herramienta) ejecuta operaciones concretas, como consultas, escrituras o solicitudes externas. Las Tools del servidor suelen definirse con defineTools() de @nocobase/ai y se colocan en el directorio src/ai/**/tools/ del plugin.
Estructura mínima de una Tool
Las Tools del servidor se definen con defineTools(), proporcionada por @nocobase/ai. La siguiente Tool recibe un nombre y devuelve un saludo:
Si la ruta del archivo es src/ai/tools/greetDeveloper.ts, el cargador utiliza el nombre de archivo greetDeveloper como nombre final de la Tool. Aunque definition.name tenga otro valor, el nombre del archivo lo sobrescribe durante el registro.
Por tanto, de forma predeterminada, mantén el mismo nombre para el archivo, definition.name, las referencias de las Skills y el registro frontend.
Opciones de configuración de una Tool
Las opciones principales de defineTools() son:
La elección de scope afecta directamente a cómo entra una Tool en el contexto de un empleado de IA:
Se recomienda utilizar SPECIFIED de forma predeterminada. Usa GENERAL solo cuando todos los empleados de IA necesiten esa capacidad; utiliza CUSTOM cuando quieras que el administrador pueda seleccionarla para cada empleado.
definition está destinada al modelo
definition.description y definition.schema influyen en si el modelo selecciona una Tool y en cómo construye sus parámetros. La descripción debe aclarar tres aspectos:
- En qué casos debe llamarse
- Qué representa cada parámetro
- Qué tareas no debe gestionar esta Tool
Se recomienda utilizar Zod para el schema de parámetros:
El nombre de la Tool también debe mantenerse estable. Las Skills, la configuración de empleados de IA, las tarjetas frontend y los mensajes de chat guardados la buscan por su nombre.
Qué recibe invoke()
El método invoke() del servidor recibe tres parámetros:
A través de ctx puedes acceder a la aplicación actual, la base de datos, la información de autenticación y los parámetros de la action. Por ejemplo:
La Tool debe devolver una estructura que permita determinar si la operación se completó correctamente. Las Tools integradas suelen utilizar esta forma:
Ante un error de negocio previsto, también debe devolver un estado y un motivo claros, sin obligar al modelo a adivinar si la operación tuvo éxito.
Usar un directorio para descripciones extensas
Además de un único archivo, una Tool también puede utilizar un directorio:
index.ts exporta de forma predeterminada el resultado de defineTools(). Cuando existe description.md, todo su contenido sobrescribe definition.description, lo que resulta útil para guardar instrucciones de uso extensas de la Tool.
El nombre del directorio documentSearch se convierte en el nombre final registrado.
Ejemplo de Tool integrada: subAgentWebSearch
packages/plugins/@nocobase/plugin-ai/src/ai/tools/subAgentWebSearch.ts muestra una Tool del servidor completa:
Esta implementación ofrece varias prácticas reutilizables:
- Utiliza
SPECIFIEDpara limitar la herramienta a empleados o Skills concretos - Utiliza Zod para restringir los parámetros generados por el modelo
- Lee la configuración de la conversación de IA actual desde
ctx.action.params.values - Agrupa varias consultas independientes en un solo ToolCall y las ejecuta en paralelo mediante
Promise.all() - Devuelve resultados estructurados con fuentes claras para que el modelo superior pueda seguir procesándolos
Enlaces relacionados
- Desarrollo de plugins para empleados de IA — Elegir el nivel de capacidad que necesitas ampliar
- Definir una Skill — Organizar mediante una Skill el flujo de llamadas de varias Tools
- Ejemplo completo: crear un empleado de IA integrado — Consultar un ejemplo ejecutable de Tool
- Añadir interacción frontend a una Tool — Añadir una interfaz de confirmación y selección a un ToolCall

