temporality
Изменить страницу↗
Инженерные документы

ТЗ: Knowledge Exploration — исследование предметной области и навигация по знаниям Temporality

#1. Цель

Реализовать в Temporality исследовательский слой для работы с накопленными знаниями, позволяющий агентам и людям разбираться в незнакомой или недостаточно изученной предметной области, находить релевантные утверждения без знания точных терминов, исследовать связи между знаниями, восстанавливать их происхождение, разрешать противоречия и выявлять пробелы.

Система должна решать задачу не только поиска конкретного знания, но и последовательного исследования области, в которой это знание предположительно находится.

#1.1. Проблема

В процессе эксплуатации Temporality накапливаются утверждения с различными состояниями жизненного цикла: proposed, confirmed, challenged, corrected, superseded, invalidated (последние три — терминальные), а также флаг at_risk для знаний, зависящих от выбывших.

Полнотекстовый поиск, фильтры и временные ограничения позволяют находить конкретные записи, но недостаточно помогают в ситуациях, когда:

#1.2. Основная идея

Создать единый исследовательский слой поверх существующей модели знаний Temporality.

Слой предоставляет операции ориентации, поиска, исследования связей, проверки происхождения, сравнения версий и формирования исследовательского досье.

Один и тот же слой должен использоваться:

Knowledge Exploration не является отдельной системой хранения памяти, самостоятельной онтологической базой или заменой существующего механизма формирования знаний.

#2. Основные принципы

#2.1. Существующая модель знаний остаётся источником истины

Перед реализацией необходимо изучить актуальный код Temporality и использовать существующие модели, репозитории, сервисы, проекции, идентификаторы и правила доступа.

Запрещается создавать параллельную модель знаний с независимым жизненным циклом или дублировать существующие механизмы только ради реализации исследовательского API.

Event stream остаётся источником истины. Состояния, связи, поисковые индексы, тематические группировки и исследовательские представления являются производными данными.

Если для работы исследовательского слоя необходимы новые устойчивые отношения между знаниями, необходимо определить, как они представляются в существующей модели и как восстанавливаются из событий. Нельзя незаметно вводить изменяемое состояние, которое невозможно восстановить из источника истины.

#2.2. Исследование не равно извлечению подсказок

Инструмент должен помогать агенту самостоятельно выбирать направление исследования на основании полученных результатов.

Исследование не конкурирует и не заменяет priming — автоматический отбор подсказек до задачи (docs/plan-priming-relevance.md): priming выбирает ограниченный набор cue для текущего решения, а exploration даёт агенту управляемые операции навигации по всей видимой базе. Дозагрузка конкретного знания по идентификатору уже доступна агенту инструментом knowledge_lookup.

В отличие от обычного поиска, результат может содержать:

При этом инструмент не должен автоматически возвращать всю обнаруженную информацию в контекст агента. Агент получает компактную сводку и при необходимости углубляет исследование.

#2.3. Семантическая близость не означает истинность

Необходимо различать следующие типы отношений:

  1. Явные отношения — зафиксированы в существующей модели или подтверждены соответствующими событиями.
  2. Выведенные отношения — получены детерминированными правилами на основании доступных данных.
  3. Кандидаты на связь — обнаружены по сходству формулировок, контексту, совместному использованию или другим эвристикам.

Для каждого отношения должны быть доступны его тип, основание и происхождение, если они известны.

Кандидат на связь не должен отображаться как установленный факт, подтверждение или причинно-следственная зависимость.

#2.4. Жизненный цикл не равен достоверности

Состояние утверждения, его истинность, применимость, актуальность и качество доказательств — разные характеристики.

Нельзя использовать единый непрозрачный рейтинг, который смешивает:

Каждая характеристика должна интерпретироваться отдельно.

#2.5. Исследование должно быть ограниченным и воспроизводимым

Каждая исследовательская операция должна учитывать ограничения по количеству результатов, глубине обхода связей, объёму возвращаемых данных и вычислительному бюджету.

