Digest System — Pipeline Flow

от raw-сообщений до выжимки с брифом и ссылками • тыкни на этап чтоб развернуть

📥
Input
Raw сообщения канала за окно (window_start_id → window_end_id) + topic_profile + entity_dictionary
1
Filter & Normalize MVP
Дропаем системные / эмодзи / ботов / пустые. Mentions <@123>@nick. Аттачменты → метаданные.
Phase 0 · детерминистика
Зачем: Не платить ЛЛМ за просмотр спама. Обычно отваливается 30-40% сообщений.
  • Drop: type != 0, emoji-only, bot allowlist, no content
  • Normalize: mentions, attachments, embed link previews
  • Сохраняем user_id → display_name для validation
2
Thread Reconstruct MVP
Строим разговоры: reply-graph + временная близость + общие упоминания + лексическое перекрытие.
Phase 0 · детерминистика
Зачем: Сообщение «попробуй cfg=3.5» бессмысленно вне контекста. Без тредов LLM теряет связь.
  • Layer 1: explicit replies → transitive groups
  • Layer 2: heuristics — temporal 120s, shared mentions, shared URLs/attachments
  • Native Discord threads сохраняются как есть
3
Importance Score MVP
Взвешиваем: реакции (👍×N), длина, code-block, ссылки, аттачменты, упоминания авторитетов.
Phase 0 · детерминистика
Зачем: Это и есть твой главный сигнал «залайкали». Помогает на следующем шаге выбрать что вообще смотреть.
  • Reactions diversity bonus (5 разных людей > 5 одинаковых)
  • Code-block / attachment bonuses
  • Author authority (если есть allowlist)
4
Pass 1 — Triage (Haiku) MVP
Дешёвая модель по треду: interesting yes/no, типы артефактов, в какой профиль маршрутить.
Phase 1 · cheap LLM
Зачем: Главная экономия. Отсекаем 50-80% тредов до того как зовём дорогую модель.
Модель: claude-haiku-3.5 через CLIProxy, batch-режим.
Validation: false-negative rate проверяется на gold set.
5
Chunk + Inject Context MVP
Режем оставшееся на куски ~7K токенов. В каждый кусок: prompt_supplement из профиля + словарь сущностей.
Phase 0+1 · детерминистика + LLM prep
Зачем: Дать LLM доменный контекст. «Flux это model, ComfyUI это node-graph tool» помогает извлекать правильно.
Boundary: никогда не режем посреди треда (если влезает в budget).
Сюда же инжектим: known_items от прошлых runs (для cross-run dedup, но это уже Phase 2).
6
Pass 2 — Map Extract (Sonnet) MVP
Дорогая модель из каждого чанка извлекает структурированные KnowledgeItem через tool-use.
Phase 1 · expensive LLM
Это сердце системы. Tool: emit_chunk_summary с JSON-схемой.
Каждый item:
  • kind: prompt | config | settings | tutorial | troubleshoot | model_rec | …
  • brief: 1-2 предложения «что это»
  • content_pointer: {msg_id, char_start, char_end} — точная подстрока для code-block / промта / конфига
  • citations: [msg_id, …] — какие сообщения подтверждают
  • entity_refs: ["flux-1-dev", "dpmpp-2m"] — линки в словарь
Prompt caching: system block кешируется (Anthropic ephemeral cache).
7
Validate (4 layers) MVP
Schema → Pydantic → семантика (цитаты, оффсеты, n-gram overlap, density) → self-refine retry.
Phase 1 · LLM validation
Зачем: Без этого LLM галлюцинирует. Например придумывает msg_id которого нет в окне.
  • Layer 3 семантика: проверяем что цитаты реально в исходнике (n-gram overlap), pointer оффсеты валидны, нет языковых аномалий
  • Layer 4 retry: если что-то сломано, отправляем LLM фидбек «вот что не так, переделай»
8
Reduce + Pointer Resolve MVP
Сшиваем items со всех чанков в один Digest. Резолвим (msg_id, char_start, char_end) → реальный текст.
Phase 1 · expensive LLM
Reduce: ещё один LLM-вызов с tool emit_digest. Группирует по темам, пишет overview, мерджит близкие items внутри одного digest'а.
Pointer resolve: детерминистический step — берём substring из normalized message и сохраняем как final текст. Гарантия byte-level fidelity.
9
Cross-run Dedup later
Сравниваем с предыдущими digests: тот же entity_ref + почти тот же текст → merge с версионностью.
Phase 2 · embedding + RAG
Зачем: Чтобы один и тот же tutorial не показывать тебе 5 раз за неделю.
Стратегия: для нового item ищем top-K похожих в истории (embedding), проверяем pointer-exact / citation-overlap / entity-aware match. Если match — линкуем как supersedes_id.
Для MVP не критично: пока digestов мало, повторы не страшны.
10
Store + Show MVP
Кладём в discord_digest, фронт показывает timeline + детальный вид с превью сообщений.
Phase 1+3 · storage + UI
Что в Mongo: один discord_digest doc на (channel, window). Содержит overview, knowledge_items (с brief, kind, citations, content), token_usage, cost.
UI (front-console): timeline с фильтрами (server / channel / signal / kind), деталь digest'а с подсветкой pointer-extracted текста и линками на оригинальные сообщения в Discord.
📤
Output: Digest
Список KnowledgeItem'ов: бриф + msg_id + точная подстрока (промт/конфиг/код) + entity refs