Skip to content

Latest commit

 

History

History
283 lines (202 loc) · 43.4 KB

local-deployment.md

File metadata and controls

283 lines (202 loc) · 43.4 KB

Развёртывание «Договоры и риски» в организации

Редакция руководства: 22 сентября 2026. Поставка исходников: 0.3.6. Аудитория: системный администратор и команда внедрения.

1. Что можно установить сейчас

В архиве — работающий веб-сервис с тремя исполнителями анализа на выбор, но без весов моделей и без Codex CLI. Локальное хранение не означает локальное выполнение AI-анализа: исполнитель задаётся при старте службы через DOCS_MODEL_PROVIDER и не переключается на работающем сервисе.

Сценарий Готовность и передача данных
Внутренний сервер + общий Codex Реализовано. БД и оригиналы находятся у организации; текст анализируемого пакета передаётся в Codex. Нужны согласование такой передачи, совместимый CLI и доступ к учётной записи
Внутренний сервер + локальная модель, без подписок Реализовано и подключено: DOCS_MODEL_PROVIDER=local (раздел 6.2). Codex CLI и аккаунт ChatGPT не нужны; исполнителю разрешены только внутренние адреса сети. Проверено на синтетическом vLLM-сервере, не на реальном vLLM с GPU и без оценки качества на русскоязычных договорах
Внутренний сервер + облачный вендор Реализовано: DOCS_MODEL_PROVIDER=openai|deepseek|kimi|anthropic (раздел 6.3). Требуется API-ключ организации; текст пакета уходит выбранному вендору
Изолированный сервер без подключения модели Можно проверять интерфейс, загрузку и хранение. AI-анализ не работает; результаты тестового исполнителя не являются анализом реального договора

В пакет не входят веса моделей, Codex CLI, Node.js, системные пакеты, node_modules, TLS-сертификаты, пароли, данные пользователей и договоры. Это исходная поставка, не автономный air-gap-инсталлятор. Зависимости нужно получить из доверенного репозитория или перенести через разрешённый контур подготовки.

2. Состав поставки и проверка целостности

Скачайте архив, соседний файл SHA-256 и manifest.json со страницы «Локальная установка». На Linux в каталоге скачивания:

sha256sum -c contract-docs-0.3.6.tar.gz.sha256
tar -tzf contract-docs-0.3.6.tar.gz

Ожидается один верхний каталог contract-docs-0.3.6/. Файл SOURCE-REVISION.txt содержит commit исходников; MANIFEST.sha256 — хеши каждого включённого файла. SHA-256 подтверждает целостность, но не является цифровой подписью издателя; сам архив получать по доверенному HTTPS-каналу.

Каталог Назначение
server/ HTTP-сервис, SQLite, анализ, извлечение, правила и нормативный корпус
public/ Веб-интерфейс и опубликованные документы; без внешних шрифтов и CDN
deploy/onprem/ Пример systemd-службы, параметров окружения, nginx и проверка извлечения в песочнице
references/, specs/ Руководство установки, архитектура, описание ограниченной нормативной базы
scripts/, test/ Проверки и синтетические фикстуры; тесты не используют реальные договоры

Из публичной поставки исключены история Git, эксплуатационный журнал, конфигурация действующего VPS, его установочные скрипты, базы, загрузки, runtime, логи и секреты. Профили подрядчиков в server/rules.mjs — стартовые данные исходного продукта: перед применением в другой организации проверьте и адаптируйте их. Доступность исходников по ссылке не меняет лицензии внешних зависимостей и моделей.

