внутренний проект · передача в эксплуатацию
Telegram-ассистент техподдержки, который отвечает на вопросы по продуктам UserGate строго по документации — со ссылками на источники, самопроверкой каждого ответа и честным «в документации этого нет», когда ответа действительно нет.
Все цифры — из
воспроизводимого измерительного стенда, входящего в комплект; методика в
RESULTS.md.
попробовать
Та же система, что отвечает в Telegram: поиск по базе знаний, генерация строго по фрагментам, самопроверка. Ответ занимает 10–20 секунд.
как это работает
Живой сленг админов («вафка», «мц», «нгфв») приводится к терминам документации — только для поиска, модель видит оригинал вопроса.
Лексический BM25 с русским стеммингом + нейросетевые эмбеддинги (multilingual-e5), слияние RRF. Поверх — диверсификация выдачи, приоритет продукта из вопроса и квота на community-фрагменты.
LLM получает 20 найденных фрагментов и жёсткую редполитику: отвечать только по ним, не смешивать продукты, помечать версии и опыт сообщества.
Второй LLM-проход проверяет ключевые утверждения ответа по тем же фрагментам. Не подтвердилось — ответ перегенерируется с указанием, что именно не так; не прошло снова — честный отказ вместо догадки.
Источники подбираются по фактическому содержанию ответа, под ответом — индикатор уверенности (🟢 проверено по документации / 🟡 сверьтесь с источниками).
почему это ценно
Собрать «бота с RAG» можно за выходные. Довести его до 0% выдуманных фактов при живой скорости — это журнал из 15+ измеренных экспериментов, где каждое решение прошло гейт на реальных вопросах из чата экспертов, а модные техники, не давшие прироста, отвергнуты по данным — с сэкономленными на этом ресурсами. Журнал воспроизводим: стенд в комплекте.
| Решение | Замер (n=50 реальных вопросов) | Статус |
|---|---|---|
| Дедупликация корпуса (48% дублей после двойного скрейпа) | 40 701 → 20 451 фрагм. | в проде |
| Версионные аннотации опыта сообщества (советы «стареют») | выдумки 4% → 0% | в проде |
| Проверка заземления + перегенерация вместо отказа | полезных 40% → 48% | в проде |
| Русский стемминг + диверсити + продуктовый приоритет | hit@10 0.588 → 0.664 | в проде |
| Отключение reasoning с компенсацией проверкой | 52 с → 12 с, без роста ошибок | в проде |
| Cross-encoder reranker | +10 с, прирост 0 | отвергнут по данным |
| LLM-переписывание запросов | полезных −10 п.п. | отвергнут по данным |
| Contextual Retrieval (Anthropic) | +0…1.7 п.п. — в шуме | отвергнут по данным |
Отдельная ценность — измерительный стенд: 50 реальных экспертных вопросов + LLM-судья с reasoning + автоматическое различение «бот ошибся» и «документация расходится с полевой практикой». Без него любая доработка бота — игра вслепую; с ним любое изменение проверяется за ~20 минут.
комплект поставки
~1 800 строк Python: aiogram-бот, RAG-ядро, гибридный ретрив, LLM-клиент с fallback-бэкендом и ретраями.
Готовый корпус (доки + community) и скрипты полного цикла: скрейп → чанкинг → аннотации → эмбеддинги.
eval-наборы, судья, кросс-проверка вторым судьёй, retrieval-метрики. Гейты качества для любых будущих правок.
Docker + compose (non-root), референс systemd-юнита, мониторинг с Telegram-алертами, HANDOVER.md со справочником всех настроек.
RESULTS.md — каждое изменение с цифрами до/после; RESEARCH_LOG.md — почему выбраны именно эти техники.
Миграция на корпоративный vLLM/qwen — три строки конфигурации + обязательный прогон стенда (инструкция в HANDOVER §8).
развёртывание
# 1. настроить окружение (токен бота, эндпоинт LLM — см. HANDOVER.md §3)
cp .env.example .env
# 2. положить базу знаний (chunks.jsonl + embeddings.npy + manifest)
cp -r /path/to/corpus/* ./data/
# 3. запустить
docker compose up -d --build # ждать в логах: «бот запущен, polling...»
Ресурсы: 2 CPU, ~2.5 ГБ RAM, ~5 ГБ диска. GPU не требуется — эмбеддинги считаются на CPU, генерация ходит в любой OpenAI-совместимый эндпоинт (облачный гейтвей или корпоративный vLLM).
куда расти
передача
Полный комплект: код, база знаний, стенд, документация эксплуатации. Секретов в архиве нет — токены и ключи передаются отдельно. Доступ к файлам по логину-паролю — запросите у автора.
Архив: код + база знаний (.tar.gz, 6 МБ) Git-история решений (.bundle)Вопросы по архитектуре, методике замеров и планам развития — Святослав Тарасов. Передача включает часовую сессию вопросов-ответов с командой эксплуатации.
для аналитиков и технических писателей
Побочный продукт измерений бота: на каждом прогоне ответы, построенные строго по документации, автоматически сверяются с ответами живых экспертов из чата. Ниже — все подтверждённые расхождения. Это не «ошибки бота»: в каждом кейсе бот корректно пересказал документацию — вопрос в том, что сама документация недоговаривает или устарела.
| № | Тема | Документация говорит | Полевая практика говорит | Предложение |
|---|---|---|---|---|
| 01 | PBR и трафик самого устройства (UGOS 6.x) | PBR управляет выбором шлюза для исходящего трафика; про ограничения для трафика самого хоста не сказано | В поздних версиях UGOS 6 PBR перестал работать для трафика самого устройства — причина «неправильных» обратных маршрутов | Задокументировать известное ограничение PBR для локального трафика в 6.x (KB или раздел маршрутизации) |
| 02 | Несколько провайдеров: зоны | Шлюзы + балансировка в «Сеть ➜ Шлюзы»; про разделение зон не сказано | Каждого провайдера рекомендуется размещать в отдельной Untrusted-зоне | Добавить best-practice блок про зоны в статью о мультипровайдерности |
| 03 | Обновление UGE1000 внутри ветки 6.1.9 | Release notes: для сборок после 12164R нужно ≥50% свободного диска (обновление баз журналов) | Бэкап при обновлении внутри ветки не требуется (нужен только с pre-12164) | Свести требования обновления 6.1.9 в одну статью: диск, когда нужен бэкап, откуда обновляться |
| 04 | Инициализация кластера C100: порт | Зона Cluster создаётся автоматически при инициализации | Порт кластера на первой ноде может требовать ручного включения — частая причина «пинг не проходит» | Чек-лист инициализации кластера с проверкой состояния порта |
| 05 | Point-to-point: нужно ли правило для ICMP | Для прохождения трафика через туннель нужно разрешающее правило МЭ | На p2p-линке пинг должен ходить без дополнительных правил; шлюз не нужен | Уточнить в доках поведение ICMP/служебного трафика на p2p-интерфейсах |
| 06 | Доступ ко 2-й ноде кластера после изменений | Общие причины: синхронизация конфигурации, VRRP | Частая реальная причина — ограничение по IP на сервис консоли в зоне management | Добавить в troubleshooting кластера проверку ACL сервисов зоны |
| 07 | Присоединение ноды без factory reset | Добавление ноды — только из состояния первоначальной установки | Ноду можно удалить из кластера на активной стороне — она перейдёт в активный режим без сброса | Описать процедуру пере-присоединения ноды без полного сброса (или явно запретить) |
| 08 | Обновление аппаратных NGFW 6.1.9 → 7.x | Переход между ветками — чистая установка + импорт конфигурации | Для аппаратных процесс не отличается от виртуальных; обновление в технологическое окно | Матрица путей обновления 6.x→7.x по типам платформ — самое частое расхождение в вопросах |
| 09 | Ложные срабатывания DoS-защиты | Профиль исключений СОВ с нужными сигнатурами | Быстрое решение — отключить DoS-защиту галочкой в настройках зоны | Описать оба способа и когда какой уместен (точечный vs полный) |
| 10 | Factory reset и версия ПО | Формулировки позволяют прочитать как «откат к первоначальной версии» | Factory reset чистит настройки, версия НЕ откатывается; откат — Restore previous version | Явная фраза в статье о factory reset: «версия ПО не изменяется» |
| 11 | Инкапсуляция при создании интерфейса в веб-UI | Про создание суб-интерфейсов с инкапсуляцией в веб-UI не сказано | Сначала создать интерфейс с инкапсуляцией через CLI, потом он появится в веб-UI | Документировать CLI-путь создания суб-интерфейсов и причину отсутствия в веб-UI |
| 12 | Fastpath на 7.4 при проблемах с VPN | Отключение — только для диагностики/спец-ПО (ViPNet) | На 7.4 отключение fastpath реально решает проблемы VPN и производительности | KB-заметка: известные случаи на 7.4, когда отключение fastpath оправдано, и цена (ACL/IPS) |
Источник: автоматическая сверка на
реальных вопросах из чата экспертов (июль 2026). Машиночитаемая версия —
doc_conflicts.jsonl. Список пополняется при каждом
прогоне измерений.