3,583 papers
arXiv:2609.37226 77 29 сент. 2026 г. FREE

CorpusMap: карта документов вокруг сущностей для агентного поиска

КЛЮЧЕВАЯ СУТЬ
Агент отвечает «данных нет», хотя протокол лежит в папке. Просто там проект назван кодовым именем, а вы спросили по официальному. Метод CorpusMap позволяет находить документы, в которых нет ни одного слова из вопроса: они спрятаны под кодовыми именами, номерами задач и прозвищами. Заранее, один раз, на каждую повторяющуюся сущность (проект, человек, инцидент) создаётся страница-досье с алиасами, фактами и ссылками на все документы. Агент не гадает по словам, а идёт по готовым связям между документами. В кейсе из статьи агент с досье дошёл до обоих нужных документов, а агент с деревом кластеров не нашёл ни одного.
Адаптировать под запрос
⚡

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)

📋 Дайджест исследования

Ключевая суть

Агент отвечает «данных нет», хотя протокол лежит в папке. Просто там проект назван кодовым именем, а вы спросили по официальному. Метод CorpusMap позволяет находить документы, в которых нет ни одного слова из вопроса: они спрятаны под кодовыми именами, номерами задач и прозвищами. Заранее, один раз, на каждую повторяющуюся сущность (проект, человек, инцидент) создаётся страница-досье с алиасами, фактами и ссылками на все документы. Агент не гадает по словам, а идёт по готовым связям между документами. В кейсе из статьи агент с досье дошёл до обоих нужных документов, а агент с деревом кластеров не нашёл ни одного.

Принцип работы

Четыре стадии офлайн-подготовки. Оригиналы никто не трогает. Сначала составь каталог типов сущностей. У каждого типа есть название, определение и правило «когда два упоминания — одно и то же». Потом выпиши упоминания в каждом файле, с дословной цитатой. Затем склей упоминания между файлами: LINK (то же самое), ADD (новое) или UNRESOLVED (не уверен). В конце сделай досье только для тех, кто найден минимум в двух файлах. Склейка названий делается один раз заранее, а на вопросе агент просто идёт по ссылкам. Это как список действующих лиц в конце толстого романа. Видишь имя, открываешь строчку и сразу знаешь, кто это и на каких страницах он встречается. Досье лежат файлами рядом с документами, так что агент ходит по ним обычными find и grep.

Почему работает

Агент видит папку как плоскую кучу файлов. Он ищет документы, похожие на текст вопроса. Нужный файл может не содержать ни слова из вопроса. Каждый раз агент решает всё с нуля, жжёт токены и всё равно что-то пропускает. Модель при этом хорошо понимает, что «Берёза», SUB-214 и «подписка Плюс» — один проект. Ей нужен лишь контекст, и эту работу можно сделать один раз заранее, а не на каждый вопрос. К тому же к одному файлу ведёт несколько путей через разные досье. В дереве кластеров файл сидит в одной-двух ветках, и агент их легко не обходит. Есть и неприятная новость. Досье по каждому документу, страницы по папкам, вики «как модель напишет» и деревья кластеров стабильного выигрыша не дают. Местами они хуже сырой папки. Для одной модели досье по документам просели заметно ниже сырого корпуса. Работает именно связка «сущности + факты с источниками». Цена: для корпуса в ~2800 документов построение стоит от ~$75 на дешёвой модели. Дешёвая модель-строитель даёт почти тот же выигрыш, что и дорогая. Три рычага: - Порог «минимум два файла»: сущность из одного файла ничего не связывает. - UNRESOLVED: при сомнении не связывай. Лишняя связь вредит больше пропущенной. - Источник у каждого факта: без него досье превращается в пересказ без проверки.

Когда применять

Рабочие архивы и базы документов → вопросы, ответ на которые собирается из 3-5 файлов в разных папках, особенно когда один предмет называется по-разному (кодовое имя, номер задачи, официальное название). Пример: выгрузки задач, письма, протоколы и ТЗ по одному запуску продукта. НЕ подходит для папки в пару десятков файлов: там проще загрузить всё в контекст. Файлы без повторяющихся сущностей досье не получат, до них агент добирается обычным поиском. На тысячах документов нужен скрипт-конвейер, одним промптом в чате не обойтись. Карту придётся обновлять, когда папка растёт. Важно: в статье метод проверен на корпусах в тысячи документов. Вариант ниже для небольшой папки (до пары сотен файлов) — адаптация, самими авторами она не проверялась.

Мини-рецепт

1. Выбери папку и поставь запрет: исходные файлы не менять. Все досье пишутся в отдельную папку _entities/.
2. Составь каталог типов: дай агенту выборку из 15-30 файлов. Пусть предложит типы (Проект, Человек, Команда, Инцидент, Релиз). У каждого типа должны быть определение и правило «когда два упоминания — одно и то же».
3. Выпиши упоминания: по каждому файлу, с дословной цитатой. Цитата нужна, чтобы потом проверить, не выдумал ли агент.
4. Склей между файлами: LINK, ADD или UNRESOLVED. Подскажи известные пары: <алиасы>Берёза / SUB-214 / подписка Плюс. Скажи прямо: сомневаешься — не связывай.
5. Отрисуй досье: только для сущностей из двух и более файлов. В каждом досье обзор на 2-3 предложения, факты с путём к файлу, список названий и список всех файлов.
6. Разбери UNRESOLVED руками: это те места, где решение за тобой. Заодно увидишь, где папка путается сама.
7. Задавай вопросы через досье: пусть агент сначала открывает досье, потом документы, потом переходит по упомянутым сущностям к другим досье. Ответ только по файлам, у каждого утверждения ссылка. Если данных нет, пусть назовёт, какого документа не хватает.