Должна быть возможность понять, почему конкретное знание попало в результат, какие данные использовались и какие ограничения применялись.

#3. Предварительный аудит существующей реализации

До изменения кода необходимо провести анализ актуальной версии репозитория Temporality. Первичный аудит выполнен 2026-10-16 по main; при заметном дрейфе реализации его следует повторить.

Определить:

  1. Как устроены модели знаний, их идентификаторы и состояния жизненного цикла.
  2. Как представлены предложенные, подтверждённые, оспоренные, устаревшие, заменённые и инвалидированные знания.
  3. Как устроены временные ограничения, включая существующую битемпоральную модель.
  4. Какие отношения между знаниями уже существуют и как они хранятся.
  5. Какие события позволяют восстановить происхождение и историю утверждения.
  6. Какие данные связывают знания с организациями, подразделениями, проектами, задачами, агентами и запусками.
  7. Какие механизмы полнотекстового и семантического поиска уже реализованы.
  8. Какие проекции, индексы и фоновые процессы уже существуют.
  9. Как реализованы авторизация, наследование доступа и ограничения области видимости.
  10. Как агенты получают доступ к инструментам, MCP и существующим сервисам Temporality.

По результатам аудита составлена таблица:

Возможность Существующая реализация Необходимое изменение
Поиск по смыслу GET /v1/observations/knowledge?q= — IDF-взвешенный матч с нормализованными признаками и matched_by/score (движок lexical-idf.v1); семантический тир есть в подсказках (docs/plan-priming-relevance.md §18) Общий слой признаков и нормализации (регистр, пунктуация, словоформы RU/EN, идентификаторы, короткие значимые токены) — общий с priming
Тематическая ориентация Поля topics/entities у каждого знания; в UI — группировка по topics[0] Операция orient: агрегация тем и понятий по всей видимой базе с учётом прав, а не только по текущей странице
Связи между знаниями knowledge.linked с типами supports, contradicts, derived_from, depends_on, supersedes, related_to; типизированная замена replacement_id у corrected/superseded; распространение at_risk по depends_on/derived_from Операция expand: ограниченный обход по этим отношениям; одношаговое расширение по связям уже используется в отборе подсказок (observation/hints.go)
История и происхождение History переходов в проекции, события журнала (GET /v1/observations/events), цепочка активации GET /v1/observations/knowledge/chain Операция trace поверх существующих событий; новых сущностей не требуется
Битемпоральная применимость as_of/known_at в API знаний, сравнение срезов GET .../knowledge/diff Использовать как есть; исследовательские операции принимают те же параметры
Организационный и проектный контекст project, scope_kind/scope_id (project/org_unit/organization), события knowledge.promoted; контекст события (run, actor) Наследовать; различать место формирования и область применимости
Права доступа RBAC RoleReader по проекту + видимость organization/org_unit-цепочки проекта (filterKnowledgeVisible) Все новые операции проходят те же проверки; агрегаты и объяснения не раскрывают недоступное

Не дублировать уже реализованную функциональность. Если необходимая возможность существует, использовать её через текущие интерфейсы либо расширять существующую реализацию.

Не выполнять массовую миграцию знаний и не менять семантику их жизненного цикла без отдельного обоснования.

#4. Функциональные требования

#4.1. Операция orient — ориентация в предметной области

Назначение: помочь агенту определить, какие области знаний и понятия связаны с его задачей, когда точные термины и идентификаторы неизвестны.

Входные данные:

Результат должен содержать:

  1. Список релевантных тематических областей или групп знаний.
  2. Основные понятия и альтернативные формулировки.
  3. Наиболее релевантные утверждения с устойчивыми идентификаторами.
  4. Связанные проекты, контексты и события, если доступно.
  5. Обнаруженные противоречия и неоднозначности.
  6. Предположительные направления дальнейшего исследования.
  7. Объяснение, почему каждая область или группа релевантна запросу.

