Skip to content

2. Источники и извлечение

Статус: реализовано в Workbench v0.6.0. Общая схема находится в разделе «AI Workbench: подготовка данных».

Цель этапа — для каждой задачи выбрать минимальный набор источников. Workbench не загружает домен и документацию «на всякий случай».

Маршрутизация

sourceMode принадлежит конкретной задаче, а не всему сообщению:

РежимИсточникиПример
documentationВерсионный bundle публичной документации.«Как работает Filter?»
domainДоверенный ExportLive.«Какие Filter есть в этом Workspace?»
mixedДокументация и ExportLive.«Правильно ли настроен этот Filter?»
conversationСохранённый Interaction и адресные сообщения.«А какой Store у неё?»
noneВнешние источники не нужны.Приветствие.

Один план может содержать задачи с разными режимами. Их результаты объединяются только на этапе сборки контекста.

Индекс Workspace

Backend передаёт полный актуальный ExportLive, а Workbench строит из него производный индекс. Ключ индекса:

text
workspace_id + generation + snapshot_sha256

Индекс содержит:

  • documentType;
  • identity;
  • displayName;
  • описание и нормализованные токены;
  • безопасный структурный snapshot документа, из которого folder scope и явные ссылки проверяются на этапе resolution.

Индекс не является вторым source of truth и полностью заменяется при изменении snapshot key.

Извлечение документации

Документация импортируется как версионный bundle. Каждый фрагмент имеет stable key, title, route, headings и текст.

Базовый retrieval:

  1. извлекает термины из задачи;
  2. добавляет канонические термины Endge и алиасы;
  3. выполняет lexical search;
  4. объединяет совпадения;
  5. удаляет точные дубли;
  6. сохраняет provenance каждого фрагмента.

Если запрос сложный, опциональный LLM Query Expander может предложить несколько поисковых фраз. Он не выбирает итоговые фрагменты и не может добавить источник вне bundle.

История диалога

История не загружается целиком. Workbench перед текущим сообщением получает ограниченное окно последних реплик. Состояние уже разрешённых задач и уточнений берётся из версионного плана Interaction, поэтому исходное сообщение не переписывается в синтетический «сводный вопрос».

Выход этапа

Каждый извлечённый блок получает:

json
{
  "sourceKind": "documentation",
  "sourceKey": "reference/filter#runtime",
  "taskIds": ["t3"],
  "score": 0.87,
  "mandatory": false,
  "content": "..."
}

Следующий этап: «Разрешение сущностей».