Тема
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:
- извлекает термины из задачи;
- добавляет канонические термины Endge и алиасы;
- выполняет lexical search;
- объединяет совпадения;
- удаляет точные дубли;
- сохраняет provenance каждого фрагмента.
Если запрос сложный, опциональный LLM Query Expander может предложить несколько поисковых фраз. Он не выбирает итоговые фрагменты и не может добавить источник вне bundle.
История диалога
История не загружается целиком. Workbench перед текущим сообщением получает ограниченное окно последних реплик. Состояние уже разрешённых задач и уточнений берётся из версионного плана Interaction, поэтому исходное сообщение не переписывается в синтетический «сводный вопрос».
Выход этапа
Каждый извлечённый блок получает:
json
{
"sourceKind": "documentation",
"sourceKey": "reference/filter#runtime",
"taskIds": ["t3"],
"score": 0.87,
"mandatory": false,
"content": "..."
}Следующий этап: «Разрешение сущностей».