SES. Руководство администратора: различия между версиями
Материал из Флора AI
SirotinAl (обсуждение | вклад) |
|||
| (не показано 8 промежуточных версий 1 участника) | |||
| Строка 283: | Строка 283: | ||
==='''Настройка каналов и виджетов'''=== | ==='''Настройка каналов и виджетов''' === | ||
===='''Настройка виджета для сайта'''==== | |||
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа "web" в UPS создать коннектор. | |||
# Разместить на сайте виджет, вставив тег <code><script></code> с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket. | |||
==== '''Вставка виджета в код сайта''' ==== | ==== '''Вставка виджета в код сайта''' ==== | ||
Разместите в <code><head></code> или <code><body></code> HTML-кода следующий тег: | Разместите в <code><head></code> или <code><body></code> HTML-кода следующий тег: | ||
<code><script src="https://SERVER/ses/widget/js? | <code><script src="https://'''SERVER'''/ses/widget/js?'''NAME'''" type="module" token="'''TOKEN'''"></script></code> | ||
* '''SERVER''' — адрес сервера UPS. Исходный код виджета всегда лежит по пути <code>/ses/widget/js</code>. | |||
* '''TOKEN''' — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] "web" в UPS). | |||
* '''NAME''' — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице. | |||
Пример пустой страницы с тремя разными виджетами: | |||
<small><code><!DOCTYPE html></code></small> | |||
<small><code><html lang="en"></code></small> | |||
<small><code><head> ... </head></code></small> | |||
<small><code><body></code></small> | |||
<small><code><script src="https://'''server.net'''/ses/widget/js?'''assistant1'''" type="module" token="'''tokenXXX'''"></script></code></small> | |||
< | <small><code><script src="https://'''server.net'''/ses/widget/js?'''assistant'''" type="module" token="'''tokenYYY'''"></script></code></small> | ||
< | |||
< | <small><code><script src="https://'''server.net'''/ses/widget/js?'''chat'''" type="module" token="'''tokenZZZ'''"></script></code></small> | ||
< | <small><code></body></code></small> | ||
<small><code></html></code></small> | |||
==== '''SSL и реверс-прокси''' ==== | ==== '''SSL и реверс-прокси''' ==== | ||
| Строка 316: | Строка 321: | ||
nginx (пример конфига для wss): | nginx (пример конфига для wss): | ||
server { | <small>server {</small> | ||
server_name ups_сервер.ru; | <small> server_name ups_сервер.ru;</small> | ||
listen 6191 ssl; | <small> listen 6191 ssl;</small> | ||
include snippets/ssl-params.conf; | <small> include snippets/ssl-params.conf;</small> | ||
ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem; | <small> ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;</small> | ||
ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem; | <small> ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;</small> | ||
ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem; | <small> ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;</small> | ||
client_max_body_size 1000M; | <small> client_max_body_size 1000M;</small> | ||
proxy_read_timeout 6000; | <small> proxy_read_timeout 6000;</small> | ||
proxy_connect_timeout 6000; | <small> proxy_connect_timeout 6000;</small> | ||
proxy_send_timeout 6000; | <small> proxy_send_timeout 6000;</small> | ||
send_timeout 6000; | <small> send_timeout 6000;</small> | ||
large_client_header_buffers 8 256k; | <small> large_client_header_buffers 8 256k;</small> | ||
location / { | <small> location / {</small> | ||
proxy_pass <nowiki>http://локальный_адрес_ses:6191</nowiki>; | <small> proxy_pass <nowiki>http://локальный_адрес_ses:6191</nowiki>;</small> | ||
proxy_http_version 1.1; | <small> proxy_http_version 1.1;</small> | ||
proxy_set_header Upgrade $http_upgrade; | <small> proxy_set_header Upgrade $http_upgrade;</small> | ||
proxy_set_header Connection "upgrade"; | <small> proxy_set_header Connection "upgrade";</small> | ||
proxy_set_header Host $host; | <small> proxy_set_header Host $host;</small> | ||
proxy_cache_bypass $http_upgrade; | <small> proxy_cache_bypass $http_upgrade;</small> | ||
} | <small> }</small> | ||
} | <small>}</small> | ||
* Раздел proxy_set_header Host $host; обязателен. | * Раздел proxy_set_header Host $host; обязателен. | ||
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда. | * Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда. | ||
Текущая версия от 13:29, 13 ноября 2025
Общее описание
Сервис предназначен для сценарных машин.
Термины и определения
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.
Требования к окружению
В процессе работы сервис взаимодействует со следующими сервисами:
- UPS – настройка осуществляется через файл /opt/ups/config.json
- SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.
Установка ses
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.
Перед установкой непосредственно сервиса необходимо установить сервисный пакет окружения.
- Установка/обновление ses осуществляется скриптом
chmod +x ./ses-<версия>-<релиз>.sh && ./ses-<версия>-<релиз>.sh -iс правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор./ses-<версия>-<релиз>.shбез ключей. - Загрузить последнюю версию продукта
curl -s "https://repo.connect2ai.net/api/ses/new" --user '[user]:[pass]' 2>&1 | bashили в интерактивном режимеbash -c "$(curl -s https://repo.connect2ai.net/api/ses --user '[user]:[pass]' 2>&1)". - Обновить ses
/opt/ses/inupdateв интерактивном режиме. Или запустить с ключом:/opt/ses/inupdate -b– обновить до последней beta версии;/opt/ses/inupdate -r– обновить до последней release версии;/opt/ses/inupdate -n– обновить до последней версии (неважно beta или release).
- Проверить актуальную версию продукта
curl -s "https://repo.connect2ai.net/api/ses/version. - Посмотреть лог изменений
curl -s "https://repo.connect2ai.net/api/ses/changelog" --user '[user]:[pass]'. - Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api.
[user]:[pass]– это тот же логин и пароль, что и от Nextcloud. - В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
- echo -n
"[user]:[pass]"> /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей) - echo -n
"http://example.com:3128 [user] [password]"> /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)
- echo -n
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.
Не забудьте запустить сервис и включить в автозапуск в системе:
sudo systemctl enable ses.service && sudo systemctl start ses.service
Удостоверьтесь, что сервис стартовал:
systemctl status ses.service
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.
Лицензия
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:
/opt/ses/license.json
Файл лицензии должен соответствовать следующему формату:
{"service": "ses", "expire": "2045-01-01", "licenses": , "key": ""}
Для получения лицензии необходимо:
1. Запустить сервис systemctl start ses и извлечь UUID, указанный в файле /opt/ses/logs/log.txt
2. Передать полученный UUID руководителю проекта для оформления лицензии.
Настройка сервиса
Файл config.json
Настройка параметров сервиса ses производится в файле /opt/ses/config.json
Описание параметров приведено в таблице
| Параметр | По умолчанию | Назначение |
|---|---|---|
| port | 6190 | Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS. |
| logs.path | logs/ | Путь к папке логов. |
| logs.debug | false | Режим расширенного логирования. |
| logs.backups | 10 | Количество старых сохраняемых логов. |
| logs.maxSize | 5242880 | Максимальный размер текущего лог-файла в байтах. |
| storage.audio.web | /opt/ses/storage/web | Путь для временного хранения фрагментов аудио веб сессий |
| storage.audio.hot | /opt/ses/storage/hot | Путь к "горячему" хранилищу аудиоданных |
| storage.audio.cold | null | Путь к "холодному" хранилищу аудиоданных, куда переливаются данные из "горячего" хранилища. |
| servers.{service}.url | "http://127.0.0.1:PORT/{service}" | Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182). |
| servers.{service}.timers.connect | 2 | Таймаут подключения к серверу. |
| servers.{service}.timers.read | 10 | Таймаут получения данных с сервера. |
| connectors.max | {} | Параметры подключения к ботам Max
{ "имя_подключения":{ "token":"Ключ доступа", "robot":"id робота", "variables":{ "phone": "1234567890" }, "timers": { "pollingInterval": 25 }, "whitelist":[], "activators":[] }, ............... } |
| connectors.vk | {} | Параметры подключения к ботам VK
{ "имя_подключения":{ "token":"Ключ доступа", "robot":"id робота", "group_id":"id сообщества ВКонтакте", "variables":{ "phone": "1234567890" }, "timers": { "pollingInterval": 25 }, "whitelist":[], "activators":[] }, ............... } |
| connectors.telegram | {} | Параметры подключения к telegram ботам
{ "имя_подключения":{ "token":"Ключ доступа", "botName": "название бота (после символа @)", "robot":"id робота", "variables":{ "phone": "1234567890" }, "timers": { "getUpdates": 3 }, "whitelist":[], "activators":[] }, ........... } |
| connectors.freeswitch | {} | Номера внутренних телефонов внутри freeswitch с привязкой к роботам
"5000": { "robot": "ffeaa99a-13d2-4bff-b458-1231c884f8ee" } |
| vad.listening.maxLength | 10000 | Максимальная длина звукового фрагмента |
| vad.listening.minSpeech | 120 | Минимальный отрезок речи, который считать значимым |
| vad.listening.skipSilence | 60 | Не считать тишиной отрезки, короче данного значения |
| vad.listening.maxSilence | 1200 | Максимальная длительность тишины перед отправкой фрагмента |
| vad.listening.speechWaiting | 4000 | Длительность ожидания начала речи |
| vad.playing.maxLength | 2000 | Максимальная длина звукового фрагмента в режиме активного слушания |
| vad.playing.minSpeech | 60 | Минимальный отрезок речи, который считать значимым в режиме активного слушания |
| vad.playing.skipSilence | 60 | Не считать тишиной отрезки, короче данного значения в режиме активного слушания |
| vad.playing.maxSilence | 200 | Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания |
| cluster.logfile | logs/sync.log | Файл логов синхронизации есть только на главном сервере кластера |
| cluster.statusFile | logs/sync.status | Статус задачи синхронизации есть только на главном сервере кластера |
| cluster.nodes | [ ] | Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера |
| tmp | "/tmp/ses" | Временная папка. |
Работа в составе кластера
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы:
- База файловая, в папке robots.
- lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.
- UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.
- В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.
Эмуляция сервисов интеграции
В каталоге /opt/ses/testapi могут располагаться эмуляторы сервисов интеграции. Эмулятор будет доступен по адресу htttp://<адрес ses>/testapi/<название_сервиса>. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл <название_сервиса>.reply. Содержимое файла будет отдано без изменений, как есть по адресу "http://<адрес_ses>:<порт_ses>/ses/testapi/<название_сервиса>".
Настройка каналов и виджетов
Настройка виджета для сайта
- На странице коннектора типа "web" в UPS создать коннектор.
- Разместить на сайте виджет, вставив тег
<script>с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.
Вставка виджета в код сайта
Разместите в <head> или <body> HTML-кода следующий тег:
<script src="https://SERVER/ses/widget/js?NAME" type="module" token="TOKEN"></script>
- SERVER — адрес сервера UPS. Исходный код виджета всегда лежит по пути
/ses/widget/js. - TOKEN — токен авторизации (генерируется и указывается в настройках коннектора "web" в UPS).
- NAME — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.
Пример пустой страницы с тремя разными виджетами:
<!DOCTYPE html>
<html lang="en">
<head> ... </head>
<body>
<script src="https://server.net/ses/widget/js?assistant1" type="module" token="tokenXXX"></script>
<script src="https://server.net/ses/widget/js?assistant" type="module" token="tokenYYY"></script>
<script src="https://server.net/ses/widget/js?chat" type="module" token="tokenZZZ"></script>
</body>
</html>
SSL и реверс-прокси
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:
nginx (пример конфига для wss):
server {
server_name ups_сервер.ru;
listen 6191 ssl;
include snippets/ssl-params.conf;
ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;
client_max_body_size 1000M;
proxy_read_timeout 6000;
proxy_connect_timeout 6000;
proxy_send_timeout 6000;
send_timeout 6000;
large_client_header_buffers 8 256k;
location / {
proxy_pass http://локальный_адрес_ses:6191;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- Раздел proxy_set_header Host $host; обязателен.
- Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.
- Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection "upgrade" для поддержки upgrade-запроса (см. [документацию nginx]).
- Адреса для виджета и конфигов должны быть с поддержкой SSL.
Примечания
- Для множественных языковых функций возможно потребуется отдельная обработка пути "/lang" внутри nginx.
- Для websocket рекомендуется выделять отдельный порт — например, 8091.
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.
Протоколы и порты
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.
Журналы работы
Для проверки состояния сервиса выполните sudo systemctl status ses.
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – /opt/ses/logs/). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой sudo journalctl -u ses
Удаление и обновление ses
Для удаления выполните команду:
/opt/ses/uninstall
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.