3. Требования к первому стенду

  • Linux x86-64 с systemd, локальным диском и работающими user namespaces/bubblewrap. Команды ниже рассчитаны на Debian/Ubuntu-подобную среду; другое размещение требует адаптации.
  • Node.js не ниже 22.13 с node:sqlite; поставляемая служба ожидает /usr/bin/node. Python 3, poppler-utils, antiword, bubblewrap, tar, curl и nginx. Установку Node.js выполняйте из одобренного организацией источника с проверкой дистрибутива; не используйте случайный install-скрипт из интернета.
  • Для пилота с внешним Codex: стартовый ориентир 2–4 vCPU, 4 ГБ RAM и диск по объёму оригиналов/backup. Это не измеренная ёмкость и не sizing GPU. Лимиты службы 1 ГБ/2 CPU нужно проверить на собственных пакетах.
  • Внутреннее DNS-имя, сертификат доверенного УЦ, доступ пользователей по HTTPS. Порт приложения 3107 слушает только loopback; снаружи его не открывать.
  • Один процесс приложения и один узел записи SQLite; БД не размещать на сетевой файловой системе. Каждый аккаунт имеет свой каталог договоров, общего пространства подразделения с ролями пока нет.
sudo apt-get update
sudo apt-get install python3 poppler-utils antiword bubblewrap nginx curl ca-certificates
/usr/bin/node --version
npm --version

На действующем стенде проверены Ubuntu 22.04.5 x86-64, Node 22.23.2, npm 10.9.8, Python 3.10.12, bubblewrap 0.6.1 и Codex CLI 0.152.1. Это сведения о проверенном стенде, не рекомендация оставлять зависимости без обновлений безопасности.

Для воспроизводимости зафиксируйте версии OS, Node, npm, Python, bubblewrap, извлекателей и CLI в акте установки. Не подменяйте работоспособность песочницы отключением изоляции; на системах с ограничениями AppArmor/user namespaces подготовьте узкое согласованное правило, а не глобальное ослабление защиты.

3.1. Если анализ должен выполняться локальной моделью

GPU не нужна для текущего варианта с внешним Codex. После разработки локального исполнителя рекомендуем начать со следующих конфигураций; это ориентиры пилота, не подтверждённая производительность.

Вариант Аппаратная конфигурация Модель для испытаний
Экономный 8 физических CPU-ядер, 64 ГБ RAM, NVMe 1 ТБ, GPU 24 ГБ VRAM Qwen3.5-9B, проверенная Q4–Q8; 1 активный запрос
Рекомендуемый 12–16 физических ядер, 128 ГБ RAM, 2 × 2 ТБ NVMe RAID1, GPU 48 ГБ VRAM, backup отдельно Qwen3.5-27B, Q4–Q6; два этапа последовательно; начать с контекста 32–64K
С запасом для подразделения Inference: 24 ядра, 256 ГБ RAM, GPU 96 ГБ либо 2 × 48 ГБ; отдельные web/БД и backup Проверить 27B/35B, длинный контекст и 2 запроса после доработки очереди

Две GPU по 48 ГБ не превращаются автоматически в одну 96 ГБ. При двух разных моделях учитывать память обеих или задержку смены весов. 27B в BF16 — около 54 ГБ только полезных весов, поэтому для карты 48 ГБ нужна совместимая квантизация.

Дополнительно сравнить Qwen3.6-27B; Qwen3.6-35B-A3B — при приоритете пропускной способности; Mistral-Small-3.2-24B-Instruct-2506 — как другое семейство для ревью. Точные ID, первичные источники, лицензии, расчёт памяти, электропитание и приёмка приведены в разделе 9 архитектуры. Рекомендации не подтверждают качество на российских договорах: необходим размеченный контрольный набор.

Не закупайте оборудование до проверки полного комплекта и этапа ревью на выбранной модели. Недостаток контекста обрабатывается явно; существующая нумерация документа сохраняется.

4. Разместить исходники и проверить зависимости

Ниже — первая установка на отдельном хосте. Если служба, пользователь или каталог уже существуют, остановитесь и используйте процедуру обновления в разделе 8. Архив сначала проверьте из непривилегированного аккаунта.

tar -xzf contract-docs-0.3.6.tar.gz
cd contract-docs-0.3.6
sha256sum -c MANIFEST.sha256
npm ci --omit=dev --ignore-scripts
npm run check
npm test
node deploy/onprem/preflight.mjs

npm test использует искусственный исполнитель и проверяет механику, не качество модели. preflight.mjs дополнительно извлекает синтетический DOCX через настоящий bubblewrap; его нужно успешно выполнить и от пользователя службы после установки.

