Генерация с дополнением из поиска (RAG)
Делегируй поиск
Просить модель прочитать весь репозиторий — всё равно что поручить ведущему архитектору ксерокопировать чертежи. Это работает, но расходует способность выносить суждения, ради которой ты его нанял.
Поэтому делегируй поиск. Ты уже встречал этот приём в делегировании субагентам: поиск происходит в другом окне, а назад возвращается только обобщённый результат. Поиск состоит из двух задач, и ни одной не нужна передовая модель:
- Агентный поиск — расширять поиск и идти по следу: искать в интернете, в репозитории или обходить связный граф, пока не будут получены подтверждающие данные.1
- Суммаризация — сжимать найденное до нескольких важных фактов, отбрасывая остальное.2
Код и базы знаний выглядят как обычные списки текстов, но на самом деле это графы, притворяющиеся плоскими структурами. Модули импортируют модули, функции вызывают функции, типы наследуют другие типы: репозиторий — это сеть, а поиск пути по нему — обход. С базой знаний обычно происходит то же самое: один факт связан со следующим. Бенчмарк GraphWalk исследует именно такой обход: может ли модель двигаться по графу шаг за шагом, следуя рёбрам туда, куда ведёт структура.3
Обе возможности стандартны для агентных моделей, поэтому небольшая модель может выполнять цикл и передавать передовой модели короткую, выверенную сводку.4 Дешёвой модели ты платишь за широту охвата, а передовой — за суждение. Выигрыш заключается не в самом поиске, а во всём, чего передовой модели делать уже не придётся: просматривать корпус, ранжировать кандидатов, удерживать шум. Она никогда не читает библиотеку целиком; она читает страницу, которую ты ей передал.
RAG: то же делегирование в большем масштабе
Делегирование — первый шаг. Генерация с дополнением из поиска (retrieval-augmented generation, RAG) — тот же приём, применённый в большем масштабе. Языковая модель уже содержит слои, которые превращают текст в числа; если убрать всё остальное, останется небольшой энкодер, который можно запускать отдельно. Соедини его с давним приёмом баз данных — предварительным индексированием, — и получишь систему, которая находит релевантные фрагменты в очень большой базе знаний, не читая её целиком. Делегирование масштабируется: менее способного исполнителя заменяет работа, выполненная заранее.
Эмбеддинги: смысл становится расстоянием
Чтобы искать по смыслу, смысл нужно превратить в числа. Модель эмбеддингов отображает текст в плотный вектор — координату, где расстояние выражает смысловую близость. Связанные тексты оказываются рядом: сходство кот с кошачий равно 0,91, а с ракета — 0,06. Смысл становится геометрией, а близость — арифметикой.
Теперь нахождение связанных объектов — задача поиска ближайших соседей. Её решили много лет назад с помощью тех же механизмов, что используются в «найти похожие изображения», в блоке «тебе также может понравиться» и в группировке фотографий по лицам. Поиск заимствует этот механизм: когда объекты стали координатами, близость определяется запросом.
Рычаги надёжности
Смысл становится расстоянием, а затем попадает в индекс
Модель, выполняющая эту работу, достаточно мала, чтобы не стать узким местом, и достаточно дешева, чтобы почти не влиять на счёт. Эмбеддинги стали массовой услугой: Google EmbeddingGemma помещает конкурентоспособную модель менее чем в 200 МБ RAM, Qwen Qwen3-Embedding-8B поставляется с открытыми весами и может запускаться бесплатно, а облачная voyage-4-lite от Voyage стоит $0,02 за миллион токенов. У генерации другая экономика: передовая модель вроде Claude Opus 5 берёт $5 за миллион токенов за чтение того же текста и $25 за его написание. Превратить весь корпус в эмбеддинги стоит почти ничего, и платишь ты за это один раз.5
Такая цена возможна потому, что вопросы и документы кодируются одной моделью независимо, а значит, векторы документов можно вычислить заранее.6 Остальная подготовка — индексирование: разделить корпус на отрывки, закодировать каждый и сохранить результаты в структуре для быстрого поиска — на практике в графе HNSW.7
Семантический поиск: найти несколько ближайших фрагментов
Теперь сторона чтения — результат делегирования в масштабе. Дорогая подготовка позади, поэтому задать вопрос почти ничего не стоит. Во время запроса ты превращаешь вопрос в эмбеддинг той же моделью, которая построила индекс: векторы разных моделей живут в разных пространствах, поэтому смешивать их бессмысленно. Вопрос — один контекст, значит, он становится одним вектором, и это единственный новый эмбеддинг, необходимый для всего запроса. Затем ты задаёшь индексу один вопрос: какие сохранённые векторы находятся ближе всего к этому? Это поиск по сходству, а геометрически — просто поиск ближайших соседей вектора запроса. Фрагменты за этими соседями и становятся кандидатами.
Вот что даёт «поиск по смыслу»: запрос doctor pay находит зарплата врача, хотя общих слов у них нет.
На игрушечном объёме индекс может сравнить запрос с каждым вектором и выбрать ближайшие. На масштабе корпуса линейный просмотр слишком медленный, поэтому индекс строится для приближённого поиска ближайших соседей (approximate nearest-neighbour, ANN): он возвращает несколько ближайших векторов, которые удалось быстро найти, а не гарантированно самые близкие. Именно такой компромисс здесь и принимается — полнота поиска в обмен на задержку, — и настройка соотношения полноты и задержки на практике составляет основную суть «приближённого top-k».
Рычаги надёжности
На входе один вопрос, на выходе несколько ближайших отрывков
Экономика здесь та же, которой давно научили базы данных: заранее построить организующую структуру, а затем каждое чтение становится коротким переходом вместо полного просмотра. Именно это оправдывает поиск: маленькая модель извлекает несколько отрывков,8 а читатель тратит внимание на них, а не на всю библиотеку. По сравнению с загрузкой всего в длинный контекст это более компактный и сфокусированный вариант; автоматически более истинным он от этого не становится.9
Глубокое исследование: то же делегирование, повторённое итеративно
Ответить на узкий вопрос по уже подготовленным материалам можно за один шаг. Глубокое исследование берётся за вопросы, чьи подсказки разбросаны по ещё не собранным источникам и чей путь решения заранее неизвестен. Если убрать маркетинговые названия, форма остаётся неизменной: исследовательский поиск собирает фрагменты реальности, а синтез превращает их в ответ.
Исследовательский поиск собирает потенциально значимые факты. У него два направления: семантический поиск по смыслу и обычный буквальный поиск — по ключевым словам и структуре — для точного идентификатора, редкого имени и того, чей смысл нельзя передать перефразированием. Эти методы пропускают разные вещи, поэтому реальные системы используют оба. Обычно циклом управляет LLM: читает найденное, рассуждает о том, что ещё осталось без ответа, и формирует следующий запрос. Поэтому исследовательский поиск редко ограничивается одной попыткой: каждый факт обнаруживает следующий вопрос, а поиск и рассуждение чередуются вместо одного фиксированного запроса. В многошаговых вопросах такое чередование превосходит любой одиночный запрос.10
Синтез решает, что заслуживает места в контексте. Его определяющее ограничение — внимание, а не размер окна: после некоторой точки дополнительные свидетельства снижают качество вместо того, чтобы повышать его (кривая внимания).1112 Работа состоит в отборе: повторно ранжировать, удалять дубликаты, упорядочивать и сжимать, чтобы самые сильные подтверждения оказались там, где модель действительно читает; если за один проход всё равно не помещается, параллельно составлять сводки и объединять их. Происхождение данных должно сохраниться на всём пути: каждое утверждение должно вести к подтверждающему его отрывку, потому что даже лучшие системы примерно в половине случаев не обеспечивают полного подтверждения своих цитат.13
Рычаги надёжности
Две фазы: исследовать, затем синтезировать
Большинство чат-интерфейсов уже предлагают эту возможность: включи глубокое исследование, задай широкий вопрос и подожди. Назад придёт готовый, компактный текст со ссылками. Под капотом это фаза сбора фактической основы, реализованная как агент рабочего процесса: код владеет циклом и условием остановки, а модель вызывается, чтобы оценить недостающие данные и написать текст. Оркестратор получает вывод; груда сырых материалов до него никогда не доходит.
Эти продукты направляют исследование на интернет, где инструменты поиска уже существуют. Переносима сама техника: тот же цикл работает с кодовой базой, архивом задач или набором документов, читая символы и диапазоны строк либо разделы и ссылки вместо поисковой выдачи. Чтение меняется; цикл — нет. Объём подчиняется тому же принципу: один и тот же процесс подбирает объём подтверждающих материалов под результат, поэтому может вернуть абзац или длинный отчёт. ChunkHound — родственный проект этой книги — выполняет тот же цикл по коду, истории git и интернету локально на ноутбуке разработчика, так что ничего не покидает машину.
Запуск стоит на порядок дороже: минуты вместо миллисекунд и сотни документов вместо нескольких.14 Если вопрос самодостаточен, обычный поиск решает его за один запрос с ответом; глубокое исследование нужно для ответа, к которому нельзя прийти за один шаг.
Выдели отдельного агента для поиска
Это не альтернативы, которые выбирают раз и навсегда: это ступени, по которым рабочий процесс поднимается по мере роста. Каждая ступень отвечает на ограничение предыдущей, а направление не меняется: всё большая доля поиска происходит до окна рассуждения, и всё меньше догадок попадает внутрь него.
Самая сильная форма объединяет все три подхода в одном агенте сбора фактической основы: то же делегирование, направленное на конкретную задачу вместо общей. Это агент рабочего процесса, чья единственная работа — поиск для данной задачи. Он знает, о чём спрашивают, запускает оба направления поиска и передаёт основному агенту компактную подборку со ссылками, так что поиск никогда не оплачивается ресурсом рассуждения. Универсальный поисковик угадывает релевантность; поисковик, ограниченный задачей, нацелен прямо на неё.
Текущая ступень определяется тем, насколько выросла работа. Агент, переросший одно окно, делегирует поиск: поиск уходит из окна, рассуждение остаётся. Когда материал перестаёт помещаться в один проход, следующая ступень предвычисляет поиск: векторы сохраняются один раз, а каждый вопрос решается через близость. Когда сам вопрос выходит за пределы подготовленного, всю конструкцию сменяет выделенный агент рабочего процесса глубокого исследования, единственная задача которого — обеспечить фактическую основу основному агенту, выполняющему настоящую задачу. Неизменная основа всего этого — привязка к фактам: каждое утверждение прослеживается до действительно полученного источника.