Обновление 1.26.10.0 → 1.26.10.2
Обязательные пакеты: unzip, acl. Необязательные: 7zip и wget –
для загрузки образов через архивы. Отсутствующие пакеты можно установить из
комплекта поставки согласно статье Установка пакета из комплекта
поставки.
Перед началом работ на целевой машине остановите все её процессы через Центр управления (UI).
Значимые изменения, которые следует учитывать системному администратору:
- Обновлены образы Docker всех сервисов AI Server (
ai-server-*) – на машине сервера (Центр управления) и на целевых машинах. Образai-server-langflow-backend– с тегом1.26.10.1, остальные образы AI Server – с тегом1.26.10.2. Сторонние образы не обновлялись и остаются с прежними тегами - Обновлены дистрибутивы
Api.MachineInfo-linux.zip(машина сервера) иAgent-linux.zip(целевые машины) - В конфигурации агента у vLLM добавлен параметр
AdditionalArgsсо значением--max-num-seqs 128. Без него гибридные модели с Mamba-слоями (Qwen3.6 и др.) на vLLM не запускаются - Структура БД не изменилась
- Изменён разбор документов для базы знаний RAG: заголовки, сразу за которыми идёт другой заголовок, больше не теряются. Уже загруженные документы исправление не затрагивает – чтобы оно подействовало на них, загрузите их в базу знаний заново
Машина сервера
Перед обновлением проверьте, что у пользователя 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. Обновите образы
Через архивы из 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
done2. Обновите docker-compose.yaml
Замените тег обновлённых образов в файле /app/Primo.AI/Api/docker-compose.yaml:
sudo sed -i -E \
-e 's#(image:[[:space:]]+nexus\.primo-rpa\.ru:8000/primo-rpa/ai-server-(api|auth|inference|logs|ui|langflow-frontend)):1\.26\.10\.0#\1:1.26.10.2#' \
-e 's#(image:[[:space:]]+nexus\.primo-rpa\.ru:8000/primo-rpa/ai-server-langflow-backend):1\.26\.10\.0#\1:1.26.10.1#' \
/app/Primo.AI/Api/docker-compose.yamlПроверьте результат командой grep image: /app/Primo.AI/Api/docker-compose.yaml: у образа ai-server-langflow-backend тег 1.26.10.1, у остальных образов ai-server-* – 1.26.10.2.
3. Обновите 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.MachineInfo4. Обновите пресеты агентских систем
Скачайте пресеты конвейеров агентских систем в хранилище пресетов 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
done5. Настройте права контейнеров на тома
Контейнеры Центра управления работают от непривилегированных пользователей: сервисы 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 {} +
done6. Перезапустите компоненты
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=""
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"
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 "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/^ //')
names=$(echo $images | tr ' ' '\n')
echo "Загружаемые images: $images"
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
echo "Готово!"- Вариант загрузки образов 2: через Docker-реестр Nexus.
Нужен доступ с машины к
nexus.primo-rpa.ru:8000. Если открыт толькоhttps://nexus.primo-rpa.ru(порт 443), используйте вариант 1.
#!/bin/bash
images=""
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"
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 "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/^ //')
names=$(echo $images | tr ' ' '\n')
echo "Загружаемые images: $images"
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
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. Обновите конфигурацию агента
a) Имена образов. Поднимите тег у образов серверов:
sudo sed -i -E \
-e 's#(nexus\.primo-rpa\.ru:8000/primo-rpa/ai-server-(nlp|idp-cpu|idp-gpu|rag-gpu|ft|sdc|ollama|llama-cpp-python)):1\.26\.10\.0"#\1:1.26.10.2"#' \
-e 's#(nexus\.primo-rpa\.ru:8000/primo-rpa/ai-server-langflow-backend):1\.26\.10\.0"#\1:1.26.10.1"#' \
/app/Primo.AI/Agent/appsettings.ProdLinux.jsonПроверьте результат командой grep '"ImageName"' /app/Primo.AI/Agent/appsettings.ProdLinux.json: у образа ai-server-langflow-backend тег 1.26.10.1, у остальных образов ai-server-* – 1.26.10.2.
b) vLLM. Выполняйте только на машинах, где используется vLLM. Откройте файл конфигурации агента:
sudo nano /app/Primo.AI/Agent/appsettings.ProdLinux.jsonВ секции LlmEngineProcess → EnginesDockerRun → Vllm добавьте параметр AdditionalArgs:
"EnginesDockerRun": {
"Vllm": {
...
"ExposePort": true,
"AdditionalArgs": [ "--max-num-seqs 128" ]
},
...Параметр ограничивает число одновременно обрабатываемых запросов vLLM. Значение по умолчанию (256) превышает число блоков Mamba-кэша, поэтому без параметра гибридные модели с Mamba-слоями (Qwen3.6 и др.) на vLLM не запускаются.
4. Перезапустите агента
sudo systemctl restart Primo.AI.AgentПосле обновления
Документы, загруженные в базу знаний RAG до обновления, остаются разобранными по-старому: заголовки, за которыми сразу шёл другой заголовок, и, в документах Word, пункты, оформленные стилем заголовка, могли в базу знаний не попасть. Чтобы исправление разбора подействовало на такие документы, загрузите их в базу знаний заново.
Что дальше
После завершения обновления выполните проверку работоспособности системы.