sudo useradd --system --home-dir /var/lib/contract-docs --shell /usr/sbin/nologin contract-docs
sudo install -d -m 0755 /opt/contract-docs/releases/0.3.6
sudo cp -a . /opt/contract-docs/releases/0.3.6/
sudo install -d -m 0755 /opt/contract-docs/releases/0.3.6/public/downloads
sudo install -m 0644 ../contract-docs-0.3.6.tar.gz ../contract-docs-0.3.6.tar.gz.sha256 ../manifest.json /opt/contract-docs/releases/0.3.6/public/downloads/
sudo chown -R root:root /opt/contract-docs/releases/0.3.6
sudo chmod -R a+rX /opt/contract-docs/releases/0.3.6
sudo install -d -m 0700 -o contract-docs -g contract-docs /var/lib/contract-docs
sudo ln -s /opt/contract-docs/releases/0.3.6 /opt/contract-docs/current
sudo -u contract-docs /usr/bin/node /opt/contract-docs/current/deploy/onprem/preflight.mjs
sudo install -d -m 0700 /etc/contract-docs
sudo install -m 0600 deploy/onprem/contract-docs.env.example /etc/contract-docs/contract-docs.env
sudoedit /etc/contract-docs/contract-docs.env

Архив не содержит сам себя. Три файла из каталога скачивания копируются отдельно в public/downloads/, чтобы ссылки публикации работали и на новой установке. Исходники внутри архива не зависят от доступа к приватному Git.

В параметрах замените DOCS_ORIGIN на реальный HTTPS origin без /docs и без завершающего слеша; DOCS_CODEX_ADMIN — на логин назначенного владельца приложения. Если анализ будет выполнять локальная модель или облачный вендор, вместо блока Codex раскомментируйте соответствующий блок примера и укажите DOCS_MODEL_PROVIDER (раздел 6). Пример change-me оставлять нельзя. .env в каталоге проекта автоматически не читается: параметры загружает EnvironmentFile службы.

Параметр Значение
DOCS_ORIGIN Например, https://contracts.example.org; должен совпадать с адресом браузера, иначе сервер отклонит запись
DOCS_CODEX_ADMIN Логин владельца общего подключения; не пароль и не системный пользователь
DOCS_MODEL_PROVIDER codex (по умолчанию), local или облачный вендор; см. раздел 6. Задаётся один раз при установке
DOCS_CODEX Только для режима codex: абсолютный путь к совместимому CLI. Без него интерфейс/хранилище доступны, анализ — нет
DOCS_DATA /var/lib/contract-docs: БД, оригиналы, сохранённые задания и авторизация приложения
DOCS_RUNTIME /run/contract-docs: systemd RuntimeDirectory на tmpfs для разовых пакетов
DOCS_PORT 3107; при изменении синхронно поправить reverse proxy
sudo install -m 0644 deploy/onprem/contract-docs.service /etc/systemd/system/contract-docs.service
sudo systemd-analyze verify /etc/systemd/system/contract-docs.service
sudo systemctl daemon-reload
sudo systemctl enable --now contract-docs
curl --fail http://127.0.0.1:3107/docs/health
sudo systemctl is-active contract-docs

Ожидается health со status=ok, version=0.3.6, а также provider и external — вид исполнителя и признак передачи текста наружу. Health не проверяет подключение модели, извлечение, качество анализа или наличие свободного диска.

5. HTTPS и первый пользователь

  1. Настройте DNS и получите сертификат через одобренный внутренний УЦ. Не создавайте исключения проверки TLS в браузере.
  2. Возьмите deploy/onprem/nginx.conf.example, замените имя сервера и пути сертификатов. Добавьте отдельный virtual host в принятую на сервере схему nginx; не перезаписывайте существующий конфиг.
  3. Проверьте sudo nginx -t, затем sudo systemctl reload nginx.
  4. Пока доступ закрыт для остальных, зарегистрируйте в веб-интерфейсе логин, указанный в DOCS_CODEX_ADMIN, и уникальный пароль от 10 символов. Только после этого откройте доступ сотрудникам: иначе чужой человек может занять логин владельца.
  5. Проверьте вход, выход, повторный вход и изоляцию двух тестовых аккаунтов. Самостоятельная регистрация открыта всем, кто имеет сетевой доступ; ограничьте сервис VPN/внутренней сетью.

