mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
499 lines
20 KiB
Markdown
499 lines
20 KiB
Markdown
---
|
|
layout: default
|
|
title: "TrustGraph Tool Group System"
|
|
parent: "Portuguese (Beta)"
|
|
---
|
|
|
|
# TrustGraph Tool Group System
|
|
|
|
> **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.
|
|
## Especificação Técnica v1.0
|
|
|
|
### Resumo Executivo
|
|
|
|
Esta especificação define um sistema de agrupamento de ferramentas para agentes TrustGraph que permite um controle preciso sobre quais ferramentas estão disponíveis para solicitações específicas. O sistema introduz filtragem de ferramentas baseada em grupos por meio de configuração e especificação no nível da solicitação, permitindo melhores limites de segurança, gerenciamento de recursos e particionamento funcional das capacidades do agente.
|
|
|
|
### 1. Visão Geral
|
|
|
|
#### 1.1 Declaração do Problema
|
|
|
|
Atualmente, os agentes TrustGraph têm acesso a todas as ferramentas configuradas, independentemente do contexto da solicitação ou dos requisitos de segurança. Isso cria vários desafios:
|
|
|
|
**Risco de Segurança**: Ferramentas sensíveis (por exemplo, modificação de dados) estão disponíveis mesmo para consultas somente leitura.
|
|
**Desperdício de Recursos**: Ferramentas complexas são carregadas mesmo quando consultas simples não as exigem.
|
|
**Confusão Funcional**: Os agentes podem selecionar ferramentas inadequadas quando alternativas mais simples existem.
|
|
**Isolamento Multi-inquilino**: Diferentes grupos de usuários precisam de acesso a conjuntos de ferramentas diferentes.
|
|
|
|
#### 1.2 Visão Geral da Solução
|
|
|
|
O sistema de agrupamento de ferramentas introduz:
|
|
|
|
1. **Classificação por Grupo**: As ferramentas são marcadas com associações de grupo durante a configuração.
|
|
2. **Filtragem no Nível da Solicitação**: AgentRequest especifica quais grupos de ferramentas são permitidos.
|
|
3. **Aplicação em Tempo de Execução**: Os agentes têm acesso apenas a ferramentas que correspondem aos grupos solicitados.
|
|
4. **Agrupamento Flexível**: As ferramentas podem pertencer a vários grupos para cenários complexos.
|
|
|
|
### 2. Alterações no Esquema
|
|
|
|
#### 2.1 Aprimoramento do Esquema de Configuração da Ferramenta
|
|
|
|
A configuração existente da ferramenta é aprimorada com um campo `group`:
|
|
|
|
**Antes:**
|
|
```json
|
|
{
|
|
"name": "knowledge-query",
|
|
"type": "knowledge-query",
|
|
"description": "Query the knowledge graph"
|
|
}
|
|
```
|
|
|
|
**Depois:**
|
|
```json
|
|
{
|
|
"name": "knowledge-query",
|
|
"type": "knowledge-query",
|
|
"description": "Query the knowledge graph",
|
|
"group": ["read-only", "knowledge", "basic"]
|
|
}
|
|
```
|
|
|
|
**Especificação do Campo do Grupo:**
|
|
`group`: Array(String) - Lista de grupos aos quais esta ferramenta pertence
|
|
**Opcional**: Ferramentas sem campo de grupo pertencem ao grupo "padrão"
|
|
**Múltipla associação**: As ferramentas podem pertencer a vários grupos
|
|
**Sensível a maiúsculas e minúsculas**: Os nomes dos grupos são correspondências exatas de strings
|
|
|
|
#### 2.1.2 Melhoria da Transição de Estado da Ferramenta
|
|
|
|
As ferramentas podem, opcionalmente, especificar transições de estado e disponibilidade baseada no 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"]
|
|
}
|
|
```
|
|
|
|
**Especificação do Campo de Estado:**
|
|
`state`: String - **Opcional** - Estado para o qual transitar após a execução bem-sucedida da ferramenta
|
|
`available_in_states`: Array(String) - **Opcional** - Estados nos quais esta ferramenta está disponível
|
|
**Comportamento padrão**: Ferramentas sem `available_in_states` estão disponíveis em todos os estados
|
|
**Transição de estado**: Ocorre apenas após a execução bem-sucedida da ferramenta
|
|
|
|
#### 2.2 Melhoria do Esquema AgentRequest
|
|
|
|
O esquema `AgentRequest` em `trustgraph-base/trustgraph/schema/services/agent.py` é aprimorado:
|
|
|
|
**AgentRequest Atual:**
|
|
`question`: String - Consulta do usuário
|
|
`plan`: String - Plano de execução (pode ser removido)
|
|
`state`: String - Estado do agente
|
|
`history`: Array(AgentStep) - Histórico de execução
|
|
|
|
**AgentRequest Aprimorado:**
|
|
`question`: String - Consulta do usuário
|
|
`state`: String - Estado de execução do agente (agora usado ativamente para filtragem de ferramentas)
|
|
`history`: Array(AgentStep) - Histórico de execução
|
|
`group`: Array(String) - **NOVO** - Grupos de ferramentas permitidos para este pedido
|
|
|
|
**Alterações no Esquema:**
|
|
**Removido**: O campo `plan` não é mais necessário e pode ser removido (originalmente destinado à especificação de ferramentas)
|
|
**Adicionado**: O campo `group` para especificação de grupos de ferramentas
|
|
**Aprimorado**: O campo `state` agora controla a disponibilidade de ferramentas durante a execução
|
|
|
|
**Comportamentos dos Campos:**
|
|
|
|
**Grupo de Campo:**
|
|
**Opcional**: Se não especificado, o padrão é ["default"]
|
|
**Interseção**: Apenas as ferramentas que correspondem a pelo menos um grupo especificado estão disponíveis
|
|
**Array vazio**: Nenhuma ferramenta disponível (o agente só pode usar o raciocínio interno)
|
|
**Curinga**: O grupo especial "*" concede acesso a todas as ferramentas
|
|
|
|
**Campo de Estado:**
|
|
**Opcional**: Se não especificado, o padrão é "undefined"
|
|
**Filtragem baseada em estado**: Apenas as ferramentas disponíveis no estado atual são elegíveis
|
|
**Estado padrão**: O estado "undefined" permite todas as ferramentas (sujeito à filtragem de grupos)
|
|
**Transições de estado**: As ferramentas podem alterar o estado após a execução bem-sucedida
|
|
|
|
### 3. Exemplos de Grupos Personalizados
|
|
|
|
As organizações podem definir grupos específicos do domínio:
|
|
|
|
```json
|
|
{
|
|
"financial-tools": ["stock-query", "portfolio-analysis"],
|
|
"medical-tools": ["diagnosis-assist", "drug-interaction"],
|
|
"legal-tools": ["contract-analysis", "case-search"]
|
|
}
|
|
```
|
|
|
|
### 4. Detalhes de Implementação
|
|
|
|
#### 4.1 Carregamento e Filtragem de Ferramentas
|
|
|
|
**Fase de Configuração:**
|
|
1. Todas as ferramentas são carregadas da configuração com suas atribuições de grupo.
|
|
2. Ferramentas sem grupos explícitos são atribuídas ao grupo "padrão".
|
|
3. A associação a grupos é validada e armazenada no registro de ferramentas.
|
|
|
|
**Fase de Processamento de Solicitações:**
|
|
1. Uma solicitação do agente chega com uma especificação de grupo opcional.
|
|
2. O agente filtra as ferramentas disponíveis com base na interseção de grupos.
|
|
3. Apenas as ferramentas correspondentes são passadas para o contexto de execução do agente.
|
|
4. O agente opera com o conjunto de ferramentas filtrado durante todo o ciclo de vida da solicitação.
|
|
|
|
#### 4.2 Lógica de Filtragem de Ferramentas
|
|
|
|
**Filtragem Combinada de Grupo e Estado:**
|
|
|
|
```
|
|
For each configured tool:
|
|
tool_groups = tool.group || ["default"]
|
|
tool_states = tool.available_in_states || ["*"] // Available in all states
|
|
|
|
For each request:
|
|
requested_groups = request.group || ["default"]
|
|
current_state = request.state || "undefined"
|
|
|
|
Tool is available if:
|
|
// Group filtering
|
|
(intersection(tool_groups, requested_groups) is not empty OR "*" in requested_groups)
|
|
AND
|
|
// State filtering
|
|
(current_state in tool_states OR "*" in tool_states)
|
|
```
|
|
|
|
**Lógica de Transição de Estado:**
|
|
|
|
```
|
|
After successful tool execution:
|
|
if tool.state is defined:
|
|
next_request.state = tool.state
|
|
else:
|
|
next_request.state = current_request.state // No change
|
|
```
|
|
|
|
#### 4.3 Pontos de Integração do Agente
|
|
|
|
**Agente ReAct:**
|
|
O filtro de ferramentas ocorre em agent_manager.py durante a criação do registro de ferramentas.
|
|
A lista de ferramentas disponíveis é filtrada por grupo e estado antes da geração do plano.
|
|
As transições de estado atualizam o campo AgentRequest.state após a execução bem-sucedida da ferramenta.
|
|
A próxima iteração usa o estado atualizado para o filtro de ferramentas.
|
|
|
|
**Agente Baseado em Confiança:**
|
|
O filtro de ferramentas ocorre em planner.py durante a geração do plano.
|
|
A validação de ExecutionStep garante que apenas as ferramentas elegíveis por grupo e estado sejam usadas.
|
|
O controlador de fluxo impõe a disponibilidade da ferramenta em tempo de execução.
|
|
As transições de estado são gerenciadas pelo Controlador de Fluxo entre os passos.
|
|
|
|
### 5. Exemplos de Configuração
|
|
|
|
#### 5.1 Configuração de Ferramentas com Grupos e Estados
|
|
|
|
```yaml
|
|
tool:
|
|
knowledge-query:
|
|
type: knowledge-query
|
|
name: "Knowledge Graph Query"
|
|
description: "Query the knowledge graph for entities and relationships"
|
|
group: ["read-only", "knowledge", "basic"]
|
|
state: "analysis"
|
|
available_in_states: ["undefined", "research"]
|
|
|
|
graph-update:
|
|
type: graph-update
|
|
name: "Graph Update"
|
|
description: "Add or modify entities in the knowledge graph"
|
|
group: ["write", "knowledge", "admin"]
|
|
available_in_states: ["analysis", "modification"]
|
|
|
|
text-completion:
|
|
type: text-completion
|
|
name: "Text Completion"
|
|
description: "Generate text using language models"
|
|
group: ["read-only", "text", "basic"]
|
|
state: "undefined"
|
|
# No available_in_states = available in all states
|
|
|
|
complex-analysis:
|
|
type: mcp-tool
|
|
name: "Complex Analysis Tool"
|
|
description: "Perform complex data analysis"
|
|
group: ["advanced", "compute", "expensive"]
|
|
state: "results"
|
|
available_in_states: ["analysis"]
|
|
mcp_tool_id: "analysis-server"
|
|
|
|
reset-workflow:
|
|
type: mcp-tool
|
|
name: "Reset Workflow"
|
|
description: "Reset to initial state"
|
|
group: ["admin"]
|
|
state: "undefined"
|
|
available_in_states: ["analysis", "results"]
|
|
```
|
|
|
|
#### 5.2 Exemplos de Solicitações com Fluxos de Trabalho de Estado
|
|
|
|
**Solicitação de Pesquisa Inicial:**
|
|
```json
|
|
{
|
|
"question": "What entities are connected to Company X?",
|
|
"group": ["read-only", "knowledge"],
|
|
"state": "undefined"
|
|
}
|
|
```
|
|
*Ferramentas disponíveis: knowledge-query, text-completion*
|
|
*Após knowledge-query: estado → "análise"*
|
|
|
|
**Fase de Análise:**
|
|
```json
|
|
{
|
|
"question": "Continue analysis based on previous results",
|
|
"group": ["advanced", "compute", "write"],
|
|
"state": "analysis"
|
|
}
|
|
```
|
|
*Ferramentas disponíveis: complex-analysis, graph-update, reset-workflow*
|
|
*Após complex-analysis: estado → "results"*
|
|
|
|
**Fase de Resultados:**
|
|
```json
|
|
{
|
|
"question": "What should I do with these results?",
|
|
"group": ["admin"],
|
|
"state": "results"
|
|
}
|
|
```
|
|
*Ferramentas disponíveis: apenas reset-workflow*
|
|
*Após reset-workflow: estado → "indefinido"*
|
|
|
|
**Exemplo de Fluxo de Trabalho - Fluxo Completo:**
|
|
1. **Início (indefinido)**: Use knowledge-query → transições para "análise"
|
|
2. **Estado de análise**: Use complex-analysis → transições para "resultados"
|
|
3. **Estado de resultados**: Use reset-workflow → transições de volta para "indefinido"
|
|
4. **Retorno ao início**: Todas as ferramentas iniciais estão disponíveis novamente
|
|
|
|
### 6. Considerações de Segurança
|
|
|
|
#### 6.1 Integração de Controle de Acesso
|
|
|
|
**Filtragem no Nível do Gateway:**
|
|
O gateway pode impor restrições de grupo com base nas permissões do usuário
|
|
Previne a elevação de privilégios através da manipulação de solicitações
|
|
O registro de auditoria inclui os grupos de ferramentas solicitados e concedidos
|
|
|
|
**Exemplo de Lógica do Gateway:**
|
|
```
|
|
user_permissions = get_user_permissions(request.user_id)
|
|
allowed_groups = user_permissions.tool_groups
|
|
requested_groups = request.group
|
|
|
|
# Validate request doesn't exceed permissions
|
|
if not is_subset(requested_groups, allowed_groups):
|
|
reject_request("Insufficient permissions for requested tool groups")
|
|
```
|
|
|
|
#### 6.2 Auditoria e Monitoramento
|
|
|
|
**Rastreamento de Auditoria Aprimorado:**
|
|
Registrar os grupos de ferramentas solicitados e o estado inicial por solicitação
|
|
Rastrear as transições de estado e o uso de ferramentas por associação a grupos
|
|
Monitorar tentativas de acesso não autorizado a grupos e transições de estado inválidas
|
|
Alertar sobre padrões de uso de grupos incomuns ou fluxos de trabalho de estado suspeitos
|
|
|
|
### 7. Estratégia de Migração
|
|
|
|
#### 7.1 Compatibilidade com Versões Anteriores
|
|
|
|
**Fase 1: Alterações Aditivas**
|
|
Adicionar campo opcional `group` às configurações de ferramentas
|
|
Adicionar campo opcional `group` ao esquema AgentRequest
|
|
Comportamento padrão: Todas as ferramentas existentes pertencem ao grupo "default"
|
|
Solicitações existentes sem o campo de grupo usam o grupo "default"
|
|
|
|
**Comportamento Existente Preservado:**
|
|
Ferramentas sem configuração de grupo continuam a funcionar (grupo default)
|
|
Ferramentas sem configuração de estado estão disponíveis em todos os estados
|
|
Solicitações sem especificação de grupo acessam todas as ferramentas (grupo default)
|
|
Solicitações sem especificação de estado usam o estado "undefined" (todas as ferramentas disponíveis)
|
|
Nenhuma alteração disruptiva para implantações existentes
|
|
|
|
### 8. Monitoramento e Observabilidade
|
|
|
|
#### 8.1 Novas Métricas
|
|
|
|
**Uso de Grupos de Ferramentas:**
|
|
`agent_tool_group_requests_total` - Contador de solicitações por grupo
|
|
`agent_tool_group_availability` - Indicador do número de ferramentas disponíveis por grupo
|
|
`agent_filtered_tools_count` - Histograma do número de ferramentas após a filtragem por grupo + estado
|
|
|
|
**Métricas de Fluxo de Trabalho de Estado:**
|
|
`agent_state_transitions_total` - Contador de transições de estado por ferramenta
|
|
`agent_workflow_duration_seconds` - Histograma do tempo gasto em cada estado
|
|
`agent_state_availability` - Indicador do número de ferramentas disponíveis por estado
|
|
|
|
**Métricas de Segurança:**
|
|
`agent_group_access_denied_total` - Contador de acessos a grupos não autorizados
|
|
`agent_invalid_state_transition_total` - Contador de transições de estado inválidas
|
|
`agent_privilege_escalation_attempts_total` - Contador de solicitações suspeitas
|
|
|
|
#### 8.2 Melhorias de Registro (Logging)
|
|
|
|
**Registro de Solicitações:**
|
|
```json
|
|
{
|
|
"request_id": "req-123",
|
|
"requested_groups": ["read-only", "knowledge"],
|
|
"initial_state": "undefined",
|
|
"state_transitions": [
|
|
{"tool": "knowledge-query", "from": "undefined", "to": "analysis", "timestamp": "2024-01-01T10:00:01Z"}
|
|
],
|
|
"available_tools": ["knowledge-query", "text-completion"],
|
|
"filtered_by_group": ["graph-update", "admin-tool"],
|
|
"filtered_by_state": [],
|
|
"execution_time": "1.2s"
|
|
}
|
|
```
|
|
|
|
### 9. Estratégia de Testes
|
|
|
|
#### 9.1 Testes Unitários
|
|
|
|
**Lógica de Filtragem de Ferramentas:**
|
|
Cálculos de interseção de grupos de teste
|
|
Lógica de filtragem baseada em estado
|
|
Verificar a atribuição padrão de grupo e estado
|
|
Testar o comportamento de grupos curinga
|
|
Validar o tratamento de grupos vazios
|
|
Testar cenários de filtragem combinada de grupo+estado
|
|
|
|
**Validação de Configuração:**
|
|
Testar o carregamento de ferramentas com várias configurações de grupo e estado
|
|
Verificar a validação de esquema para especificações inválidas de grupo e estado
|
|
Testar a compatibilidade com versões anteriores com as configurações existentes
|
|
Validar as definições e ciclos de transição de estado
|
|
|
|
#### 9.2 Testes de Integração
|
|
|
|
**Comportamento do Agente:**
|
|
Verificar se os agentes veem apenas as ferramentas filtradas por grupo+estado
|
|
Testar a execução de solicitações com várias combinações de grupos
|
|
Testar as transições de estado durante a execução do agente
|
|
Validar o tratamento de erros quando nenhuma ferramenta está disponível
|
|
Testar a progressão do fluxo de trabalho por meio de vários estados
|
|
|
|
**Testes de Segurança:**
|
|
Testar a prevenção de escalada de privilégios
|
|
Verificar a precisão do registro de auditoria
|
|
Testar a integração do gateway com as permissões do usuário
|
|
|
|
#### 9.3 Cenários de Ponta a Ponta
|
|
|
|
**Uso Multi-tenant com Fluxos de Trabalho 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
|
|
```
|
|
|
|
**Progressão do Estado do Fluxo de Trabalho:**
|
|
```
|
|
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. Considerações de Desempenho
|
|
|
|
#### 10.1 Impacto do Carregamento de Ferramentas
|
|
|
|
**Carregamento de Configuração:**
|
|
Metadados de grupo e estado carregados uma vez na inicialização
|
|
Sobrecarga de memória mínima por ferramenta (campos adicionais)
|
|
Sem impacto no tempo de inicialização da ferramenta
|
|
|
|
**Processamento de Requisições:**
|
|
Filtragem combinada de grupo+estado ocorre uma vez por requisição
|
|
Complexidade O(n) onde n = número de ferramentas configuradas
|
|
Transições de estado adicionam uma sobrecarga mínima (atribuição de string)
|
|
Impacto insignificante para um número típico de ferramentas (< 100)
|
|
|
|
#### 10.2 Estratégias de Otimização
|
|
|
|
**Conjuntos de Ferramentas Pré-calculados:**
|
|
Armazene em cache os conjuntos de ferramentas por combinação de grupo+estado
|
|
Evite filtragem repetida para padrões comuns de grupo/estado
|
|
Troca entre memória e computação para combinações frequentemente usadas
|
|
|
|
**Carregamento Preguiçoso (Lazy Loading):**
|
|
Carregue as implementações das ferramentas somente quando necessário
|
|
Reduza o tempo de inicialização para implantações com muitas ferramentas
|
|
Registro dinâmico de ferramentas com base nos requisitos do grupo
|
|
|
|
### 11. Melhorias Futuras
|
|
|
|
#### 11.1 Atribuição Dinâmica de Grupos
|
|
|
|
**Agrupamento Contextual:**
|
|
Atribua ferramentas a grupos com base no contexto da requisição
|
|
Disponibilidade do grupo baseada no tempo (apenas horário comercial)
|
|
Restrições de grupo baseadas na carga (ferramentas caras durante baixo uso)
|
|
|
|
#### 11.2 Hierarquias de Grupos
|
|
|
|
**Estrutura de Grupo Aninhada:**
|
|
```json
|
|
{
|
|
"knowledge": {
|
|
"read": ["knowledge-query", "entity-search"],
|
|
"write": ["graph-update", "entity-create"]
|
|
}
|
|
}
|
|
```
|
|
|
|
#### 11.3 Recomendações de Ferramentas
|
|
|
|
**Sugestões Baseadas em Grupos:**
|
|
Sugerir grupos de ferramentas ideais para tipos de requisições
|
|
Aprender com padrões de uso para melhorar as recomendações
|
|
Fornecer grupos de fallback quando as ferramentas preferidas não estiverem disponíveis
|
|
|
|
### 12. Perguntas Abertas
|
|
|
|
1. **Validação de Grupos**: Nomes de grupos inválidos em requisições devem causar falhas graves ou avisos?
|
|
|
|
2. **Descoberta de Grupos**: O sistema deve fornecer uma API para listar os grupos disponíveis e suas ferramentas?
|
|
|
|
3. **Grupos Dinâmicos**: Os grupos devem ser configuráveis em tempo de execução ou apenas na inicialização?
|
|
|
|
4. **Herança de Grupos**: As ferramentas devem herdar grupos de suas categorias ou implementações pai?
|
|
|
|
5. **Monitoramento de Desempenho**: Quais métricas adicionais são necessárias para rastrear o uso de ferramentas com base em grupos de forma eficaz?
|
|
|
|
### 13. Conclusão
|
|
|
|
O sistema de grupos de ferramentas fornece:
|
|
|
|
**Segurança**: Controle de acesso granular sobre as capacidades do agente
|
|
**Desempenho**: Redução da sobrecarga de carregamento e seleção de ferramentas
|
|
**Flexibilidade**: Classificação de ferramentas multidimensional
|
|
**Compatibilidade**: Integração perfeita com arquiteturas de agentes existentes
|
|
|
|
Este sistema permite que as implementações do TrustGraph gerenciem melhor o acesso às ferramentas, aprimorem as fronteiras de segurança e otimizem o uso de recursos, mantendo total compatibilidade com versões anteriores de configurações e requisições.
|