AZykov (обсуждение | вклад) |
AZykov (обсуждение | вклад) |
||
| Строка 85: | Строка 85: | ||
= Этап 2. Установка сервисов инференса (опционально) = | = Этап 2. Установка сервисов инференса (опционально) = | ||
Инструкция для '''Ubuntu Server 24.04'''. Стек: ASR (T-one/Triton) → LLM (Qwen3.5-35B-A3B на vLLM) → TTS (LightTTS + CosyVoice3). | Инструкция для '''Ubuntu Server 24.04'''. Стек: ASR (T-one/Triton) → LLM (Qwen3.5-35B-A3B на vLLM) → TTS (LightTTS + CosyVoice3). | ||
| Строка 149: | Строка 147: | ||
docker ps | grep -i tone | docker ps | grep -i tone | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 2.4. LLM (Qwen3.5-35B-A3B на vLLM) == | == 2.4. LLM (Qwen3.5-35B-A3B на vLLM) == | ||
Установка выполняется из Docker Hub, следующей командой: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 254: | Строка 250: | ||
= Этап 3. Настройка .env = | = Этап 3. Настройка .env = | ||
Базовые параметры: | Базовые параметры: | ||
| Строка 298: | Строка 293: | ||
[info ] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) | [info ] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) | ||
</pre> | </pre> | ||
== 4.2. Создать робота в приложении ИИ == | == 4.2. Создать робота в приложении ИИ == | ||
Версия от 22:26, 6 июля 2026
Установка и настройка голосового робота Эра (SecondChain)
Пошаговая инструкция по развёртыванию голосового робота. Процесс разбит на четыре этапа:
- Подготовка — Docker, PostgreSQL, настройки в системе телефонии.
- Установка сервисов инференса — ASR, LLM, TTS. Опционально, только для развёртывания на собственном сервере с GPU.
- Настройка .env — параметры подключения.
- Запуск контейнера и создание робота — старт сервиса и конфигурация робота.
Этап 1. Подготовка
Установка Docker, базы данных и настройка проброса заголовков и абонента в системе телефонии.
1.1. Установка Docker
apt install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1.2. Создать БД в PostgreSQL
Установить или взять существующий инстанс Postgres, создать нового пользователя и базу для робота.
Пример с Docker:
docker run -d \
--name postgres \
--network host \
-e POSTGRES_USER=secondchain \
-e POSTGRES_PASSWORD=changeme \
-e POSTGRES_DB=secondchain \
-v pgdata:/var/lib/postgresql/data \
postgres:17
1.3. Настройка проброса заголовка в B2B

Мастер-домен → приложение Настройки. В конфигурации, в нодах B2B добавить проброс заголовка X-Robot-Session:
"fwd_headers": ["X-Robot-Session"],
Активировать новую конфигурацию.
1.4. Создать абонента для робота

Проектный домен → приложение Настройки. Создать нового абонента, под которым будет регистрироваться робот.
Робот будет использовать данную учетную запись для приема звонков.
1.5. Создать канал интеграции для робота

Проектный домен → приложение Настройки. Создать новый канал интеграции:
- Тип — Подписчик
- Права —
ai_admin,ai_voicebot_admin - Режим активности — постоянный
1.6. Создать движок в приложении ИИ