Если система не располагает готовой классификацией областей, допускается формирование временных тематических групп на основании доступных данных. Первое приближение уже есть в модели: каждое знание несёт topics и entities — их агрегация по видимой базе является готовой основой карты областей.

Такие группы не должны автоматически становиться постоянной онтологией или записываться в память как подтверждённые знания.

Операция должна возвращать компактную карту области, а не полный список всех найденных утверждений.

#4.2. Операция search — семантический поиск

Назначение: находить знания по приблизительному смыслу, даже если формулировка запроса отличается от исходного утверждения.

Поиск должен учитывать доступные механизмы:

Использовать только те источники и механизмы, которые реально доступны в существующей архитектуре. При необходимости добавить недостающие возможности, не создавая без обоснования параллельный поисковый контур.

Текущая базовая линия — IDF-взвешенный матч параметра q с нормализацией лексики (регистр, пунктуация, словоформы русского и английского, идентификаторы; короткие токены вида go, jwt, v2 значимы и не должны отбрасываться). Те же требования к признакам сформулированы для priming в docs/plan-priming-relevance.md — извлечение признаков должно быть общим для обоих контуров, а не дублироваться.

Фильтры по организации, проекту, времени и состоянию должны ограничивать множество допустимых результатов, а не только влиять на сортировку.

Результат каждого совпадения должен включать:

Необходимо разделять оценку релевантности запросу и оценку качества доказательств.

#4.3. Операция expand — исследование связей

Назначение: исследовать окружение выбранного знания или понятия.

Поддерживаемые направления обхода должны определяться существующей моделью. При наличии соответствующих данных необходимо поддержать:

Словарь явных отношений сегодня: supports, contradicts, derived_from, depends_on, supersedes, related_to (события knowledge.linked) плюс типизированная замена replacement_id у corrected/superseded. Обход expand обобщает существующее одношаговое расширение отбора подсказок, добавив ограничение глубины и дедупликацию посещённых объектов.

Параметры:

Требования:

  1. Не возвращать полный граф без ограничений.
  2. Учитывать приоритет и релевантность связей относительно исходного вопроса.
  3. Удалять дубликаты результатов.
  4. Предотвращать повторный обход уже исследованных объектов.
  5. Различать явные и предположительные отношения.
  6. Возвращать основание каждой связи.
  7. Обеспечивать переход от результата к исходному объекту.

При отсутствии явных связей допускается возвращать кандидатов на связь, если это поддерживается доступными данными. Их статус и основание должны быть явно обозначены.

#4.4. Операция trace — происхождение и история знания

Назначение: восстановить историю утверждения и объяснить, на каких событиях основано его текущее состояние.

Операция должна возвращать доступную информацию о:

Использовать реальные события и отношения существующей модели. Не выводить происхождение только из текущего состояния записи.

История переходов уже хранится в проекции (History) и журнале событий; цепочка активации доступна эндпоинтом GET /v1/observations/knowledge/chain. Операция trace строится поверх этих данных без новых сущностей.

Необходимо различать:

При реконструкции истории нельзя терять последовательность событий или подменять историческое состояние текущим.

Если часть происхождения недоступна, результат должен явно сообщать об этом. Запрещается выдумывать автора, причину, свидетельство или причинно-следственную связь.

#4.5. Операция compare — сопоставление версий и противоречий

Назначение: помочь агенту разобраться в конфликтующих утверждениях и определить, какие из них применимы к текущей задаче.

Для сопоставления необходимо учитывать, если эти данные доступны:

Результат должен содержать:

  1. Список сравниваемых утверждений.
  2. Основания, по которым они считаются противоречащими друг другу.
  3. Существенные различия контекста и временной применимости.
  4. Доступные свидетельства и ограничения каждого утверждения.
  5. Неразрешённые противоречия.
  6. Сведения о том, достаточно ли данных для обоснованного вывода.

Нельзя автоматически объявлять последнее по времени утверждение истинным только потому, что оно новее.