Лень писать всё самому? Вставь агенту шаблон из статьи и добавь: Адаптируй под мою папку, задавай вопросы, чтобы заполнить поля. Он сам спросит про типы сущностей и кодовые имена.

Примеры

[ПЛОХО]: `Найди всё про запуск подписки Плюс и скажи, готова ли она` Агент ищет по словам, находит письмо и ТЗ. Протокол с решением про «Берёзу» мимо, и ответ звучит уверенно, но неполно. [ХОРОШО] (этап 1, один раз): `Построй карту сущностей для папки /launch. Исходные файлы не меняй. Результат — /launch/_entities/, один .md-файл на сущность. Прочитай выборку из 20 файлов, предложи каталог типов с правилом «когда два упоминания — одно и то же». Выпиши упоминания с дословной цитатой. Склей между файлами: LINK, ADD или UNRESOLVED (не уверен — ничего не связывай). Один проект может называться кодовым именем, номером задачи и обычным названием. Досье делай только для сущностей из двух и более файлов: обзор, факты с путём к источнику, все названия, все файлы. В конце покажи список UNRESOLVED.` [ХОРОШО] (этап 2, на каждый вопрос): `Вопрос: готова ли подписка Плюс к запуску? Сначала найди досье в /launch/_entities/, потом открой связанные документы. Из каждого документа переходи по упомянутым сущностям к другим досье. Ответ только по файлам, у каждого утверждения ссылка. Если данных не хватает, назови, какого документа нет.` Результат: в досье «Подписка Плюс» записаны алиасы «Берёза» и `SUB-214`. В нём же ссылки на письмо, протокол и ТЗ. Протокол под кодовым именем находится без единого совпадения слов с вопросом.
Источник: Follow the Entities: A Corpus Map for Agentic Search
ArXiv ID: 2609.37226 | Сгенерировано: 2026-10-06 09:20

Проблемы LLM

ПроблемаСутьКак обойти
Агент не находит документ, если в нём нет слов из вопросаАгент ищет документы, похожие на текст вопроса. Один предмет часто носит несколько имён: кодовое, номер задачи, официальное название. Спросил по одному имени, а нужный файл использует другое. Агент не находит его и уверенно отвечает «данных нет». Каждый вопрос он решает с нуля и зря тратит токены на одно и то жеЗаранее собери для каждого повторяющегося предмета страницу-досье. Впиши туда все его имена и ссылки на все файлы. Агент сначала открывает досье, потом идёт по ссылкам. Подробности в методе ниже

Методы

МетодСуть
Досье на повторяющиеся сущности — связь документов под разными именамиОдин раз заранее построй слой навигации рядом с файлами. Оригиналы не трогай. Пример: папка/_entities/, один .md на сущность (проект, человек, продукт, инцидент). Четыре шага. 1) Выбери 15–30 файлов и составь каталог типов. У каждого типа есть название, определение и правило: «когда два упоминания — одно и то же». 2) По каждому файлу выпиши упоминания с дословной цитатой. 3) Склей упоминания между файлами. Для каждого выбери LINK (уже известная), ADD (новая) или UNRESOLVED (не уверен, не связывай). Решай по контексту, не по совпадению слов. 4) Досье делай только для сущностей, найденных минимум в двух файлах. В досье: обзор в 2–3 предложениях, факты с путём к файлу-источнику, все имена, список всех файлов. Запрос к агенту: «Сначала найди релевантные досье, потом открой связанные документы. Переходи по упомянутым сущностям к другим досье. Каждое утверждение — со ссылкой на файл. Если данных не хватает, назови, какого документа нет». Почему работает: модель хорошо понимает по контексту, что «Берёза», SUB-214 и «подписка Плюс» — одно и то же. Эту работу делают один раз, а не на каждый вопрос. Одна сущность связывает файлы из разных папок, и к файлу ведёт несколько путей. Когда да: много файлов, разные системы (трекер, почта, протоколы), у предметов много имён. Когда нет: мало файлов с общими предметами, документы изолированы. Тысячи файлов требуют скрипта, одним запросом в чате их не обработать. Карта стареет, её надо обновлять при росте базы

Тезисы

ТезисКомментарий
Навигационная структура без сущностей и источников не гарантирует выигрышаСводки по каждому документу, страницы по папкам, вики «как модель напишет» и деревья тематических кластеров не дают стабильного улучшения. Иногда они хуже сырой папки. Документ лежит в одной-двух ветках, и агент может их не обойти. Сущность же связывает файлы из разных мест. Факты с пометкой источника позволяют проверить текст, иначе досье становится пересказом без проверки. Применяй: не проси «сделай сводку каждого файла». Проси связи вокруг предметов, и чтобы каждый факт имел путь к файлу
При склейке по смыслу сомнение лучше оставить несвязаннымЛожная связь тянет в ответ чужие документы и портит вывод. Пропущенную связь агент всё равно может добрать обычным поиском. Применяй: в любой задаче «объедини одинаковое» давай модели третий вариант: «не уверен — не связывай». Проси вывести список сомнительных случаев, чтобы решить самому

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с