Задать произвольные название и код. В поле Номер телефона указать внутренний номер абонента, созданного на шаге 1.4.
Количество сессий по умолчанию = 8. Точное число зависит от оборудования, на котором размещаются сервисы робота.
Этап 2. Установка сервисов инференса (опционально)
Инструкция для Ubuntu Server 24.04. Стек: ASR (T-one/Triton) → LLM (Qwen3.5-35B-A3B на vLLM) → TTS (LightTTS + CosyVoice3).
Целевая машина — сервер с GPU: RTX PRO 5000 (48GB) или RTX PRO 6000 Blackwell (96GB).
2.1. Предварительные требования
Убедиться, что установлены драйверы NVIDIA, Docker и NVIDIA Container Toolkit:
nvidia-smi # драйвер и GPU видны
docker --version # Docker установлен
docker run --rm --gpus all ubuntu nvidia-smi # GPU проброшен в контейнер
Если последняя команда не отображает GPU, требуется установить NVIDIA Container Toolkit и перезапустить Docker.
Бюджет VRAM
| Компонент | VRAM |
|---|---|
| ASR (T-one/Triton) | 600–800 MB |
| LLM (Qwen3.5-35B-A3B) | 24–48 GB (зависит от числа сессий и длины контекста) |
| TTS (LightTTS/CosyVoice3) | 11 GB |
Суммарное потребление в пике — ~36–60 GB.
RTX PRO 6000 (96GB): объёма достаточно с большим запасом. Допустимо использование максимального числа сессий и длинного контекста.
RTX PRO 5000 (48GB): запас минимальный. Фиксированная сумма ASR (~0.8 GB) и TTS (11 GB) составляет ~12 GB, на LLM остаётся ~36 GB. Это покрывает только нижнюю границу диапазона LLM (24 GB). Требуется ограничение параметров --max-num-seqs и --max-model-len во избежание ошибки OOM. Значение --gpu-memory-utilization 0.50 (~24 GB на карте 48GB) для данного сценария допустимо при условии, что ASR и TTS инициализированы до старта LLM.
2.2. Порядок запуска
Модели независимы. Рекомендуемый порядок развёртывания для упрощения диагностики: ASR → LLM → TTS.
2.3. ASR (T-one на Triton)
Необходимо скачать и загрузить образ контейнера, создать контейнер и дождаться сборки ML-движка. Первый запуск может проходить долго, 5-15 минут, в зависимости от оборудования. Во время первого запуска система собирает движок модели с оптимизациями под текущий GPU.
wget https://ai02.era-platform.ru/tone-triton.tar.gz
docker load < tone-triton.tar.gz
docker run -d --name tone-triton --gpus all --restart unless-stopped \
-p 17000:8000 -p 17001:8001 -p 17002:8002 \
-v tone-engine:/models/streaming_acoustic/1 \
tone-triton:dist-trt-b32
docker logs -f tone-triton
После появления данного сообщения можно считать что движок собран и переходить к следующему шагу установки:
////////////////////////////////Проверка: после старта Triton слушает gRPC (стандартно 8001) и HTTP (стандартно 8000). Потребление VRAM — 600–800 MB. Статус контейнера:
docker ps | grep -i tone
2.4. LLM (Qwen3.5-35B-A3B на vLLM)
Установка выполняется из Docker Hub, следующей командой:
docker run -d \
--name vllm-qwen35-moe \
--gpus all \
--ipc=host \
-v /path/to/cache:/root/.cache \
-p 16080:8000 \
vllm/vllm-openai:cu130-nightly \
--model Qwen/Qwen3.5-35B-A3B-GPTQ-Int4 \
--served-model-name qwen35-35b-a3b \
--quantization moe_wna16 \
--max-num-seqs 6 \
--max-model-len 4096 \
--kv-cache-memory 3221225472 \
--gpu-memory-utilization 0.50 \
--enable-prefix-caching \
--host 0.0.0.0 --port 8000 \
--reasoning-parser qwen3 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--language-model-only
docker logs vllm-qwen35-moe -f
Ключевые параметры:
--max-model-len 8192— максимальное окно контекста в токенах.--max-num-seqs 6— максимум одновременно обрабатываемых запросов.--gpu-memory-utilization 0.50— 50% VRAM выделено под LLM.--kv-cache-memory 3221225472— 3 GiB под KV-кэш./path/to/cache— директория хост-машины, где будет храниться кеш весов модели (24gb)
Минимальный объём VRAM для запуска — 24 GB. Фактическое потребление — 24–48 GB в зависимости от числа допустимых сессий (--max-num-seqs) и длины контекста (--max-model-len).
После запуска vllm также будет компилировать веса модели под текущий GPU, это занимает от 5 до 20 минут. После завершения компиляции в логах будут следующие строчки:
/////////////
Как только они появятся, можно переходить к следующему шагу.
Проверка: после загрузки весов проверить OpenAI-совместимый эндпоинт на порту 16080:
docker logs -f vllm-qwen35-moe # ожидать "Application startup complete"
curl http://localhost:16080/v1/models
curl http://localhost:16080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen35-35b-a3b",
"messages": [{"role": "user", "content": "Привет"}]
}'
2.5. TTS (LightTTS + CosyVoice3)
По аналогии с T-One, установка выполняется из образа docker-контейнера
wget https://ai02.era-platform.ru/lightts-weights.tar.gz
docker load -i lighttts-weights.tar.gz
docker run -d --gpus all -p 8080:8080 --shm-size 4g \
--restart unless-stopped --name lighttts \
-v lighttts-engines:/opt/models/Fun-CosyVoice3-0.5B \
lighttts/light-tts:weights
docker logs -f lighttts
Проверка: TTS слушает порт 8080, потребление VRAM — 11 GB:
docker ps | grep lighttts
nvidia-smi
2.6. Итоговая карта портов
| Сервис | Контейнер | Внешний порт |
|---|---|---|
| ASR (Triton HTTP) | *tone* |
8000 |
| ASR (Triton gRPC) | *tone* |
8001 |
| LLM (vLLM) | vllm-qwen35-moe |
16080 |
| TTS (LightTTS) | lighttts |
8080 |
2.7. Финальная проверка стека
docker ps # все три контейнера (ASR / vLLM / TTS) в статусе Up
После проверки выполняется подключение пайплайна PjSIP → VAD → ASR → LLM → TTS с указанием эндпоинтов в конфигурации: ASR — :8000/:8001, LLM — :16080, TTS — :8080.
Этап 3. Настройка .env
Базовые параметры:
EXTERNAL_TEMPLATES_URL=https://[адрес инстанса эры]/rest/v1/model/ai/robot
EXTERNAL_TEMPLATES_TOKEN=[локальный токен из шага 1.5]
А также настройки Postgres (из шага 1.2) и подключения SIP к учётной записи абонента (из шага 1.4).
Этап 4. Запуск контейнера и создание робота
4.1. Загрузка образа и запуск контейнера
Скопировать на сервер архив с образом контейнера и файл .env в одну директорию.
wget https://ai02.era-platform.ru/secondchain-1.0.3a-cpu.tar.gz
docker load -i secondchain-1.0.3a-cpu.tar.gz
mkdir -p ./logs
docker run -d --name secondchain \
--network host \
--env-file .env \
--restart unless-stopped \
-v secondchain-data:/data \
-v ./logs:/app/logs \
secondchain:1.0.3a-cpu
docker logs secondchain -f
Когда сервис загрузится и проинициализируется, в консоли появится сообщение:
Registration: OK (code=200) [pjsip.account] [info ] SIP client registered successfully [voip.sip] [info ] VoIP health monitor started [src.api.app] [info ] SecondChain started successfully [src.api.app] [info ] Application startup complete. [uvicorn.error] [info ] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
4.2. Создать робота в приложении ИИ
Загрузить голос
Необходим аудиофайл .mp3 или .wav длительностью ~10 секунд, без лишних шумов и эхо. При загрузке указать точную транскрипцию произнесённого текста (со знаками препинания).
Для быстрого старта можно импортировать демо-голос (импорт + загрузка файла).
Создать инструменты
Базовые инструменты работы со звонком.
drop_call
| Параметр | Значение |
|---|---|
| Имя | drop_call
|
| Код | drop_call
|
| description | Завершение звонка по инициативе робота |
| toolType | callManagement
|
| callAction | drop
|
| enabled | Да |
transfer_call
| Параметр | Значение |
|---|---|
| Имя | transfer_call
|
| Код | transfer_call
|
| description | Перевод звонка на оператора |
| toolType | callManagement
|
| callAction | transfer
|
| transferDestination | Короткий номер для перевода звонков (например, номер очереди) |
| enabled | Да |
Создать робота
Импортировать шаблон (Роботы.json). На вкладке Инструкции изучить рекомендуемый шаблон системного промпта, а также промпта пост-обработки звонка.
4.3. Проверить создание пользователя
После создания робота должен автоматически создаться пользователь Робот_имяРобота.
4.4. Проверить и установить статус пользователя
Приложение Супервизор контакт-центра → раздел Операторы → Текущие статусы. Убрать фильтры, найти пользователя робота и убедиться, что у него установлен статус Готов. При необходимости установить этот статус.
4.5. Добавить робота в очередь
Приложение Администратор контакт-центра → добавить робота как участника очереди. Тип участника = Робот. В остальном настройки идентичны.
4.6. Осуществить звонок
Настройка завершена. Можно совершить звонок в очередь и протестировать работу робота.