Bi-temporal knowledge graph: почему факты не удаляют, а инвалидируют
«Рынок оценивается в $1B» — записали в январе. «Рынок — $500M» — обнаружили в марте. Что делать со старым фактом? Удалить? Перезаписать? Оба варианта уничтожают самое ценное — историю вашего понимания.
Проблема: знание как overwrite
Notion, Google Docs, Miro — везде одна механика. Новая запись заменяет старую. “Конкурент стоит $8” → узнали что $10 → стёрли старое.
Через полгода анализируете, почему ценовая стратегия не сработала. Не помните, что конкурент стоил $8 когда вы принимали решение. Контекст потерян.
Два измерения времени
Bi-temporal модель разделяет время на два:
valid_at— когда факт стал истиной в реальном мире. “Miro стоит $10” → valid_at = 1 мартаinvalid_at— когда перестал быть истиной. Старый факт “$8” получает invalid_at = 1 марта. Не удалён — помеченcreated_at— когда я узнал. Мог узнать 15 марта, хотя изменение 1 марта
Разница между valid_at и created_at = задержка осведомлённости. Сама по себе ценный сигнал.
Пример: конкурент Miro
Январь. Вы пишете: “Miro стоит $8/мес”. Система создаёт ребро has_pricing с valid_at = январь.
Март. “Miro поднял до $10”. Происходит:
- Находит существующее ребро
has_pricing - Semantic comparison: $8 ≠ $10, тот же атрибут → противоречие
- LLM подтверждает: замена, не дополнение
- Старое ребро →
invalid_at = март - Новое ребро: $10,
valid_at = март
Оба факта в базе. Теперь можно спросить:
- “Что изменилось за 3 месяца?” → цепочка инвалидаций
- “Какой была картина когда мы решали про цену?” → граф на дату
- “Какие предположения оказались неверными?” → все инвалидированные факты
Contradiction Detection
Автоматический конвейер при каждом новом факте:
- Semantic similarity — embedding нового факта vs существующие. Порог отсекает нерелевантное
- LLM arbitration — дополнение, уточнение или противоречие?
- Temporal resolution — старый → invalid_at, новый → valid_at, связь
contradicts - User notification — “Обнаружено противоречие. Ранее: $1B. Сейчас: $500M.”
Temporal Evolution Artifact
Когда накапливается достаточно инвалидаций — новый тип артефакта:
В феврале вы считали рынок растёт на 30%. В марте — 12%. В апреле — стагнация B2B. Цепочка: Факт #12 (фев) → инвалидирован #47 (мар) → уточнён #63 (апр)
Реконструкция когнитивного пути. Где ошибались, как быстро корректировали.
Decay: забывание как функция
Каждый узел имеет confidence (0-100). Ежемесячно decay: confidence снижается для неподтверждённых фактов. Повторное упоминание = reinforce. Ниже порога = архив.
Имитация естественного забывания. Знание без подкрепления теряет релевантность.
Источник вдохновения: Zep/Graphiti
Архитектура вдохновлена Graphiti — 3-layer temporal memory для LLM-агентов. Я адаптировал для product research и добавил decay + promotion (автоматическое повышение с проекта на org-level при появлении в 2+ проектах).
Заключение
Знание эволюционирует. База знаний должна эволюционировать вместе. Удалять старые факты — стирать память. Инвалидировать — помнить, что было, понимать, что изменилось.
Продуктовое мышление — не про правильные ответы. Про эволюцию вопросов.
Bi-temporal граф в действии — AICPO или напишите nevr@aicpo.com