Конфигурация сохраняет префикс /docs/ до приложения, отключает буферизацию тела запросов и не пишет access log данного маршрута. Это часть защиты разовых пакетов; проверьте также WAF, аварийные журналы, swap и дампы ядра. Внешние proxy не должны добавлять контентные логи или складывать тела запросов на диск.

Документы и архив на маршрутах /docs/local-installation/ и /docs/downloads/ доступны без входа. Это намеренное свойство публикации, а не доступ к договорам. Если внутри организации эти материалы тоже закрытые, ограничьте маршруты на reverse proxy. Не кладите внутренние сведения в публикуемые документы.

6. Подключение исполнителя анализа

Исполнитель один на процесс и фиксируется при старте: DOCS_MODEL_PROVIDER=codex (по умолчанию), local или один из облачных вендоров. Скрытая смена провайдера и запасной выход в облако запрещены архитектурой; смена режима — это остановка службы, правка EnvironmentFile и запуск. Прежние анализы хранят закреплённого исполнителя и не пересчитываются.

6.1. Общий Codex (режим по умолчанию)

Для этого варианта нужен совместимый Codex CLI, установленный администратором из одобренного официального дистрибутива. Способ установки описан в официальном руководстве CLI; вход по коду — в официальном руководстве авторизации.

Перед использованием проверьте поддержку флагов, реально вызываемых server/codex.mjs: login --device-auth, exec --ignore-user-config --ignore-rules --ephemeral --output-schema, выключение инструментов и необходимые параметры конфигурации. Версии CLI различаются; наличие команды codex ещё не доказывает совместимость. Не удаляйте защитные флаги ради успешного запуска.

Войдите назначенным владельцем → «Настройки» → «Подключить общий Codex» → завершите вход на официальной странице. Авторизация относится ко всему приложению; сотрудникам не нужны API-ключи или личные входы Codex. Не копируйте auth.json с рабочего VPS, root или чужого аккаунта.

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

6.2. Локальная модель без внешних подписок

Режим local не использует Codex CLI, аккаунт ChatGPT и API-ключи: анализ выполняет внутренний inference-сервер с OpenAI-совместимым API vLLM. Владельцу не нужно ничего подключать в интерфейсе — конфигурацию задаёт администратор установки в EnvironmentFile.

Переменная Значение
DOCS_MODEL_PROVIDER local
DOCS_LOCAL_ENDPOINT Адрес vLLM. Разрешены только внутренние адреса: loopback, 10/8, 172.16/12, 192.168/16, fd00::/8. Путь — / или /v1, без параметров, логина и пароля в URL
DOCS_LOCAL_MODEL Идентификатор модели, который сервер отдаёт в /v1/models; ответ с другим id отклоняется
DOCS_LOCAL_MODEL_REVISION Закреплённая ревизия весов; расхождение с ответом сервера переводит исполнителя в состояние ошибки
DOCS_LOCAL_TOKENIZER_REVISION Закреплённая ревизия токенизатора
DOCS_LOCAL_CHAT_TEMPLATE_FILE Файл chat template; читается при старте службы
DOCS_LOCAL_CHAT_TEMPLATE_SHA256 SHA-256 этого файла; несовпадение останавливает запуск
DOCS_LOCAL_CONTEXT_WINDOW Размер контекста; /tokenize сервера должен сообщать max_model_len не меньше этого значения
DOCS_LOCAL_API_KEY Необязательный bearer-токен внутреннего сервера
DOCS_LOCAL_TIMEOUT_MS Необязательный лимит этапа, не больше 30 минут
DOCS_LOCAL_TEMPORARY_POLICY Необязательно; memory-only-attested фиксирует заявление администратора, что сервер не пишет запросы на диск. Это заявление, а не проверка

Перед каждым обращением адрес endpoint резолвится и проверяется: если хоть один полученный адрес не внутренний, запрос не отправляется (endpoint_forbidden), а проверенный адрес закрепляется за соединением — подмена DNS между проверкой и запросом исключена. Имя вида api.openai.com в DOCS_LOCAL_ENDPOINT не пройдёт эту проверку. Это защита от ошибки конфигурации, а не замена сетевым правилам: default-deny egress на уровне узла остаётся задачей организации (LOC-07).

