Перейти к содержанию

Люми бот 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 этапов)

  1. Классификатор — Haiku, 5 пространств, запрет multi, fallback soft+hard
  2. Metadata filtering — regex детекция jurisdiction KZ/INT, document_type
  3. Query expansion — Haiku, 2-3 синонима (HyDE убран)
  4. Hybrid search — vector (ChromaDB) + BM25 (per-collection) → RRF, async parallel
  5. Reranker — Cohere Rerank 4 Fast (1500 символов)
  6. Agentic RAG — score < 0.15 → 3 попытки: переформулировка → снятие фильтров → все коллекции
  7. Confidence scoring — retrieval score → [ВЫСОКАЯ/СРЕДНЯЯ/НИЗКАЯ] в контекст LLM

Agentic Web Search + Page Fetcher (7 компонентов)

  1. _enrich_web_query() — автодобавление "Казахстан РК"
  2. _is_weak_web_result() — детекция российского контента
  3. _reformulate_web_query() — Haiku переформулирует
  4. _extract_urls_from_text() — regex URL + фильтр доверенных доменов
  5. _fetch_page_text() — httpx + BeautifulSoup, кастомные селекторы
  6. _fetch_urls_from_sonar_result() — оркестратор параллельного фетча
  7. Промпт — запрет на "поищи сам"

Доверенные домены: 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 (НОВЫЙ).

Известные баги (актуальное)

  1. Web search на длинных текстах — 50-70 сек на инструкции
  2. Мульти-фото — два отчета на один объект вместо консолидации
  3. Синонимы в retrieval — «водоснабжение» не находит документ про «водоисточники»
  4. 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 (можно перенести в Люми)

  1. Dual reflection (Haiku + Gemini) на критичных запросах — в Lyumi сейчас один Haiku reflection. Добавить Gemini Pro как второй слой для расследований инцидентов и JSA/PTW — +$0.02 на запрос.
  2. Устойчивый JSON-парсер — у Pushkin 4 стратегии (clean/raw_decode/fix-newlines/regex). Для Lyumi reflection и NPA Checker полезно перенести.
  3. Sonar Reasoning Pro для фото-анализа — когда фото сложное, CoT по сходным кейсам OSHA/CSB.
  4. 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]] — стратегия года