v1.0.173: О сервисе в топбар, новый контент — инструкция без упоминания Lucee/VM

This commit is contained in:
2026-06-24 14:32:36 +04:00
parent 9cc6e43868
commit c98f190cbc
+15 -40
View File
@@ -75,7 +75,8 @@
<body> <body>
<div class="topbar"> <div class="topbar">
<img src="/nubes-logo.svg" alt="Nubes"> <img src="/nubes-logo.svg" alt="Nubes">
<span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.172 — Lucee</span></span> <span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.173</span></span>
<span style="margin-left:auto;font-size:12px;color:var(--brand-primary);cursor:pointer;white-space:nowrap;" onclick="openAbout()">О сервисе</span>
</div> </div>
<div class="content"> <div class="content">
@@ -83,7 +84,6 @@
<div class="card-header"> <div class="card-header">
<i data-lucide="folder-open" style="width:18px;height:18px;"></i> <i data-lucide="folder-open" style="width:18px;height:18px;"></i>
Загрузка договоров/приложений/спецификаций Загрузка договоров/приложений/спецификаций
<span style="margin-left:auto;font-size:11px;color:var(--muted);cursor:pointer;" onclick="openAbout()">О сервисе</span>
</div> </div>
<div class="card-body"> <div class="card-body">
<input type="file" id="fileInput" accept=".docx,.doc,.pdf" multiple style="margin-bottom:6px;width:100%;"> <input type="file" id="fileInput" accept=".docx,.doc,.pdf" multiple style="margin-bottom:6px;width:100%;">
@@ -185,51 +185,26 @@
</div> </div>
<div class="modal-body" style="padding:16px;font-size:13px;line-height:1.6;max-height:65vh;overflow-y:auto;" id="aboutBody"> <div class="modal-body" style="padding:16px;font-size:13px;line-height:1.6;max-height:65vh;overflow-y:auto;" id="aboutBody">
<h3 style="margin-top:0;">Что делает</h3> <h3 style="margin-top:0;">Что это</h3>
<p>Автоматический разбор и сравнение договоров облачного провайдера (colocation, ЦОД, аренда стоек, каналы связи, облачные ресурсы). Юрист загружает файлы — система сама определяет что есть что, группирует по контрактам и через LLM находит изменения между версиями.</p> <p>Автоматический разбор и сравнение договоров с помощью ИИ (LLM). Загружаете договоры, допсоглашения и спецификации вперемешку — система сама разбирает что есть что, группирует по контрактам и находит все изменения между версиями. Работает на доменной модели облачного провайдера: colocation, ЦОД, аренда стоек, каналы связи, облачные ресурсы.</p>
<h3>Архитектура</h3> <h3>Как устроено</h3>
<p><b>Два сервера:</b></p> <p>Каждый документ парсится в структурированный JSON. LLM-модель (gpt-oss-120b) используется в трёх режимах: <b>классификация</b> (определяет тип/номер/дату/контрагента), <b>извлечение</b> (вытаскивает строки спецификации из базового договора), <b>сравнение</b> (находит изменения в допсоглашениях). Результат сравнения — операции ADD (новая услуга), UPDATE (изменение), DELETE (удалена), UNRESOLVED (не удалось сопоставить).</p>
<ul> <p>Все изменения хранятся как события (Event Sourcing) — можно видеть полную историю: кто, когда, на основании какого документа. Данные не покидают сервер.</p>
<li><b>Lucee CFML (k8s)</b> — только HTML-оболочка (index.cfm, 191 строка). Домен: contractor.luceek8s.dev.nubes.ru</li>
<li><b>Python 3.12 (VM, 5.172.178.213)</b> — вся бизнес-логика: загрузка, парсинг, LLM-классификация, сравнение, Event Sourcing. Домен: contracts.kube5s.ru</li>
</ul>
<p><b>База данных:</b> PostgreSQL 16 на VM (127.0.0.1:5432/baza). Конфиденциальные данные не покидают ВМ.</p>
<p><b>LLM:</b> gpt-oss-120b через api.aillm.ru (бесплатный доступ, HTTP/2).</p>
<h3>Пайплайн обработки</h3> <h3>Как пользоваться</h3>
<ol>
<li><b>Загрузка</b> — .docx, .doc, .pdf. DOC→DOCX через LibreOffice на VM.</li>
<li><b>Парсинг</b> — python-docx (Word) и PyPDF2 (PDF). Результат: структурированный JSON (параграфы + таблицы).</li>
<li><b>LLM-классификация</b> — каждый файл анализируется LLM (gpt-oss-120b): определяется тип (договор/допсоглашение/спецификация), номер, дата, контрагент. Умная выжимка текста: ~3000 символов (header + маркерные строки) для экономии токенов.</li>
<li><b>Авто-группировка</b> — Python-код нормализует номера договоров и группирует документы по контрактам. Хронологический порядок по датам.</li>
<li><b>LLM-сравнение</b> — для каждой группы: первый документ → извлечение спецификации (extract). Каждый следующий → сравнение с накопленной спецификацией (diff). Операции: ADD (новая услуга), UPDATE (изменение), DELETE (исключена), UNRESOLVED (не удалось сопоставить).</li>
</ol>
<h3>Event Sourcing</h3> <p><b>1. Загрузка</b> — выберите файлы (.docx, .doc, .pdf). Можно загружать всё вперемешку: договоры, допники, спецификации. Порядок файлов не важен — классификация разберётся.</p>
<p>Изменения не перезаписывают спецификацию. Каждая операция — событие в таблице <code>spec_events</code>. Текущее состояние — <code>spec_current</code>. Это даёт:</p>
<ul>
<li><b>Аудит</b> — полная история изменений: кто, когда, на основании какого документа</li>
<li><b>Provenance</b> — для каждого события хранится: ID документа-источника, версия промпта LLM, полный сырой ответ LLM</li>
<li><b>Откат</b> — можно вернуться к любому предыдущему состоянию спецификации</li>
</ul>
<h3>Промпты LLM</h3> <p><b>2. Классификация</b> — нажмите кнопку в появившейся панели. Система через LLM определит для каждого файла: тип документа, его номер, дату, контрагента и родительский договор. Прогресс показывается в реальном времени.</p>
<p>Хранятся в БД, версионируются. Три вида:</p>
<ul>
<li><b>extract</b> — извлечение спецификации из первого документа (базовый договор)</li>
<li><b>diff</b> — сравнение допсоглашения с текущей спецификацией</li>
<li><b>classify</b> — авто-классификация: определение типа/номера/даты/контрагента документа</li>
</ul>
<h3>Схема БД</h3> <p><b>3. Группы</b> — после классификации документы автоматически группируются по договорам в хронологическом порядке. Вы увидите карточки групп: «Договор №X с Контрагентом Y». Документы, которые не удалось классифицировать, попадают в отдельную секцию «Не распознано».</p>
<p>7 таблиц: <code>documents</code> (файлы + elements_json + поля классификации), <code>contracts</code>, <code>supplements</code> (связь документ→договор), <code>spec_events</code> (события), <code>spec_current</code> (текущая спецификация), <code>prompts</code> (версионные промпты), <code>upload_chunks</code> (временные чанки).</p>
<h3>Безопасность</h3> <p><b>4. Сравнение</b> — для каждой группы нажмите «▶ Сравнить». Система извлечёт спецификацию из первого документа, затем сравнит каждое допсоглашение с ней. Результат — таблица изменений: что добавилось, что изменилось, что убрали.</p>
<p>Все файлы и тексты договоров хранятся ТОЛЬКО на ВМ (5.172.178.213). При перезагрузке страницы все данные автоматически удаляются из БД. Промпты (код системы) сохраняются.</p>
<h3>Стек</h3> <p><b>5. Промпты</b> — в выпадающем меню «⚙ Промпты LLM» можно редактировать инструкции для ИИ: как извлекать, как сравнивать, как классифицировать. Промпты версионируются — можно откатиться к предыдущей версии.</p>
<p>Lucee 6.0 (CFML, k8s) + Python 3.12 (http.server, psycopg2, httpx, python-docx, PyPDF2) + PostgreSQL 16 + gpt-oss-120b + nginx + systemd.</p>
<p><b>На выходе:</b> структурированная таблица актуальной спецификации по каждому договору + полная история изменений с привязкой к документам-источникам.</p>
</div> </div>
</div> </div>