Что меняется для пользователя: поиск организации по ИНН недоступен и скрыт из карточки, вход Codex в настройках не предлагается, на экране «Исполнитель анализа» показаны закреплённые модель, ревизия весов и контекст, а разовая проверка сообщает, что текст не покидает контур установки.

DOCS_MODEL_PROVIDER=local
DOCS_LOCAL_ENDPOINT=http://10.0.0.15:8000/v1
DOCS_LOCAL_MODEL=Qwen/Qwen3.5-27B-Instruct
DOCS_LOCAL_MODEL_REVISION=<sha весов>
DOCS_LOCAL_TOKENIZER_REVISION=<sha токенизатора>
DOCS_LOCAL_CHAT_TEMPLATE_FILE=/etc/contract-docs/chat-template.jinja
DOCS_LOCAL_CHAT_TEMPLATE_SHA256=<sha256 файла>
DOCS_LOCAL_CONTEXT_WINDOW=65536

Измерить срабатывание правил на своей модели: DOCS_MODEL_PROVIDER=local … npm run rules:eval. Отчёт называет исполнителя и модель.

Проверено: запуск службы без Codex CLI, health, статус исполнителя, отказ входа Codex и отказ ИНН-поиска, полный прогрессивный цикл и контроль контекста — на синтетическом vLLM-сервере (test/local-provider.test.mjs, test/local-runner.test.mjs). Не проверено: реальный vLLM с GPU, пропускная способность и юридическое качество на русскоязычных договорах. До такой приёмки режим считается пилотным.

6.3. Облачный вендор вместо Codex

Режим для организаций, которые готовы работать по договору с вендором, но не через общий аккаунт ChatGPT: DOCS_MODEL_PROVIDER принимает openai, deepseek, kimi или anthropic. Нужны DOCS_CLOUD_API_KEY и DOCS_CLOUD_MODEL; DOCS_CLOUD_BASE_URL переопределяет адрес вендора (например, корпоративный шлюз), DOCS_CLOUD_CONTEXT_WINDOW задаёт контекст, DOCS_CLOUD_API_VERSION — версию API Anthropic.

Текст пакета в этом режиме покидает контур организации: условия обработки данных определяет договор с вендором, а не это приложение. Поиск организации по ИНН, как и в локальном режиме, недоступен. Проверено на синтетических HTTP-серверах вендорских протоколов; промышленные прогоны на реальных ключах не выполнялись.

6.4. Карточка своей организации

В разделе «Организации» создайте карточку подрядчика. Для ручного ввода обязательно только название; ИНН, если указан, проверяется по контрольным разрядам. Карточки изолированы по аккаунтам, повторный ИНН в одном аккаунте не допускается.

«Заполнить по ИНН через LLM» доступно только в режиме Codex и запускает отдельный поиск через общий вход. В режимах local и облачного вендора кнопка скрыта, а запрос к API отклоняется до расхода часовой квоты. В запрос передаётся только ИНН, не договоры и не содержимое карточки. Поиск ограничен тремя минутами и шестью попытками в час на пользователя; если исполнитель занят, можно заполнить вручную. Веб-поиск разрешён только для этой операции; при анализе договоров он по-прежнему отключён. Настройка CLI: web_search.

Результат — черновик с цитатами, ссылками и датой поиска. LLM может ошибаться: ссылки и совпадение ИНН не доказывают актуальность реестра. Заполненные вручную поля не заменяются. Проверьте реквизиты, раздельно укажите юридический адрес и фактическое расположение команды, затем сохраните карточку. Наличие лицензий и ресурсов требует первичных документов. Поиск можно отменить; при недоступности интернета доступен ручной ввод.

