СОЗДАНИЕ ДС С ЛОКАЛЬНОЙ LLM. ЧАСТЬ 6: ГЕНЕРАЦИЯ DOCX И ИТОГИ

Мы прошли долгий путь. Данные собраны, структурированы, проверены алгоритмами, обработаны нейросетью и очищены от мусора. У нас на руках идеальный JSON-объект с информацией для Дополнительного Соглашения. Остался последний шаг — превратить этот JSON в документ, который можно распечатать и подписать.

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

1. ПОДХОД К ГЕНЕРАЦИИ: XML ШАБЛОНЫ

Многие используют библиотеку `python-docx` для создания документов "с нуля", добавляя параграф за параграфом. Это рабочий, но трудоемкий метод. Сложно настроить отступы, шрифты, колонтитулы и таблицы кодом.

Я выбрал другой путь: XML-шаблонизация. Формат `.docx` — это, по сути, архив ZIP, внутри которого лежат XML-файлы. Главный текст находится в файле `word/document.xml`.

Идея проста:

1. Мы создаем красивый шаблон ДС в обычном Word. Настраиваем стили, логотипы, шрифты.

2. В нужных местах пишем уникальные плейсхолдеры, например `НОМЕР_ДС`, `ЗАКАЗЧИК_РОД_ПАДЕЖ`, `ТЕКСТ_ИЗМЕНЕНИЙ`.

3. Сохраняем этот файл как шаблон.

2. ФУНКЦИЯ ЗАМЕНЫ

В коде (функция `build_docx_from_template`) мы делаем следующее:

- Распаковываем структуру XML.

- Ищем текстовые узлы.

- Заменяем наши плейсхолдеры на реальные данные из JSON.

Но есть нюанс. Я пошел еще дальше и реализовал гибридный метод. Если шаблон есть — мы его используем. Если шаблона нет (или он поврежден) — скрипт автоматически генерирует простой, но валидный DOCX "на лету" через функцию `build_fallback_xml`.

def build_fallback_xml(values): body = "".join([ p("Дополнительное соглашение № " + values.get("agreement_number")), p("Заказчик: " + values.get("customer_full_name")), ... ]) return "...<w:body>" + body + "</w:body>..."

Это обеспечивает отказоустойчивость. Пользователь всегда получит файл, даже если удалит шаблон с диска.

3. УНИВЕРСАЛЬНЫЙ КОНСТРУКТОР ФРАЗ

Самое интересное происходит в момент заполнения тела соглашения. Помните наши подготовленные фразы? В шаблон вставляется такая конструкция:

{фраза_единицы_предмет_вин} Договора дополнить {фраза_пункт_предмет_твор} следующего содержания: > "{текст_цитаты_предмет}"

Когда скрипт подставляет данные, это превращается в идеальный юридический текст: "1. Статью 3 Договора дополнить пунктом 3.5 следующего содержания: ..." ИЛИ > "1. Раздел 5 Договора дополнить пунктом 5.1 следующего содержания: ..."

Грамматическая согласованность, которую мы заложили на этапах 3 и 4, здесь дает свои плоды.

4. РЕЗУЛЬТАТЫ И ВЫВОДЫ

Что мы получили в итоге? Полностью автономную систему, работающую на локальном компьютере без интернета.

Экономика решения:

- Стоимость запроса: 0 руб. (только электричество).

- Время генерации: ~40-60 секунд на документ (зависит от GPU).

- Точность: ~98% (благодаря жесткой схеме JSON и структурным подсказкам).

Главный урок: Искусственный интеллект в энтерпрайзе — это не "волшебная кнопка". Это инженерная конструкция. LLM здесь играет роль лишь одного из модулей — "лингвистического процессора". Всю ответственность за структуру, логику и факты несет классический код на Python.

Именно такая связка — Жесткий Алгоритм + Мягкая Нейросеть — позволяет создавать надежные инструменты для реального бизнеса, а не просто игрушки для чата.

Спасибо, что читали этот цикл статей. Надеюсь, мой опыт поможет вам в создании собственных локальных AI-решений!

Кому, как и мне, интересно автоматизировать юридические процессы, присоединяйтесь ко мне в телеграме, там я пишу "человеческим языком", а не вот это вот всё)

Начать дискуссию