Нельзя автоматически считать два утверждения противоречащими друг другу, если они относятся к разным версиям системы, организациям, проектам или периодам.

Инструмент не должен самостоятельно изменять состояние знаний, подтверждать утверждения или инвалидировать их. Такие действия остаются в существующих механизмах управления жизненным циклом.

#4.6. Операция synthesize — исследовательское досье

Назначение: сформировать компактный, проверяемый результат исследования для дальнейшего выполнения задачи.

Входные данные:

Результат должен включать следующие разделы:

Установленные сведения

Спорные вопросы

Временной контекст

Пробелы

Рекомендуемые следующие действия

Каждый существенный вывод должен иметь ссылки на исходные утверждения и события, на которых он основан.

Синтез не должен превращать предположения в факты. Необходимо явно обозначать выводы, которые являются интерпретацией, а не прямым содержанием источника.

Операция не должна автоматически создавать постоянные знания в Temporality. Сохранение результатов исследования как устойчивого знания выполняется только через существующий процесс формирования и подтверждения знаний.

#5. Контекст и модель доступа

Исследование должно учитывать существующую организационную модель Temporality.

Поддерживаемые измерения контекста, если они предусмотрены моделью:

Необходимо различать:

Контекст задачи не должен автоматически превращать найденное знание в знание соответствующего проекта или организации.

#5.1. Обязательные правила доступа

  1. Авторизация выполняется до формирования результатов исследования.
  2. Все поисковые и графовые операции соблюдают существующие правила видимости и наследования доступа.
  3. Ограничения применяются также к связанным объектам, событиям, источникам, названиям проектов и метаданным.
  4. Запрещено раскрывать через агрегаты, количество результатов, названия кластеров или объяснения связей сведения о недоступных объектах.
  5. Запрещено использовать результаты из недоступных областей для формирования видимых пользователю объяснений или синтеза.
  6. Повторное использование кешированных результатов допускается только при корректном учёте области доступа и временного контекста.

Если связь ведёт к недоступному объекту, инструмент не должен раскрывать его содержимое или чувствительные метаданные.

#6. Интерфейс инструмента для агентов

Предпочтительный способ предоставления функциональности — существующая система инструментов ядра Temporality (kernel tools), по образцу knowledge_lookup, skill_search и artifact_search: единый обработчик RunTool с проектной авторизацией. Вынесение в MCP не требуется: MCP в Temporality подключает внешние серверы, а не внутренние инструменты.

На первом этапе рекомендуется реализовать один составной инструмент knowledge_explore с ограниченным набором операций:

Это логические режимы одного инструмента. Делить их на самостоятельные MCP-инструменты следует только в случае, если этого требуют текущая архитектура, ограничения схем или результаты испытаний.

#6.1. Общие параметры

В зависимости от операции могут использоваться:

Конкретная JSON-схема должна быть согласована с существующим форматом инструментов Temporality. Перечисленные поля являются проектными требованиями, а не утверждением о наличии таких параметров в текущем коде.

#6.2. Общий формат результата

Результат каждой операции должен быть структурированным и машиночитаемым.

Предпочтительная логическая структура:

Схему необходимо адаптировать к существующим типам и соглашениям проекта, избегая создания несовместимых параллельных форматов.

#6.3. Ссылки на исходные данные

Каждый результат должен содержать устойчивые идентификаторы исходных объектов. Для происхождения и истории должны использоваться идентификаторы соответствующих событий, если они доступны.

Необходимо обеспечить возможность повторно запросить найденное знание или событие без повторного семантического поиска.

Не использовать только текстовые цитаты как идентификаторы источников.

#6.4. Ошибки и неполные результаты

Инструмент должен различать:

Достижение лимита не должно интерпретироваться как доказательство того, что других результатов не существует.

#7. Стратегия исследования агентом

Инструмент должен поддерживать итеративную работу, но не навязывать агенту обязательный полный цикл для каждой задачи.