Для Codex CLI 0.152.1 поиску нужен штатный codex-code-mode-host из официального пакета: приложение включает features.code_mode_host только для поиска по ИНН. При анализе договоров он отключён вместе с web_search. Не снимайте ограничения shell, плагинов и браузера, если поиск недоступен. Опциональный живой тест test/organization-live.mjs запускается администратором только с DOCS_LIVE_ORGANIZATION_SMOKE=1 и явно заданным DOCS_SHARED_CODEX_HOME для авторизации этого приложения. Он ищет публичный тестовый ИНН, не сохраняет организацию, печатает runId и типы событий без токенов или пользовательских документов. Такой отчёт отличает недоступность инструментов от корректно выполненного поиска, но не подтверждает юридическую достоверность найденного.

После обновления старые встроенные профили не предлагаются. В существующем договоре нажмите «Выбрать организацию подрядчика». Новые анализы используют выбранную карточку; история, документы, риски и прежние снимки не переписываются. Разовой проверке также нужна организация, но её документы и результаты не сохраняются в хранилище.

Для air-gap-размещения интернет-поиск должен быть отключён; карточки заполняются вручную или из отдельно проверенного offline-справочника. Локальная модель сама по себе не получает доступ к реестрам.

7. Эксплуатационная приёмка

Проверка Ожидаемый результат
Без входа GET /docs/api/bootstrap 401; публичные руководство и архив остаются доступны
PDF/DOC/DOCX Текст извлекается изолированно; исходные пункты сохранены. OCR-модуль включён в исходники, но не активирован в интерфейсе; скан без текстового слоя в рабочем режиме требует ручной обработки
Повторная загрузка Точный дубликат не создаёт второй файл в той же области; похожий текст не объединяется автоматически
Два этапа Первичный результат и ревью различаются; сбой ревью не выглядит завершённой проверкой
Редакции/риски Новый комплект не переписывает старые источники риска; принятие решения остаётся за сотрудником
Разовый пакет Нет договора/анализа в постоянной БД; удаление, TTL или перезапуск очищают пакет; скачанный отчёт вне контроля сервиса
Нормы Видны версия и reference_only. Корпус содержит 29 пунктов в шести модулях, актуальность редакций не подтверждена юристом; нельзя заявлять полную правовую проверку
Ресурсы /run на tmpfs, каталог службы 0700, нет core dumps/swap для службы; достаточно диска и RAM
Backup/restore Восстановленная копия содержит согласованные БД и оригиналы; случайные документы других аккаунтов недоступны

Диагностика: systemctl status contract-docs, journalctl -u contract-docs --since today, свободное место и состояние песочницы. Не публикуйте журналы целиком: сначала проверьте, нет ли в них конфиденциального содержимого. 403 при записи обычно требует сверить HTTPS origin и настройки proxy; ошибка извлечения — проверить bubblewrap от пользователя службы; ошибка модели — совместимость CLI и общий вход.

8. Резервная копия, обновление и откат

Перед остановкой согласуйте окно работ, завершите загрузки и анализы, предупредите о потере разовых пакетов. Простой cp contracts.sqlite работающего WAL-хранилища не является согласованной резервной копией.

Для небольшого пилота — остановить службу и сохранить весь каталог данных вместе с конфигурацией в защищённый backup. Архив содержит и учётные данные Codex: храните его зашифрованным, ключ отдельно; никогда не публикуйте рядом с исходниками.

sudo sh -eu -c '
  test ! -e /var/backups/contract-docs/before-update.tar.gz
  systemctl stop contract-docs
  trap "systemctl start contract-docs" EXIT
  install -d -m 0700 /var/backups/contract-docs
  umask 077
  tar -czf /var/backups/contract-docs/before-update.tar.gz -C / var/lib/contract-docs etc/contract-docs
'

test должен завершиться успешно; при существующем backup выберите новое уникальное имя, не перезаписывайте его. Если копирование завершилось ошибкой, не продолжайте обновление. Этот backup целостный благодаря остановке; шифрование и перенос в отдельный внутренний контур выполняются по политике организации.

Обновление: проверить новую поставку → распаковать в новый каталог releases → установить зависимости и прогнать тесты без подключения к рабочей БД → проверить миграции на копии → backup → остановить службу → атомарно заменить current → запустить → проверить health, вход и синтетический сценарий. Старый release сохраняется. Зависимости и код не обновляются поверх работающего каталога.

