Agentic Coding · RUПеревод редакции 7 октября 2026

Генерация с дополнением из поиска (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 Если вопрос самодостаточен, обычный поиск решает его за один запрос с ответом; глубокое исследование нужно для ответа, к которому нельзя прийти за один шаг.

Выдели отдельного агента для поиска​

Это не альтернативы, которые выбирают раз и навсегда: это ступени, по которым рабочий процесс поднимается по мере роста. Каждая ступень отвечает на ограничение предыдущей, а направление не меняется: всё большая доля поиска происходит до окна рассуждения, и всё меньше догадок попадает внутрь него.

Самая сильная форма объединяет все три подхода в одном агенте сбора фактической основы: то же делегирование, направленное на конкретную задачу вместо общей. Это агент рабочего процесса, чья единственная работа — поиск для данной задачи. Он знает, о чём спрашивают, запускает оба направления поиска и передаёт основному агенту компактную подборку со ссылками, так что поиск никогда не оплачивается ресурсом рассуждения. Универсальный поисковик угадывает релевантность; поисковик, ограниченный задачей, нацелен прямо на неё.

Текущая ступень определяется тем, насколько выросла работа. Агент, переросший одно окно, делегирует поиск: поиск уходит из окна, рассуждение остаётся. Когда материал перестаёт помещаться в один проход, следующая ступень предвычисляет поиск: векторы сохраняются один раз, а каждый вопрос решается через близость. Когда сам вопрос выходит за пределы подготовленного, всю конструкцию сменяет выделенный агент рабочего процесса глубокого исследования, единственная задача которого — обеспечить фактическую основу основному агенту, выполняющему настоящую задачу. Неизменная основа всего этого — привязка к фактам: каждое утверждение прослеживается до действительно полученного источника.

Примечания​

  1. Xu et al. (2025), Evaluating Small Language Models for News Summarization — малые модели достигают качества суммаризации моделей на 70 млрд параметров по релевантности, связности и фактической согласованности. ↩

  2. Ghandi, Mahyar & Klaiman (2026), GraphWalk: Enabling Reasoning in Large Language Models through Tool-Based Graph Navigation — готовые модели пошагово обходят граф с минимальным набором инструментов навигации, сохраняя работоспособность, когда структура вырастает далеко за пределы контекста. ↩

  3. Chen, Zaharia & Zou (2023), FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance — снижение стоимости до 98% при качестве на уровне GPT-4; Ong et al. (2024), RouteLLM: Learning to Route LLMs with Preference Data — снижение стоимости более чем вдвое без потери качества. ↩

  4. Google, EmbeddingGemma — 308 млн параметров менее чем в 200 МБ RAM; Qwen, Qwen3-Embedding-8B — открытые веса; Voyage AI, Pricing — $0,02 за миллион токенов для voyage-4-lite; Anthropic, Pricing — Claude Opus 5 по $5 и $25 за миллион входных и выходных токенов. ↩

  5. Reimers & Gurevych (2019), Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks — биэнкодер независимо кодирует запросы и документы, благодаря чему векторы документов можно вычислить заранее. ↩

  6. Malkov & Yashunin (2018), Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs. ↩

  7. Karpukhin et al. (2020), Dense Passage Retrieval for Open-Domain Question Answering — поиск представлен как дешёвый механизм извлечения, питающий читающую LLM. ↩

  8. Li et al. (2024), Retrieval Augmented Generation or Long-Context LLMs? A Comprehensive Study and Hybrid Approach. ↩

  9. Trivedi et al. (2023), Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions. ↩

  10. Chroma Research (2025), Context Rot. ↩

  11. Anthropic (2025), Effective context engineering for AI agents — каждый токен расходует конечный бюджет внимания, поэтому цель — минимальный набор токенов с высокой информативностью. ↩

  12. Gao et al. (2023), Enabling Large Language Models to Generate Text with Citations. ↩

  13. OpenAI, Introducing deep research — многошаговое исследование сотен источников с заявленным временем 5–30 минут на задачу. ↩