Skip to Content

Обновление 1.26.3.3 → 1.26.10.0

ℹ️

Примечания к релизам: 1.26.3.4 · 1.26.6.0 · 1.26.6.1 · 1.26.6.2 · 1.26.6.3 · 1.26.6.4 · 1.26.8.0 · 1.26.8.1 · 1.26.8.2 · 1.26.8.3 · 1.26.8.4 · 1.26.10.0

ℹ️

Обязательные пакеты: unzip, acl. Необязательные: 7zip и wget — для загрузки образов через архивы. Отсутствующие пакеты можно установить из комплекта поставки согласно статье Установка пакета из комплекта поставки.

⚠️

Перед началом работ на целевой машине остановите все её процессы через Центр управления (UI).

Значимые изменения, которые следует учитывать системному администратору:

  • Обновились все образы на машине сервера и целевых машинах
  • Обновлен дистрибутив агента на Целевой машине
  • TLS-сертификаты больше не встроены в образ ai-server-ui — теперь монтируются через volume в docker-compose.yaml
  • Упразднён образ ai-server-igx (функционал перенесён в ai-server-langflow-backend)
  • Упразднён образ ai-server-vllm-cpu
  • Образ 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)
  • Изменены конфигурации сервисов: Api (LlmRunners, Agents.UsagePeriod), Inference (Orchestrator), агент (переработана секция LlmEngineProcess: Endpoint вместо Url, диапазоны портов, ExposePort)
  • Обновился файл конфигурации nginx.conf: добавлен location для SSE-стриминга событий Конструктора агентских систем
  • Добавлен новый параметр конфигурации Inference — UnprocessedExpirationSeconds (очистка устаревших необработанных запросов)
  • Добавлены параметры *PrefetchCount в секцию RabbitMQ конфига Inference (ограничение одновременных запросов)
  • Добавлена секция LangflowScriptPreset в конфиг Api (хранилище пресетов агентских систем)
  • Добавлен volume Api_LangflowScriptPreset в docker-compose.yaml для хранения пресетов агентских систем
  • Добавлены пресеты конвейеров агентских систем
  • Добавлены новые модели: base-LLM-11-30b, base-LLM-12-35b, base-LLM-13-26b, ft-base-0.6b-fp16, ft-base-2b-fp16
  • Удалены модели: base-LLM-01-*, base-LLM-06-32b-gguf-q4_k_m, base-LLM-10-4b-safetensors-base
  • Обновлён образ PostgreSQL: postgres:17.6 → postgres:17.10-alpine (устранение уязвимостей, Alpine-база)
  • Обновлён образ RabbitMQ: 3.10.7-management → 4.2.8-management-alpine (устранение уязвимостей, Alpine-база)
  • Обновлён образ Redis: redis:latest → redis:7.4-alpine (устранение уязвимостей, Alpine-база)
  • Образ Ollama (ai-server-ollama) теперь запускается от непривилегированного пользователя (UID 1001)
  • Изменена структура БД: миграции выполняются автоматически при запуске, одна из них удаляет столбец LlmRunnerId из таблицы процессов инференса. Перед обновлением обязательно создайте бэкап БД
  • Добавлен SDC-сервер (семантический классификатор документов) — новый образ целевых машин ai-server-sdc и новая секция DocClassifyProcess в конфигурации агента
  • Образы Docker теперь указываются полным путём в реестре Nexus: nexus.primo-rpa.ru:8000/primo-rpa/<образ>:1.26.10.0 для образов AI Server и путь как на 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
  • Добавлены модели: эмбеддинг-модель qwen3vl-embed-2B и модель семантического классификатора для SDC, базовые LLM base-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.0, раздел «Конвейеры пакетной обработки».

⚠️

Прежние сессии чатов агентских систем пропадут из списков пользователей. Сессии теперь хранятся на сервере и привязаны к пользователю, который их создал. Для сессий, созданных до обновления, пользователь не известен, поэтому в списке сессий они не отображаются.