Откат: если схема данных обратно совместима, остановить службу, вернуть current на предыдущий release и запустить. Если нет — на изолированном стенде восстановить согласованную БД и оригиналы из backup, проверить, затем выполнить согласованное переключение. Не накладывать восстановление поверх новых данных вслепую. Восстановление ведёт к потере изменений после backup; это требует отдельного решения владельца данных. Регулярно проверяйте восстановление на отдельной машине и фиксируйте фактические RPO/RTO.

9. Приёмка полностью локального контура

Запуск режима описан в разделе 6.2 — здесь перечислено то, что остаётся сделать организации, чтобы считать локальный контур принятым в эксплуатацию. Пункты 1 и 2 прежнего плана выполнены в поставке 0.3.4: провайдер подключён к очереди, снимок анализа закрепляет исполнителя, таймауты, отмена, переполнение контекста и запрет внешнего fallback покрыты тестами на синтетическом сервере.

  1. Проверить связку на реальном vLLM: оба этапа, формулировку правки, отмену, OOM, неверную схему и неверную цитату.
  2. Измерить срабатывание правил на выбранной модели: DOCS_MODEL_PROVIDER=local npm run rules:eval, затем разобрать каждое расхождение.
  3. В контуре подготовки закрепить веса, лицензии, tokenizer/chat template, runtime и драйверы; измерить память обоих этапов и подобрать GPU по реальному комплекту, не только размеру весов.
  4. Разместить модель отдельно от БД и оригиналов; закрыть её endpoint от пользователей. Отключить prompt/response logging, disk cache, телеметрию и внешние соединения; временные запросы не включать в backup.
  5. Переносить нормативные выпуски проверенным пакетом, с ответственным за редакции и даты. Шесть текущих положений не покрывают требования всей организации.
  6. Прогнать оба этапа и формулировку при заблокированном интернете; проверить отмену, OOM, неверную схему/цитату, исходные номера, отсутствие межпользовательских утечек и следов разовых пакетов.
  7. Провести юридическую оценку качества на размеченных русскоязычных договорах и измерить P50/P95 под нагрузкой. До прохождения этих проверок не объявлять установку готовой к промышленной эксплуатации.

Полная схема компонентов, границы данных, оборудование и критерии приёмки: архитектурный документ. Нормативные ограничения: спецификация базы.

10. Статус проверки поставки

Автотесты проверяют механику на синтетических данных; публикация и архив проверяются отдельно. Полная установка на чистой корпоративной ОС, подключение реальной модели, подбор GPU, air-gap-режим и эксплуатационные SLA требуют приёмки в организации. Эта инструкция не является актом прохождения этих испытаний.

Update Log

  • 2026-09-22: поставка 0.3.4 — локальный исполнитель и облачные вендоры подключены к рабочему runner за DOCS_MODEL_PROVIDER; добавлены раздел 6.2, раздел 6.3 и параметры окружения. Интерфейс, отказы и rules:eval больше не считают Codex единственным исполнителем. Реальный vLLM/GPU по-прежнему не испытан.
  • 2026-09-07: поставка 0.3.3 — в исходники добавлены тестируемые основы локального провайдера, opt-in OCR и импорта подписанных нормативных пакетов. Они не подключены к рабочему runner или интерфейсу; активным остаётся общий Codex.
  • 2026-09-05: поставка 0.3.0 — личные организации и отдельный интернет-поиск по ИНН; встроенных профилей больше нет. Условия закупки оборудования и готовность локального inference не изменились.
Дата Изменение
2026-09-22 Локальный и облачные исполнители подключены и документированы; offline-инсталлятор и приёмка на реальном GPU ещё не выполнены
2026-09-07 Подготовлены модульные основы локального провайдера, OCR и доверенного импорта нормативных пакетов; полная локальная установка ещё не готова
2026-09-05 Добавлены аппаратные конфигурации, кандидаты локальных моделей и ссылка на расчёт VRAM; исходная поставка обновлена до 0.3.0
2026-09-05 Выпущены руководство, примеры конфигурации и проверяемый исходный архив; текущий вариант с Codex отделён от проекта локальных моделей