TL;DR
CorpusMap — это слой навигации поверх папки с документами. Заранее, один раз, для каждой повторяющейся сущности (проект, человек, продукт, инцидент) создаётся страница-досье. На ней три блока: краткое описание, ключевые факты с пометкой, из какого документа каждый, и список ссылок на все документы, где сущность упоминается. Агент ищет не только по тексту вопроса. Он открывает досье и по ссылкам идёт к документам из разных папок и систем.
Главная боль агентного поиска такая. Папка для агента — плоская куча файлов, и найденный документ ничего не говорит о соседях. Решение о запуске записано в протоколе под внутренним кодовым именем проекта, а вы спросили про него по официальному названию. Агент не находит протокол и уверенно отвечает «данных нет». Связи между документами при этом стабильны, но агент заново выясняет их на каждый вопрос, жжёт токены и всё равно пропускает документы.
Суть метода — четыре стадии офлайн-подготовки: составить каталог типов сущностей → найти упоминания в каждом документе → склеить упоминания одной сущности между документами → отрисовать досье только для сущностей, найденных минимум в двух документах. Оригиналы остаются на месте. Досье лежат рядом файлами, и агент ходит по ним теми же find и grep.
Схема метода
ОФЛАЙН (один раз, потом достраивается):
ШАГ 1: Каталог типов сущностей (название, определение, критерии "это то же самое") → из выборок документов
ШАГ 2: Извлечение упоминаний в каждом документе → локальные сущности
ШАГ 3: Склейка между документами → LINK (то же) / ADD (новая) / UNRESOLVED (не ясно)
ШАГ 4: Досье только для сущностей из ≥2 документов → обзор + факты с источниками + алиасы + ссылки
НА КАЖДЫЙ ВОПРОС:
Агент получает вопрос + пути документов из релевантных досье
→ читает документ → по упомянутым сущностям идёт в досье → открывает связанные документы
→ при необходимости ищет по всему корпусу как обычно
Шаги 1–4 в оригинале — отдельные программные стадии. Запрос-ответ идёт в одном агентном сеансе.
Пример применения
Это адаптация для небольшой базы (до нескольких сотен файлов). Оригинал рассчитан на тысячи документов и скрипт-конвейер.
Задача: Вы руководите продуктом в крупном маркетплейсе. В папке /launch лежат выгрузки задач, письма, протоколы встреч и ТЗ. Запуск подписки внутри называется «Берёза». В трекере она — SUB-214, в письмах — «подписка Плюс», в протоколах — «Берёза». Вопрос: «Готова ли подписка к запуску?» Ответ собирается из пяти файлов в разных подпапках. Без карты агент найдёт два из пяти.
Промпт (этап 1, один раз, в Claude Code или Cursor):
Построй карту сущностей для папки /launch. Не меняй исходные файлы.
Результат — папка /launch/_entities/, один .md-файл на сущность.
1. Прочитай выборку из 20 файлов и предложи каталог типов сущностей
(например: Проект, Человек, Команда, Инцидент, Релиз). Для каждого типа
запиши название, определение и критерий "когда два упоминания — одна сущность".
2. По каждому файлу выпиши упоминания сущностей. Для каждого упоминания
сохрани дословную цитату из файла.
3. Склей упоминания между файлами. Для каждого: LINK (та же сущность, что
уже в реестре), ADD (новая) или UNRESOLVED (не уверен — ничего не связывай).
Решай по контексту, не только по совпадению названий. Один проект может
называться кодовым именем, номером задачи и "человеческим" названием.
4. Создай файл только для сущностей, найденных минимум в двух файлах:
- Обзор (2–3 предложения)
- Ключевые факты, у каждого — путь к файлу-источнику
- Под какими именами встречается
- Список путей ко всем файлам, где она упоминается
В конце покажи список UNRESOLVED.
Промпт (этап 2, на каждый вопрос):
Вопрос: готова ли подписка Плюс к запуску?
Сначала найди релевантные досье в /launch/_entities/, потом открой
связанные документы. Из каждого найденного документа переходи по
упомянутым сущностям к другим досье. Ответ давай только по документам,
каждое утверждение — со ссылкой на файл. Если данных не хватает, назови,
какого документа нет.
Результат: На первом этапе агент создаст папку с досье. Досье «Подписка Плюс» будет включать алиасы «Берёза» и SUB-214 и ссылки на письмо, протокол и ТЗ. Список UNRESOLVED покажет, где решение за вами. На втором этапе агент пойдёт по досье и найдёт протокол под кодовым именем. Ответ придёт со ссылками на файлы и с указанием, чего не хватает.
Почему это работает
Слабость. Агент видит корпус как плоский список файлов. Он находит документы, похожие на текст вопроса. Но нужный документ может не содержать ни одного слова из вопроса: кодовое имя, номер задачи, прозвище. Каждый вопрос агент решает с нуля и перечитывает одно и то же.
Сила. Модель хорошо понимает, что «Берёза», SUB-214 и «подписка Плюс» — одно и то же, если видит контекст. Это работа с сущностями, а не с поиском по словам. Её можно сделать один раз заранее, а не на каждый вопрос.
Как метод использует это. Склейка алиасов уходит в офлайн-фазу, а при вопросе агент просто идёт по готовым ссылкам. Важно, что одна сущность связывает документы из разных папок, и к нужному файлу ведёт несколько путей. В деревьях тематических кластеров документ лежит в одной-двух ветках, и агент мог их не обойти. В кейсе из статьи агент с деревом так и не нашёл два нужных документа. Агент с сущностями дошёл до обоих через два разных досье.
Рычаги управления: - Порог «минимум два документа» → сущности из одного файла ничего не связывают, досье для них не нужны. Это экономит место и шум. - Роль UNRESOLVED → при сомнении не связывай. Лишняя связь вредит больше, чем пропущенная. - Факты с источником → оставь пометку у каждого факта, иначе досье превратится в пересказ без проверки. - Модель-строитель → карта, построенная дешёвой моделью, работает почти так же для других моделей.
Шаблон промпта
Это моя реконструкция процедуры по алгоритму статьи. Готовых промптов авторы не приводят.
Построй карту сущностей для папки {папка}. Исходные файлы не меняй.
Результат — папка {папка}/_entities/, один .md-файл на сущность.
Прочитай выборку из {число_файлов_выборки} файлов и предложи каталог типов сущностей.
Для каждого типа: название, определение, критерий тождества
("когда два упоминания — одна сущность"), 2–3 примера из файлов.
Проверь каталог на другой выборке и поправь.
По каждому файлу выпиши упоминания сущностей по каталогу.
Упоминания одного предмета внутри файла объедини в одну локальную сущность.
Для каждого упоминания сохрани дословную цитату.
Веди реестр сущностей. Для каждой локальной сущности реши:
- LINK(id) — это уже известная сущность;
- ADD — новая сущность;
- UNRESOLVED — не уверен, не связывай.
Решай по контексту документа и по критерию тождества из каталога,
не только по совпадению названий. Учитывай алиасы:
{примеры_алиасов}.
Создай досье только для сущностей, найденных минимум в 2 файлах:
- Обзор: 2–3 предложения
- Ключевые факты: каждый с путём к файлу-источнику
- Названия, под которыми встречается
- Список путей ко всем файлам, где упоминается
В конце выведи список UNRESOLVED с причинами.
Что подставлять: {папка} — путь к документам. {число_файлов_выборки} — 15–30. {примеры_алиасов} — пары вроде «кодовое имя / номер задачи / официальное название», если вы их знаете.
🚀 Быстрый старт — вставь в чат с агентом (Claude Code, Cursor):
Вот шаблон построения карты сущностей. Адаптируй под мою папку: {опиши, что за документы}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
Агент спросит, какие типы сущностей важны, есть ли внутренние кодовые имена и алиасы. Это нужно для шага склейки: именно алиасы дают главный выигрыш. Он возьмёт структуру из шаблона и подстроит под вашу папку.
Ограничения
⚠️ Масштаб: Метод проверен на корпусах в несколько тысяч документов и требует конвейера для массовой обработки. Промптом в чате его не воспроизвести на большой базе. Для малой папки он применим в урезанном виде.
⚠️ Стоимость построения: Один раз, но не бесплатно. Для корпуса в ~2800 документов оценка колеблется от ~$75 (дешёвая модель) до тысяч долларов (самая дорогая). Дешёвая модель-строитель даёт почти тот же выигрыш.
⚠️ Не любая структура помогает: Постраничные досье по каждому документу, страницы по папкам, «вики», которую модель пишет как хочет, и дерево кластеров не дают стабильного выигрыша, местами проигрывают сырой папке. Для одной модели досье по документам просело заметно ниже сырого корпуса. Без сущностей и привязки к источникам слой навигации не гарантирует улучшения.
⚠️ Изолированные документы: Файлы без повторяющихся сущностей остаются в папке как есть, и до них агент добирается обычным поиском.
⚠️ Устаревание: Карту нужно обновлять при росте корпуса. Статья показывает инкрементальное обновление, но это опять код.
⚠️ Достроенное мной: Адаптация на малые папки с помощью промпта в статье не проверялась. Это экстраполяция.
Использованный мной текст статьи обрывается на разделе про практические аспекты (повторное использование, обновление), поэтому о деталях этих разделов я не сужу.
Как исследовали
Исследователи взяли три корпоративных бенчмарка, где ответ собирается из нескольких документов: EnterpriseRAG-Bench (80 вопросов), WixQA (79) и HERB (238). Корпуса — от 2,8 до 6,4 тысяч документов. Агент работал в терминале и искал через find и grep. Это близко к тому, как работают Claude Code и подобные инструменты. Метод сравнивали с сырой папкой и четырьмя другими слоями навигации: досье по документам, страницы по папкам, LLM-вики Карпатого и дерево кластеров Corpus2Skill. Отдельно сравнили с обычным поиском (BM25, плотные эмбеддинги) и графовыми методами (HippoRAG, GraphRAG).
Проверили 7 моделей, включая GPT-5.5, три GPT-5.6, DeepSeek-V4-Pro, MAI-Thinking-1 и открытую Qwen. Каждый результат усреднили по трём прогонам. Итог: +6,4…11,7 пункта качества и на 34–57% меньше входных токенов против сырой папки. Метод стал лучшим по всем бенчмаркам и моделям, а другие слои часто не улучшали результат вообще. Самое показательное: карта, построенная одной моделью, помогала другим. Например, дешёвая GPT-5.6 Luna с картой от самой себя дала почти тот же результат, что от дорогой.
Кейс-стади объясняет механику. В вопросе про подпись манифеста ответ лежал в двух документах: черновике и спецификации v1. Дерево положило оба в один кластер, и агент не дошёл до них. Карта сущностей дала несколько путей к одному и тому же, и агент прошёл через страницу рабочего элемента к черновику, потом к странице рантайма и к спецификации. Практический вывод: ценна не «любая структура», а сквозные связи, которые пересекают границы папок.
Адаптации и экстраполяции
🔧 Техника: правило в CLAUDE.md → агент сам идёт через досье
Если досье уже есть, добавьте в инструкцию агента:
Перед поиском по {папка}/ открой {папка}/_entities/ и найди досье по ключевым
сущностям вопроса. Из каждого найденного документа переходи к досье
упомянутых сущностей. Утверждения подкрепляй путём к файлу. Если досье
противоречит документу — верь документу и сообщи о расхождении.
Это закрепляет порядок «сначала досье, потом документы» и добавляет правило приоритета оригинала.
🔧 Техника: реестр алиасов вручную → точнее склейка
Если вы знаете внутренние кодовые имена, положите в папку aliases.md и укажите в шаге 3 шаблона: «Используй aliases.md как стартовый реестр». Модель не будет угадывать самые коварные связи и сосредоточится на остальных.
Ресурсы
- Follow the Entities: A Corpus Map for Agentic Search — Soyeong Jeong, Sujay Kumar Jauhar, Sung Ju Hwang, Andrew Joohun Nam (KAIST, Microsoft), препринт
- Бенчмарки: EnterpriseRAG-Bench (Sun et al., 2026b), WixQA (Cohen et al., 2025), HERB (Choubey et al., 2025)
- Сравниваемые подходы: LLM Wiki (Karpathy, 2026), Corpus2Skill (Sun et al., 2026a), GraphRAG (Edge et al., 2024), HippoRAG (Gutierrez et al., 2024; 2025)
