Обновление 1.26.6.4 → 1.26.10.2
Обязательные пакеты: unzip, acl. Необязательные: 7zip и wget — для загрузки образов через архивы. Отсутствующие пакеты можно установить из комплекта поставки согласно статье Установка пакета из комплекта поставки.
Перед началом работ на целевой машине остановите все её процессы через Центр управления (UI).
Значимые изменения, которые следует учитывать системному администратору:
- Обновлены образы Docker всех сервисов AI Server (
ai-server-*) — на машине сервера (Центр управления) и на целевых машинах - Обновлены дистрибутивы
Api.MachineInfo-linux.zip(машина сервера) иAgent-linux.zip(целевые машины) - Образ vLLM заменён:
primo-rpa/ai-server-vllm-gpu→ внешний образnexus.primo-rpa.ru:8000/vllm/vllm-openai:v0.30.0 - Добавлена новая модель
base-LLM-12-35b-safetensors-nfvp4(vLLM) — мультимодальная LLM для обработки изображений и в роли ViT для Умного OCR, поддерживает флаг Рассуждение. Это vLLM-вариант моделиbase-LLM-12-35b-gguf-q4_k_m - Изменены конфигурации сервисов: Api (секция
LlmRunners, параметрAgents.UsagePeriod), Inference (секцияOrchestrator), агент (переработана секцияLlmEngineProcess:EndpointвместоUrl, диапазоны портов,ExposePort) - Изменена структура БД: миграции выполняются автоматически при запуске, одна из них удаляет столбец
LlmRunnerIdиз таблицы процессов инференса. Перед обновлением обязательно создайте бэкап БД - Добавлен SDC-сервер (семантический классификатор документов) — новый образ целевых машин
ai-server-sdcи новая секцияDocClassifyProcessв конфигурации агента - Образы Docker теперь указываются полным путём в реестре Nexus:
nexus.primo-rpa.ru:8000/primo-rpa/<образ>:<версия>для образов AI Server (1.26.10.1— уai-server-langflow-backend, у остальных —1.26.10.2) и путь как на Docker Hub для сторонних:nexus.primo-rpa.ru:8000/library/<образ>:<тег>для официальных образов (PostgreSQL, Redis, RabbitMQ), для остальных — пространство издателя (vllm/vllm-openai,pgvector/pgvector). Имена образов нужно заменить вdocker-compose.yamlна машине сервера и в конфигурации агента на целевых машинах. Образ vLLM обновлён доnexus.primo-rpa.ru:8000/vllm/vllm-openai:v0.30.0 - Изменён разбор документов для базы знаний RAG: заголовки, сразу за которыми идёт другой заголовок, больше не теряются. Уже загруженные документы исправление не затрагивает — чтобы оно подействовало на них, загрузите их в базу знаний заново
- В конфигурации агента у vLLM добавлен параметр
AdditionalArgsсо значением--max-num-seqs 128. Без него гибридные модели с Mamba-слоями (Qwen3.6 и др.) на vLLM не запускаются - Добавлены модели: эмбеддинг-модель
qwen3vl-embed-2Bи модель семантического классификатора для SDC, базовые LLMbase-LLM-12-35b-safetensors-4bit,base-LLM-14-27b-safetensors-4bit(vLLM) иbase-LLM-14-27b-gguf-q4_k_m(Ollama) - В
docker-compose.yamlу сервиса Api добавлены томаApi_SmartOcrTestFileиApi_TestPackage— в них хранятся тестовые файлы Умного OCR и тестовые пакеты - В конфигурации Api добавлены необязательные секции
ExternalS3(внешнее S3-хранилище заказчика),ExternalModelRegistries(загрузка базовых моделей из Hugging Face и Ollama) и параметрAgents.ManagementEnabled(страница управления целевой машиной) - В конфигурации агента добавлены параметр
Lfx.SuperUserPasswordи томLangfuseDataдля трассировки агентских систем - Из конфигураций сервисов и агента удалены неиспользуемые параметры, например
RabbitMQ.ConnectionWithRetry,SessionLifetimeTailMin,FileDownload,ProcessStore. Оставлять их в конфигурации можно: они больше не читаются - Страница чата агентской системы теперь требует входа в AI Server
- В конфигурации агента для Ollama добавлен параметр
OLLAMA_IMAGE_MIN_TOKENS=32вExtraEnvs— минимальный порог токенов для обработки изображений - Добавлены параметры модели Обработка изображений и Рассуждение для внешней LLM
- Изменён формат конвейеров пакетной обработки: правила обработки полей задаются только у шага постобработки, в условии
hasFieldвместоhasTextиспользуетсяvalueState, списокorстал альтернативой собственным проверкам условия
Конвейеры пакетной обработки нужно поправить вручную. Старый конвейер сохранится без ошибки — неизвестные поля при сохранении игнорируются, — но правила, оставшиеся на шагах Умного OCR и NLP, применяться не будут, а условия начнут срабатывать иначе. Что именно поправить — в статье Обновление 1.26.8.3 → 1.26.10.2, раздел «Конвейеры пакетной обработки».
Прежние сессии чатов агентских систем пропадут из списков пользователей. Сессии теперь хранятся на сервере и привязаны к пользователю, который их создал. Для сессий, созданных до обновления, пользователь не известен, поэтому в списке сессий они не отображаются.
Машина сервера
Перед обновлением проверьте, что у пользователя primo, от имени которого работает Api.MachineInfo, есть домашний каталог. Если каталога нет, команда его создаст:
h=$(getent passwd primo | cut -d: -f6); [ -d "$h" ] && echo "Каталог $h уже есть" || { sudo install -d -m 700 -o primo -g "$(id -gn primo)" "$h" && echo "Создан $h"; }1. Создайте бэкап БД
docker exec -it postgres mkdir -p /var/lib/postgresql/data/backups && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-identity -F c -f /var/lib/postgresql/data/backups/identity_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-application -F c -f /var/lib/postgresql/data/backups/application_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-filestore -F c -f /var/lib/postgresql/data/backups/filestore_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-license -F c -f /var/lib/postgresql/data/backups/license_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-logs -F c -f /var/lib/postgresql/data/backups/logs_$(date +%F).dump && \
docker exec -it postgres pg_dump -U postgres -d primo-ai-inference -F c -f /var/lib/postgresql/data/backups/inference_$(date +%F).dump && \
mkdir -p /app/Primo.AI/Api/backups && \
sudo mv /app/Primo.AI/Api/volumes/pgsql-data/backups/*.dump /app/Primo.AI/Api/backups/.2. Обновите образы
Через архивы из Nexus (https://nexus.primo-rpa.ru):
Если 7z не установлен, установите пакет 7zip из репозитория ОС или из комплекта поставки согласно статье Установка пакета из комплекта поставки.
names="ai-server-api ai-server-auth ai-server-inference ai-server-logs ai-server-machineinfo ai-server-ui ai-server-langflow-backend ai-server-langflow-frontend"
for name in $names; do
wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/docker/images/$name.tar.7z"
7z x $name.tar.7z
docker load -i $name.tar
rm $name.tar.7z $name.tar
doneЧерез Docker-реестр Nexus, если с машины открыт nexus.primo-rpa.ru:8000:
names="ai-server-api ai-server-auth ai-server-inference ai-server-logs ai-server-machineinfo ai-server-ui ai-server-langflow-backend ai-server-langflow-frontend"
for name in $names; do
tag=1.26.10.2
[ "$name" = "ai-server-langflow-backend" ] && tag=1.26.10.1 # Исполнитель агентских систем в 1.26.10.2 не обновлялся
docker pull nexus.primo-rpa.ru:8000/primo-rpa/$name:$tag
done3. Обновите docker-compose.yaml
Создайте каталоги для новых томов:
sudo mkdir -p /app/Primo.AI/Api/volumes/Api_SmartOcrTestFile /app/Primo.AI/Api/volumes/Api_TestPackageВ файле /app/Primo.AI/Api/docker-compose.yaml добавьте в секцию volumes сервиса Api два тома:
Api:
...
volumes:
...
- ./volumes/Api_LangflowScriptPreset:/app/Primo.AI/Api_LangflowScriptPreset
- ./volumes/Api_SmartOcrTestFile:/app/Primo.AI/Api_SmartOcrTestFile
- ./volumes/Api_TestPackage:/app/Primo.AI/Api_TestPackage
...Без этих томов тестовые файлы Умного OCR и тестовые пакеты хранятся внутри контейнера и пропадают при его пересоздании.
Образы теперь указываются полным путём в реестре Nexus. Замените имена образов в docker-compose.yaml:
sudo sed -i -E \
-e 's#image:[[:space:]]+primo-rpa/(ai-server-[a-z-]+)(:[^[:space:]]+)?[[:space:]]*$#image: nexus.primo-rpa.ru:8000/primo-rpa/\1:1.26.10.2#' \
-e 's#(ai-server-langflow-backend):1\.26\.10\.2#\1:1.26.10.1#' \
-e 's#image:[[:space:]]+externals/#image: nexus.primo-rpa.ru:8000/library/#' \
/app/Primo.AI/Api/docker-compose.yamlПроверьте результат: все образы в выводе команды grep image: /app/Primo.AI/Api/docker-compose.yaml должны начинаться с nexus.primo-rpa.ru:8000/.
4. Скачайте новые модели
Файлы моделей, пресетов и контекста не имеют расширения, и AI Server ищет их по точному имени. Скачивайте их командами из статьи. Браузер добавляет к имени расширение по типу содержимого (например, .txt) — если файл скачан браузером, удалите это расширение.
Модели SDC-сервера (нужны для проектов Классификация (семантическая)):
| Имя модели | Имя файла |
|---|---|
| qwen3vl-embed-2B | 2263ec5f-b843-422f-b9e0-78e98549e738 |
| Классификатор (семантический) | 8502296a-9608-4672-bd7a-05acb32b50ef |
wget "https://nexus.primo-rpa.ru/repository/raw/data/ai-server/models/2263ec5f-b843-422f-b9e0-78e98549e738" -O /app/Primo.AI/Api/volumes/Api_Models/2263ec5f-b843-422f-b9e0-78e98549e738
wget "https://nexus.primo-rpa.ru/repository/raw/data/ai-server/models/8502296a-9608-4672-bd7a-05acb32b50ef" -O /app/Primo.AI/Api/volumes/Api_Models/8502296a-9608-4672-bd7a-05acb32b50efНовые LLM для NLP:
| Имя модели | Имя файла | Исполнение |
|---|---|---|
| base-llm-12-35b-safetensors-nfvp4 | 63e56e59-6c96-4fc7-9ecb-afab3d79bb21 | vLLM |
| base-llm-12-35b-safetensors-4bit | 471c79fa-17b3-46a6-a42f-b93eef012012 | vLLM |
| base-llm-14-27b-safetensors-4bit | 312244b9-9d2e-4553-8bd1-b135e739af13 | vLLM |
| base-llm-14-27b-gguf-q4_k_m | 40d9afa6-de73-46e6-a85d-8816d54cafb7 | Ollama |
filenames="63e56e59-6c96-4fc7-9ecb-afab3d79bb21 \
471c79fa-17b3-46a6-a42f-b93eef012012 \
312244b9-9d2e-4553-8bd1-b135e739af13 \
40d9afa6-de73-46e6-a85d-8816d54cafb7"
for filename in $filenames; do
wget "https://nexus.primo-rpa.ru/repository/raw/data/ai-server/models/$filename" -O /app/Primo.AI/Api/volumes/Api_Models/$filename
done5. Обновите конфигурацию сервисов
a) Api. В файле /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json добавьте параметр UsagePeriod в секцию Agents:
...
"Agents": {
...
"StopProcessAfterUnavailablePeriod": 300,
"UsagePeriod": 10000
},
...и добавьте новую секцию LlmRunners (рядом с секциями Rag, Langflow):
...
"LlmRunners": {
"StartTimeoutSeconds": 1200,
"StopTimeoutSeconds": 300
},
...| Параметр | По умолчанию | Описание |
|---|---|---|
Agents.UsagePeriod | 10000 | Периодичность сбора данных о нагрузке на целевые машины (мс) |
LlmRunners.StartTimeoutSeconds | 1200 | Таймаут запуска контейнера LLM-движка (сек) |
LlmRunners.StopTimeoutSeconds | 300 | Таймаут остановки контейнера LLM-движка (сек) |
b) Inference. В файле /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте секцию Orchestrator:
...
"Orchestrator": {
"Login": "aiserver",
"Password": "JLWIyl1xZNDVVx8tcVllOg==",
"Address": "https://<адрес Центра управления>:44392"
},
...Укажите в Address реальный внешний адрес Центра управления. Password — зашифрованное значение (утилита шифрования конфигов).
Параметры Api, добавленные в 1.26.10.0, необязательны: если их нет в файле /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json, используются значения по умолчанию. Добавляйте секции, только если нужно изменить поведение.
c) Api: управление целевой машиной. По умолчанию в меню целевой машины доступен пункт Управление. На странице управления можно менять настройки агента, завершать процессы, останавливать контейнеры и очищать кэш моделей. Чтобы скрыть этот пункт, добавьте в секцию Agents параметр ManagementEnabled:
...
"Agents": {
...
"ManagementEnabled": false
},
...d) Api: внешнее S3-хранилище. Если PDF-документы пакетной обработки и файлы запросов нужно сохранять в S3-хранилище заказчика, добавьте секцию ExternalS3:
...
"ExternalS3": {
"Endpoint": "",
"AccessKey": "",
"SecretKey": "",
"SSL": true,
"ForcePathStyle": false,
"StoreType": "Minio", // Minio, AmazonS3
"PackageFiles": {
"Enabled": false,
"Path": ""
},
"RequestFiles": {
"Enabled": false,
"Path": ""
}
},
...SecretKey указывается в зашифрованном виде (утилита шифрования конфигов).
e) Api: загрузка базовых моделей из Hugging Face и Ollama. Базовую модель теперь можно добавить из Hugging Face или из реестра Ollama прямо в интерфейсе. Для этого машине сервера нужен доступ к huggingface.co, registry.ollama.ai и ollama.com. Параметры задаются секцией ExternalModelRegistries: добавьте её, если нужно указать токен Hugging Face или изменить таймауты.
...
"ExternalModelRegistries": {
"DownloadTimeoutMinutes": 240,
"ConnectivityTimeoutSeconds": 10,
"IgnoreCertificateErrors": true,
"TempFolder": "",
"HuggingFace": {
"ApiUrl": "https://huggingface.co/api",
"FilesUrl": "https://huggingface.co",
"Token": ""
},
"Ollama": {
"RegistryUrl": "https://registry.ollama.ai",
"LibraryUrl": "https://ollama.com/library"
}
},
...| Параметр | По умолчанию | Описание |
|---|---|---|
DownloadTimeoutMinutes | 240 | Максимальное время загрузки модели (мин) |
ConnectivityTimeoutSeconds | 10 | Таймаут проверки связи с реестром (сек) |
IgnoreCertificateErrors | true | Не проверять сертификаты реестров |
TempFolder | пусто | Каталог для временных файлов; пусто — используется FileUpload.Temp |
HuggingFace.Token | пусто | Токен Hugging Face для закрытых моделей |
6. Обновите Api.MachineInfo
wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/linux/Api.MachineInfo-linux.zip"
sudo systemctl stop Primo.AI.Api.MachineInfo
sudo unzip -o Api.MachineInfo-linux.zip -x "appsettings*" -d /app/Primo.AI/Api.MachineInfo/
sudo chmod +x /app/Primo.AI/Api.MachineInfo/Primo.AI.Api.MachineInfo
sudo chown primo:primo-ai /app/Primo.AI/Api.MachineInfo/
sudo systemctl start Primo.AI.Api.MachineInfo7. Обновите пресеты агентских систем
Скачайте пресеты конвейеров агентских систем в хранилище пресетов Api — файлы заменят прежние версии:
| Пресет | Имя файла |
|---|---|
| RAG-система | 3bc6dd44-226f-4a61-87e6-475e4c0e2dd0 |
| RAG-система: наполнение базы знаний | b933462a-b85e-4267-b5df-45a78f9453a4 |
| Чат | fd652603-1410-49cd-a3ab-6323256753fa |
filenames="3bc6dd44-226f-4a61-87e6-475e4c0e2dd0 \
b933462a-b85e-4267-b5df-45a78f9453a4 \
fd652603-1410-49cd-a3ab-6323256753fa"
for filename in $filenames; do
sudo wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/data/agsys-presets/$filename" -O /app/Primo.AI/Api/volumes/Api_LangflowScriptPreset/$filename
done8. Настройте права контейнеров на тома
Контейнеры Центра управления работают от непривилегированных пользователей: сервисы Api, Auth, Inference и Logs — от UID 1001, nginx (server_ui) и бэкенд Конструктора агентских систем — от UID 1000. Если UID учетной записи primo с ними не совпадает, контейнеры не могут прочитать свои конфигурации и писать в тома. Каталоги, созданные при обновлении через sudo, принадлежат root, и контейнеры не могут в них писать при любом UID primo. Механизм POSIX ACL с наследованием выдаёт контейнерам доступ ко всем текущим и будущим файлам. Команды безопасно выполнять повторно.
Установите пакет acl, если он отсутствует, из репозитория ОС (sudo apt install -y acl) или из комплекта поставки согласно статье Установка пакета из комплекта поставки.
volumes=/app/Primo.AI/Api/volumes
sudo mkdir -p $volumes/Api_Models $volumes/Api_ContextFiles $volumes/Api_LangflowScriptPreset \
$volumes/Api_SmartOcrTestFile $volumes/Api_TestPackage \
$volumes/Logs/Api $volumes/Logs/Api.Auth $volumes/Logs/Api.Inference $volumes/Logs/Api.Logs \
$volumes/langflow_data/logs
for dir in conf Api_Models Api_ContextFiles Api_LangflowScriptPreset Api_SmartOcrTestFile Api_TestPackage Logs; do
sudo setfacl -R -m u:1001:rwX $volumes/$dir
sudo find $volumes/$dir -type d -exec setfacl -d -m u:1001:rwX {} +
done
for dir in nginx langflow_data; do
sudo setfacl -R -m u:1000:rwX $volumes/$dir
sudo find $volumes/$dir -type d -exec setfacl -d -m u:1000:rwX {} +
done9. Перезапустите компоненты
docker compose -f /app/Primo.AI/Api/docker-compose.yaml down && \
docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -dУбедитесь, что Центр управления доступен по HTTPS (порт 44392).
После обновления Центра управления выполните повторный вход в систему.
Целевые машины
Перед обновлением проверьте, что у пользователя agent, от имени которого работает агент, есть домашний каталог. Если каталога нет, команда его создаст:
h=$(getent passwd agent | cut -d: -f6); [ -d "$h" ] && echo "Каталог $h уже есть" || { sudo install -d -m 700 -o agent -g "$(id -gn agent)" "$h" && echo "Создан $h"; }1. Обновите образы
- Вариант загрузки образов 1: скачайте архивы комплекта поставки из Nexus (
https://nexus.primo-rpa.ru):
Если 7z не установлен, установите пакет 7zip из репозитория ОС или из комплекта поставки согласно статье Установка пакета из комплекта поставки.
images=""
externals=""
echo "GPU? y/n"
read GPU
if [ "$GPU" = "y" ] || [ "$GPU" = "Y" ]; then
echo "Агентские системы? y/n"
read agent_systems
if [ "$agent_systems" = "y" ] || [ "$agent_systems" = "Y" ]; then
images+=" ai-server-rag-gpu ai-server-langflow-backend"
externals+=" pgvector/pgvector:pg18"
fi
echo "FT-сервер? y/n"
read ft_server
if [ "$ft_server" = "y" ] || [ "$ft_server" = "Y" ]; then
images+=" ai-server-ft"
fi
echo "NLP-сервер? y/n"
read nlp_server
if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then
images+=" ai-server-nlp"
fi
echo "Ollama? y/n"
read ollama
if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then
images+=" ai-server-ollama"
fi
echo "vLLM? y/n"
read vllm
if [ "$vllm" = "y" ] || [ "$vllm" = "Y" ]; then
externals+=" vllm/vllm-openai:v0.30.0"
fi
echo "IDP-сервер? y/n"
read idp_server
if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then
images+=" ai-server-idp-gpu"
fi
else
echo "NLP-сервер? y/n"
read nlp_server
if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then
images+=" ai-server-nlp"
fi
echo "Ollama? y/n"
read ollama
if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then
images+=" ai-server-ollama"
fi
echo "IDP-сервер? y/n"
read idp_server
if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then
images+=" ai-server-idp-cpu"
fi
fi
echo "SDC-сервер (семантический классификатор)? y/n"
read sdc_server
if [ "$sdc_server" = "y" ] || [ "$sdc_server" = "Y" ]; then
images+=" ai-server-sdc"
fi
# Удаляем ведущий пробел
images=$(echo $images | sed 's/^ //')
externals=$(echo $externals | sed 's/^ //')
names=$(echo $images | tr ' ' '\n')
echo "Загружаемые images: $images"
echo "Externals: $externals"
for name in $names; do
echo "Загрузка $name..."
wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/docker/images/$name.tar.7z"
7z x $name.tar.7z
docker load -i $name.tar
rm -f $name.tar.7z $name.tar
done
for external in $externals; do
echo "Загрузка external $external..."
filename=$(echo "${external##*/}" | sed 's/:/_/g')
wget "https://nexus.primo-rpa.ru/repository/raw/data/libraries/docker/images/$filename.tar.7z"
7z x $filename.tar.7z
docker load -i $filename.tar
rm -f $filename.tar.7z $filename.tar
done
echo "Готово!"- Вариант загрузки образов 2: через Docker-реестр Nexus.
Нужен доступ с машины к
nexus.primo-rpa.ru:8000. Если открыт толькоhttps://nexus.primo-rpa.ru(порт 443), используйте вариант 1.
#!/bin/bash
images=""
externals=""
echo "GPU? y/n"
read GPU
if [ "$GPU" = "y" ] || [ "$GPU" = "Y" ]; then
echo "Агентские системы? y/n"
read agent_systems
if [ "$agent_systems" = "y" ] || [ "$agent_systems" = "Y" ]; then
images+=" ai-server-rag-gpu ai-server-langflow-backend"
externals+=" pgvector/pgvector:pg18"
fi
echo "FT-сервер? y/n"
read ft_server
if [ "$ft_server" = "y" ] || [ "$ft_server" = "Y" ]; then
images+=" ai-server-ft"
fi
echo "NLP-сервер? y/n"
read nlp_server
if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then
images+=" ai-server-nlp"
fi
echo "Ollama? y/n"
read ollama
if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then
images+=" ai-server-ollama"
fi
echo "vLLM? y/n"
read vllm
if [ "$vllm" = "y" ] || [ "$vllm" = "Y" ]; then
externals+=" vllm/vllm-openai:v0.30.0"
fi
echo "IDP-сервер? y/n"
read idp_server
if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then
images+=" ai-server-idp-gpu"
fi
else
echo "NLP-сервер? y/n"
read nlp_server
if [ "$nlp_server" = "y" ] || [ "$nlp_server" = "Y" ]; then
images+=" ai-server-nlp"
fi
echo "Ollama? y/n"
read ollama
if [ "$ollama" = "y" ] || [ "$ollama" = "Y" ]; then
images+=" ai-server-ollama"
fi
echo "IDP-сервер? y/n"
read idp_server
if [ "$idp_server" = "y" ] || [ "$idp_server" = "Y" ]; then
images+=" ai-server-idp-cpu"
fi
fi
echo "SDC-сервер (семантический классификатор)? y/n"
read sdc_server
if [ "$sdc_server" = "y" ] || [ "$sdc_server" = "Y" ]; then
images+=" ai-server-sdc"
fi
# Удаляем ведущий пробел
images=$(echo $images | sed 's/^ //')
externals=$(echo $externals | sed 's/^ //')
names=$(echo $images | tr ' ' '\n')
echo "Загружаемые images: $images"
echo "Externals: $externals"
for name in $names; do
tag=1.26.10.2
[ "$name" = "ai-server-langflow-backend" ] && tag=1.26.10.1 # Исполнитель агентских систем в 1.26.10.2 не обновлялся
docker pull nexus.primo-rpa.ru:8000/primo-rpa/$name:$tag
done
for external in $externals; do
docker pull nexus.primo-rpa.ru:8000/$external
done
echo "Готово!"2. Обновите файлы агента
wget "https://nexus.primo-rpa.ru/repository/raw/1.26.10/ai-server/linux/Agent-linux.zip"
sudo systemctl stop Primo.AI.Agent
sudo unzip -o Agent-linux.zip -x "appsettings*" -d /app/Primo.AI/Agent/
sudo chmod +x /app/Primo.AI/Agent/Primo.AI.Agent
sudo chown -R agent:primo-ai /app/Primo.AI/Agent/Флаг -x "appsettings*" сохраняет ваш файл конфигурации агента. Правки конфигурации внесите на следующем шаге, агент запустится на шаге «Перезапустите агента».
3. Обновите конфигурацию агента
В файле /app/Primo.AI/Agent/appsettings.ProdLinux.json переработана секция LlmEngineProcess:
- проверка доступности движка (
HealthCheck) задаётся относительным путёмEndpointвместо полногоUrl; - порт контейнера движка задаётся диапазоном
PortsRangeFrom/PortsRangeToвместо одиночногоPort; - для
VllmиLlamaCppPythonдобавлен параметрExposePort.
Приведите секцию LlmEngineProcess к следующему виду:
"LlmEngineProcess": {
"HealthCheck": {
"Vllm": {
"Endpoint": "/version",
"TimeoutSeconds": 600,
"PeriodMilliseconds": 500
},
"Ollama": {
"Endpoint": "/v1/models",
"TimeoutSeconds": 600,
"PeriodMilliseconds": 500
},
"LlamaCppPython": {
"Endpoint": "/v1/models",
"TimeoutSeconds": 600,
"PeriodMilliseconds": 500
}
},
"EnginesDockerRun": {
"Vllm": {
"ImageName": "nexus.primo-rpa.ru:8000/vllm/vllm-openai:v0.30.0",
"ContainerName": "vllm",
"PortsRangeFrom": 8000,
"PortsRangeTo": 8019,
"Subnet": "agent_agent_ai",
"ExposePort": true,
"AdditionalArgs": [ "--max-num-seqs 128" ]
},
"Ollama": {
"ImageName": "nexus.primo-rpa.ru:8000/primo-rpa/ai-server-ollama:1.26.10.2",
"ContainerName": "ollama",
"PortsRangeFrom": 8020,
"PortsRangeTo": 8039,
"Subnet": "agent_agent_ai",
"PostRunCommands": [
"cp {modelFilePath} {blobFilePath}",
"ollama create {modelId} -f {modelMetaFilePath}",
"ollama run {modelId} \"\""
],
"ExtraEnvs": [ "-e OLLAMA_GO_TEMPLATE=1", "-e OLLAMA_IMAGE_MIN_TOKENS=32" ]
},
"LlamaCppPython": {
"ImageName": "nexus.primo-rpa.ru:8000/primo-rpa/ai-server-llama-cpp-python:1.26.10.2",
"ContainerName": "llama",
"PortsRangeFrom": 8040,
"PortsRangeTo": 8059,
"Subnet": "agent_agent_ai",
"ExposePort": true
}
}
},Если на целевой машине используется vLLM на GPU, укажите в EnginesDockerRun.Vllm.ImageName внешний образ nexus.primo-rpa.ru:8000/vllm/vllm-openai:v0.30.0 (ранее primo-rpa/ai-server-vllm-gpu).
4. Добавьте новые параметры конфигурации агента
В файле /app/Primo.AI/Agent/appsettings.ProdLinux.json добавьте секции и параметры, появившиеся в 1.26.10.0.
a) SDC-сервер. Добавьте секцию DocClassifyProcess (рядом с секцией IdpProcess). Без неё SDC-сервер на целевой машине не запустится.
...
"DocClassifyProcess": {
"HealthCheck": {
"TimeoutSeconds": 180,
"PeriodMilliseconds": 500
},
"DockerOptions": {
"PortsRangeFrom": 9600,
"PortsRangeTo": 9699,
"ImageName": "nexus.primo-rpa.ru:8000/primo-rpa/ai-server-sdc:1.26.10.2",
"ContainerNamePrefix": "sdc",
"Subnet": "agent_agent_ai",
"SharedMemorySize": 4
},
"VolumeMounts": [
{
"HostPath": "/app/Primo.AI/AgentData/SdcModels",
"ContainerPath": "/app/apps/doc_classify/model_store"
}
]
},
...b) IDP-сервер. Чтобы IDP-сервер не скачивал модели заново при каждом запуске, добавьте в секцию IdpProcess параметр VolumeMounts:
"IdpProcess": {
...
"VolumeMounts": [
{
"HostPath": "/app/Primo.AI/AgentData/IdpModels",
"ContainerPath": "/app/apps/idp/model_store"
}
]
},c) Агентские системы. Выполняйте только на машинах с Агентскими системами. В секции Lfx:
- добавьте параметр
SuperUserPassword— пароль суперпользователя исполнителя в зашифрованном виде (утилита шифрования конфигов). Ниже указано значение из поставки. Если параметр не задан, исполнитель использует собственный пароль по умолчанию; - замените параметр
VolumesспискомVolumeMountsи добавьте в него томLangfuseData— в нём хранятся трассы агентских систем. Без этого тома трассы теряются при каждом перезапуске исполнителя.
"Lfx": {
...
"SuperUserPassword": "JLWIyl1xZNDVVx8tcVllOg==",
...
"VolumeMounts": [
{
"HostPath": "/app/Primo.AI/AgentData/LangflowData",
"ContainerPath": "/app/data",
"AppendPort": true
},
{
"HostPath": "/app/Primo.AI/AgentData/LangfuseData",
"ContainerPath": "/app/langfuse",
"AppendPort": true
}
]
},d) Имена образов. Образы теперь указываются полным путём в реестре Nexus с тегом версии. Замените значения ImageName в конфигурации агента:
sudo sed -i -E \
-e 's#"ImageName": "primo-rpa/ai-server-vllm-(cpu|gpu)(:[^"]*)?"#"ImageName": "nexus.primo-rpa.ru:8000/vllm/vllm-openai:v0.30.0"#' \
-e 's#"ImageName": "primo-rpa/(ai-server-[a-z-]+)(:[^"]*)?"#"ImageName": "nexus.primo-rpa.ru:8000/primo-rpa/\1:1.26.10.2"#' \
-e 's#"ImageName": "externals/vllm-openai:[^"]*"#"ImageName": "nexus.primo-rpa.ru:8000/vllm/vllm-openai:v0.30.0"#' \
-e 's#"ImageName": "externals/pgvector:([^"]*)"#"ImageName": "nexus.primo-rpa.ru:8000/pgvector/pgvector:\1"#' \
/app/Primo.AI/Agent/appsettings.ProdLinux.jsonПроверьте результат: все значения в выводе команды grep '"ImageName"' /app/Primo.AI/Agent/appsettings.ProdLinux.json должны начинаться с nexus.primo-rpa.ru:8000/.
Образ Исполнителя агентских систем в 1.26.10.2 не обновлялся — верните ему тег 1.26.10.1:
sudo sed -i -E 's#(nexus\.primo-rpa\.ru:8000/primo-rpa/ai-server-langflow-backend):1\.26\.10\.2"#\1:1.26.10.1"#' /app/Primo.AI/Agent/appsettings.ProdLinux.jsonОстальные образы ai-server-* в конфигурации агента — с тегом 1.26.10.2.
e) Настройки, изменённые через интерфейс. Настройки агента, изменённые на странице Управление целевой машины, сохраняются в файл appsettings.Runtime.json. Чтобы он хранился рядом с данными агента, а не в каталоге программы, добавьте секцию RuntimeSettings:
...
"RuntimeSettings": {
"Directory": "/app/Primo.AI/AgentData"
},
...Каталоги SdcModels, IdpModels и LangfuseData агент создаёт сам при первом запуске процесса.
5. Удалите упразднённый образ vLLM
Образ primo-rpa/ai-server-vllm-gpu больше не используется — его заменил внешний образ nexus.primo-rpa.ru:8000/vllm/vllm-openai:v0.30.0.
docker stop $(docker ps -a -q --filter ancestor="primo-rpa/ai-server-vllm-gpu") 2>/dev/null || true
docker rm $(docker ps -a -q --filter ancestor="primo-rpa/ai-server-vllm-gpu") 2>/dev/null || true
docker rmi primo-rpa/ai-server-vllm-gpu 2>/dev/null || true6. Перезапустите агента
sudo systemctl restart Primo.AI.AgentПосле обновления
Документы, загруженные в базу знаний RAG до обновления, остаются разобранными по-старому: заголовки, за которыми сразу шёл другой заголовок, и, в документах Word, пункты, оформленные стилем заголовка, могли в базу знаний не попасть. Чтобы исправление разбора подействовало на такие документы, загрузите их в базу знаний заново.
Что дальше
После завершения обновления выполните проверку работоспособности системы.