Машина сервера

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. Извлеките TLS-сертификаты из текущего образа

⚠️

Начиная с версии 1.26.6.2 сертификаты не включены в образ ai-server-ui. Перед обновлением необходимо сохранить сертификаты из работающего контейнера и подключить их через volume.

Создайте директорию для сертификатов:

sudo mkdir -p /app/Primo.AI/Api/volumes/nginx/ssl

Извлеките сертификаты из работающего контейнера server_ui:

docker cp server_ui:/etc/nginx/cert1.crt /app/Primo.AI/Api/volumes/nginx/ssl/cert1.crt docker cp server_ui:/etc/nginx/cert1.rsa /app/Primo.AI/Api/volumes/nginx/ssl/cert1.rsa

Установите права доступа:

sudo chmod 644 /app/Primo.AI/Api/volumes/nginx/ssl/cert1.crt sudo chmod 600 /app/Primo.AI/Api/volumes/nginx/ssl/cert1.rsa
ℹ️

Если контейнер server_ui уже остановлен или сертификаты недоступны, сгенерируйте новые по инструкции.

3. Обновите образы.

Через архивы:

Если 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" externals="library/postgres:17.10-alpine library/rabbitmq:4.2.8-management-alpine library/redis:7.4-alpine" 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 for external in $externals; do 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 $filename.tar.7z $filename.tar done

Если есть доступ к 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" externals="library/postgres:17.10-alpine library/rabbitmq:4.2.8-management-alpine library/redis:7.4-alpine" for name in $names; do docker pull nexus.primo-rpa.ru:8000/primo-rpa/$name:1.26.10.0 done for external in $externals; do docker pull nexus.primo-rpa.ru:8000/$external done

4. Обновите nginx.conf.

Добавьте в файл /app/Primo.AI/Api/volumes/nginx/nginx.conf следующий блок перед общим location ~ (?i)^\/api(\/.*)?:

location ~ (?i)^\/api\/langflowScripts\/job\/.+\/events$ { proxy_pass http://api; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Connection ""; proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_buffering off; }
⚠️

Блок должен располагаться выше общего location ~ (?i)^\/api(\/.*)? { ... }, иначе nginx не будет его использовать. Регулярные выражения в nginx проверяются в порядке объявления.

5. Настройте очистку устаревших запросов.

В файле конфигурации /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте секцию ClearRequestsService:

... "ClearRequestsService": { "DefaultExpirationSeconds": 3600, "UnprocessedExpirationSeconds": 86400 }, ...
ПараметрПо умолчаниюОписание
DefaultExpirationSeconds3600Время хранения обработанного запроса (сек). По умолчанию 1 час
UnprocessedExpirationSeconds86400Время хранения необработанного запроса (сек). По умолчанию 24 часа

6. Добавьте параметры PrefetchCount в конфиг Inference.

В файле конфигурации /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте в секцию RabbitMQ следующие параметры:

... "RabbitMQ": { ... "AgentSystemRequestEventPrefetchCount": 10, "SmartOcrRequestEventPrefetchCount": 10, "NlpRequestEventPrefetchCount": 10, "PackageRequestEventPrefetchCount": 10, "PdfGeneratingEventPrefetchCount": 10 }, ...
ПараметрПо умолчаниюОписание
AgentSystemRequestEventPrefetchCount10Кол-во одновременных запросов агентских систем в обработке
SmartOcrRequestEventPrefetchCount10Кол-во одновременных запросов Умного OCR в обработке
NlpRequestEventPrefetchCount10Кол-во одновременных запросов NLP в обработке
PackageRequestEventPrefetchCount10Кол-во одновременных запросов пакетной обработки
PdfGeneratingEventPrefetchCount10Кол-во одновременных запросов генерации PDF

Уменьшите значения PrefetchCount при нехватке ресурсов на сервере. Это ограничит количество запросов, одновременно обрабатываемых сервисом Inference.

Также в файле /app/Primo.AI/Api/volumes/conf/Inference/appsettings.ProdLinux.json добавьте секцию Orchestrator:

... "Orchestrator": { "Login": "aiserver", "Password": "JLWIyl1xZNDVVx8tcVllOg==", "Address": "https://<адрес Центра управления>:44392" }, ...
ℹ️

Укажите в Address реальный внешний адрес Центра управления. Password — зашифрованное значение.

7. Добавьте секцию LangflowScriptPreset в конфиг Api.

В файле конфигурации /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json добавьте секцию LangflowScriptPreset в блок FileUpload:

... "FileUpload": { ... "LangflowScriptPreset": { "ReadBufferSize": 10000, "ReadBufferIterationBeforeSave": 50, "Folder": "/app/Primo.AI/Api_LangflowScriptPreset", "StoreType": "FileSystem" }, ... }, ...

Также в файле /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json добавьте параметр UsagePeriod в секцию Agents и новую секцию LlmRunners:

... "Agents": { ... "StopProcessAfterUnavailablePeriod": 300, "UsagePeriod": 10000 }, ... "LlmRunners": { "StartTimeoutSeconds": 1200, "StopTimeoutSeconds": 300 }, ...

8. Обновите конфигурацию Api (при необходимости)

Новые параметры Api необязательны: если их нет в файле /app/Primo.AI/Api/volumes/conf/Api/appsettings.ProdLinux.json, используются значения по умолчанию. Добавляйте секции, только если нужно изменить поведение.

a) Управление целевой машиной. По умолчанию в меню целевой машины доступен пункт Управление. На странице управления можно менять настройки агента, завершать процессы, останавливать контейнеры и очищать кэш моделей. Чтобы скрыть этот пункт, добавьте в секцию Agents параметр ManagementEnabled:

... "Agents": { ... "ManagementEnabled": false }, ...

b) Внешнее 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 указывается в зашифрованном виде (утилита шифрования конфигов).

c) Загрузка базовых моделей из 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" } }, ...
ПараметрПо умолчаниюОписание
DownloadTimeoutMinutes240Максимальное время загрузки модели (мин)
ConnectivityTimeoutSeconds10Таймаут проверки связи с реестром (сек)
IgnoreCertificateErrorstrueНе проверять сертификаты реестров
TempFolderпустоКаталог для временных файлов; пусто — используется FileUpload.Temp
HuggingFace.TokenпустоТокен Hugging Face для закрытых моделей

9. Обновите docker-compose.yaml.

В файле /app/Primo.AI/Api/docker-compose.yaml:

  1. Обновите образ PostgreSQL:
postgres: image: nexus.primo-rpa.ru:8000/library/postgres:17.10-alpine
  1. Обновите образ RabbitMQ:
rabbitMQ: image: nexus.primo-rpa.ru:8000/library/rabbitmq:4.2.8-management-alpine
  1. Обновите образ Redis:
redis: image: nexus.primo-rpa.ru:8000/library/redis:7.4-alpine
  1. Создайте каталоги для тестовых файлов Умного OCR и тестовых пакетов:
sudo mkdir -p /app/Primo.AI/Api/volumes/Api_SmartOcrTestFile /app/Primo.AI/Api/volumes/Api_TestPackage

и добавьте в секцию volumes сервиса api:

- ./volumes/Api_LangflowScriptPreset:/app/Primo.AI/Api_LangflowScriptPreset - ./volumes/Api_SmartOcrTestFile:/app/Primo.AI/Api_SmartOcrTestFile - ./volumes/Api_TestPackage:/app/Primo.AI/Api_TestPackage
  1. Добавьте в секцию volumes сервиса nginx монтирование сертификатов:
volumes: - ./volumes/nginx/nginx.conf:/etc/nginx/nginx.conf - ./volumes/nginx/ssl/cert1.crt:/etc/nginx/cert1.crt:ro - ./volumes/nginx/ssl/cert1.rsa:/etc/nginx/cert1.rsa:ro - ./volumes/nginx/:/var/log/nginx

