Поддержка

Обзор

AI-ассистент для управления ресурсами Frame

Frame предоставляет инфраструктуру для интеграции AI в управление ресурсами. AI-функциональность реализована как отдельный модуль, который подключается без изменения ядра.

Подход

AI в Frame работает на уровне ресурсов — он знает структуру полей, типы данных, доступные операторы фильтрации, описания полей и связи между ресурсами. Это позволяет AI точно понимать контекст и генерировать корректные данные.

Ключевые принципы:

  • Модульность — AI подключается как отдельный пакет, не является частью ядра
  • Провайдер-агностик — работает с любым OpenAI-совместимым API через Laravel AI SDK
  • Безопасность — чувствительные данные (пароли, токены, PII) автоматически исключаются из контекста AI
  • Пользователь решает — AI заполняет формы и настраивает фильтры, но не сохраняет данные автоматически

Сценарии использования

КонтекстЧто делает AI
КаталогНастраивает фильтры, сортировки и поиск по текстовому описанию
Создание записиЗаполняет поля формы, находит и подставляет связанные записи
РедактированиеТочечно изменяет конкретные поля по запросу

Как это работает

  1. Пользователь нажимает кнопку AI на странице ресурса
  2. Вводит запрос на естественном языке в popover
  3. Backend формирует промпт на основе реальной структуры ресурса (поля, типы, операторы)
  4. LLM генерирует структурированный ответ (JSON с фильтрами или значениями полей)
  5. Frontend применяет результат к таблице или форме

Для relation полей AI использует tool calling — вызывает поиск по связанному ресурсу через SearchDriver, находит подходящую запись и подставляет её.

Настройка ресурса

Ресурсы могут предоставить AI дополнительный контекст через configureAi:

use Frame\Ai\Agents\ResourceAgent;
use Frame\Ai\Concerns\HasAiAgent;

class UserResource extends Resource
{
    use HasAiAgent;

    public static function configureAi(ResourceAgent $agent): void
    {
        $agent
            ->describe('name', 'Имя пользователя')
            ->describe('surname', 'Фамилия пользователя')
            ->describe('birthday', 'Дата рождения в формате YYYY-MM-DD')
            ->describe('audience', 'Тип аудитории: Junior или Adult');
    }
}

Описания из configureAi попадают в промпт и помогают модели точнее интерпретировать поля.

HasAiAgent и configureAi — опциональны. AI работает с любым ресурсом, но с описаниями — точнее.