Naive, Graph и Agentic RAG: три уровня картотеки
🤔 Зачем это читать
Вы запустили FAQ-бота (помощника, который отвечает на частые вопросы) по своей базе знаний. Клиент спрашивает: «Действует ли гарантия, если я вскрыл упаковку?» Бот уверенно отвечает: «Да, конечно, 24 месяца». А правильный ответ — «нет, гарантия аннулируется». Бот нашёл соседнюю карточку про гарантийный срок, она была похожа по словам — и он бодро выдал её как ответ. Не соврал нарочно. Просто что нашлось, тем и ответил.
Знакомо? Или другой вариант: вендор показывает слайд — «у нас не простой RAG (поиск нужных фактов в базе перед ответом), а agentic RAG с графом знаний, самопроверкой и разрешением конфликтов». Звучит дорого и солидно. Все кивают. А под капотом, может, задача-то была — отвечать на десять однотипных вопросов про режим работы и доставку. Под такую задачу весь этот «граф знаний» — как промышленная пароконвектомат, чтобы пожарить одно яйцо.
Оба раза дело в одном: «умная картотека» бывает разной степени умности, и эти степени стоят очень по-разному. Самая простая — быстрая и дешёвая, но тупая: чем нашлось, тем и отвечает. Самая навороченная — умеет проверять и переспрашивать, но дорого строить и легко переплатить за неё там, где хватило бы простой. Не различаешь уровни — либо ставишь дешёвый бот туда, где цена ошибки высокая, либо платишь за сложность, которая на твоей задаче не нужна.
После этой темы ты сможешь посмотреть на задачу и прикинуть, какой уровень картотеки ей нужен — простой конвейер, картотека со связями или су-шеф, который проверяет сам себя. И поймать момент, когда тебе продают верхний уровень туда, где с лихвой хватило бы нижнего.
Задержись на 10 секунд. Вспомни AI-помощника, который «отвечает по вашим документам», — своего или из чужой презентации. Он когда-нибудь выдавал уверенный, но не тот ответ? Или, наоборот, был подозрительно сложным под простую задачу? Держи эту картинку в голове: к концу страницы станет видно, какого уровня картотека там стояла и какой стоило бы.
🗄 Возвращаемся к умной картотеке
В теме про память (6.2 — Короткая и длинная память) мы завели умную картотеку по смыслу (vector DB — хранилище, которое ищет не по точному слову, а по смыслу). Спросил «прозрачный навар из птицы» — а она находит карточку «куриный бульон», хотя ни одно слово не совпало.
Так вот, сам по себе механизм «спросил — нашли похожее — приложили к ответу» называется RAG (поиск нужных фактов в базе перед ответом). Повар-модель не выдумывает факт из головы, а сначала идёт в картотеку, достаёт нужную карточку и готовит ответ уже по ней. Это и есть заземление (grounding) — ответ привязан к реальному документу, а не к фантазии (про то, почему модель вообще фантазирует, — 2.5 — Галлюцинации). И сразу важное: RAG — это не «дообучить модель на наших документах». Сама модель-повар не меняется, мы её ничему не учим — меняется только то, что ей подкладывают в картотеку под рукой. Поэтому «бот отвечает по нашим файлам» не значит «бот выучил наши файлы»: он каждый раз сходил и достал.
Но «сходить в картотеку» можно по-разному. И вот тут вся соль этой темы: есть три уровня, насколько умно агент с этой картотекой обращается. От самого простого и дешёвого — до самого хитрого и дорогого. Разберём по очереди, на одной и той же кухне.
📥 Naive RAG — достал первую попавшуюся карточку
Самый простой уровень. Naive RAG (наивный, простой RAG) — это пассивный конвейер из трёх шагов, без единой остановки на подумать: спросил → достал похожее → ответил. Пришёл вопрос, картотека выдала самые похожие по смыслу карточки, повар приготовил ответ ровно по ним. Точка. Никто по дороге не спросил себя «а то ли я вообще достал?».
Это как поварёнок, которому сказали: «нужен бульон» — он подбежал к картотеке, схватил первую попавшуюся похожую карточку и понёс готовить, не глядя. Чаще всего схватит правильную — на то она и умная картотека. Но если рядом лежит похожая, но не та (карточка про другой бульон, устаревшая версия, соседний пункт регламента) — он и её принесёт с тем же уверенным лицом. Именно так FAQ-бот из начала страницы «нашёл не то и уверенно ответил».
Плюсы честные и весомые: быстро, дёшево, просто построить. Минус один, но важный: картотека тупая по своей природе — чем нашлось, тем и отвечает, без всякой самопроверки. Для огромного числа задач этого за глаза хватает. Вопрос «во сколько работает магазин» простой, карточка одна и однозначная, ошибиться почти негде. Бить из пушки тут не надо.
🕸 Graph RAG — картотека со связями между карточками
Следующий уровень. Представь, что карточки в картотеке не лежат вразнобой, а связаны между собой ниточками: кто кому поставщик, какое блюдо из какого полуфабриката, что от чего зависит. Это Graph RAG (RAG по графу связей) — картотека, в которой, кроме самих карточек, хранятся ещё и связи между ними.
Зачем это нужно? Затем, что появляются вопросы, на которые одной карточкой не ответишь — надо пройти по связям. «Если поставщик А сорвёт поставку — какие наши блюда из меню встанут?» Простая картотека найдёт карточку про поставщика А и карточку про меню — но не свяжет одно с другим. А картотека со связями пройдёт по ниточкам: поставщик А → эти три полуфабриката → вот эти семь позиций в меню. Ответ собран не из одной карточки, а из цепочки связей.
Звучит здорово — но есть цена. Эти связи кто-то должен сначала проложить, а потом поддерживать. Сменился поставщик, обновилось меню — все ниточки надо перепривязать, иначе граф врёт ещё увереннее простой картотеки. Поэтому Graph RAG — это дорого строить и дорого держать в актуальном состоянии. Он окупается там, где вопросы и правда «через связи»: зависимости, цепочки поставок, кто на кого влияет. Где таких вопросов нет — это просто дорогая картотека, которая делает работу простой.
🧑🍳 Agentic RAG — су-шеф у картотеки
Верхний уровень. Тут к картотеке приставлен су-шеф-привратник, который не просто хватает карточку, а работает с ней головой. Это agentic RAG (RAG с агентом-привратником): вместо пассивного конвейера — цикл «поиск → оценка → переспрос».
Смотри, что делает су-шеф, в отличие от поварёнка. Он сходил в картотеку, достал карточку — и первым делом оценивает найденное: то ли это вообще, хватает ли? Нюхает, проверяет. Чего-то не хватает — идёт за добавкой: переформулирует запрос, лезет в другой ящик, может и за пределы картотеки сходить — взять свежий факт инструментом (про инструменты агента — 4.1 — Инструменты агента). Видит на карточке дату — проверяет срок годности: не протух ли факт. Нашёл две карточки, которые спорят друг с другом, — не вываливает обе, а берёт надёжную по заранее заданному правилу (например, более свежий документ или официальный приказ — а не «на свой вкус»). И так по кругу, пока не соберёт нормальный ответ или честно не скажет «такого у меня нет».
То есть су-шеф закрывает ровно ту дыру, из-за которой простой бот «уверенно отвечает не тем»: между «достал» и «ответил» он вставляет «а проверил ли я, что достал то, что надо». За это и платят — на сложных и важных вопросах.
🔍 Что именно делает су-шеф (по шагам)
Чтобы «agentic RAG» не звучало как магия, разложим цикл су-шефа на человеческом языке. Это всё ещё не настоящий код — просто логика того, что происходит между вопросом и ответом.
вопрос = "вскрыл упаковку — гарантия ещё действует?"
повторять (но не больше 3 кругов, чтобы блюдо не стыло):
карточки = картотека.найти_по_смыслу(вопрос)
# ОЦЕНКА: то ли я достал и хватает ли?
если карточек_не_хватает:
вопрос = переформулировать(вопрос) # идём за добавкой
продолжить
# СРОК ГОДНОСТИ: не протух ли факт
карточки = выкинуть_устаревшие(карточки)
# КОНФЛИКТ: две карточки спорят — берём надёжную
если карточки_противоречат:
карточки = выбрать_проверенный_источник(карточки)
остановиться # собрали что нужно — выходим из цикла
ответ = повар.приготовить(карточки + вопрос)
# → если так и не нашлось — честно «такого у меня нет», а не выдумка
Видишь разницу с naive RAG? Там было три шага по прямой. Тут — петля с проверками: оценил, при нехватке переспросил, выкинул протухшее, разрулил конфликт. Именно эти проверки и стоят денег (каждый круг — это лишний прогон модели, дольше и дороже), и именно они спасают на вопросах, где ошибиться нельзя.
🎚 Правило выбора уровня
Не «бери что поумнее». Уровень подбирают под задачу, и логика простая:
- Простой вопрос, одна однозначная карточка, низкая цена ошибки (режим работы, доставка, типовой FAQ) — хватает naive RAG. Дёшево, быстро, надёжно. Ставить сюда что-то сложнее — выкинуть деньги.
- Вопрос «через связи» — как изменение у поставщика А ударит по заказу Б, что от чего зависит — нужен Graph RAG. Но только если таких вопросов реально много: связи дорого строить и поддерживать.
- Сложный, многошаговый, высокоставочный вопрос, где карточки могут спорить или устаревать (юридический, медицинский, дорогой контракт) — тут оправдан agentic RAG с его проверками. Цена ошибки выше, чем цена су-шефа.
Главная мысль: чем выше уровень, тем больше он умеет — но и тем дороже обходится и тем больше в нём того, что может само сломаться. На этом и построен тренажёр ниже.
Прежде чем трогать тренажёр — прикинь сам. Возьми того AI-помощника, которого ты вспомнил в начале страницы. Задай ему два вопроса: насколько у него вопросы простые и однозначные — или там надо ходить по связям и проверять спорные факты? И во сколько обойдётся ошибка? Подержи догадку в голове: какой уровень картотеки ему по-хорошему нужен. Сейчас прогоним четыре ситуации и проверим чутьё.
🎮 Какой уровень картотеки нужен этой задаче
Четыре рабочие ситуации. По каждой выбери уровень: Naive (простой конвейер), Graph (картотека со связями) или Agentic (су-шеф с проверками). Жми кнопку — сразу увидишь разбор. Главные вопросы-подсказки: вопрос простой и однозначный — или через связи / спорный? и какова цена ошибки?
📖 Ключевые понятия
- RAG (поиск нужных фактов в базе перед ответом)
- Механизм, при котором повар-модель перед ответом идёт в картотеку, достаёт релевантные карточки и готовит ответ по ним, а не из головы. Даёт заземление/grounding (привязку ответа к источнику) и ссылки на источники/citations. Расшифровывается как retrieval-augmented generation.
- Naive RAG (наивный, простой RAG)
- Самый простой уровень: пассивный конвейер «спросил → достал похожее → ответил», без самопроверки. Быстро, дёшево, просто построить. Минус — что нашлось по смыслу, тем и отвечает, даже если достал не то. Подходит для простых однозначных вопросов с низкой ценой ошибки.
- Graph RAG (RAG по графу связей)
- Картотека, где, кроме карточек, хранятся связи между ними (кто кому поставщик, что от чего зависит). Умеет отвечать на вопросы «через связи», проходя по цепочке. Дорого строить и поддерживать: связи надо прокладывать и обновлять, иначе граф врёт.
- Agentic RAG (RAG с агентом-привратником)
- Верхний уровень: к картотеке приставлен су-шеф, и вместо конвейера работает цикл «поиск → оценка → переспрос». Агент оценивает найденное, при нехватке переспрашивает или идёт за фактом другим инструментом, проверяет дату карточки, при конфликте выбирает проверенный источник. Дороже и сложнее; оправдан на сложных и высокоставочных вопросах.
- Откуда берутся карточки (термины из прошлых тем)
- Эти слова уже встречались в 6.2 и 7.2 — собираем в одном месте, чтобы держались вместе. Чтобы картотека работала, документы заранее режут на куски-карточки (нарезка/chunking) и кладут в умную картотеку по смыслу (vector DB). Смысл каждой карточки хранится как набор чисел (эмбеддинг/embedding — представление смысла числами), и поиск идёт по этим числам. Сам момент «достать нужные карточки по запросу» — это поиск/retrieval, а поиск не по слову, а по смыслу — поиск по смыслу/semantic search.
🛡️ Частые заблуждения
«Agentic RAG умнее — значит, всегда лучше, надо брать его»
Нет. «Умнее» здесь значит «дороже, медленнее и сложнее». На простом однозначном вопросе су-шеф с проверками — пустая трата: лишние круги, лишний счёт, и он сам становится новым местом, где что-то может сломаться. На FAQ про режим работы naive RAG обыграет agentic по всем статьям, кроме слайда вендора.
«Если бот ответил уверенно — значит, он нашёл правильную карточку»
Уверенность к правоте отношения не имеет. Naive RAG отвечает с одинаково бодрым лицом и когда достал нужную карточку, и когда схватил похожую, но не ту. Самопроверки на этом уровне нет в принципе — её добавляет только су-шеф (agentic RAG). Уверенный тон — не доказательство, что факт верный.
«Граф знаний — это просто картотека побольше и поновее, разница в объёме»
Разница не в объёме, а в связях. Простая картотека хранит отдельные карточки, граф — ещё и ниточки между ними: кто на что влияет. Это другая работа и другие деньги: связи кто-то прокладывает руками и обновляет при каждом изменении. Граф нужен под вопросы о зависимостях, а не «чтобы помещалось больше».
🧠 AI-чутьё (AI Judgment)
Agentic RAG — для сложного и высокоставочного; иначе это overkill
Главная мысль, которую стоит унести: не каждому вопросу — agentic RAG. Су-шеф с проверками оправдан там, где вопрос сложный или многошаговый, документы спорят и устаревают, а ошибка дорого стоит — иск, штраф, потерянный контракт. Там его круги «оцени, переспроси, разреши конфликт» окупаются с лихвой. Но на простом FAQ это overkill (стрельба из пушки по воробьям): ты платишь за сложность, которая задаче не нужна.
И вот про что забывают чаще всего: сам су-шеф — это новый источник ошибок и расходов. Каждый его круг — лишний прогон модели (дольше, дороже), а лишняя логика «оценить и переспросить» — это лишние места, где что-то может пойти не так, зациклиться, выбрать не тот источник. Чем больше движущихся частей, тем больше ломается. На простой задаче ты не «делаешь надёжнее» — ты добавляешь хрупкости и счёт за неё.
Отсюда рабочее правило владельца. Услышал «agentic RAG», «граф знаний», «самопроверка и разрешение конфликтов» — мысленно приложи два вопроса: «Мои вопросы правда сложные / через связи / спорные — или это десять однотипных FAQ?» и «Во сколько обойдётся ошибка — и не дороже ли су-шеф, которого мне продают?». Если задача простая, а тебе продают верхний уровень «чтобы по-серьёзному» — это красный флаг: уточни, зачем тут сложность, или возьми naive RAG и сэкономь.
🎯 Практика
Одно задание на пять минут, чтобы выбор уровня закрепился на твоих реальных задачах, а не на абстрактных.
- Выпиши две задачи со своей работы, где AI «отвечает по документам»: справочник для клиентов, помощник по регламентам, ассистент по базе знаний — любую.
- По каждой задай два вопроса: «вопросы тут простые и однозначные — или надо ходить по связям и разбирать спорные факты?» и «во сколько обойдётся неверный ответ?». По ответам пометь уровень: простые и дёшево ошибиться — naive; через связи — graph; сложно и дорого ошибиться — agentic.
- Для тех, где вышло graph или agentic, добавь третий вопрос — «кто построит и будет поддерживать связи / проверки, и сколько это стоит против цены ошибки?». Если ответа нет — ты только что нашёл, что обязательно надо проговорить с вендором или командой до запуска, а не после.
Помнишь помощника из начала страницы? Теперь видно: если он «уверенно отвечал не тем» на простых вопросах — там стоял naive RAG, и это нормально, просто карточки надо почистить. А если он был подозрительно сложным под десяток типовых вопросов — это был overkill, за который кто-то переплатил.