Образы теперь указываются полным путём в реестре 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.0#' \ -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/.

10. Скачайте новые модели:

Имя моделиИмя файлаИсполнение
base-llm-11-30b-gguf-q4_k_me8dfc900-e183-4647-80b0-a97f242a7dbaOllama
base-llm-12-35b-gguf-q4_k_m3377b494-f686-4cef-9db1-4ffb3164cc9cOllama
base-llm-12-35b-safetensors-nfvp463e56e59-6c96-4fc7-9ecb-afab3d79bb21vLLM
base-llm-13-26b-gguf-q4_k_m1442b32b-aaee-4139-88c1-a7f313d11a09Ollama
base-llm-12-35b-safetensors-4bit471c79fa-17b3-46a6-a42f-b93eef012012vLLM
base-llm-14-27b-safetensors-4bit312244b9-9d2e-4553-8bd1-b135e739af13vLLM
base-llm-14-27b-gguf-q4_k_m40d9afa6-de73-46e6-a85d-8816d54cafb7Ollama
ft-base-0.6b-fp166dd7fb3c-d58e-427c-8845-39964df50bc5vLLM (FT)
ft-base-2b-fp16ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0vLLM (FT)
filenames="e8dfc900-e183-4647-80b0-a97f242a7dba \ 3377b494-f686-4cef-9db1-4ffb3164cc9c \ 63e56e59-6c96-4fc7-9ecb-afab3d79bb21 \ 1442b32b-aaee-4139-88c1-a7f313d11a09 \ 471c79fa-17b3-46a6-a42f-b93eef012012 \ 312244b9-9d2e-4553-8bd1-b135e739af13 \ 40d9afa6-de73-46e6-a85d-8816d54cafb7 \ 6dd7fb3c-d58e-427c-8845-39964df50bc5 \ ce8f072a-b6dc-4c9f-ae4e-abe826da3aa0" 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 done
⚠️

Файлы моделей, пресетов и контекста не имеют расширения, и AI Server ищет их по точному имени. Скачивайте их командами из статьи. Браузер добавляет к имени расширение по типу содержимого (например, .txt) — если файл скачан браузером, удалите это расширение.

Модели SDC-сервера (нужны для проектов Классификация (семантическая)):

Имя моделиИмя файла
qwen3vl-embed-2B2263ec5f-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

11. Скачайте пресеты конвейеров агентских систем:

sudo mkdir -p /app/Primo.AI/Api/volumes/Api_LangflowScriptPreset/ filenames="e18c953c-6cbf-4f43-9267-76796bea018c \ fd652603-1410-49cd-a3ab-6323256753fa \ b933462a-b85e-4267-b5df-45a78f9453a4 \ 3bc6dd44-226f-4a61-87e6-475e4c0e2dd0" for filename in $filenames; do 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 done

12. Перезапустите компоненты Api:

docker compose -f /app/Primo.AI/Api/docker-compose.yaml down && \ docker compose -f /app/Primo.AI/Api/docker-compose.yaml up -d
ℹ️

После обновления Центра управления выполните повторный вход в систему.

13. Обновите 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.MachineInfo

Целевые машины

Настройте права доступа для Ollama

⚠️

Шаг обязателен, если на целевой машине используется Ollama. Образ ai-server-ollama теперь запускается от непривилегированного пользователя (UID 1001). Агент создаёт файлы и поддиректории в ModelTemplates от имени agent:primo-ai, поэтому для доступа Ollama используется механизм POSIX ACL с наследованием прав — он не зависит от текущего владельца файла. Директории blobs и meta дополнительно должны принадлежать непосредственно UID 1001: Ollama изменяет временные метки файлов в них, а для этого требуется реальное владение файлом, а не только ACL.

Установите пакет acl, если он отсутствует, из комплекта поставки согласно статье Установка пакета из комплекта поставки.

Настройте права доступа для UID 1001 и агента на существующие файлы и директории:

