> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Esta especificación define un sistema de agrupación de herramientas para agentes de TrustGraph que permite un control preciso sobre qué herramientas están disponibles para solicitudes específicas. El sistema introduce un filtrado de herramientas basado en grupos a través de la configuración y la especificación a nivel de solicitud, lo que permite mejores límites de seguridad, gestión de recursos y partición funcional de las capacidades de los agentes.
### 1. Descripción General
#### 1.1 Declaración del Problema
Actualmente, los agentes de TrustGraph tienen acceso a todas las herramientas configuradas, independientemente del contexto de la solicitud o los requisitos de seguridad. Esto crea varios desafíos:
**Riesgo de Seguridad**: Herramientas sensibles (por ejemplo, modificación de datos) están disponibles incluso para consultas de solo lectura.
**Desperdicio de Recursos**: Se cargan herramientas complejas incluso cuando las consultas simples no las requieren.
**Confusión Funcional**: Los agentes pueden seleccionar herramientas inapropiadas cuando existen alternativas más simples.
**Aislamiento Multi-inquilino**: Diferentes grupos de usuarios necesitan acceso a diferentes conjuntos de herramientas.
#### 1.2 Descripción General de la Solución
El sistema de agrupación de herramientas introduce:
1.**Clasificación por Grupos**: Las herramientas se etiquetan con membresías de grupos durante la configuración.
2.**Filtrado a Nivel de Solicitud**: AgentRequest especifica qué grupos de herramientas están permitidos.
3.**Aplicación en Tiempo de Ejecución**: Los agentes solo tienen acceso a las herramientas que coinciden con los grupos solicitados.
4.**Agrupación Flexible**: Las herramientas pueden pertenecer a múltiples grupos para escenarios complejos.
### 2. Cambios en el Esquema
#### 2.1 Mejora del Esquema de Configuración de Herramientas
La configuración de herramientas existente se mejora con un campo `group`:
**Antes:**
```json
{
"name": "knowledge-query",
"type": "knowledge-query",
"description": "Query the knowledge graph"
}
```
**Después:**
```json
{
"name": "knowledge-query",
"type": "knowledge-query",
"description": "Query the knowledge graph",
"group": ["read-only", "knowledge", "basic"]
}
```
**Especificación del campo de grupo:**
`group`: Array(String) - Lista de grupos a los que pertenece esta herramienta.
**Opcional**: Las herramientas sin campo de grupo pertenecen al grupo "predeterminado".
**Múltiple pertenencia**: Las herramientas pueden pertenecer a múltiples grupos.
**Sensible a mayúsculas y minúsculas**: Los nombres de los grupos deben coincidir exactamente con la cadena.
#### 2.1.2 Mejora de la transición de estado de la herramienta
Las herramientas pueden especificar opcionalmente transiciones de estado y disponibilidad basada en el estado:
```json
{
"name": "knowledge-query",
"type": "knowledge-query",
"description": "Query the knowledge graph",
"group": ["read-only", "knowledge", "basic"],
"state": "analysis",
"available_in_states": ["undefined", "research"]
}
```
**Especificación del campo de estado:**
`state`: String - **Opcional** - Estado al que se debe pasar después de la ejecución exitosa de la herramienta.
`available_in_states`: Array(String) - **Opcional** - Estados en los que esta herramienta está disponible.
**Comportamiento predeterminado**: Las herramientas sin `available_in_states` están disponibles en todos los estados.
**Transición de estado**: Solo ocurre después de la ejecución exitosa de la herramienta.
#### 2.2 Mejora del esquema AgentRequest
El esquema `AgentRequest` en `trustgraph-base/trustgraph/schema/services/agent.py` se ha mejorado:
**AgentRequest actual:**
`question`: String - Consulta del usuario.
`plan`: String - Plan de ejecución (se puede eliminar).
`state`: String - Estado del agente.
`history`: Array(AgentStep) - Historial de ejecución.
**AgentRequest mejorado:**
`question`: String - Consulta del usuario.
`state`: String - Estado de ejecución del agente (ahora se utiliza activamente para el filtrado de herramientas).
`history`: Array(AgentStep) - Historial de ejecución.
`group`: Array(String) - **NUEVO** - Grupos de herramientas permitidos para esta solicitud.
**Cambios en el esquema:**
**Eliminado**: El campo `plan` ya no es necesario y se puede eliminar (originalmente estaba destinado a la especificación de herramientas).
**Añadido**: El campo `group` para la especificación de grupos de herramientas.
**Mejorado**: El campo `state` ahora controla la disponibilidad de herramientas durante la ejecución.
**Comportamientos de los campos:**
**Grupo de campos:**
**Opcional**: Si no se especifica, el valor predeterminado es ["default"].
**Intersección**: Solo las herramientas que coinciden con al menos un grupo especificado están disponibles.
**Arreglo vacío**: No hay herramientas disponibles (el agente solo puede usar el razonamiento interno).
**Comodín**: El grupo especial "*" otorga acceso a todas las herramientas.
**Campo de estado:**
**Opcional**: Si no se especifica, el valor predeterminado es "undefined".
**Filtrado basado en el estado**: Solo las herramientas disponibles en el estado actual son elegibles.
**Estado predeterminado**: El estado "undefined" permite todas las herramientas (sujeto al filtrado de grupos).
**Transiciones de estado**: Las herramientas pueden cambiar de estado después de una ejecución exitosa.
### 3. Ejemplos de grupos personalizados
Las organizaciones pueden definir grupos específicos del dominio:
Lógica de filtrado basada en el estado de la prueba
Verificar la asignación predeterminada de grupos y estados
Probar el comportamiento de los comodines en los grupos
Validar el manejo de grupos vacíos
Probar escenarios de filtrado combinados de grupos y estados
**Validación de la Configuración:**
Probar la carga de herramientas con varias configuraciones de grupos y estados
Verificar la validación del esquema para especificaciones inválidas de grupos y estados
Probar la compatibilidad con versiones anteriores con las configuraciones existentes
Validar las definiciones y ciclos de transición de estados
#### 9.2 Pruebas de Integración
**Comportamiento del Agente:**
Verificar que los agentes solo vean las herramientas filtradas por grupo y estado
Probar la ejecución de solicitudes con varias combinaciones de grupos
Probar las transiciones de estado durante la ejecución del agente
Validar el manejo de errores cuando no hay herramientas disponibles
Probar el progreso del flujo de trabajo a través de múltiples estados
**Pruebas de Seguridad:**
Probar la prevención de la escalada de privilegios
Verificar la precisión del registro de auditoría
Probar la integración de la puerta de enlace con los permisos de usuario
#### 9.3 Escenarios de Extremo a Extremo
**Uso Multi-inquilino con Flujos de Trabajo de Estado:**
```
Scenario: Different users with different tool access and workflow states
Given: User A has "read-only" permissions, state "undefined"
And: User B has "write" permissions, state "analysis"
When: Both request knowledge operations
Then: User A gets read-only tools available in "undefined" state
And: User B gets write tools available in "analysis" state
And: State transitions are tracked per user session
And: All usage and transitions are properly audited
```
**Progresión del estado del flujo de trabajo:**
```
Scenario: Complete workflow execution
Given: Request with groups ["knowledge", "compute"] and state "undefined"
When: Agent executes knowledge-query tool (transitions to "analysis")
And: Agent executes complex-analysis tool (transitions to "results")
And: Agent executes reset-workflow tool (transitions to "undefined")
Then: Each step has correctly filtered available tools
And: State transitions are logged with timestamps
And: Final state allows initial workflow to repeat
```
### 10. Consideraciones de rendimiento
#### 10.1 Impacto de la carga de herramientas
**Carga de configuración:**
Los metadatos del grupo y el estado se cargan una vez al inicio.
Sobrecarga de memoria mínima por herramienta (campos adicionales).
No hay impacto en el tiempo de inicialización de la herramienta.
**Procesamiento de solicitudes:**
El filtrado combinado de grupo+estado se realiza una vez por solicitud.
Complejidad O(n), donde n = número de herramientas configuradas.
Las transiciones de estado agregan una sobrecarga mínima (asignación de cadenas).
Impacto insignificante para un número típico de herramientas (<100).
#### 10.2 Estrategias de optimización
**Conjuntos de herramientas precalculados:**
Almacenar en caché los conjuntos de herramientas por combinación de grupo+estado.
Evitar el filtrado repetido para patrones comunes de grupo/estado.
Intercambio entre memoria y computación para combinaciones de uso frecuente.
**Carga diferida:**
Cargar las implementaciones de las herramientas solo cuando sea necesario.
Reducir el tiempo de inicio para implementaciones con muchas herramientas.
Registro dinámico de herramientas basado en los requisitos del grupo.
### 11. Mejoras futuras
#### 11.1 Asignación dinámica de grupos
**Agrupación con conocimiento del contexto:**
Asignar herramientas a grupos según el contexto de la solicitud.
Disponibilidad del grupo basada en el tiempo (solo durante el horario de atención).
Restricciones de grupo basadas en la carga (herramientas costosas durante el bajo uso).
#### 11.2 Jerarquías de grupos
**Estructura de grupo anidada:**
```json
{
"knowledge": {
"read": ["knowledge-query", "entity-search"],
"write": ["graph-update", "entity-create"]
}
}
```
#### 11.3 Recomendaciones de herramientas
**Sugerencias basadas en grupos:**
Sugerir grupos de herramientas óptimos para tipos de solicitud.
Aprender de los patrones de uso para mejorar las recomendaciones.
Proporcionar grupos de respaldo cuando las herramientas preferidas no están disponibles.
### 12. Preguntas abiertas
1.**Validación de grupos**: ¿Deben los nombres de grupo no válidos en las solicitudes causar errores graves o advertencias?
2.**Descubrimiento de grupos**: ¿Debería el sistema proporcionar una API para listar los grupos disponibles y sus herramientas?
3.**Grupos dinámicos**: ¿Deben los grupos ser configurables en tiempo de ejecución o solo al inicio?
4.**Herencia de grupos**: ¿Deben las herramientas heredar grupos de sus categorías o implementaciones principales?
5.**Monitoreo del rendimiento**: ¿Qué métricas adicionales son necesarias para realizar un seguimiento eficaz del uso de herramientas basado en grupos?
### 13. Conclusión
El sistema de grupos de herramientas proporciona:
**Seguridad**: Control de acceso granular sobre las capacidades del agente.
**Rendimiento**: Reducción de la sobrecarga de carga y selección de herramientas.
**Flexibilidad**: Clasificación de herramientas multidimensional.
**Compatibilidad**: Integración perfecta con arquitecturas de agentes existentes.
Este sistema permite que las implementaciones de TrustGraph gestionen mejor el acceso a las herramientas, mejoren los límites de seguridad y optimicen el uso de recursos, al tiempo que mantiene la compatibilidad con versiones anteriores con las configuraciones y solicitudes existentes.