Люми бот v3.0 — техническая карта
Полный архитектурный срез на 18 апреля: [[lyumi/architecture_snapshot_apr18]] — 20-шаговый пайплайн, хранилища, интеграции.
Экосистемные связи на 28 апреля: [[lyumi/kb_api_bridge]] — HTTP-эндпоинт для Pushkin'а.
Сервер
Hetzner CPX52: 12 AMD vCPU, 24GB RAM, 160GB SSD, Ubuntu 24.04, Helsinki.
IP: 46.62.238.135. Два основных контейнера: lyumi-hse-bot, lyumi-pushkin-bot. Связы через docker-net lyumi-net (external).
Пользователи (17 апреля)
87 уникальных юзеров, 723+ запросов, 89% positive feedback. 15 апреля — рекорд: 26 уникальных пользователей, 62 запроса за день (LinkedIn-пост). Retention: 18 вернулись (21%), 6 регулярных (7%). Ядро: Bshopanov (32q/7d), bauyrjanamantai (19q/4d), Namor_romaN (12q/4d), knttnbv (7q/4d). Скорость: 12-22 сек типичная, follow-up 8-12 сек.
Экономика
Бот бесплатный. Монетизация через консалтинг (200-300K₸/день). Отказ от подписки 3,500₸ — рынок маленький, бот = лидмагнит + визитка. Расходы: ~$95/мес (Hetzner $50 + OpenRouter $45 после Opus fix). Opus fix (16 апреля): $1.5/день вместо $6/день, 100% Sonnet на обычных запросах.
Что построено (полный стек)
AI Pipeline (7 этапов)
- Классификатор — Haiku, 5 пространств, запрет multi, fallback soft+hard
- Metadata filtering — regex детекция jurisdiction KZ/INT, document_type
- Query expansion — Haiku, 2-3 синонима (HyDE убран)
- Hybrid search — vector (ChromaDB) + BM25 (per-collection) → RRF, async parallel
- Reranker — Cohere Rerank 4 Fast (1500 символов)
- Agentic RAG — score < 0.15 → 3 попытки: переформулировка → снятие фильтров → все коллекции
- Confidence scoring — retrieval score → [ВЫСОКАЯ/СРЕДНЯЯ/НИЗКАЯ] в контекст LLM
Agentic Web Search + Page Fetcher (7 компонентов)
- _enrich_web_query() — автодобавление "Казахстан РК"
- _is_weak_web_result() — детекция российского контента
- _reformulate_web_query() — Haiku переформулирует
- _extract_urls_from_text() — regex URL + фильтр доверенных доменов
- _fetch_page_text() — httpx + BeautifulSoup, кастомные селекторы
- _fetch_urls_from_sonar_result() — оркестратор параллельного фетча
- Промпт — запрет на "поищи сам"
Доверенные домены: zakon.kz, kadry.mcfr.kz, mybuh.kz, kazpravda.kz, tengrinews.kz, inform.kz, kapital.kz.
Perception layer (18 апреля)
- Семантический кеш — SQLite, SHA-256 hash, 7-day TTL, bare-followup detection. Hit = ~50мс вместо 22 сек.
- First-token streaming — первый edit на ≥10 символах вместо ожидания 1.5s. −1.5 сек перцепционно.
НОВОЕ: KB API — HTTP-эндпоинт для Pushkin’а (28 апреля)
В bot.py рядом с aiogram polling поднимается aiohttp.web на порту 8000:
from kb_api import start_kb_api
await asyncio.gather(
dp.start_polling(bot),
start_kb_api(retriever),
)
Эндпоинты:
- GET /healthz — пинг
- GET /kb_search?q=...&k=15&max_chars=10000 — vector search по ChromaDB, возвращает форматированный текст с источниками
Наружу НЕ публикуется, только внутри docker-net lyumi-net. Pushkin зовёт http://lyumi-hse-bot:8000.
Подробно: [[lyumi/kb_api_bridge]].
Продуктовые фичи
- 10 slash-команд — /report, /checklist, /tbt, /jsa, /norma, /ptw, /evac, /doc, /pack + sticky menu 3×3
- /pack — 9 комплектов работ (огневые, высота, ОЗП, LOTO, грузоподъёмные, земляные, электро, H₂S, радиография), 5 документов параллельно
- Voice input — Groq Whisper (бесплатно) + OpenAI fallback, ffmpeg OGG→WAV
- Photo analysis — Vision (Sonnet/Opus) + RAG по caption, severity levels, anti-hallucination
- Doc generation — /doc, .docx с брендингом (#16A34A), 10 типов
- Streaming — progressive Telegram edit каждые 1.5 сек + first-token edit
- Language mirroring — RU/KZ/EN
- Follow-up detection — space inheritance, обогащение предыдущим Q+A
- Rate limiting — 30 запросов/день
- Feedback — 👍/👎, JSONL логирование, инвалидация кеша на 👎
- Роутинг Sonnet/Opus — точные триггеры для расследований/кризисов
База знаний (ОБНОВЛЕНО на 28 апреля)
После чистки RU-рудиментов ([[lyumi/cleanup_ru_apr28]]):
| Коллекция | До | После |
|---|---|---|
| green_space | 50,097 | 49,893 |
| hard_space | 46,589 | 45,858 |
| soft_space | 39,121 | 38,188 |
| emergency_space | 20,358 | 20,339 |
| health_space | 14,011 | 13,692 |
| Итого | 170,176 | 167,970 |
Contextual embeddings (Haiku) на всех чанках. Parent-child retrieval. Русские переводы ISO/OHSAS/IOGP сохранены (whitelist).
Качество и антигаллюцинация
- Grounding v1 (17 апреля) — [[lyumi/grounding_fix_apr17]]: закрытый список источников, реквизиты ИД + дата из реестра, citation stripping
- Citation verification — regex НПА → ChromaDB lookup → удаление через
_strip_citation - NPA Checker — автоматическая постфактум проверка
- Факт-якоря — высота 1.3м, ветер 15 м/с, ст.156 УК РК
- Temperature 0.4
- Гендерные правила — Люми в женском роде, к собеседнику в мужском
- Запрет на выдуманные инциденты, статусы НПА, sycophancy
- Anti-hallucination для фото
Контент-платформа
- Канал @LyumiHSEDigest — 195 подписчиков
- Пушкин AI-newsroom — [[lyumi/pushkin]] (выделен в отдельный сервис 27 апреля, обогащается каноном из ChromaDB Люми через KB API)
Бизнес-инфраструктура
- ИП зарегистрировано (ОКВЭД 70221)
- Сайт lyumihse.kz (Lovable.dev + Cloudflare Pages)
- Google Workspace (kamal@lyumihse.kz)
- Kaspi payments
- Brand: Chimney Smoke theme, Arial, #16A34A green accent
Стек технологий (ОБНОВЛЕНО)
| Компонент | Технология |
|---|---|
| Классификатор | Claude 3.5 Haiku |
| Генератор | Sonnet 4 (95%) / Opus 4 (5%) |
| Voice | Groq Whisper + OpenAI fallback |
| Web search | Perplexity Sonar + agentic retry |
| Page fetcher | httpx + BeautifulSoup |
| Reranker | Cohere Rerank 4 Fast |
| Embeddings | intfloat/multilingual-e5-large |
| Векторная БД | ChromaDB (167,970 docs, 5 коллекций) |
| Семантический кеш | SQLite (7-day TTL, SHA-256) |
| HTTP API для соседних сервисов | aiohttp.web :8000 (kb_api.py) |
| Бот | aiogram 3.26 |
| Doc generation | python-docx |
| API gateway | OpenRouter |
| Хостинг | Hetzner CPX52, Docker |
| Docker network | lyumi-net (external, с Pushkin'ом) |
| Сайт | Lovable.dev + Cloudflare Pages |
Деплой
# /opt/lyumi/docker-compose.yml (28 апреля — добавлена networks: lyumi-net)
services:
bot:
build: .
image: lyumi-hse-bot
container_name: lyumi-hse-bot
restart: unless-stopped
env_file:
- /opt/lyumi/.env
volumes:
- lyumi-chroma:/app/chroma_db
- /opt/lyumi/cards:/app/cards
- /opt/lyumi/logs:/app/logs
- /opt/lyumi/registry_v2.json:/app/registry_v2.json
networks:
- lyumi-net
volumes:
lyumi-chroma:
external: true
networks:
lyumi-net:
external: true
Кодовая база
34+ Python файлов, ~12,500 строк кода. Основные: bot.py, llm.py, retriever.py, doc_generator.py, voice_handler.py, npa_checker.py, log_analysis.py, document_registry.py, semantic_cache.py, kb_api.py (НОВЫЙ).
Известные баги (актуальное)
- Web search на длинных текстах — 50-70 сек на инструкции
- Мульти-фото — два отчета на один объект вместо консолидации
- Синонимы в retrieval — «водоснабжение» не находит документ про «водоисточники»
- broadcast.py без --dry-run — опасен, любой позиционный аргумент = отправка всем
Решены 28 апреля (были в списке раньше): - ~~РД 34.03.201-97 российский в retrieval~~ — удалён в cleanup_ru - ~~ГОСТ 12.0.004-90 всплывает~~ — часть русских ярлыков почищена (но советские ГОСТы без Р ОСТАЛИСЬ, сохраняют релевантность в КЗ) - ~~Путаница ТК РК/РФ~~ — был фантомный источник, удалён в cleanup_ru
Роадмэп — что осталось
- Onboarding flow — /start → мини-тур + кнопки с примерами (79% уходят после 1-3 запросов)
- Inline кнопки — «📋 Чек-лист», «📄 В документ», «🔍 НПА» после каждого ответа
- Мульти-фото консолидация — один объект → один отчет
- Grounding v2 — synonym expansion, tool calling (
lookup_npa) - Медформы — приказы МЗ РК (075/У, 025/е)
- PTW structured с категориями — выходные
- Wiki self-learning — mid-May 2026
- Скорость <15 сек — пока 12-22 сек
Кросс-продуктые уроки из Pushkin (можно перенести в Люми)
- Dual reflection (Haiku + Gemini) на критичных запросах — в Lyumi сейчас один Haiku reflection. Добавить Gemini Pro как второй слой для расследований инцидентов и JSA/PTW — +$0.02 на запрос.
- Устойчивый JSON-парсер — у Pushkin 4 стратегии (clean/raw_decode/fix-newlines/regex). Для Lyumi reflection и NPA Checker полезно перенести.
- Sonar Reasoning Pro для фото-анализа — когда фото сложное, CoT по сходным кейсам OSHA/CSB.
- HTML балансировщик — если Lyumi когда-то перейдёт на HTML parse_mode вместо Markdown.
Связанные
- [[lyumi/architecture_snapshot_apr18]] — полный архитектурный срез
- [[lyumi/pushkin]] — AI-newsroom для канала
- [[lyumi/kb_api_bridge]] — HTTP-мост ChromaDB Lyumi↔Pushkin
- [[lyumi/cleanup_ru_apr28]] — чистка RU-рудиментов
- [[lyumi/grounding_fix_apr17]] — антигаллюцинация v1
- [[lyumi/strategy_2026]] — стратегия года