ИИ-чат внутри сайта, который работает с данными самого сайта, через gtsAPI.

ИИ-чат внутри сайта на MODX, который работает с данными самого сайта, через gtsAPI. Отвечает на вопросы по таблицам, разбирает приложенные файлы и правит записи — но только с подтверждением и с кнопкой отката. Доступ к данным идёт через gtsAPI, поэтому потолком остаются права того пользователя, от чьего имени открыт чат: ИИ не может больше, чем человек. Для сводных цифр есть второй путь — SELECT к базе отдельным пользователем MySQL с правом только на чтение, он описан ниже.


Внимание. Пакет разрабатывался под MODX 2.8 и тестировался на MySQL 5.7. Требуется gtsAPI 1.2.0-beta или новее — он ставится автоматически как зависимость. Нужен ключ доступа к шлюзу ИИ, говорящему протоколом Anthropic (Messages API) или OpenAI; свой ключ и адрес шлюза вы вписываете сами, пакет ничего не отправляет мимо вас.

Быстрый старт
После установки зайти в админке в Компоненты->ИИ (gtsAI).
Во вкладке «Подключения» уже создано подключение к шлюзу gtsai.ru — впишите в него свой ключ. Можно указать любой другой шлюз или собственный: протокол и адрес задаются в том же подключении.
Во вкладке «Настройки чатов» лежат заготовки. Настройка чата — это имя, за которым стоят промпт, модель, права, лимиты (шагов, секунд, расход в сутки), группы пользователей и признак «хранить историю». Один сайт может иметь сколько угодно чатов с разными правами: например, чат менеджера по заказу и чат администратора по всей базе.
Чат ставится на любую страницу сниппетом:
[[!mixVue? &app=`gtsai` &config=`{"setting":"default","dock":"right"}`]]
Панель можно разместить слева, справа, сверху, снизу или встроить в поток страницы; выбор запоминается у пользователя.

Доступ к данным через gtsAPI
Таблица не видна ИИ, пока её не открыли явно. В настройках таблицы gtsAPI появились флаг «ai» и описание — текст, по которому модель понимает, что это за таблица и что значат поля. Разрешение выдаётся отдельно каждому действию:
{
    "actions": {
        "read":   {"ai": 1},
        "update": {"ai": 1},
        "create": {"ai": 1}
    },
    "save_version_row": true,
    "fields": {
        "name":  {"type": "text",   "class": "myTableClass"},
        "count": {"type": "number", "class": "myTableClass"}
    }
}
Что это даёт:
— действие не объявлено — ИИ получает отказ, а не молчаливый обход;
— права пользователя остаются потолком: закрытую для него таблицу ИИ не прочитает;
— для правок обязательно включённое версионирование строки (save_version_row) — иначе откатывать будет нечем, и такой доступ просто не разрешается.

Правка от ИИ по умолчанию не применяется сразу: в чат приходит карточка «было — стало», и пишется она только по кнопке. Применённую пачку можно откатить целиком — она записана одним пакетом. Обрыв посреди работы откатывается сам. Кто, что и когда менял, видно в журнале вызовов вместе с расходом токенов и стоимостью.

Доступ к базе на чтение (SQL) — для администраторов
Инструменты таблиц хороши для обычных данных, но на вопрос «почему в сентябре просела прибыль» ответить ими нельзя: нужны сводные цифры и группировки. Для этого есть второй путь — прямой SELECT к базе.

Ходит он отдельным пользователем MySQL, у которого есть только право SELECT. Так сделано намеренно: фильтр по словам в запросе обходится точкой с запятой, комментарием или SELECT… INTO OUTFILE, а права пользователя базы обойти нельзя. Проверки в коде эту защиту дополняют, а не заменяют: один запрос за раз, только SELECT/WITH/SHOW/EXPLAIN/DESCRIBE, обязательный LIMIT (по умолчанию 50, максимум 200) и чёрный список таблиц, которые не показываются даже на чтение (по умолчанию туда входят таблицы пользователей).

Заводится всё одним скриптом из пакета —
_install/sql_readonly.sql
. В нём сверху три строки: имя базы, префикс таблиц и пароль, который вы придумываете. Скрипт сам создаёт пользователя, выдаёт ему SELECT только на вашу базу, ограничивает 200 запросами в час и прописывает логин с паролем в системные настройки. Адрес базы вписывать не нужно — берётся тот же, которым ходит сам сайт.

Важно: у инструментов таблиц права пользователя работают, у SQL — нет: запрос видит всё, что видит пользователь базы. Поэтому включать его стоит только в том чате, который и так открыт администраторам, а чувствительные таблицы держать в чёрном списке. По умолчанию SQL выключен.

Файлы в чате
Картинки и PDF уходят модели как есть. Таблицы Excel (xlsx, xlsm, xls) и CSV разбираются на сервере и уходят текстом — с ограничителями по размеру, числу строк и объёму, чтобы прайс на три тысячи строк не съел контекст и деньги. Файл можно перетащить в окно чата или вставить из буфера.

Что ещё внутри
— Ответ идёт потоком, по мере генерации; разметка, таблицы и блоки кода — с подсветкой и кнопкой копирования.
— История чатов: свои чаты видит каждый, все — администратор. Хранение истории можно выключить для отдельного чата.
— Лимиты на чат: число шагов, секунды и расход в сутки.
— Выбор модели прямо в чате, список берётся у шлюза.
— Тёмная и светлая схемы оформления — цвета из токенов темы gtsAPI.

Гитхаб tuniekov/gtsAI
Гитхаб gtsAPI touol/gtsAPI
Гитхаб PVTables touol/PVTables
Шлюз ИИ gtsai.ru
Александр Туниеков
Александр Туниеков
39 минут назад
modx.pro
9
Поблагодарить автора Отправить деньги

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0