Пример сценария:

  1. Агент получает задачу и выполняет orient.
  2. Выбирает одну или несколько релевантных областей.
  3. Выполняет search для поиска конкретных утверждений.
  4. Выполняет expand для исследования важных связей.
  5. Использует trace для проверки происхождения критичных утверждений.
  6. При обнаружении конфликтов выполняет compare.
  7. Формирует synthesize для получения компактного контекста.

Агент может пропускать операции, если они не нужны, и возвращаться к предыдущим направлениям исследования.

#7.1. Критерии остановки

Агенту необходимо предоставлять основания для остановки исследования:

Инструмент может рекомендовать остановку, но не должен выдавать ограниченный поиск за исчерпывающий.

#7.2. Бюджет и защита от бесконечного обхода

Обязательно предусмотреть:

Параметры лимитов должны быть настраиваемыми. Их начальные значения определить по результатам испытаний, а не выбирать произвольно без измерений.

#8. Семантическая навигация и кандидаты на связи

Необходимо предусмотреть возможность поиска связей, которые ещё не зафиксированы явно в модели знаний.

Источниками кандидатов могут быть доступные формулировки утверждений, контекст их создания и применения, общие события и существующие связи. Использование конкретного метода определяется результатами аудита и имеющейся инфраструктурой.

Для каждого кандидата по возможности возвращать:

Необходимо различать семантическое сходство, тематическую близость, совместное использование, противоречие, подтверждение и причинно-следственную связь. Одно не должно автоматически подменять другое.

#8.1. Временный характер исследовательских связей

Кандидаты, сформированные исключительно для текущего исследования, не должны автоматически становиться постоянными отношениями между знаниями.

На первом этапе допускается формировать такие связи в рамках вычисления результата операции, не сохраняя их как факты.

Если в дальнейшем потребуется постоянное накопление кандидатов, это следует реализовать отдельно через существующую событийную модель, с указанием основания, происхождения, состояния и правил жизненного цикла.

Автоматическое подтверждение кандидатов запрещено.

#9. Пользовательский интерфейс

В рамках данной задачи API и агентный инструмент являются первоочередным результатом. При этом контракты должны позволять использовать тот же исследовательский слой в пользовательском интерфейсе.

Если в текущем интерфейсе Temporality есть возможность реализовать исследовательскую навигацию без создания отдельной подсистемы, предусмотреть три взаимосвязанных представления.

#9.1. Карта областей знаний

Отображает тематические области и позволяет перейти от общей темы к конкретным утверждениям.

Отправная точка уже есть во вкладке «Знания»: группировка по topics[0]/entities[0]. Карта областей обобщает её до агрегата по всей видимой базе с распределением по состояниям и учётом прав доступа.

Для каждой области можно показывать:

Тематическая группировка должна быть навигационным представлением, а не жёсткой классификацией, в которой каждый объект может принадлежать только одной теме.

Агрегаты должны вычисляться с учётом прав доступа.

#9.2. Локальный граф связей

Показывает выбранное знание и релевантное окружение, а не весь граф системы.

Пользователь должен иметь возможность:

#9.3. Временная история

Показывает историю выбранного утверждения и доступные сведения о его применимости во времени.

Необходимо сохранять различие между временем регистрации события и периодом действия знания.

#9.4. Единый контекст исследования

При переключении между картой, графом и временной историей необходимо сохранять:

Не следует реализовывать все три представления как обязательное условие готовности первого API. UI должен использовать общий контракт, а не дублировать исследовательскую логику.

#10. Архитектурные требования

#10.1. Минимальное вмешательство

Использовать существующие сервисы, модели, репозитории и механизмы доступа.

Новые сервисы, таблицы, индексы и фоновые процессы вводить только при доказанной необходимости.

Не внедрять отдельную графовую базу, полноценную OWL-онтологию или новую систему памяти только ради построения исследовательского интерфейса.

#10.2. Производные проекции

Если для ориентации и исследования необходимы тематические кластеры, дополнительные индексы или агрегаты, они должны:

