README.md

This commit is contained in:
Markov Andrey
2026-06-30 08:05:31 +00:00
parent de25bb54a7
commit f26e584cbf

133
README.md
View File

@@ -8,16 +8,16 @@
**Архитектура**: платформа состоит из трех основных слоев: **Архитектура**: платформа состоит из трех основных слоев:
1. **RAG-ядро (HTTP-сервис)** центральный компонент, выполняющий все этапы обработки запросов: классификацию намерений, расширение запроса, гибридный поиск (dense + sparse) в Qdrant, переранжирование через локальный кросс-энкодер, синтез ответа через GigaChat, самокритику и перегенерацию. Ядро также управляет индексацией документов и хранением истории диалогов в PostgreSQL. RAG-ядро реализовано как отдельный HTTP-сервер (FastAPI + Uvicorn), что позволяет использовать его для любых клиентов (XMPP, Telegram, Mastodon, веб-интерфейс, системы аналитики). 1. **RAG-ядро (HTTP-сервис)** центральный компонент, выполняющий все этапы обработки запросов: классификацию намерений, расширение запроса, гибридный поиск (dense + sparse) в Qdrant, переранжирование через локальный кросс-энкодер, синтез ответа через GigaChat, самокритику и перегенерацию. Ядро также управляет индексацией документов и хранением истории диалогов в PostgreSQL. RAG-ядро реализовано как отдельный HTTP-сервер (FastAPI + Uvicorn), что позволяет использовать его для любых клиентов (XMPP, Telegram, Mastodon, веб-интерфейс, системы аналитики).
2. **Тонкие XMPP-боты-клиенты** каждый профиль (методолог, коробочник, персональный ассистент) представляет собой отдельный XMPP-клиент, который подключается к ejabberd, обрабатывает команды, принимает файлы и пересылает запросы пользователей в RAG-ядро по HTTP. Боты не содержат RAG-логики, не имеют локальной БД или Qdrant, а только загружают свои промпты и передают их в запросах. Это делает их легковесными и независимыми. 2. **Тонкие XMPP-боты-клиенты** каждый профиль (методолог, коробочник, персональный ассистент) представляет собой отдельный XMPP-клиент, который подключается к ejabberd, обрабатывает команды, принимает файлы и пересылает запросы пользователей в RAG-ядро по HTTP. Боты не содержат RAG-логики, не имеют локальной БД или Qdrant, а только загружают свои промпты и передают их в запросах. Это делает их легковесными и независимыми.
3. **Внешние системы хранения и API**: 3. **Внешние системы хранения и API**:
- **ejabberd** XMPP-сервер (сообщения, MUC-комнаты, HTTP Upload). - **ejabberd** XMPP-сервер (сообщения, MUC-комнаты, HTTP Upload).
- **PostgreSQL** централизованное хранилище метаданных документов, истории диалогов, прав доступа, списка комнат, шаблонов и оценок обратной связи. - **PostgreSQL** централизованное хранилище метаданных документов, истории диалогов, прав доступа, списка комнат, шаблонов и оценок обратной связи.
- **Qdrant** векторная БД с двумя полями (dense, sparse) для гибридного поиска. Доступна только RAG-ядру. - **Qdrant** векторная БД с двумя полями (dense, sparse) для гибридного поиска. Доступна только RAG-ядру.
- **GigaChat API** генерация текста и эмбеддингов. Вызовы осуществляются только из RAG-ядра, что позволяет централизованно управлять кэшированием и лимитами. - **GigaChat API** генерация текста и эмбеддингов. Вызовы осуществляются только из RAG-ядра, что позволяет централизованно управлять кэшированием и лимитами.
**Философия**: **Философия**:
@@ -28,40 +28,40 @@
**Сервисы распределены по jails FreeBSD/Linux**: **Сервисы распределены по jails FreeBSD/Linux**:
- `rag-server` (Python 3.11/3.12) HTTP-сервис RAG-ядра. - `rag-server` (Python 3.11/3.12) HTTP-сервис RAG-ядра.
- `metabot`, `korobot`, `persobot` отдельные XMPP-клиенты (также на Python), которые общаются с RAG-ядром через HTTP. - `metabot`, `korobot`, `persobot` отдельные XMPP-клиенты (также на Python), которые общаются с RAG-ядром через HTTP.
- `ejabberd`, `PostgreSQL`, `Qdrant` внешние системы. - `ejabberd`, `PostgreSQL`, `Qdrant` внешние системы.
## 3. Уникальность решения ## 3. Уникальность решения
1. **Гибридный RAG (dense + sparse) с самокритикой и централизованным ядром** не используется в корпоративных ботах массово. Коммерческие решения (Microsoft Copilot, IBM Watson) часто ограничиваются простым семантическим поиском без переранжирования и самокритики. Вынесение RAG-логики в отдельный HTTP-сервис позволяет легко масштабировать и подключать любые клиентские интерфейсы. 1. **Гибридный RAG (dense + sparse) с самокритикой и централизованным ядром** не используется в корпоративных ботах массово. Коммерческие решения часто ограничиваются простым семантическим поиском без переранжирования и самокритики. Вынесение RAG-логики в отдельный HTTP-сервис позволяет легко масштабировать и подключать любые клиентские интерфейсы.
2. **Персональный ассистент как часть экосистемы** типичные персональные ассистенты не имеют доступа к внутренней базе знаний и не умеют отвечать на сложные вопросы по документам. Эфцекабот объединяет общие и персональные функции в едином RAG-ядре, при этом каждый бот-профиль использует свои промпты, что позволяет гибко настраивать поведение под конкретные задачи. 2. **Персональный ассистент как часть экосистемы** типичные персональные ассистенты не имеют доступа к внутренней базе знаний и не умеют отвечать на сложные вопросы по документам. Эфцекабот объединяет общие и персональные функции в едином RAG-ядре, при этом каждый бот-профиль использует свои промпты, что позволяет гибко настраивать поведение под конкретные задачи.
3. **Единая чат-среда и единый RAG-бэкенд для всех коммуникаций** не требуется переключаться между десятками каналов (чат-боты в Telegram, веб-формы, почта). Весь документооборот, командировки, экспертные вопросы в одном интерфейсе (корпоративном мессенджере), а при необходимости те же функции доступны через Telegram, Mastodon или веб-интерфейс благодаря универсальному HTTP API RAG-ядра. 3. **Единая чат-среда и единый RAG-бэкенд для всех коммуникаций** не требуется переключаться между десятками каналов (чат-боты в Telegram, веб-формы, почта). Весь документооборот, командировки, экспертные вопросы в одном интерфейсе (корпоративном мессенджере), а при необходимости те же функции доступны через Telegram, или веб-интерфейс благодаря универсальному HTTP API RAG-ядра.
4. **Полный контроль над данными** все компоненты развернуты внутри компании. Никакие документы или переписка не покидают периметр. История и документы хранятся только на серверах компании. 4. **Полный контроль над данными** все компоненты развернуты внутри компании. Никакие документы или переписка не покидают периметр. История и документы хранятся только на серверах компании.
5. **Открытая агентная архитектура** можно подключить любого RPA, внешнее API, 1С, SAP, календарь, тревел-агрегатор без необходимости переписывать ядро бота достаточно реализовать HTTP-клиент к RAG-ядру. Конкуренты, как правило, предлагают закрытые экосистемы. 5. **Открытая агентная архитектура** можно подключить любого RPA, внешнее API, 1С, SAP, календарь, тревел-агрегатор без необходимости переписывать ядро бота достаточно реализовать HTTP-клиент к RAG-ядру. Конкуренты, как правило, предлагают закрытые экосистемы.
6. **Автоматическая индексация файлов в комнатах** файл, попавший в групповой чат, автоматически становится доступен всей команде через RAG-ядро. Даже у Slack и Teams нет такой функции «из коробки». 6. **Автоматическая индексация файлов в комнатах** файл, попавший в групповой чат, автоматически становится доступен всей команде через RAG-ядро. Даже у Slack и Teams нет такой функции «из коробки».
## 4. Преимущества и недостатки работы бота в чате ## 4. Преимущества и недостатки работы бота в чате
#### Преимущества: #### Преимущества:
- **Единое корпоративное окно** пользователь не переключается между приложениями, получает экспертные ответы прямо в рабочем чате. - **Единое корпоративное окно** пользователь не переключается между приложениями, получает экспертные ответы прямо в рабочем чате.
- **Мгновенный обмен файлами** встроен HTTP Upload, бот автоматически отправляет файлы в RAG-ядро для индексации (в т.ч. в групповых комнатах). - **Мгновенный обмен файлами** встроен HTTP Upload, бот автоматически отправляет файлы в RAG-ядро для индексации (в т.ч. в групповых комнатах).
- **Учет контекста беседы** история диалога хранится централизованно в RAG-ядре, что обеспечивает единый контекст для всех клиентов (XMPP, Telegram, веб). - **Учет контекста беседы** история диалога хранится централизованно в RAG-ядре, что обеспечивает единый контекст для всех клиентов (XMPP, Telegram, веб).
- **Поддержка комнат (MUC)** документы, загруженные в комнату, видны всем участникам, а переписка в комнате служит общим контекстом. - **Поддержка комнат (MUC)** документы, загруженные в комнату, видны всем участникам, а переписка в комнате служит общим контекстом.
- **Легковесные клиенты** боты не содержат сложной RAG-логики, что упрощает их обновление и развертывание; все изменения в RAG вносятся в одном месте RAG-ядре. - **Легковесные клиенты** боты не содержат сложной RAG-логики, что упрощает их обновление и развертывание; все изменения в RAG вносятся в одном месте RAG-ядре.
- **Не требует установки уникального клиентского ПО** достаточно любого XMPP-клиента (Conversations, Gajim, Pidgin) или работать через web-интерфейс (который также может использовать RAG-ядро). - **Не требует установки уникального клиентского ПО** достаточно любого XMPP-клиента (Fluux, Conversations, Gajim, Pidgin) или работать через web-интерфейс (который также может использовать RAG-ядро).
- **Полный контроль данных** развертывание внутри периметра, никаких облачных сервисов. - **Полный контроль данных** развертывание внутри периметра, никаких облачных сервисов.
- **Поддерживаемые форматы**: DOCX, PDF, XLSX, PPTX, TXT, CSV, JSON, изображения (OCR), аудио (SaluteSpeech), архивы ZIP/7z. - **Поддерживаемые форматы**: DOCX, PDF, XLSX, PPTX, TXT, CSV, JSON, изображения (OCR), аудио (SaluteSpeech), архивы ZIP/7z.
- **Размер загружаемого файла**: до 1 Гб. - **Размер загружаемого файла**: до 1 Гб.
#### Недостатки: #### Недостатки:
- **Задержка** добавлен сетевой вызов от бота к RAG-ядру (~12 мс внутри сети) и несколько вызовов GigaChat (310 секунд). Однако благодаря кэшированию (классификация, расширение, эмбеддинги) и локальному кросс-энкодеру итоговое время ответа в большинстве случаев составляет 37 секунд, что приемлемо для экспертной системы. - **Задержка** добавлен сетевой вызов от бота к RAG-ядру (12 мс внутри сети) и несколько вызовов GigaChat (310 секунд). Однако благодаря кэшированию (классификация, расширение, эмбеддинги) и локальному кросс-энкодеру итоговое время ответа в большинстве случаев составляет 37 секунд, что приемлемо для экспертной системы.
- **Сложность отладки** распределенная система (RAG-ядро, боты-клиенты, ejabberd, PostgreSQL, Qdrant) усложняет трассировку ошибок, но централизованное логирование и единая точка входа (RAG-ядро) упрощают мониторинг. - **Сложность отладки** распределенная система (RAG-ядро, боты-клиенты, ejabberd, PostgreSQL, Qdrant) усложняет трассировку ошибок, но централизованное логирование и единая точка входа (RAG-ядро) упрощают мониторинг.
## 5. Как чат-бот влияет на работу с GigaChat ## 5. Как чат-бот влияет на работу с GigaChat
@@ -111,9 +111,9 @@
``` ```
**Ключевые компоненты:** **Ключевые компоненты:**
- **RAG-сервер** единая точка входа для всех RAG-запросов. Содержит всю бизнес-логику (поиск, генерацию, самокритику, индексацию). Запускается как отдельный HTTP-сервис. - **RAG-сервер** единая точка входа для всех RAG-запросов. Содержит всю бизнес-логику (поиск, генерацию, самокритику, индексацию). Запускается как отдельный HTTP-сервис.
- **Тонкие клиенты** боты-профили (XMPP, Telegram, Mastodon и т.д.), которые только передают запросы в RAG-сервер и не содержат RAG-логики. - **Тонкие клиенты** боты-профили (XMPP, Telegram, Mastodon и т.д.), которые только передают запросы в RAG-сервер и не содержат RAG-логики.
- **Внешние системы** PostgreSQL, Qdrant, GigaChat API доступны только RAG-серверу. - **Внешние системы** PostgreSQL, Qdrant, GigaChat API доступны только RAG-серверу.
### 6.2. Структура каталогов проекта ### 6.2. Структура каталогов проекта
@@ -135,7 +135,7 @@
│ ├── LICENSE │ ├── LICENSE
│ └── README.md │ └── README.md
├── core/services/ # СеВИСЫ долгоживущие компоненты ├── core/services/ # СЕРВИСЫ долгоживущие компоненты
│ ├── __init__.py │ ├── __init__.py
│ ├── postgres_service.py # Пул соединений с PostgreSQL │ ├── postgres_service.py # Пул соединений с PostgreSQL
│ ├── qdrant_service.py # Векторная БД (создание, поиск, удаление) │ ├── qdrant_service.py # Векторная БД (создание, поиск, удаление)
@@ -145,7 +145,7 @@
│ ├── giga_client.py # Клиент GigaChat (chat, upload_file) │ ├── giga_client.py # Клиент GigaChat (chat, upload_file)
│ └── reranker_service.py # Кросс-энкодер для переранжирования (локально) │ └── reranker_service.py # Кросс-энкодер для переранжирования (локально)
├── core/functions/ # НеАВИСИМЫЕ ЧИСТЫЕ ФУНКЦИИ ├── core/functions/ # НЕЗАВИСИМЫЕ ФУНКЦИИ
│ ├── __init__.py │ ├── __init__.py
│ ├── intent_classify.py # Классификация намерений │ ├── intent_classify.py # Классификация намерений
│ ├── expand_query.py # Расширение запроса (синонимы, аббревиатуры) │ ├── expand_query.py # Расширение запроса (синонимы, аббревиатуры)
@@ -167,7 +167,7 @@
│ ├── subscription_handler.py # Подписки (roster subscription) │ ├── subscription_handler.py # Подписки (roster subscription)
│ └── health_handler.py # Очистка файлов, healthcheck БД/Qdrant │ └── health_handler.py # Очистка файлов, healthcheck БД/Qdrant
├── core/workers/ # ФОНОВЫЕ АСИНХРОННЫЕ ВОРКеЫ ├── core/workers/ # ФОНОВЫЕ АСИНХРОННЫЕ ВОРКЕРЫ
│ ├── __init__.py │ ├── __init__.py
│ └── indexing_worker.py # Индексация файлов и URL (через HTTP в RAG-сервер) │ └── indexing_worker.py # Индексация файлов и URL (через HTTP в RAG-сервер)
@@ -175,8 +175,8 @@
│ ├── __init__.py │ ├── __init__.py
│ ├── registry.py # Регистрация команд, алиасы, подсказки │ ├── registry.py # Регистрация команд, алиасы, подсказки
│ ├── base.py # Базовый класс Command │ ├── base.py # Базовый класс Command
│ ├── info.py # !info краткая справка │ ├── info.py # !info краткая справка
│ ├── help.py # !help подробная справка │ ├── help.py # !help подробная справка
│ ├── learn.py # !learn, !stop_learn, !global_learn │ ├── learn.py # !learn, !stop_learn, !global_learn
│ ├── kb.py # !clear, !global_clear, !kb │ ├── kb.py # !clear, !global_clear, !kb
│ ├── stats.py # !stats, !status, !clean │ ├── stats.py # !stats, !status, !clean
@@ -186,7 +186,7 @@
│ ├── create.py # !create (генерация по шаблону) │ ├── create.py # !create (генерация по шаблону)
│ └── global_remove.py # !global_remove удаление глобального документа (админ) │ └── global_remove.py # !global_remove удаление глобального документа (админ)
├── core/tests/ # ЮНИТ-ТеТЫ (pytest) ├── core/tests/ # ЮНИТ-ТЕСТЫ (pytest)
│ ├── __init__.py │ ├── __init__.py
│ ├── conftest.py # Фикстуры и моки │ ├── conftest.py # Фикстуры и моки
│ ├── test_intent_classify.py # Тесты классификации намерений │ ├── test_intent_classify.py # Тесты классификации намерений
@@ -197,7 +197,7 @@
│ ├── test_critique.py # Тесты самокритики │ ├── test_critique.py # Тесты самокритики
│ └── test_check_spelling.py # Тесты проверки орфографии │ └── test_check_spelling.py # Тесты проверки орфографии
├── core/utils/ # ВСПОМОГАТеЬНЫЕ УТИЛИТЫ ├── core/utils/ # ВСПОМОГАТЕЛЬНЫЕ УТИЛИТЫ
│ ├── __init__.py │ ├── __init__.py
│ ├── config_loader.py # Загрузка core.conf + bot.conf, чтение .env │ ├── config_loader.py # Загрузка core.conf + bot.conf, чтение .env
│ ├── logger.py # Настройка логирования │ ├── logger.py # Настройка логирования
@@ -206,18 +206,17 @@
│ ├── web_utils.py # Веб-скрапинг (fetch_any_url, crawl_url) │ ├── web_utils.py # Веб-скрапинг (fetch_any_url, crawl_url)
│ └── arg_parser.py # Парсинг аргументов команд (--flag value) │ └── arg_parser.py # Парсинг аргументов команд (--flag value)
├── core/xmpp/ # XMPP-КЛИеТ (тонкий) ├── core/xmpp/ # XMPP-КЛИЕНТ (тонкий)
│ ├── __init__.py │ ├── __init__.py
│ └── client.py # Основной класс Bot (наследует slixmpp.ClientXMPP) │ └── client.py # Основной класс Bot (наследует slixmpp.ClientXMPP)
├── metabot/ # ПРОФИЛЬ: МеОДОЛОГ ├── metabot/ # ПРОФИЛЬ: МЕТОДОЛОГ
│ ├── bot.conf # Конфиг профиля (JID, БД, коллекция Qdrant, промпты) │ ├── bot.conf # Конфиг профиля (JID, БД, коллекция Qdrant, промпты)
│ ├── bot.conf.sample # Пример конфига │ ├── bot.conf.sample # Пример конфига
│ ├── metabot.rc.template # Шаблон rc-файла для запуска
│ ├── schema.sql # Схема БД │ ├── schema.sql # Схема БД
│ ├── LICENSE │ ├── LICENSE # Лицензия
│ ├── README.md │ ├── README.md
│ ├── prompts/ # ПРОМПТЫ ДЛЯ МеОДОЛОГА │ ├── prompts/ # ПРОМПТЫ ДЛЯ МЕТОДОЛОГА
│ │ ├── system.txt # Роль, стиль, правила поведения (строгий RAG) │ │ ├── system.txt # Роль, стиль, правила поведения (строгий RAG)
│ │ ├── synthesis.txt # Шаблон синтеза ответа (контекст + запрос → ответ) │ │ ├── synthesis.txt # Шаблон синтеза ответа (контекст + запрос → ответ)
│ │ ├── intent_classify.txt # Классификация намерений (FACT, PROCEDURE, METRICS и др.) │ │ ├── intent_classify.txt # Классификация намерений (FACT, PROCEDURE, METRICS и др.)
@@ -232,7 +231,7 @@
│ ├── data/ # Постоянные копии файлов │ ├── data/ # Постоянные копии файлов
│ └── temp/ # Временные файлы │ └── temp/ # Временные файлы
├── korobot/ # ПРОФИЛЬ: КОРОБОЧНЫЕ РееИЯ ├── korobot/ # ПРОФИЛЬ: КОРОБОЧНЫЕ РЕШЕИЯ
│ ├── bot.conf │ ├── bot.conf
│ ├── bot.conf.sample │ ├── bot.conf.sample
│ ├── korobot.rc.template │ ├── korobot.rc.template
@@ -254,14 +253,14 @@
│ ├── data/ │ ├── data/
│ └── temp/ │ └── temp/
├── persobot/ # ПРОФИЛЬ: ПеСОНАЛЬНЫЙ АССИСТеТ ├── persobot/ # ПРОФИЛЬ: ПЕРСОНАЛЬНЫЙ АССИСТЕНТ
│ ├── bot.conf │ ├── bot.conf
│ ├── bot.conf.sample │ ├── bot.conf.sample
│ ├── persobot.rc.template │ ├── persobot.rc.template
│ ├── schema.sql │ ├── schema.sql
│ ├── LICENSE │ ├── LICENSE
│ ├── README.md │ ├── README.md
│ ├── prompts/ # ПРОМПТЫ ДЛЯ ПеСОНАЛЬНОГО АССИСТеТА (аналогичный набор) │ ├── prompts/ # ПРОМПТЫ ДЛЯ ПЕРСОНАЛЬНОГО АССИСТЕНТА (аналогичный набор)
│ │ ├── system.txt │ │ ├── system.txt
│ │ ├── synthesis.txt │ │ ├── synthesis.txt
│ │ ├── intent_classify.txt │ │ ├── intent_classify.txt
@@ -276,12 +275,12 @@
│ ├── data/ │ ├── data/
│ └── temp/ │ └── temp/
├── venv/ # ВИРТУАЛЬНОЕ ОКРУЖеИЕ Python ├── venv/ # ВИРТУАЛЬНОЕ ОКРУЖЕНИЕ Python
│ ├── bin/ # Исполняемые файлы (python, pip, activate) │ ├── bin/ # Исполняемые файлы (python, pip, activate)
│ ├── lib/ # Установленные библиотеки │ ├── lib/ # Установленные библиотеки
│ └── ... │ └── ...
└── .env # ПеееНЫЕ ОКРУЖеИЯ └── .env # ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
├── XMPP_PASSWORD=... ├── XMPP_PASSWORD=...
├── DB_PASSWORD=... ├── DB_PASSWORD=...
├── GIGACHAT_API_KEY=... ├── GIGACHAT_API_KEY=...
@@ -293,22 +292,22 @@
``` ```
┌─────────────┐ HTTP ┌─────────────┐ SQL ┌─────────────┐ ┌─────────────┐ HTTP ┌─────────────┐ SQL ┌─────────────┐
│ Пользова- │ ──────────────▶│ RAG- │ ──────────────▶│ PostgreSQL │ │ Пользова- │ ──────────────▶│ RAG- │ ──────────────▶│ PostgreSQL │
│ тель │ │ СеВе │ │ (история, │ тель │ │ сервер │ │ (история, │
│ (XMPP) │ ◀──────────────│ (ядро) │ ◀──────────────│ документы) │ │ (XMPP) │ ◀──────────────│ (ядро) │ ◀──────────────│ документы) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │ │ │
│ XMPP │ HTTP (gRPC) │ │ XMPP │ HTTP (gRPC) │
▼ ▼ ▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
ejabberd │ │ Qdrant │ │ GigaChat │ │ ejabberd │ │ Qdrant │ │ GigaChat │
(чат-серв.)│ │ (векторная │ │ (API) │ │ (чат-серв.) │ │ (векторная │ │ (API) │
└─────────────┘ │ БД) │ └─────────────┘ └─────────────┘ │ БД) │ └─────────────┘
│ └─────────────┘ │ │ └─────────────┘ │
│ XMPP │ │ │ XMPP │ │
▼ ▼ ▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ XMPP-бот │ │ FastEmbed │ │ Файлы │ │ XMPP-бот │ │ FastEmbed │ │ Файлы │
│ (тонкий) │ │ (локальный │ │ (диск) │ (тонкий) │ │ (локальный │ │ (диск) │
│ клиент │ │ кросс-энк.) │ └─────────────┘ │ клиент │ │ кросс-энк.) │ └─────────────┘
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
``` ```
@@ -375,8 +374,8 @@ pytest tests/ -v
| Место | Функция | Обоснование | | Место | Функция | Обоснование |
| ----- | ------- | ----------- | | ----- | ------- | ----------- |
| **🥇 1** | Генерация по шаблону | Основной инструмент для создания коробочных решений автоматизирует производство документов | | **🥇 1** | Генерация по шаблону | Основной инструмент для создания коробочных решений автоматизирует производство документов |
| **🥈 2** | Гибридный RAG | Без него бот не может отвечать по документам фундамент системы | | **🥈 2** | Гибридный RAG | Без него бот не может отвечать по документам фундамент системы |
| **🥉 3** | Комнатные/глобальные БЗ | Обеспечивают коллективную работу над коробочными решениями | | **🥉 3** | Комнатные/глобальные БЗ | Обеспечивают коллективную работу над коробочными решениями |
| **4** | Хирургическая замена | Ускоряет доработку документов, критично для подготовки финальных версий | | **4** | Хирургическая замена | Ускоряет доработку документов, критично для подготовки финальных версий |
| **5** | Проверка орфографии | Повышает качество исходящих документов | | **5** | Проверка орфографии | Повышает качество исходящих документов |
@@ -401,18 +400,18 @@ pytest tests/ -v
**Что делает**: **Что делает**:
По команде `!create "Коробочное решение"` бот генерирует готовый коробочный документ на основе шаблона, заполняя все плейсхолдеры `{{...}}` данными из базы знаний комнаты. Шаблон содержит следующие разделы (соответствует файлу `Шаблон коробочного решения.docx`): По команде `!create "Коробочное решение"` бот генерирует готовый коробочный документ на основе шаблона, заполняя все плейсхолдеры `{{...}}` данными из базы знаний комнаты. Шаблон содержит следующие разделы (соответствует файлу `Шаблон коробочного решения.docx`):
1. **Профиль коробочного решения** параметры внедрения, ресурсы, сроки. 1. **Профиль коробочного решения** параметры внедрения, ресурсы, сроки.
2. **Актуальность коробочного решения** потенциал повышения производительности, задачи, ожидаемые результаты. 2. **Актуальность коробочного решения** потенциал повышения производительности, задачи, ожидаемые результаты.
3. **Решаемая проблема** типовой процесс (до улучшения), проблемные зоны, коренные причины. 3. **Решаемая проблема** типовой процесс (до улучшения), проблемные зоны, коренные причины.
4. **Решение** целевой процесс (после улучшения), детальное описание решений, результаты внедрения. 4. **Решение** целевой процесс (после улучшения), детальное описание решений, результаты внедрения.
5. **Алгоритм внедрения коробочного решения** состав рабочей группы, последовательность этапов. 5. **Алгоритм внедрения коробочного решения** состав рабочей группы, последовательность этапов.
6. **Риски** описание рисков и мер по их снижению. 6. **Риски** описание рисков и мер по их снижению.
7. **Термины, сокращения, определения** глоссарий из документов комнаты. 7. **Термины, сокращения, определения** глоссарий из документов комнаты.
8. **Сопроводительные документы** перечень приложений, шаблонов, регламентов. 8. **Сопроводительные документы** перечень приложений, шаблонов, регламентов.
9. **Лучшие практики** ссылки на реализованные аналогичные решения. 9. **Лучшие практики** ссылки на реализованные аналогичные решения.
**Уникальность**: **Уникальность**:
Превращает бота из информатора в **инструмент производства готовых коробочных решений**. Достаточно один раз настроить шаблон, и бот будет генерировать документы на основе актуальных данных из базы знаний. Все, что требуется от пользователя загрузить в комнату документы-источники (регламенты, отчеты, методики, ГОСТы, аналитические записки). Превращает бота из информатора в **инструмент производства готовых коробочных решений**. Достаточно один раз настроить шаблон, и бот будет генерировать документы на основе актуальных данных из базы знаний. Все, что требуется от пользователя загрузить в комнату документы-источники (регламенты, отчеты, методики, ГОСТы, аналитические записки).
**Польза**: **Польза**:
Автоматизация подготовки коробочных решений, сокращение времени на создание документов с 1-2 недель до 10-30 минут, исключение ошибок ручного ввода, единообразие документов, возможность быстрого масштабирования на любые типы организаций. Автоматизация подготовки коробочных решений, сокращение времени на создание документов с 1-2 недель до 10-30 минут, исключение ошибок ручного ввода, единообразие документов, возможность быстрого масштабирования на любые типы организаций.
@@ -460,14 +459,14 @@ pytest tests/ -v
- Лучшие практики: `{{BEST_PRACTICE_1_LINK}}`, `{{BEST_PRACTICE_1_DESC}}`. - Лучшие практики: `{{BEST_PRACTICE_1_LINK}}`, `{{BEST_PRACTICE_1_DESC}}`.
3. **Для каждого плейсхолдера выполняет поиск** в базе знаний комнаты (личные + комнатные + глобальные документы). Поиск использует: 3. **Для каждого плейсхолдера выполняет поиск** в базе знаний комнаты (личные + комнатные + глобальные документы). Поиск использует:
- Семантический поиск (dense-эмбеддинги) для общих запросов. - Семантический поиск (dense-эмбеддинги) для общих запросов.
- Полнотекстовый поиск (MatchText) для точных цитат и номеров пунктов. - Полнотекстовый поиск (MatchText) для точных цитат и номеров пунктов.
- Расширение запроса (query expansion) добавляет синонимы и аббревиатуры. - Расширение запроса (query expansion) добавляет синонимы и аббревиатуры.
- Переранжирование (кросс-энкодер) отбирает только релевантные фрагменты. - Переранжирование (кросс-энкодер) отбирает только релевантные фрагменты.
4. **Формирует промпт для GigaChat** с инструкцией заполнить плейсхолдер на основе найденных фрагментов. Промпт содержит контекст из фрагментов документов и сам плейсхолдер. 4. **Формирует промпт для GigaChat** с инструкцией заполнить плейсхолдер на основе найденных фрагментов. Промпт содержит контекст из фрагментов документов и сам плейсхолдер.
5. **Генерирует значение для каждого плейсхолдера** например, для `{{TYPICAL_PROBLEM_DESCRIPTION}}` GigaChat напишет: «В региональной системе наблюдается дефицит сотрудников с профильным образованием (только 30% из 100), нерегулярное планирование, отсутствие единой методики оценки компетенций». 5. **Генерирует значение для каждого плейсхолдера** например, для `{{TYPICAL_PROBLEM_DESCRIPTION}}` GigaChat напишет: «В региональной системе наблюдается дефицит сотрудников с профильным образованием (только 30% из 100), нерегулярное планирование, отсутствие единой методики оценки компетенций».
6. **Заменяет плейсхолдеры в копии шаблона**, сохраняя все форматирование (жирный шрифт, курсив, цвета, таблицы, колонтитулы). Замена выполняется с учетом возможного разбиения текста на несколько `runs` в DOCX, что повышает точность. 6. **Заменяет плейсхолдеры в копии шаблона**, сохраняя все форматирование (жирный шрифт, курсив, цвета, таблицы, колонтитулы). Замена выполняется с учетом возможного разбиения текста на несколько `runs` в DOCX, что повышает точность.