Личный проект · 2025–2026

Family Atlas

Персональная система семейных знаний: Telegram-форум → локальный AI → Obsidian

GitHub репозиторий → ← Назад

О проекте

Что это такое

Family Atlas — персональная система управления семейными знаниями на базе локальных LLM. Система собирает голосовые, текстовые и медиа-сообщения из семейного Telegram-форума, обрабатывает их полностью локально и сохраняет структурированные Markdown-заметки в Obsidian vault.

Проект решает две задачи одновременно: реально полезный инструмент для семьи и портфельный проект, демонстрирующий практики AI Engineering — локальный инференс через llama.cpp, агентные системы на LangGraph, семантический поиск, structured output. Никаких облачных зависимостей — данные остаются дома.

Как работает

Пайплайн обработки

1. Сбор — Telethon Collector

Сбор сообщений из семейного Telegram-форума через Telethon. Четыре топика: diary, notes, task, calendar. Сообщения сохраняются в SQLite через async SQLAlchemy с группировкой в сессии по временному порогу.

2. STT — Распознавание речи

Голосовые транскрибируются через onnx-asr с моделью Parakeet TDT 0.6B v3. CPU-инференс через ONNX Runtime. Затем транскрипция нормализуется через GigaChat 3.1 10B — убираются слова-паразиты, расставляется пунктуация, сохраняется авторский стиль.

3. Vision — Описание фотографий

Фото описываются локальной мультимодальной моделью Qwen3-VL-4B через llama-server. Описание органично вплетается в контент сессии. Файл переименовывается по сгенерированному заголовку и сохраняется в vault.

4. Pass 1 — LangGraph Agent

LangGraph-граф из трёх нод: analyzer генерирует title, summary, tags, content, people_mentioned через structured output; find_relatives ищет связанные заметки через BM25 + cosine similarity + LLM verifier; db_updater сохраняет результат с embedding в SQLite.

5. Pass 2 — Obsidian Writer

Python-функция без LLM: детерминированно строит frontmatter и Markdown-файл, записывает по рассчитанному пути в vault. Для calendar-треда создаёт событие в Google Calendar и добавляет ссылку в файл. Для task — дописывает в еженедельный файл.

Архитектура

Схема системы

Telegram Forum (топики: diary / notes / task / calendar) │ ▼ [Telethon Collector] ──► SQLite (LocalRawMessages) │ ▼ [Assembler] ├─ STT: Parakeet TDT 0.6B v3 (onnx-asr, CPU) ├─ Norm: GigaChat 3.1 10B (llama-server) ← чистка транскрипции └─ Vision: Qwen3-VL-4B (llama-server) ← фото → описание │ ▼ AssembledMessages [Pass 1 — LangGraph] ├─ analyzer → title, summary, tags, content, people_mentioned ├─ find_relatives → BM25 + cosine sim + LLM verifier → related notes └─ db_updater → embedding, obsidian_path, status="analyzed" │ ▼ [Pass 2 — write_note()] (без LLM) ├─ frontmatter + markdown → .md файл в vault └─ Google Calendar API → ссылка на событие │ ▼ Obsidian Vault diary/ notes/ task/ calendar/ persons/

Агентная логика

Два прохода обработки

Pass 1 · LangGraph + LLM

Анализ и структурирование

  • Structured output через Pydantic v2
  • Разные схемы для каждого типа треда
  • BM25 по леммам (pymorphy3)
  • Cosine similarity (LaBSE-ru-turbo)
  • LLM verifier для related notes
  • Embedding в SQLite (JSON)

Pass 2 · Python · без LLM

Детерминированная запись

  • Frontmatter строится из валидированных данных
  • Детерминированные пути в vault
  • Задачи дописываются в еженедельный файл
  • Google Calendar API для calendar-треда
  • Wikilinks для related и persons
  • Вложения через Obsidian embed-синтаксис

Возможности

Что умеет система

🎙️

Голосовые сообщения

Транскрипция через Parakeet TDT 0.6B v3 (ONNX, CPU). Нормализация текста через GigaChat 3.1 — убираются паразиты, сохраняется авторский стиль.

📸

Фотографии

Мультимодальная Qwen3-VL-4B описывает фото локально. Файл переименовывается, сохраняется в vault и вставляется в заметку через Obsidian embed.

📝

4 типа записей

Заметки, дневник (один файл на день), события с Google Calendar, задачи в еженедельном файле с чекбоксами и приоритетами.

🔗

Поиск связанных заметок

Трёхуровневый каскад: BM25 по леммам → cosine similarity (LaBSE-ru-turbo) → LLM verifier. Связи оформляются как Obsidian wikilinks.

👨‍👩‍👧

Несколько авторов

Определение автора по Telegram ID. Пересланные сообщения сохраняют атрибуцию оригинала — из личных чатов и публичных каналов.

📅

Google Calendar

Calendar-топик автоматически создаёт событие через Google Calendar API. Ссылка на событие сохраняется в frontmatter и теле заметки.

Технологии

Стек

Python 3.12 Telethon LangGraph LangChain llama.cpp Qwen3.6-35B-A3B GigaChat 3.1 10B Qwen3-VL-4B Parakeet TDT 0.6B v3 onnx-asr LaBSE-ru-turbo BM25 + pymorphy3 SQLite async SQLAlchemy Pydantic v2 python-frontmatter Google Calendar API Loguru uv

Проект открытый, установка через uv sync

Открыть на GitHub →