Необходимо определить допустимую задержку обновления проекций и обеспечить корректную обработку устаревших результатов.

#10.3. Наблюдаемость

Добавить метрики, позволяющие оценить:

В логах нельзя раскрывать данные, недоступные пользователю, содержимое секретов или чувствительные сведения из других контекстов.

#11. Нефункциональные требования

#Производительность

#Надёжность

#Безопасность

#Совместимость

#12. Тестирование

#12.1. Функциональные тесты

Проверить:

  1. Ориентацию по приблизительному описанию предметной области.
  2. Поиск знаний с альтернативными формулировками.
  3. Раскрытие связей с ограничением глубины.
  4. Восстановление происхождения и истории.
  5. Сопоставление противоречащих утверждений.
  6. Формирование досье со ссылками на источники.
  7. Обнаружение пробелов и неполных результатов.
  8. Работу с несколькими проектами и организационными контекстами.
  9. Различение явных отношений и кандидатов на связь.
  10. Сохранение корректной семантики жизненного цикла.

#12.2. Тесты временной корректности

Подготовить сценарии, в которых:

Проверить, что поиск, сравнение и синтез не смешивают состояния разных временных срезов.

#12.3. Тесты доступа

Проверить:

#12.4. Тесты масштабирования

Использовать синтетический и, по возможности, обезличенный набор, отражающий эксплуатационные условия:

Проверить ограниченность потребления памяти, задержки и стабильность результатов при увеличении объёма данных.

#12.5. Сценарные испытания

Подготовить не менее нескольких воспроизводимых задач исследования, в которых точная формулировка нужного знания заранее не предоставляется агенту.

Примеры:

Оценивать не только наличие нужной записи в результатах, но и способность агента прийти к ней через исследование, корректно определить основания и не сделать необоснованный вывод.

#13. Критерии приёмки

Задача считается выполненной, когда соблюдены все следующие условия.

#Функциональность

#Корректность

#Интеграция

#Качество исследования

Численные целевые показатели полноты поиска, задержки и стоимости должны быть определены после аудита текущей реализации и получения исходных измерений. Нельзя принимать задачу только по факту успешного выполнения нескольких демонстрационных запросов.

#14. Этапы реализации

#Этап 1. Аудит и проектирование

Результат: короткий архитектурный план с привязкой к реальным модулям репозитория. Аудит текущей реализации выполнен (таблица §3); этап закрывается согласованием схем операций и тестовых сценариев.

#Этап 2. Базовый исследовательский API

Реализовать:

Использовать существующие механизмы поиска, временных ограничений, доступа и получения истории. Реализовать ограничение глубины, объёма и размера результата.

Результат: работающий инструмент, доступный агенту.

Статус реализации (Этапы 2–3, движок lexical-idf.v1):

#Этап 3. Проверка качества

Результат: подтверждённая работоспособность исследовательского цикла на воспроизводимых задачах.

#Этап 4. Пользовательский Explorer

На основе тех же операций реализовать интерфейс карты областей, локального графа связей и временного досье, если соответствующие изменения входят в согласованный объём работ.

Не дублировать в интерфейсе бизнес-логику исследовательского API.

#15. Что не входит в первую версию

Без отдельного обоснования не реализовывать:

#16. Итоговый результат разработки

В результате Temporality получает единый механизм исследования знаний, который позволяет агенту или человеку пройти путь:

приблизительный вопрос → ориентация в предметной области → поиск понятий и утверждений → исследование связей → проверка происхождения и противоречий → компактное досье с доказательствами и пробелами.

Главный критерий качества — не количество найденных записей, а способность системы помочь агенту обнаружить нужные знания, понять основания и ограничения выводов, определить следующий полезный шаг и передать результат в задачу без потери происхождения и временного контекста.

При реализации необходимо опираться на актуальный код Temporality, повторно использовать существующие механизмы и избегать архитектурных изменений, которые не требуются для достижения этой цели.