sudo setfacl -R -m u:1001:rwx,u:agent:rwx /app/Primo.AI/AgentData/ModelTemplates

Установите default ACL для автоматического наследования прав новыми файлами и директориями:

sudo setfacl -R -d -m u:1001:rwx,u:agent:rwx /app/Primo.AI/AgentData/ModelTemplates

Верните владельца директории агенту:

sudo chown -R agent:primo-ai /app/Primo.AI/AgentData/ModelTemplates

Смените владельца файлов моделей на UID 1001:

sudo chown -R 1001:1001 /app/Primo.AI/AgentData/ModelTemplates/blobs/* sudo chown -R 1001:1001 /app/Primo.AI/AgentData/ModelTemplates/meta/*

Проверьте результат:

getfacl /app/Primo.AI/AgentData/ModelTemplates

В выводе должны присутствовать строки user:1001:rwx и default:user:1001:rwx.

Обновите файлы агента:

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/ sudo systemctl start Primo.AI.Agent

Удалите упразднённые образы

ℹ️

Образ ai-server-igx больше не нужен. Его функционал перенесён в ai-server-langflow-backend. Образ ai-server-vllm-cpu упразднён.

images=( "primo-rpa/ai-server-igx" "primo-rpa/ai-server-vllm-cpu" ) for img in "${images[@]}"; do echo "Удаляем образ: $img" docker stop $(docker ps -a -q --filter ancestor="$img") 2>/dev/null || true docker rm $(docker ps -a -q --filter ancestor="$img") 2>/dev/null || true done docker rmi "${images[@]}" 2>/dev/null || true

Образы

  • Вариант загрузки образов 1: скачайте необходимые архивы из официальной поставки AI Server:

Если 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" 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/^ //') 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.primo-rpa.ru:8000.
#!/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/^ //') names=$(echo $images | tr ' ' '\n') echo "Загружаемые images: $images" echo "Externals: $externals" for name in $names; do docker pull nexus.primo-rpa.ru:8000/primo-rpa/$name:1.26.10.0 done for external in $externals; do docker pull nexus.primo-rpa.ru:8000/$external done echo "Готово!"

Обновите конфигурацию агента

Добавьте параметр ExtraEnvs в секцию Ollama файла /app/Primo.AI/Agent/appsettings.ProdLinux.json:

"Ollama": { ... "PostRunCommands": [ "cp {modelFilePath} {blobFilePath}", "ollama create {modelId} -f {modelMetaFilePath}", "ollama run {modelId} \"\"" ], "ExtraEnvs": [ "-e OLLAMA_GO_TEMPLATE=1", "-e OLLAMA_IMAGE_MIN_TOKENS=32" ] }

Также переработана секция LlmEngineProcess (проверка доступности через Endpoint вместо Url, диапазоны портов PortsRangeFrom/PortsRangeTo вместо Port, параметр ExposePort). Приведите секцию к следующему виду:

"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 }, "Ollama": { "ImageName": "nexus.primo-rpa.ru:8000/primo-rpa/ai-server-ollama:1.26.10.0", "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.0", "ContainerName": "llama", "PortsRangeFrom": 8040, "PortsRangeTo": 8059, "Subnet": "agent_agent_ai", "ExposePort": true } } },

Добавьте секции и параметры, появившиеся в 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.0", "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.0"#' \ -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/.

e) Настройки, изменённые через интерфейс. Настройки агента, изменённые на странице Управление целевой машины, сохраняются в файл appsettings.Runtime.json. Чтобы он хранился рядом с данными агента, а не в каталоге программы, добавьте секцию RuntimeSettings:

... "RuntimeSettings": { "Directory": "/app/Primo.AI/AgentData" }, ...
ℹ️

Каталоги SdcModels, IdpModels и LangfuseData агент создаёт сам при первом запуске процесса.

Перезапустите агент:

sudo systemctl restart Primo.AI.Agent

Что дальше

После завершения обновления выполните проверку работоспособности системы.

Last updated on