
Полная версия
Инжиниринг искусственного интеллекта
Семантический поиск
это как раз то, что здесь описано. Поиск по смыслу, а не по словам («автомобиль» найдёт «машина», «транспортное средство» и «железный конь»). В отличие от лексического поиска (как Ctrl+F), он работает через эмбеддинги. Именно благодаря ему RAG понимает, какие документы реально релевантны запросу, даже если слова не совпадают буквально.
Критический нюанс
размер фрагмента (chunk size) при индексации сильно влияет на качество - слишком короткие чанки теряют контекст, слишком длинные размывают релевантность.
Как это работает (метафора)
Представьте, что вы сдаёте экзамен по открытой книге. Модель без RAG - это студент, который учил билеты год назад и всё забыл. Модель с RAG - это студент, который открывает книгу, находит нужную страницу и читает ответ с неё. Но даже с открытой книгой студент может прочитать не тот параграф - поэтому критически важна гигиена данных: мусор в базе знаний ведёт к мусору в ответе. Качество индексации и чанкинга важнее самой модели.
Почему RAG не заменяет память модели
· RAG требует хорошего поиска. Если поиск нашёл не тот документ - ответ будет неверным.
· RAG не добавляет «понимания». Модель может прочитать правильный документ, но интерпретировать его неправильно.
· RAG медленнее (поиск в БД + генерация). На практике латентность RAG-пайплайна часто складывается из трёх этапов: эмбеддинг запроса (десятки мс), поиск по индексу (единицы-сотни мс) и генерация LLM (секунды).
Когда RAG обязателен
· Работа с вашими документами (двойник, корпоративный чат-бот)
· Актуальные данные (новости, курс валют)
· Ситуации, где галлюцинации недопустимы (юриспруденция, медицина)
Есть и обратная сторона
RAG бесполезен для задач, требующих обобщения знаний со всего корпуса документов (например, «какие основные тренды были во всех наших договорах за 5 лет?») - здесь поиск по отдельным чанкам принципиально не работает, нужны другие подходы.
Настоящий боевой RAG в промышленности всегда включает обратную связь: система логирует, на какие документы ссылалась модель, и если пользователь поставил дизлайк - этот кейс идёт в датасет для переранжировщика или дообучения эмбеддингов.
С точки зрения бизнеса, RAG - это единственный способ сделать LLM аудитируемой: вы всегда можете посмотреть, на какой документ ссылалась модель, и проверить факт, тогда как при дообучении (fine-tuning) факты «вшиваются» в веса и становятся непроверяемыми.
Для регуляторики (GDPR, HIPAA, персональные данные) RAG безопаснее дообучения, потому что документы не покидают вашу базу знаний - модель только читает их в рантайме, а не запоминает навсегда.
Самый недооценённый факт
RAG резко снижает стоимость эксплуатации - обновить документы в векторной БД стоит копейки и не требует переобучения модели за десятки тысяч долларов, как в случае с fine-tuning.
Инженерный вывод
Чистая LLM без RAG - это экзамен без книг. Хорошо для творчества, плохо для фактов. RAG - это открытая книга. Медленнее, но честнее. На практике гибридные системы (RAG + дообучение на фактах) дают лучший результат, но стоят дороже.
Чек-лист: когда RAG работает (а когда - нет)
RAG - не панацея. Есть задачи, где он обязателен, есть - где бесполезен, а есть - где даже вреден.

