> **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.
Эта спецификация определяет систему группировки инструментов для агентов TrustGraph, которая позволяет осуществлять детальный контроль над тем, какие инструменты доступны для конкретных запросов. Система вводит фильтрацию инструментов на основе групп с помощью конфигурации и указания на уровне запроса, что обеспечивает более строгие границы безопасности, управление ресурсами и функциональное разделение возможностей агентов.
### 1. Обзор
#### 1.1 Описание проблемы
В настоящее время агенты TrustGraph имеют доступ ко всем настроенным инструментам, независимо от контекста запроса или требований безопасности. Это создает несколько проблем:
**Риск безопасности**: Чувствительные инструменты (например, изменение данных) доступны даже для запросов только для чтения.
**Неэффективное использование ресурсов**: Сложные инструменты загружаются даже тогда, когда простые запросы не требуют их.
**Функциональная путаница**: Агенты могут выбирать неподходящие инструменты, когда существуют более простые альтернативы.
**Изоляция для многопользовательских сред**: Различным группам пользователей требуется доступ к разным наборам инструментов.
#### 1.2 Обзор решения
Система группировки инструментов включает в себя:
1.**Классификация по группам**: Инструменты помечаются принадлежностью к группам во время конфигурации.
2.**Фильтрация на уровне запроса**: AgentRequest указывает, какие группы инструментов разрешены.
3.**Принудительное исполнение во время выполнения**: Агенты имеют доступ только к инструментам, соответствующим запрошенным группам.
4.**Гибкая группировка**: Инструменты могут принадлежать к нескольким группам для сложных сценариев.
### 2. Изменения схемы
#### 2.1 Расширение схемы конфигурации инструмента
Существующая схема конфигурации инструмента расширена с помощью поля `group`:
**До:**
```json
{
"name": "knowledge-query",
"type": "knowledge-query",
"description": "Query the knowledge graph"
}
```
**После:**
```json
{
"name": "knowledge-query",
"type": "knowledge-query",
"description": "Query the knowledge graph",
"group": ["read-only", "knowledge", "basic"]
}
```
**Спецификация поля группы:**
`group`: Array(String) - Список групп, к которым принадлежит этот инструмент.
**Необязательно**: Инструменты без поля группы принадлежат к группе "по умолчанию".
**Множественная принадлежность**: Инструменты могут принадлежать к нескольким группам.
**Чувствительность к регистру**: Имена групп должны точно соответствовать строке.
#### 2.1.2 Улучшение переходов состояния инструмента
Инструменты могут опционально указывать переходы состояний и доступность, зависящую от состояния:
```json
{
"name": "knowledge-query",
"type": "knowledge-query",
"description": "Query the knowledge graph",
"group": ["read-only", "knowledge", "basic"],
"state": "analysis",
"available_in_states": ["undefined", "research"]
}
```
**Спецификация состояния:**
`state`: String - **Необязательно** - Состояние, в которое система переходит после успешного выполнения инструмента.
`available_in_states`: Array(String) - **Необязательно** - Состояния, в которых этот инструмент доступен.
**Поведение по умолчанию**: Инструменты без `available_in_states` доступны во всех состояниях.
**Переход состояния**: Происходит только после успешного выполнения инструмента.
#### 2.2 Улучшение схемы AgentRequest
Схема `AgentRequest` в `trustgraph-base/trustgraph/schema/services/agent.py` улучшена:
**Текущий AgentRequest:**
`question`: String - Пользовательский запрос.
`plan`: String - План выполнения (может быть удален).
`state`: String - Состояние агента.
`history`: Array(AgentStep) - История выполнения.
**Улучшенный AgentRequest:**
`question`: String - Пользовательский запрос.
`state`: String - Состояние выполнения агента (теперь активно используется для фильтрации инструментов).
`history`: Array(AgentStep) - История выполнения.
`group`: Array(String) - **НОВОЕ** - Группы инструментов, разрешенные для этого запроса.
**Изменения в схеме:**
**Удалено**: Поле `plan` больше не требуется и может быть удалено (изначально предназначалось для указания инструментов).
**Добавлено**: Поле `group` для указания групп инструментов.
**Улучшено**: Поле `state` теперь контролирует доступность инструментов во время выполнения.
**Поведение полей:**
**Группа (Group):**
**Необязательно**: Если не указано, по умолчанию используется ["default"].
**Пересечение**: Доступны только инструменты, соответствующие хотя бы одной указанной группе.
**Пустой массив**: Ни один инструмент не доступен (агент может использовать только внутренние рассуждения).
**Подстановочный знак**: Специальная группа "*" предоставляет доступ ко всем инструментам.
**Состояние (State):**
**Необязательно**: Если не указано, по умолчанию используется "undefined".
**Фильтрация по состоянию**: Доступны только инструменты, доступные в текущем состоянии.
**Состояние по умолчанию**: Состояние "undefined" позволяет использовать все инструменты (с учетом фильтрации по группам).
**Переходы состояний**: Состояние инструментов может меняться после успешного выполнения.
### 3. Примеры пользовательских групп
Организации могут определять группы, специфичные для домена:
**Совместимость**: Бесшовная интеграция с существующими архитектурами агентов.
Эта система позволяет развертываниям TrustGraph лучше управлять доступом к инструментам, улучшать границы безопасности и оптимизировать использование ресурсов, сохраняя полную обратную совместимость с существующими конфигурациями и запросами.