cogni-vault
Описание
Cogni-Vault — AI-архивариус знаний AI-powered knowledge archivist для групповых чатов Telegram. Слушает, фильтрует, извлекает факты и отвечает через RAG.
Языки
- Python89,2%
- HTML10,5%
- Dockerfile0,2%
- Mako0,1%
🧠 Cogni-Vault
AI-архивариус знаний для групповых чатов Telegram
Тихо слушает · Фильтрует шум · Извлекает факты · Отвечает на вопросы через RAG
· · · ·
· · ·
💡 Что такое Cogni-Vault?
Cogni-Vault — Telegram-бот, работающий как тихий архивариус знаний для групповых чатов. Он читает сообщения от всех участников, использует многоуровневый AI-пайплайн для фильтрации шума и извлечения полезных фактов, сохраняет их как векторы в PostgreSQL+pgvector и отвечает на вопросы авторизованных пользователей через RAG (Retrieval-Augmented Generation).
Ключевой принцип: Бот слушает всех, но отвечает только пользователям из вайтлиста.
✨ Возможности
📥 Пайплайн записи (Write)
|
📤 RAG-пайплайн (Read)
|
🔐 Управление доступом
|
⚙️ Эксплуатация
|
� Чем Cogni-Vault отличается от типичных RAG-ботов
Большинство open-source Telegram-ботов с RAG работают по простой схеме: входящее сообщение → нарезка на чанки → сохранение в вектор-БД. Cogni-Vault — это архитектура когнитивной обработки, а не скрипт автоматизации.
| Характеристика | Типичный RAG-бот | Cogni-Vault |
|---|---|---|
| AI-пайплайн | 1 модель на все задачи | 6 специализированных моделей по тирам (L1–L4, OCR, STT) |
| Фильтрация шума | Нет или примитивная (по длине) | L1 Dumb Model — бинарный AI-фильтр SAVE/SKIP |
| Обработка данных | Сырое сохранение текста | L3 DumbSmart — извлечение фактов, тегов, дат, разбор списков |
| Поиск | Только векторный | Гибридный: вектор + ключевые слова |
| Форматы ввода | Только текст | Текст, голос (STT), изображения (OCR), PDF, DOCX, ссылки |
| Дедупликация | Нет | Content-hash дедупликация |
| Группировка сообщений | Нет | Debouncer: буферизация быстрых сообщений |
| Управление доступом | Токен бота | 4-уровневая ролевая модель (Super Admin → Contributor) |
| Мониторинг | Нет | Health/Ready/Metrics, 14 метрик Prometheus |
| Завершение | | Graceful shutdown с LIFO-порядком и таймаутами |
| Провайдеры | 1 API-ключ, 1 модель | Мульти-провайдер: разные модели от разных API |
| Запуск | Нужна интеграция | Plug & play: — и бот в чате |
Cogni-Vault не просто сохраняет сообщения — он их осмысляет. Входящий текст проходит через фильтрацию, извлечение фактов, тегирование и векторизацию перед сохранением в базу знаний.
�🏗️ Архитектура
┌──────────────────────────────────────────────────────────────────┐
│ ГРУППОВОЙ ЧАТ TELEGRAM │
│ │
│ Юзер А: «Конференция 15 мая в Хилтоне» │
│ Юзер Б: «лол класс» │
│ Юзер В: «Дедлайн по заявкам — 30 апреля» │
└─────────┬────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ COGNI-VAULT БОТ │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Debounce │─▶│ Загрузка │─▶│ Вайтлист │ │
│ │ Middleware │ │ User из БД │ │ Middleware │ │
│ └────────────┘ └────────────┘ └─────┬──────┘ │
│ │ │
│ ┌─────────────────────────────────────▼────────────────────┐ │
│ │ МНОГОУРОВНЕВЫЙ AI-ПАЙПЛАЙН │ │
│ │ │ │
│ │ ┌──────────┐ ┌────────┐ ┌─────────┐ ┌────────────┐ │ │
│ │ │ Сплиттер │▶│ Фильтр │▶│ Тезис, │▶│ Векториз. │ │ │
│ │ │ сообщений│ │ SAVE / │ │ теги, │ │ (Embedding │ │ │
│ │ │(DumbSm.) │ │ SKIP │ │ даты │ │ Model) │ │ │
│ │ └──────────┘ │ (Dumb) │ │(DumbSm.)│ └─────┬──────┘ │ │
│ │ └────────┘ └─────────┘ │ │ │
│ └────────────────────────────────────────────┴─────────────┘ │
│ │ │
│ ┌────────────────────────────────────────────▼─────────────┐ │
│ │ POSTGRESQL + PGVECTOR │ │
│ │ ┌────────┐ ┌───────────┐ ┌────────┐ ┌──────────┐ │ │
│ │ │ users │ │ knowledge │ │ chats │ │ vectors │ │ │
│ │ │ │ │ entries │ │ │ │(pgvector)│ │ │
│ │ └────────┘ └───────────┘ └────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ RAG-ПАЙПЛАЙН ЗАПРОСОВ │ │
│ │ │ │
│ │ @mention ──▶ Embed ──▶ Гибридный ──▶ Smart LLM │ │
│ │ (L2) поиск (L4 Smart) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ Форматированный ответ │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
Уровни AI-моделей
| Уровень | Назначение | Стоимость | Примеры моделей |
|---|---|---|---|
| 🟢 L1 — Dumb | Бинарный фильтр: SAVE или SKIP | Минимальная | T-lite, Llama 3.2 1B |
| 🔵 L2 — Embedding | Векторизация текста для хранения и поиска | Низкая | Qwen3-Embedding-0.6B |
| 🟡 L3 — DumbSmart | Извлечение фактов, тезисов, тегов, дат; разбор списков | Средняя | GigaChat3-10B |
| 🔴 L4 — Smart | RAG-ответы с поддержкой tool calling | Высокая | GLM-4.7-Flash, GPT-4o |
| 🟣 OCR | Извлечение текста из изображений | Средняя | DeepSeek-OCR-2 |
| ⚪ Whisper | Транскрипция речи в текст | Средняя | whisper-large-v3 |
🚀 Быстрый старт
Предварительные требования
- Python 3.11+
- PostgreSQL 16 с pgvector (или Docker)
- Токен Telegram-бота от @BotFather
- OpenAI-совместимый API-эндпоинт и ключ
Вариант 1: Docker Compose (рекомендуется)
Вариант 2: Локальная разработка
⚙️ Конфигурация
Cogni-Vault использует каскадную конфигурацию из трёх уровней (в порядке приоритета):
- Переменные окружения /
— высший приоритет, перекрывают всё.env — базовая структура и значенияconfig.yaml- Значения по умолчанию — встроены в Pydantic-схему
Для вложенных ключей используйте разделитель :
Совет: Скопируйте
в.env.example— там перечислены все доступные параметры с описаниями и значениями по умолчанию..env
📋 Полный справочник конфигурации (развернуть)
database
| Ключ | Тип | Умолчание | Описание |
|---|---|---|---|
| string | | URL базы данных (async) |
| bool | | Логирование SQL-запросов |
| int | (1–100) | Размер пула соединений |
| int | (0–100) | Допустимое превышение пула |
bot
| Ключ | Тип | Умолчание | Описание |
|---|---|---|---|
| string | | Токен Telegram-бота |
| int/null | | Telegram ID суперадмина |
| list[int] | | ID чатов для записи сообщений |
| list[int] | | Telegram ID администраторов |
providers
Определение одного или нескольких OpenAI-совместимых API-провайдеров:
| Ключ | Тип | Умолчание | Описание |
|---|---|---|---|
| string | | Базовый URL API |
| string | | API-ключ |
| int | (1–300) | Таймаут запроса (секунды) |
| int | (0–10) | Макс. количество повторов |
| float | (0.1–10.0) | Базовая задержка между повторами |
| float | (1.0–60.0) | Макс. задержка между повторами |
| string | | Эндпоинт Whisper STT |
ai_models
Каждая модель ссылается на провайдера и указывает свой уровень:
| Ключ | Тип | Умолчание | Описание |
|---|---|---|---|
| string | | Имя провайдера из |
| string | | Идентификатор модели |
| float | (0–2) | Температура сэмплирования |
| int | (1–8000) | Макс. токенов в ответе |
| ModelTier | | Уровень модели (см. Архитектура) |
| bool | | Поддержка tool calling |
| string/null | | Кастомный системный промпт |
processing
| Ключ | Тип | Умолчание | Описание |
|---|---|---|---|
| bool | | Обработка текстовых сообщений |
| bool | | Обработка голосовых (Whisper) |
| bool | | Обработка изображений (OCR) |
| bool | | Обработка загруженных документов |
| bool | | Обработка URL/ссылок |
| int | (1–30) | Окно дебаунса сообщений |
| int | (100+) | Макс. длина обрабат. сообщения |
| int | (1–1000) | Размер батча для эмбеддингов |
| string | | Модель для фильтрации |
| string | | Модель для извлечения фактов |
| string | | Уровень фильтрации: / / / |
knowledge_base
| Ключ | Тип | Умолчание | Описание |
|---|---|---|---|
| int | (1–32768) | Размерность вектора эмбеддинга |
| float | (0–1) | Мин. сходство для результатов |
| int | (1–100) | Макс. результатов поиска |
| int | (100–5000) | Размер чанка при нарезке текста |
| int | (0–1000) | Перекрытие между чанками |
| bool | | Включить обнаружение дубликатов |
| int | (1–365) | Период поиска дубликатов (дни) |
| float | (0–1) | Порог сходства для дедупликации |
| float | (0–1) | Вес векторного поиска |
| float | (0–1) | Вес поиска по ключевым словам |
logging
| Ключ | Тип | Умолчание | Описание |
|---|---|---|---|
| string | | DEBUG, INFO, WARNING, ERROR, CRITICAL |
| string | | Формат вывода логов |
| bool | | Добавлять временную метку |
| bool | | Добавлять correlation ID |
term_definitions
Подключение доменных терминов в промпты AI для улучшения контекста:
🔀 Настройка нескольких провайдеров (развернуть)
Назначение разных моделей разным провайдерам для оптимизации затрат:
Все провайдеры должны предоставлять OpenAI-совместимый эндпоинт .
📁 Структура проекта
cogni-vault/
├── src/cogni_vault/
│ ├── main.py # Бутстрап и запуск приложения
│ ├── health.py # HTTP-эндпоинты health/ready/metrics
│ ├── metrics.py # Реестр метрик Prometheus
│ ├── shutdown.py # Координатор graceful shutdown
│ ├── logger.py # Конфигурация structlog (JSON)
│ │
│ ├── config/ # Pydantic Settings (YAML + ENV каскад)
│ │
│ ├── bot/ # Слой Telegram
│ │ ├── handlers.py # Обработчики сообщений и команд
│ │ ├── middleware.py # Загрузка User, проверка вайтлиста
│ │ ├── message_debouncer.py # Буферизация быстрых сообщений
│ │ └── debounce_middleware.py
│ │
│ ├── database/ # Слой данных
│ │ ├── models/ # User, Chat, KnowledgeEntry
│ │ ├── models_def.py # SQLAlchemy ORM определения
│ │ └── session.py # Async engine и session factory
│ │
│ ├── services/ # Бизнес-логика
│ │ ├── ai/ # LLM-сервисы
│ │ │ ├── dumb_model.py # L1 — бинарный фильтр
│ │ │ ├── dumb_smart_model.py # L3 — извлечение фактов, сплит
│ │ │ ├── embedding_model.py # L2 — векторизация
│ │ │ ├── smart_model.py # L4 — RAG-ответы
│ │ │ ├── stt_service.py # Whisper STT
│ │ │ ├── ocr_service.py # OCR изображений
│ │ │ ├── file_parser_service.py # Парсинг документов
│ │ │ ├── link_scraper_service.py # Извлечение контента из URL
│ │ │ └── factory.py # LLM-роутер и фабрика
│ │ ├── knowledge_service.py # CRUD для записей знаний
│ │ ├── query_service.py # Оркестрация RAG-запросов
│ │ ├── formatted_query_service.py # Форматирование для Telegram
│ │ └── hybrid_search_service.py # Векторный + ключевой поиск
│ │
│ └── rag/ # Компоненты RAG-пайплайна
│
├── tests/ # 394+ тестов (pytest + pytest-asyncio)
├── alembic/ # Миграции базы данных
├── docs/ # Дополнительная документация
├── docker-compose.yml # App + PostgreSQL (pgvector)
├── Dockerfile # Multi-stage production сборка
└── config.yaml # Конфигурация по умолчанию
🧪 Разработка
Запуск тестов
Линтинг и форматирование
Миграции базы данных
📊 Наблюдаемость
Health-эндпоинты (порт 8080)
| Эндпоинт | Метод | Описание |
|---|---|---|
| GET | Liveness probe — 200, если процесс жив |
| GET | Readiness probe — 200, только когда БД доступна |
| GET | Метрики в формате Prometheus |
Метрики Prometheus
Все 14 метрик
| Метрика | Тип | Описание |
|---|---|---|
| counter | Всего получено сообщений |
| counter | Сообщений обработано через пайплайн |
| counter | Отфильтрованных сообщений (SKIP) |
| counter | Всего запросов к LLM API |
| histogram | Латентность запросов к LLM |
| counter | Ошибок LLM API |
| counter | Записей знаний сохранено |
| counter | Обнаружено дубликатов |
| counter | Всего RAG-запросов |
| histogram | Латентность RAG-запросов |
| gauge | Активных дебаунс-буферов |
| histogram | Длительность сессий БД |
| counter | Запросов health check |
Graceful Shutdown
При получении / компоненты завершаются в обратном порядке регистрации:
- Сброс дебаунс-буферов
- Остановка поллинга бота и закрытие сессии Telegram
- Закрытие всех подключений LLM-клиентов
- Уничтожение движка базы данных
- Остановка HTTP-сервера health
Каждый колбэк имеет таймаут 10 секунд. Работает на Unix и Windows.
🐳 Docker
Сборка и запуск
Сервисы:
| Сервис | Контейнер | Описание |
|---|---|---|
| | Бот (ждёт готовности БД) |
| | PostgreSQL 16 с pgvector |
Dockerfile использует multi-stage сборку:
- Builder — установка зависимостей и пакета
- Production — копирование только установленных пакетов, запуск от non-root пользователя
, порт 8080appuser
🔄 CI/CD
CI работает на GitVerse ():
| Workflow | Триггер | Шаги |
|---|---|---|
| push / PR | Black, isort, flake8, mypy, pytest (покрытие >70%) |
| ручной | Multi-stage Docker-сборка, сохранение образа |
📝 Технологический стек
| Компонент | Технология |
|---|---|
| Runtime | Python 3.11+ (полностью async) |
| Bot Framework | aiogram 3.x |
| База данных | PostgreSQL 16 + pgvector |
| ORM | SQLAlchemy 2.0 (async) + Alembic |
| Конфигурация | Pydantic Settings v2 (YAML + ENV) |
| Валидация | Pydantic v2 |
| Логирование | structlog (JSON) |
| HTTP Health | aiohttp |
| Контейнеризация | Docker + Docker Compose |
| CI/CD | GitVerse Workflows |
📜 Лицензия
BSD — свободное использование, модификация и распространение в любых целях, включая коммерческие. Подробности в LICENSE.