Главное ограничение
RAG не добавляет «понимания». Если поиск нашёл не те документы, модель сгенерирует ответ на их основе - и это может быть хуже, чем галлюцинация. Потому что у модели будет ложное чувство опоры.
Правило
RAG - это не «улучшатель модели». Это архитектура. Если у вас нет качественного поиска - не будет и качественного RAG.
Что делать, если RAG не помог (три следующих шага)
Вы настроили RAG, но модель всё равно галлюцинирует или отвечает невпопад. Что проверять?
Шаг 1. Диагностика поиска (самое частое узкое место)
Вывод RAG
«Я нашёл 5 фрагментов». Откройте их вручную. Релевантны ли они? Если нет - проблема не в модели, а в эмбеддерах или чанкинге.
Чанки (фрагменты текста) слишком большие → модель не удерживает внимание, теряет факты в длинном тексте.
Чанки слишком маленькие → потерян контекст, фрагмент вырван из общего смысла.
Эмбеддер не понимает язык/домен → берите multilingual-e5-large или дообучайте свой.
Шаг 2. Reranking (двухпроходный поиск)
Сначала находим 20–50 фрагментов быстрым векторным поиском. Потом пропускаем их через модель-кросс-энкодер (медленную, но точную), которая переранжирует и оставляет 3–5 самых релевантных. Это стандарт для серьёзных RAG-систем (например, Cohere Rerank, BGE-reranker).
Шаг 3. Порог уверенности и fallback
Если максимальное сходство найденного фрагмента ниже порога (например, 0.7) - модель должна сказать «не знаю», а не пытаться ответить. Добавьте в промпт:
«Если в найденных документах нет прямого ответа на вопрос - скажи: "Информация не найдена. Уточните запрос". Не додумывай.»
Это снизит галлюцинации ценой увеличения отказов. Но в юридических, медицинских, финансовых сценариях отказ лучше, чем ложь.
Эволюция RAG: графы и гибридный поиск
Классический RAG (векторный поиск + LLM) хорошо работает, когда запрос можно закрыть одним-двумя фрагментами документа. Но есть задачи, где важны не просто похожие куски текста, а цепочки связей.
Примеры таких запросов
«Какие компоненты нашей системы зависят от сервиса платежей?»
«Кто тестировал модуль, который упал вчера на проде?»
«Какие контракты связывают поставщика X с нашей компанией через других юрлиц?»
Векторный поиск ответит на них плохо. Потому что нужные факты разбросаны по разным документам, а связь между ними не выражена явно в тексте.
Паровозик знаний ( GraphRAG )
Идея
построить из документов граф знаний - сущности (люди, компании, документы, сервисы) и связи между ними («владеет», «зависит от», «отвечает за»). Запрос превращается не в поиск похожих фрагментов, а в обход графа по цепочкам.
Пример:
запрос «Кому писать, если упал платёжный шлюз?»
Стартуем от сущности «платёжный шлюз».
Идём по связи «используется в» → «модуль оплаты».
От модуля по связи «отвечает за» → «тимлид Иванов».
От Иванова по связи «подписан на» → канал оповещений.
LLM получает не разрозненные цитаты, а связный подграф - и может дать точный, обоснованный ответ.
GraphRAG даёт выигрыш в точности на сложных, многозвеньевых запросах (multi-hop) до 50–70% по сравнению с классическим RAG. Но требует значительно больших усилий на внедрение (строить граф, поддерживать его актуальность, настраивать обход).
Гибридный поиск и реранкинг (без графов, но проще)
Если строить граф пока не нужно, но точности векторного поиска не хватает - можно усилить классический RAG без перехода к графу.
Гибридный поиск
комбинация BM25 (точный поиск по словам, как в старых поисковиках) и векторного (похожий смысл). BM25 ищет «инвойс AС-457», векторный - «документ про задержку оплаты». Выбор лучшего из двух или их взвешенная сумма дают более стабильный результат.
Ретривер
это компонент, который занимается поиском (неважно, векторным, лексическим или гибридным). Многие недооценивают его настройку, а зря: хороший ретривер сбивает входящий шум до того, как запрос попадёт в LLM.
Реранкинг (переранжирование)
сначала ретривер быстро находит 20–50 кандидатов (дешёво, неточно), а маленькая модель-кросс-энкодер (медленно, дорого) пересортировывает и оставляет топ-3–5 самых релевантных.
Важно: если документы, на которых вы строите RAG, содержат сведения о финансовых операциях (платежи, переводы), при передаче их в LLM необходимо соблюдать требования 115-ФЗ и 152-ФЗ
РЕЗЮМЕ ГЛАВЫ 1
Токен - минимальная единица текста для модели (может быть словом, частью слова или символом), а также единица измерения стоимости и скорости инференса.
Токенизация разбивает текст на токены с помощью BPE или SentencePiece; размер словаря обычно 32K–256K токенов.
Разные языки «весят» по-разному: английский - 1.0-1.5 токена на слово, русский - 1.5-2.0, китайский - 2.0–3.0, что напрямую влияет на бюджет.
Эмбеддинги превращают токены (числа) в векторы - координаты в многомерном пространстве смыслов, где близкие по смыслу слова находятся рядом.
Номер токена - не случайность, а результат статистической иерархии. Базовые символы (буквы, цифры, знаки препинания, пробелы) получают номера первыми. Частотные пары «склеиваются» в новые токены, и чем больше номер, тем глубже токен «упакован» из более мелких частей. Пробелы и знаки препинания - полноправные участники этого процесса.
Разница в «весе» языков (английский 1.0-1.5, русский 1.5-2.0, китайский 2.0–3.0) - не лингвистическое превосходство английского, а исторический артефакт. Токенизаторы обучались на англоцентричных корпусах. При обучении на корпусе с доминированием другого языка коэффициенты поменяются местами. Китайские модели (Qwen, DeepSeek) и русскоязычные (GigaChat, YandexGPT) уже демонстрируют, что локальный язык можно сделать столь же «экономным», как английский, а иногда и экономичнее.
Векторная арифметика работает: Король - Мужчина + Женщина = Королева; это прямое следствие геометрии смыслов.
Позиционное кодирование добавляет информацию о порядке слов; два основных метода: RoPE (вращение векторов) и ALiBi (штраф за расстояние).
Механизм самовнимания (Self-Attention) позволяет словам обмениваться информацией через триплеты Q (запрос), K (ключ), V (значение).
Формула внимания: Attention = softmax(Q·K/√d)·V, где каждый шаг имеет инженерный смысл (совместимость, масштабирование, нормализация, взвешенная сумма).
Кореференция - явление, когда разные слова в тексте указывают на один объект («Иван купил машину. Он рад ей»); без неё текст был бы набором повторов.
Multi-Head Attention - несколько параллельных механизмов внимания, каждый ищет свои типы связей (синтаксис, семантику, кореференцию).
FFN (сеть прямого распространения) внутри каждого блока переваривает информацию после «совещания» внимания; без FFN модель просто перекладывала бы слова.
Add & Norm (остаточная связь + нормализация) позволяет информации течь через глубокие сети без затухания - как «ластик» для неудачных штрихов.
Иерархия слоёв: первые слои видят буквы и слова, средние - словосочетания и роли, глубокие - смысл абзаца, тон, настроение.
Трансформерные блоки состоят из Multi-Head Attention, Add&Norm, FFN и второго Add&Norm; 32–128 таких блоков создают глубокое понимание текста.
Галлюцинации - фундаментальное свойство генеративных моделей. Они возникают из-за вероятностной природы генерации, отсутствия доступа к источнику истины и компрессии знаний при обучении. Это не баг, а особенность архитектуры, которую можно снижать, но нельзя устранить полностью. Инженерный подход: RAG, снижение температуры, дообучение, ансамбли, и всегда - критическая проверка фактов в ответственных сценариях.
RAG (Retrieval-Augmented Generation) - метод борьбы с галлюцинациями: перед генерацией модель ищет релевантные документы в векторной БД и подставляет их в контекст. Это как «экзамен по открытой книге» - факты берутся из документов, а не из памяти модели. Обязателен для задач, где ложь недопустима (юриспруденция, медицина, работа с документами). Минусы: зависит от качества поиска, медленнее чистой генерации.
Вопросы для самопроверки
1. Что такое токен и почему он является не только лингвистической, но и экономической единицей?
2. Объясните своими словами, чем эмбеддинги лучше простого присвоения числовых индексов словам.
3. В чём принципиальная разница между позиционным кодированием RoPE и ALiBi? Для каких задач стоит выбирать каждый из методов?
4. Опишите, что происходит на каждом из четырёх шагов формулы Attention (Q, K, V) = softmax(Q·K/√d)·V.
5. Почему в трансформере используется не одна, а множество «голов внимания» (Multi-Head Attention)?
6. Зачем нужна остаточная связь (Add) и нормализация (Norm) внутри трансформерного блока?
7. Что произойдёт с качеством модели, если убрать FFN-слои и оставить только Attention?
8. Какие параметры влияют на «креативность» генерации текста и как именно?
10. Что такое RAG? Почему он помогает бороться с галлюцинациями? В чём его ограничения и когда он обязателен?
Мы подробно разобрали, как устроены генеративные языковые модели - те самые, что лежат в основе современных чат-ботов. Но мир искусственных нейросетей гораздо шире. Прежде чем трансформеры стали главным мейнстримом, инженеры придумали множество других архитектур, каждая из которых была прорывом для своего времени. Некоторые из них до сих пор незаменимы в определённых задачах. Давайте совершим короткий экскурс - он поможет вам понимать, какой инструмент для чего выбирать, и почему в итоге для работы с текстом победил именно трансформер.
ГЛАВА 2. ТИПЫ АРХИТЕКТУР НЕЙРОСЕТЕЙ
«Иерархическое распознавание шаблонов - вот ключ к пониманию того, как мозг, а вслед за ним и нейросети, строят картину мира» - из работ по глубокому обучению
В первой главе мы подробно разобрали, как устроены генеративные языковые модели - те самые, что лежат в основе современных чат-ботов. Но мир искусственных нейросетей гораздо шире. Прежде чем трансформеры стали главным мейнстримом, инженеры придумали множество других архитектур, каждая из которых была прорывом для своего времени и до сих пор используется в разных задачах. Более того, даже внутри семейства трансформеров есть важное разделение на энкодеры, декодеры и их комбинации. В этой главе мы совершим экскурс по основным типам архитектур, чтобы понимать, какой инструмент для какой задачи выбирать, и почему в итоге для работы с текстом победил именно трансформер.
Начнём с архитектуры, которая совершила революцию в компьютерном зрении и до сих пор остаётся основой для работы с изображениями, видео и объёмными данными. Её главная идея - не рассматривать картинку целиком, а сканировать её маленьким окошком, выделяя простые признаки и собирая из них сложные.
2.1 CNN Convolutional Neural Network / Свёрточная нейросеть
Использует операцию свёртки (convolution) - скользящее окно с обучаемыми фильтрами. Эффективна для данных с пространственной структурой: изображения, видео, объёмные данные. В тексте используется редко.
Представьте, что вы рассматриваете фотографию не целиком, а через маленькое окошко, которое ползает по картинке. Это и есть свертка (convolution).
Давайте разберем все части этого определения на простом примере - поиске границ на фотографии.
1. Скользящее окно (Как это движется?)
Что это
Представьте, что изображение - это поле 10x10 клеточек. Скользящее окно - это рамка размером 3x3 клеточки (как в игре «Сапёр», когда ты открываешь клетку и видишь соседей).
Как работает
Мы ставим эту рамку в левый верхний угол, смотрим на 9 пикселей внутри. Потом сдвигаем рамку на 1 шаг вправо, опять смотрим. Прошли строчку - переходим на следующую. Так окно «прочесывает» всю картинку.
2. Обучаемые фильтры (Что ищет окно?)
Внутри этого окошка есть специальная табличка с числами - фильтр (или ядро свертки). Фильтр - это детектор. В начале обучения эти числа случайные, но потом они «обучаются» искать конкретные вещи.
Фильтр на поиск горизонтальных границ
Если внутри окошка картинка резко меняется сверху (темно) вниз (светло), фильтр выдает большое число. Если картинка однородная, фильтр выдает ноль.
Фильтр на поиск углов
Реагирует на диагональные линии.
Фильтр на поиск цвета
Реагирует на красные пятна.
Практическая польза
Мы не программируем правила «ищи вертикальную линию» ручками. Нейросеть сама подбирает числа в фильтрах во время обучения, чтобы находить то, что нужно для задачи (например, для распознавания котиков).
Фильтры умеют находить линии, границы, углы. Но почему это работает именно с картинками, а не с текстом? Потому что у изображений есть важное свойство - пространственная структура.
3. Пространственная структура (Почему это важно?)
Что это значит
в данных важен порядок элементов. У пикселя есть соседи сверху, снизу, слева и справа. Если перемешать пиксели как попало, картинка рассыплется, и смысл пропадет.
Зачем это свёртке
Свёртка использует эту структуру. Она смотрит на локальные группы пикселей (близких соседей), чтобы понять простые вещи (края, текстуры), а потом из простых вещей собирает сложные (глаз, ухо, нос).
Главная практическая польза (3 вещи)
1. Экономия ресурсов (разреженность)
Обычная полносвязная нейросеть на картинку 1000x1000 пикселей с тремя цветовыми каналами потребовала бы около 3 миллионов входных нейронов и, если следующий слой тоже будет размером 1000x1000, около 3×10¹² связей - это триллионы параметров.
2. Инвариантность к положению (неважно, где объект)
Фильтр, который научился искать нос, найдет его в любом месте фотографии - слева, справа, вверху. Ему все равно, потому что он скользит везде.
3. Иерархия признаков
· Первые слои видят просто линии и точки.
· Средние слои видят комбинации линий (круги, прямоугольники) - например, колесо.
· Глубокие слои видят сложные объекты (машина, дом).
Почему в тексте используется редко?
У текста нет такой сильной пространственной структуры. Если в тексте переставить два соседних слова, смысл может измениться кардинально или остаться тем же. А если на картинке переставить два пикселя местами, это будет уже «шум». Для текста лучше подходит трансформер (внимание), который смотрит на связь слов попарно, независимо от расстояния, а не только на соседей в окошке.
Итак, свёрточные сети отлично подходят для данных с пространственной структурой, где важны локальные связи и иерархия признаков. Но текст устроен иначе: смысл зависит не столько от соседних пикселей, сколько от порядка слов и их взаимосвязей на расстоянии. Для обработки последовательностей инженеры придумали другой класс архитектур - рекуррентные нейросети. Именно они правили бал в задачах с текстом до появления трансформеров.
2.2 RNN (Recurrent Neural Network / Рекуррентная нейросеть)
Мы только что разобрались, как свёрточные сети видят мир через маленькое окошко и собирают картинку из простых деталей. Но у текста другая природа - это не застывшее изображение, а поток, последовательность, где важен каждый предыдущий шаг. Чтобы работать с такими данными, нужна архитектура с памятью. Знакомьтесь: рекуррентные нейросети - главные звезды обработки текстов до эры трансформеров.
Представьте, что вы читаете книгу, но у вас очень плохая память - вы помните только последние пару предложений, а начало главы уже стерлось. Примерно так работают рекуррентные сети. Давайте разберемся, почему они устроены именно так и в чем их главные проблемы.
RNN обрабатывает последовательности шаг за шагом, передавая скрытое состояние. Она плохо параллелизуется и страдает от затухания градиента. Практически вытеснена трансформерами.
Вся суть RNN крутится вокруг одной простой идеи: у сети есть внутренняя память - скрытое состояние, которое обновляется с каждым новым словом. Это как блокнотик, куда модель записывает свои мысли по ходу чтения.
1. Скрытое состояние (Память в голове)
Что это
У RNN есть внутренняя переменная - вектор скрытого состояния (hidden state). Это как блокнотик, в котором нейросеть записывает свои мысли по ходу чтения.
Технически
Это просто набор чисел, которые меняются после каждого прочитанного слова.
2. Обработка шаг за шагом (Последовательность)
RNN не смотрит на весь текст сразу. Она читает его строго по порядку, слово за словом.
Как это выглядит на примере фразы
«Кот съел мышь»:
Шаг 1 (Кот):
Смотрит на слово «Кот» + чистый блокнот (пустая память). Записывает в блокнот: «Вижу кота».
Шаг 2 (съел):
Смотрит на слово «съел» + читает блокнот (там про кота). Понимает: «Кот что-то делает». Обновляет блокнот: «Кот сейчас ест».
Шаг 3 (мышь):
Смотрит на слово «мышь» + читает блокнот (там про кота, который ест). Понимает: «Кот съел мышь. Логично».
Формула одной фразой
Новое состояние = Функция (Текущее слово, Старое состояние)
3. Проблема 1: Плохая параллелизация (Медленность)
Пока вы не прочитаете слово «съел», вы не можете понять слово «мышь», потому что память еще не обновилась.
Для процессора это ад: Нельзя обработать все слова одновременно (распараллелить), как в трансформере. Приходится ждать окончания первого шага, чтобы начать второй. На длинных текстах это очень медленно.







