fedorthinks

Экспресс-курс · No. 12

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

22 понятия · схема у каждого · шпаргалка в конце

§ 01

Модель не знает твоих данных и ничего после своей даты обучения. RAG — это как ты даёшь ей факты, чтобы отвечать по ним, — так что пойми задачу, что он решает, до механики.

Карта: 22 понятия в семи группах

Карта метро: сначала видишь линии целиком, потом едешь по станциям.

Сначала три основы — почему памяти модели мало, что такое RAG и зачем нужно заземление. Дальше шесть групп, по одной на главу: чанкинг, эмбеддинги и поиск, качество извлечения, заземление, оценка и как строить хорошо.

У каждого понятия дальше одно и то же: английское название (запомни его — это термин), образ из жизни, схема и карточка с полями: что это или проблема, как работает или идея, пример, подвох или цена и связи.

BasicsKnowledge cutoffRAGGroundingChunkingChunkStructure-aware splitMetadataEmbeddings & searchEmbeddingVector searchVector databaseSimilar ≠ relevantRetrieval qualityHybrid searchRerankingPrecision / recallGroundingContext-only answerCitationsRefusalEvaluating RAGRetrieval evalFaithfulnessGolden setBuilding it wellPaste firstIndex freshnessCost & latency
Основы сверху, ниже — шесть групп, по ним идут главы 2–7.

Knowledge Cutoff — память модели заморожена

Блестящий выпускник, что прочёл всю библиотеку годы назад, — но не файлы твоей компании и ничего, напечатанного с его выпуска.

LLM знает только то, что было в её обучающих данных, замороженных на дате отсечки — knowledge cutoff. Она не знает твоих документов, твоего продукта, записи твоего клиента или вчерашних новостей. Спроси всё равно — и она ответит из размытой памяти или выдумает что-то правдоподобное. RAG существует, чтобы починить ровно это: перестань полагаться на то, что модель запомнила, и вручи ей нужные факты в момент вопроса.

Training dataeverything the model ever readcutoffYour documentsYesterday's newsknown, but frozennever seenask anyway → fuzzy memory or a plausible invention
Всё, что после отсечки или внутри твоей компании, модель не видела никогда.
ConceptKnowledge Cutoff· дата отсечки знаний
Что это

Модель знает только свои обучающие данные, замороженные на одной дате.

Пример
Она не знает твою документацию, запись клиента и вчерашние новости.
Подвох

Модель не молчит, когда не знает, — она отвечает из размытой памяти или выдумывает.

Связи
Эту дыру закрывает RAG: факты приходят в момент вопроса.

RAG — сначала извлеки, потом отвечай

Экзамен с открытой книгой — вместо того чтобы доверять памяти, ты сначала смотришь нужные страницы, а потом пишешь ответ по тому, что перед тобой.

Это паттерн Retrieval-Augmented Generation (RAG) — генерация, дополненная извлечением. Три шага: retrieve — по вопросу пользователя достать самые релевантные чанки твоих документов; augment — положить их в контекст; generate — попросить модель ответить по ним. Теперь ответ идёт из твоих настоящих данных, а не из воспоминаний модели. Так ассистент отвечает про твою документацию, твои политики, твою базу знаний — точно и актуально.

1 · retrieveQuestionfrom the userRetrievesearch your docsTop-k chunksthe most relevant passages2 · augmentContextquestion + chunksLLManswers from contextAnswerfrom your data3 · generate
Три шага RAG: извлечь чанки, добавить их в контекст, сгенерировать ответ.
PatternRetrieval-Augmented Generation· RAG, генерация с извлечением
Проблема
Модель не знает твоих данных и всего, что после её отсечки.
Идея
Найти нужные куски документов и дать модели ответить по ним.
Пример

Ассистент поддержки отвечает про политику возврата по свежей статье из базы знаний.

Цена
Целая система поиска: чанкинг, индекс, свежесть, оценка.
Когда брать
Знаний много, они часто меняются или зависят от пользователя.
Связи

Ради grounding; держится на chunking, embedding и vector search.

Grounding — вот настоящий приз

Журналист, что обязан цитировать источник на каждое утверждение, выдумывает куда меньше, чем тот, кто пишет по памяти.

Глубокая причина, почему RAG важен, — заземление (grounding): поскольку ответ взят из извлечённого текста, ты можешь требовать цитаты и проверять, что каждое утверждение реально подкреплено источником. Это не стирает галлюцинацию целиком, но режет её и делает то, что проскользнуло, ловимым. Ответ, что ты можешь проследить до документа, — это ответ, которому можно доверять и который можно защитить.

AnswerRetrieved sourcesClaim A [1]Claim B [2]Claim C — no sourceChunk 1policy.md · §2Chunk 2faq.md · §5nothing backs it → catch it
У каждого утверждения есть источник. Утверждение без источника сразу видно.
ConceptGrounding· заземление
Что это
Ответ опирается на извлечённый текст, а не на память модели.
Как работает

Каждое утверждение можно проследить до конкретного чанка и проверить.

Пример
«Возврат — 14 дней [1]», где [1] — абзац из политики возврата.
Подвох
Режет галлюцинации, но не убирает их до нуля.
Связи

Делается через context-only answering, citations и refusal; меряется faithfulness.

Retrieval-first — это система поиска с моделью на конце

Научный ассистент хорош ровно настолько, насколько картотека, в которой он ищет, — дай ему отличную библиотеку и плохой индекс, и он всё равно вручит не ту папку.

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

Retrieval system — the hard partChunkEmbedSearchRankLLMphrases itdecides which text reaches the modelthe easy part
Чанкинг, эмбеддинги, поиск и ранжирование — тяжёлая часть. Модель только формулирует.

Не спрашивай модель, что она знает. Извлеки нужные факты и попроси ответить по ним — заземлённо, актуально и с цитатами.

§ 02

Прежде чем извлекать, ты режешь документы на куски. Как ты их режешь, тихо решает качество извлечения — это наименее гламурный шаг и один из самых важных.

Chunk — единица качества

Справочник полезен, только разрезанный на находимые статьи, — один гигантский неиндексированный свиток или тысяча рваных клочков одинаково бесполезны для поиска.

Ты извлекаешь не целые документы, а чанки (chunks) — пассажи в несколько сотен слов. Процесс нарезки называется chunking. Чанк — это единица, что видит поиск и читает модель, так что его границы важны колоссально. Хорошие чанки самодостаточны и на одну тему. Сделай чанкинг неверно — и никакой хитрый поиск или умная модель этого не спасут.

DocumentsplitChunk 1Chunk 2Chunk 3Chunk 4Searchsees chunksLLMreads chunks
Документ режется на чанки. Поиск видит чанки, модель читает чанки — не документы.
ConceptChunk· чанк, кусок документа
Что это
Пассаж в несколько сотен слов — единица поиска и чтения.
Как работает

Документы режутся заранее; поиск возвращает чанки, модель отвечает по ним.

Размер

Слишком большой хоронит ответ, слишком маленький теряет контекст. Число подбирают измерением.

Подвох
Плохой чанкинг не спасёт ни поиск, ни модель.
Связи

Режь через structure-aware chunking, помечай metadata, превращай в embedding.

Chunk Size — слишком большой хоронит ответ, слишком маленький теряет контекст

Вручи кому-то целую главу, чтобы ответить на однострочный вопрос, и он бредёт сквозь шум; вручи одно предложение без окружения, и он не поймёт, что оно значит.

Режь слишком крупно — и каждый чанк мешает нужный факт с абзацами не относящегося текста: поиск становится размытым, а внимание модели разбавляется. Режь слишком мелко — и ты обрубаешь контекст, что делал факт осмысленным. Золотая середина держит одну связную идею с достаточным окружением, чтобы стоять самой по себе. Универсального размера чанка (chunk size) нет; он зависит от твоих документов, и ты его настраиваешь измерением.

Too biganswer buried in noiseJust rightone idea + enough contextToo smallcontext cut off
Цветная полоска — нужный факт. Слева он тонет в шуме, справа остался без контекста.

Structure-Aware Chunking — режь по смыслу, а не по числу символов

Деление книги подсчётом символов может разрезать предложение — или рецепт — ровно пополам. Деление по главам и разделам держит каждый кусок целым.

Наивный подход — fixed-size chunking — рубит каждые N символов и разрезает предложения, таблицы и идеи. Лучше резать по естественной структуре документа — заголовкам, разделам, абзацам, — чтобы каждый чанк был законченной мыслью. Немного перекрытия (overlap) между соседними чанками не даёт факту провалиться в щель между двумя. Уважай форму документа — и извлечение становится легче само собой.

Fixed size — cut every N characters§1 Refunds§2 Shipping§3 Warranty✗ slices through sentences, tables and ideasStructure-aware — cut on headings and paragraphs§1 Refunds§2 Shipping§3 Warrantyeach chunk is a whole thought · a small overlap at the seams
Сверху разрезы через каждые N символов. Снизу — по разделам, с небольшим перекрытием на стыках.
PracticeStructure-Aware Chunking· нарезка по структуре, overlap
Проблема
Нарезка по числу символов режет предложения и таблицы пополам.
Идея
Резать по заголовкам, разделам и абзацам, с небольшим перекрытием.
Пример
Раздел «Сроки возврата» целиком становится одним чанком.
Цена
Нужно разбирать формат документа: Markdown, HTML, PDF.
Связи
Улучшает каждый chunk и всё ниже по течению.

Metadata — прикрепляй ярлыки к каждому чанку

Библиотечная карточка держит не только текст — она записывает автора, дату и раздел, чтобы ты мог отфильтровать ровно нужную полку ещё до поиска.

Храни каждый чанк с метаданными (metadata): исходный документ, заголовок, дата, раздел, права. Это позволяет фильтровать до или вместе с семантическим поиском — только документы этого продукта, только текущие политики, только то, что этому пользователю позволено видеть, — и даёт источник для цитат. Метаданные дёшево хранить, и они превращают плоскую груду текста в то, что можно нацеливать.

Chunksource: refund-policy.pdfsection: Timelinesdate: 2026-03access: supportFilter before searchthis product · current · allowed for this userCitationthe source behind each claim
Метаданные дают две вещи: фильтр до поиска и источник для цитаты.
PracticeMetadata· метаданные чанка
Проблема
Плоская груда текста: нельзя сузить поиск и нечего цитировать.
Идея
Хранить с чанком источник, заголовок, дату, раздел и права.
Пример

Искать только в текущих политиках, которые этому пользователю можно видеть.

Цена
Почти ничего — несколько полей на чанк.
Связи
Даёт фильтр для vector search и источник для citations.

Ты извлекаешь чанки, а не документы. Режь по смыслу, держи каждый самодостаточным и тегируй — качество чанкинга ограничивает всё ниже по течению.

§ 03

Чтобы найти чанки, что совпадают с вопросом, ты ищешь по смыслу, а не по совпадению слов. Эмбеддинги — это трюк, что делает «найди мне похожее на это» возможным.

Embedding — смысл превращается в координаты

Карта, где у каждой идеи есть место, и вещи, что значат схожее, сидят рядом, — «собака» близко к «щенку», обе далеко от «налоговой декларации».

Эмбеддинг (embedding) — это список чисел, вектор, что представляет смысл куска текста, помещённый в многомерное пространство так, что схожие смыслы оказываются рядом. Ты эмбеддишь каждый чанк один раз и хранишь векторы. Теперь у «смысла» есть координаты, и «найди связанный текст» становится «найди ближайшие точки» — задача, что компьютер решает быстро.

ChunktextEmbedding modelreads the text[0.21, −0.83, …]vectorStoreonce per chunkcoordinates of the meaningsimilar meaning → nearby numbers → nearby points
Чанк → модель эмбеддингов → вектор. Один раз на каждый чанк, потом в хранилище.
ConceptEmbedding· эмбеддинг, вектор
Что это
Список чисел, который представляет смысл текста.
Как работает

Модель эмбеддингов выдаёт координаты; похожий смысл — близкие точки.

Пример
«Собака» и «щенок» рядом, обе далеко от «налоговой декларации».
Связи

Делает возможным vector search; векторы живут в vector database.

Vector Search — поиск по сходству, а не по ключевым словам

Библиотекарь, что находит книги по тому, о чём они, — «похожее на это», — а не только по точному совпадению названия, что ты сказал.

В момент вопроса ты эмбеддишь вопрос тем же способом, потом ищешь в хранилище чанки, чьи векторы ближе всего к нему. Это векторный поиск (vector search), он же семантический поиск (semantic search): он находит чанк про «политику возврата», даже когда пользователь спросил про «вернуть свои деньги», потому что смыслы сидят рядом. Поиск по ключевым словам это упустил бы; векторный поиск для этого и создан.

Vector space (shown in 2D)question: “get my money back”chunk: “refund policy”closeshipping timesoffice hoursfarnearest vectors win — even with zero shared keywords
Вопрос и чанк про возврат не делят ни одного слова — но в пространстве смыслов они рядом.
ConceptVector Search· semantic search, семантический поиск
Что это
Поиск чанков, чьи векторы ближе всего к вектору вопроса.
Как работает
Вопрос эмбеддится той же моделью, затем ищутся ближайшие точки.
Пример
«Вернуть деньги» находит раздел «Политика возврата».
Подвох
Промахивается по точным кодам и именам; близко — не всегда полезно.
Связи

Работает на vector database; дополняется hybrid search и reranking.

Vector Database — движок извлечения

Склад, устроенный так, что по любому предмету он мгновенно вручит тебе сотню самых похожих, — не читая каждую полку, а благодаря тому, как он организован.

Векторная база данных (vector database) хранит твои эмбеддинги и отвечает на запросы «ближайшее к этому» за миллисекунды, даже по миллионам чанков, используя приближённый индекс (ANN, approximate nearest neighbour) вместо сканирования всего. Это движок извлечения под RAG. Строить его не надо — но надо знать, что именно там живут твои чанки и насколько быстр и точен его поиск.

Query vectorVector databaseapproximate index (ANN)Nearest kin millisecondsmillions of chunks storedno full scan — the index knows where to look
Векторная база не сканирует всё подряд: приближённый индекс сразу ведёт к ближайшим.
ToolVector Database· векторная база, ANN-индекс
Что это
Хранилище векторов с быстрым поиском ближайших.
Как работает
Приближённый индекс (ANN) вместо полного перебора.
Пример
Миллионы чанков — и ближайшие к вопросу за миллисекунды.
Подвох
Строить не нужно, но нужно знать, насколько быстр и точен поиск.
Связи
Хранит embeddings; на нём работает vector search.

Similar ≠ Relevant — сходство не то же, что релевантность

Два пассажа могут быть на одну тему и при этом отвечать на разные вопросы — «как отменить» и «почему отменяют» сидят рядом, но только один — то, что спросили.

Векторный поиск возвращает то, что семантически близко (similar), что обычно релевантно (relevant), но не всегда. Чанк может быть про нужный предмет и при этом не содержать ответа. Этот разрыв — близко по смыслу против реально полезно — вот почему сырой векторный поиск это сильный первый проход, но не финальное слово, и почему существует следующий раздел.

“How do I cancel?”“How to cancel”near · answers it ✓“Why people cancel”near · doesn't answer ✗similar ≠ relevant: a strong first pass, not the final word
Оба чанка близки к вопросу. Ответ есть только в одном.
ConceptSimilar ≠ Relevant· сходство не равно релевантности
Что это
Близкий по смыслу чанк не обязательно содержит ответ.
Пример
«Как отменить» и «почему отменяют» — рядом, но ответ только в первом.
Подвох
Сырой векторный поиск принимает близость за полезность.
Связи
Лечится reranking; меряется retrieval eval.

Эмбеддинги дают смыслу координаты; векторный поиск находит чанки по сходству. Это мощно — и «близко по смыслу» это не совсем «отвечает на вопрос».

§ 04

Вот урок, что чинит большинство сломанных RAG-систем: когда ответы плохи, причина обычно в извлечении. Заведи нужные чанки внутрь — и приличная модель сделает остальное.

Garbage In, Confident Garbage Out — мусор на входе, уверенный мусор на выходе

Вручи кому-то не тот файл и попроси его суммировать — он даст безупречную сводку совершенно не той вещи, звуча полностью уверенно.

RAG-ответ хорош ровно настолько, насколько чанки, что ему дали. Извлеки не те пассажи — и модель добросовестно ответит из неверного контекста, со всей своей обычной уверенностью. Баг выглядит как «модель неправа», но настоящий сбой случился выше по течению, в извлечении. Так что когда ответы плохи, осмотри, что извлеклось, прежде чем трогать промпт или модель.

real failure is herelooks like “the model is wrong”Retrievalwrong chunksLLMfaithful to contextAnswerconfident — and wronginspect what was retrieved before you touch the prompt or the model
Ошибка видна в ответе, а родилась в извлечении. Смотри на чанки первым делом.

Hybrid Search — сочетай ключевые слова и смысл

Один искатель, что точно знает, что слова значат, и другой, что совпадает по точным именам и кодам, — вместе они ловят то, что каждый по отдельности упустил бы.

Векторный поиск понимает смысл, но может промахиваться по точным терминам — кодам продуктов, именам, редкому жаргону. Поиск по ключевым словам (keyword search) бьёт по ним, но упускает перефразировки. Гибридный поиск (hybrid search) гоняет оба и сливает результаты, прикрывая слепые зоны друг друга. Для большинства реальных корпусов гибрид бьёт любой по отдельности, потому что реальные вопросы мешают понятия с конкретными именами.

QueryKeyword searchexact codes, names (BM25)Vector searchmeaning, paraphrasesMergeResultscatches “SKU-4471”catches rephrasings
Два поиска параллельно: один ловит точные коды, другой — перефразировки. Результаты сливаются.
PatternHybrid Search· гибридный поиск, keyword + vector
Проблема

Векторный поиск путает точные коды и имена; поиск по словам не видит перефразировок.

Идея
Запустить оба поиска и слить результаты.
Пример

«Ошибка SKU-4471 при возврате» — код находит поиск по словам, смысл — векторный.

Цена
Два индекса и логика слияния.
Когда брать
Почти всегда для реальных корпусов.
Связи
Широкий первый проход перед reranking.

Reranking — переранжируй короткий список

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

Поиск первого прохода быстр, но груб. Реранкер (reranker) берёт топ, скажем, пятьдесят кандидатов и оценивает каждого против вопроса аккуратнее, выталкивая по-настоящему релевантные чанки наверх. Извлекай широко, потом переранжируй до точных немногих. Эта двухэтапная форма — широкий дешёвый отзыв, потом острое ранжирование — один из самых рычажных апгрейдов посредственной RAG-системы.

stage 1 · wide, cheap recallstage 2 · sharp rankingFast searchroughTop 50candidatesRerankerscores vs questionTop 5the precise fewretrieve broadly, then rerank to a precise few
Этап 1 — быстро набрать 50 кандидатов. Этап 2 — внимательно выбрать лучшие 5.
PatternReranking· переранжирование, two-stage retrieval
Проблема
Первый проход быстр, но груб: нужное может стоять на 30-м месте.
Идея
Взять топ-50 и аккуратно оценить каждого кандидата против вопроса.
Пример
Из 50 найденных чанков реранкер оставляет 5 самых полезных.
Цена
Лишний шаг — немного задержки и денег на каждый вопрос.
Когда брать
Когда RAG посредственный — один из самых сильных апгрейдов.
Связи
Лечит similar ≠ relevant; стоит после hybrid search.

Precision и Recall — точность и полнота тянут друг против друга

Сеть с широкими ячейками ловит только крупную рыбу, но многое пропускает; мелкая сеть ловит всё, включая водоросли. Ты настраиваешь ячею под нужный улов.

Извлеки слишком мало чанков — и можешь упустить тот, что с ответом (низкая полнота, recall); извлеки слишком много — и хоронишь ответ в нерелевантном тексте, что разбавляет модель и стоит токенов (низкая точность, precision). Верное число чанков (его часто зовут k) балансирует эти двое, и оно специфично для твоих данных и типа вопроса. Ты его не угадываешь — ты его меряешь, а это следующий раздел.

Too fewmiss the answer · low recallSweet spotmeasured, not guessedToo manynoise, tokens · low precisionfewmanyk = chunks retrievedthe right k depends on your data and question types
Мало чанков — ответ упущен. Много — ответ утонул. Середину находят измерением.
TermPrecision & Recall· точность и полнота, top-k
Что это

Recall — нашёлся ли нужный чанк; precision — сколько мусора пришло вместе с ним.

Как работает
Больше k — выше полнота, ниже точность, и наоборот.
Пример
k = 2 упускает ответ; k = 40 хоронит его и жжёт токены.
Подвох
Нужное k не угадать — его меряют на своих данных.
Связи
Меряется retrieval eval; влияет на cost & latency.

Большинство плохих RAG-ответов — это плохое извлечение. Сочетай ключевые слова и семантику, переранжируй короткий список и проверь чанки, прежде чем винить модель.

§ 05

Как только нужные чанки в контексте, работа — заставить модель отвечать строго по ним и доказать, что она это сделала. Это и превращает извлечение в ответ, которому можно доверять.

Context-Only Answering — отвечай только из извлечённого текста

Свидетель, которому велено показывать только то, что он лично видел, — не то, что предполагает, смутно помнит или слышал из вторых рук.

Укажи модели отвечать только из предоставленных чанков и говорить, что не знает, когда ответа там нет. Это ядро заземления: извлечённый текст — это разрешённый источник истины (source of truth), а собственная память модели снята со стола. Идеально не будет — модель всё ещё может дрейфовать, — но инструкция плюс нужный контекст делают бо́льшую часть работы.

Retrieved chunksallowed source of truthModel's memoryoff the table ✗LLMonly from chunksGrounded answer
Чанки — разрешённый источник. Память модели — нет.
PracticeContext-Only Answering· отвечать только по контексту
Проблема
Модель смешивает извлечённые факты со своей памятью.
Идея

Инструкция: отвечать только из предоставленных чанков, иначе — «не знаю».

Пример

«Отвечай только по фрагментам ниже. Если ответа там нет — так и скажи».

Цена
Не идеально: модель всё ещё может дрейфовать.
Связи
Ядро grounding; проверяется citations и faithfulness.

Citations — цитаты делают утверждения проверяемыми

Научная статья со сносками позволяет любому читателю проследить утверждение до источника и проверить его — или поймать, где оно не держится.

Пусть модель цитирует, из какого чанка пришла каждая часть её ответа. Цитаты (citations) делают две вещи: позволяют пользователю (и тебе) сверить утверждение с источником, и сам акт заземления каждого высказывания в извлечённом пассаже отбивает у модели охоту уходить от фактов. Ответ с прослеживаемыми источниками можно проаудитировать; ответ без источников — лишь уверенная догадка.

AnswerRefunds take 14 days. [1]The return label is free. [2]Sale items are excluded. [2][1] refund-policy.md§ Timelines[2] returns-faq.md§ Labelsevery claim can be checked against its source
Каждое предложение ответа ведёт к своему источнику — его можно открыть и проверить.
PracticeCitations· цитаты, ссылки на источник
Проблема
Ответ без источников нельзя проверить — это уверенная догадка.
Идея
Модель указывает, из какого чанка взято каждое утверждение.
Пример
«Возврат — 14 дней [1]», где [1] — refund-policy.md, раздел «Сроки».
Цена
Нужны метаданные с источником у каждого чанка.
Связи
Опираются на metadata; делают grounding проверяемым.

Refusal — научи её говорить «я не знаю»

Эксперт, которому ты доверяешь больше всего, — тот, кто говорит «этого нет в том, что у меня есть», вместо того чтобы уверенно заполнить пробел догадкой.

Самый опасный сбой RAG — отвечать всё равно, когда извлечение вернулось пустым или мимо. Так что сделай отказ (refusal) валидным, ожидаемым выводом: если чанки не содержат ответа, модель должна так и сказать, а не импровизировать из памяти. Система, что признаёт пробел, куда надёжнее той, что его замазывает, — и она вскрывает, где твоё извлечение нуждается в работе.

Retrieved chunksanswerin them?Answer + citations“Not in my sources”valid, expected outputyesno✗ never improvise the gap from memory
Обе ветки — правильный выход. Неправильно только одно: выдумать ответ из памяти.
PracticeRefusal· честное «я не знаю»
Проблема
Извлечение вернулось мимо, а модель всё равно отвечает.
Идея
«Этого нет в моих источниках» — нормальный, ожидаемый ответ.
Пример
Вопрос вне базы знаний → «В документации этого нет».
Цена
Пользователь иногда не получает ответа — зато не получает и выдумки.
Связи
Часть grounding; отказы показывают дыры в извлечении.

Grounding снижает галлюцинацию — но не кончает её

Ремни безопасности резко снижают смертность, но ты всё равно едешь осторожно. Сильная мера защиты — не повод перестать смотреть на дорогу.

Даже с идеальными чанками модель может неверно прочесть, переобобщить или смешать извлечённый факт с собственной памятью. Заземление режет галлюцинацию (hallucination) и делает её ловимой; оно её не убирает. Так что ты всё равно проверяешь — цитатами, что пользователь может сверить, и эвалами, что меряют верность. Относись к заземлению как к мощному контролю, а не как к гарантии.

Заземление значит, что ответ идёт только из извлечённого текста, с цитатами в доказательство, — и честным «я не знаю», когда фактов там нет.

§ 06

У RAG два этапа, что сбоят по-разному, так что ты меряешь их отдельно. Свали их вместе — и будешь неделями настраивать не ту половину. (Курс об эвалах копает глубже; здесь — RAG-специфичная форма.)

Два этапа — меряй извлечение и генерацию по отдельности

У ресторана с плохим блюдом два возможных виновника — доставленные ингредиенты или повар. Сначала пробуешь ингредиенты, иначе переучишь не того.

RAG-ответ может сбоить, потому что извлечение (retrieval) принесло не те чанки, или потому что генерация (generation) плохо ответила из верных чанков. Им нужны разные починки, так что меряй их отдельно: вернулись ли нужные чанки? и, при этих чанках, был ли ответ верным и полным? Большинство команд, что «не могут улучшить свой RAG», оценивают только финальный ответ и гадают, какую половину винить.

QuestionRetrievalfetch chunksGenerationanswer from chunksRetrieval evalright chunks back?Generation evalfaithful and complete?two meters,two fixes
У каждого этапа свой измеритель — и своя починка.

Retrieval Eval — вернулись ли нужные чанки?

Прежде чем судить эссе, проверь, что студенту вообще вручили нужные справочные страницы, — если нет, ничто из написанного не могло быть верным.

Оценивай извлечение само по себе — это retrieval eval: для набора вопросов с известными релевантными документами вернул ли поиск их в топе результатов? Долю таких попаданий часто называют recall@k. Это ловит плохой чанкинг, слабый поиск и отсутствие реранкинга напрямую — выше-по-течению причины большинства плохих ответов. Чини извлечение первым, потому что никакое улучшение промпта или модели не спасёт ответ, построенный из неверных чанков.

PracticeRetrieval Eval· оценка извлечения, recall@k
Проблема
По финальному ответу не видно, виноват ли поиск.
Идея
Вопросы с известными нужными документами: вернулись ли они в топ-k?
Пример
Из 50 реальных вопросов нужный документ в топ-5 у 41.
Что ловит
Плохой чанкинг, слабый поиск, отсутствие реранкинга.
Связи
Меряет precision & recall; чинится до faithfulness.

Faithfulness — был ли ответ верен чанкам?

Фактчекер читает ответ против цитируемых источников и помечает любое предложение, что источники на деле не подкрепляют.

Когда извлечение хорошо, оценивай ответ на верность (faithfulness): подкреплено ли каждое утверждение извлечёнными чанками, без выдумок и без противоречий? Также проверь, что он реально использовал извлечённое и ответил на вопрос. Здесь ты ловишь дрейф модели прочь от твёрдого контекста — и это измеримо, часто с другой моделью в роли оценщика (LLM-as-judge).

Answer sentence 1Answer sentence 2Answer sentence 3Graderoften another LLMsupported ✓supported ✓not in chunks ✗faithfulness = every claim backed by the retrieved chunks
Оценщик сверяет каждое предложение с чанками и помечает то, что они не подкрепляют.
TermFaithfulness· верность источникам
Что это
Каждое утверждение ответа подкреплено извлечёнными чанками.
Как работает
Оценщик — часто другая модель — сверяет предложения с чанками.
Пример
Два предложения подкреплены, третье — нет: оно помечается.
Подвох
Верный чанкам ответ всё равно должен отвечать на вопрос.
Связи
Меряет grounding; имеет смысл после хорошего retrieval eval.

Golden Set — строй эвал из реальных вопросов

Ты тестируешь мост грузовиками, что реально по нему поедут, а не весами, что нашёл удобными.

Твой эвал-набор — его часто зовут golden set — должен быть реальными вопросами, что задают пользователи, включая грязные и вне-области, каждый в паре с чанками, что должны извлечься, и известным хорошим ответом. Гоняй его на каждом изменении, чтобы видеть, реально ли новая стратегия чанкинга или реранкер помогли. Без этого ты настраиваешь RAG по анекдотам — а анекдоты врут.

questionshould retrievegood answerreal, messychunks 4, 9known answerparaphrasedchunk 12known answerout of scope— none“I don't know”Any changechunking · reranker · promptRun the golden setBetter or worse?measure, don't tune by anecdote
Таблица реальных вопросов с ожидаемыми чанками и ответами — прогоняется на каждом изменении.
PracticeGolden Set· эталонный набор вопросов
Проблема
Настройка по анекдотам: «вроде стало лучше».
Идея
Реальные вопросы + чанки, что должны найтись, + известный хороший ответ.
Пример

Грязный вопрос, перефразированный вопрос и вопрос вне области с ожидаемым «не знаю».

Цена
Время собрать и поддерживать набор.
Связи
Кормит и retrieval eval, и faithfulness.

RAG сбоит в двух местах. Меряй извлечение и генерацию отдельно, чини извлечение первым и строй эвал из реальных вопросов.

§ 07

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

Paste First — не RAG-ай то, что мог бы просто вставить

Ты не строишь библиотечный каталог для трёх книг на своём столе — ты просто их открываешь.

Если нужные факты малы и фиксированы — пара документов, короткая политика, — просто положи их в промпт. RAG отрабатывает свою сложность, когда знание слишком велико для контекста, часто меняется или должно фильтроваться по пользователю. Строить конвейер извлечения над тремя страницами — это эквивалент перебора в виде цикла агента ради одного вызова. Тянись к нему, когда данные вынуждают.

Your factsPaste into the promptsmall and fixed: a few docs, a short policyRAGtoo big for context · changes often · per-user filtersmallbig
Мало и стабильно — вставь в промпт. Много, меняется или зависит от пользователя — RAG.
PracticePaste First· сначала просто вставь в промпт
Проблема
Конвейер извлечения строят там, где он не нужен.
Идея
Малые стабильные факты кладут прямо в промпт.
Пример
Короткая политика на две страницы — в промпт, без индекса.
Когда брать RAG

Знание не влезает в контекст, часто меняется или фильтруется по пользователю.

Связи
Нижняя ступень лестницы; RAG — следующая.

Index Freshness — устаревшие данные это неверные данные

Телефонная книга полезна, только если её переиздают, — номера прошлого десятилетия уверенно и бесполезно неверны.

Обещание RAG — актуальные факты, а значит, твой индекс обязан оставаться актуальным. Когда исходные документы меняются, чанки и эмбеддинги надо обновить — переиндексация (reindexing), — иначе модель заземлит свои ответы в уверенном, устаревшем тексте. Планируй переиндексацию как часть системы, а не как мысль вдогонку, — свежесть это фича, что надо поддерживать, а не свойство, что получаешь раз.

Source docsedited · addedReindexre-chunk · re-embedIndexcurrent factsno planStale indexlast month's textOutdated answerconfident and wrong
Сверху — документы меняются, индекс пересобирается. Снизу — плана нет, ответы устаревают.
PracticeIndex Freshness· свежесть индекса, reindexing
Проблема
Документы поменялись, а индекс нет — ответы уверенно устарели.
Идея
Пере-чанкать и пере-эмбеддить изменённые документы по плану.
Пример
Политику обновили — её чанки пересобраны в тот же день.
Цена
Конвейер переиндексации, который надо поддерживать.
Связи
Держит grounding актуальным; трогает chunk и embedding.

Cost & Latency — следи за стоимостью и задержкой

Каждый лишний шаг в конвейере — эмбеддинг, поиск, реранк, набивка контекста, генерация — добавляет немного времени и немного денег к каждому вопросу.

RAG добавляет этапы, и каждый стоит задержки (latency) и токенов. Извлечение большего числа чанков, реранкинг, больший контекст — всё улучшает качество до некоторого предела и поднимает счёт всю дорогу. Так что настраивай на наименьшее число чанков, что отвечает хорошо, кэшируй где можешь и помни, что отличный ответ, что слишком медленный или дорогой, — не отличный ответ в проде.

Embed+ ms · + $Search+ ms · + $Rerank+ ms · + $Stuff context+ ms · + $Generate+ ms · + $every question pays for every stagefewest chunks that answer well · cache where you can
Каждый этап добавляет время и деньги — и платит за них каждый вопрос.
ConceptCost & Latency· стоимость и задержка
Что это
Каждый этап RAG добавляет время и токены к каждому вопросу.
Как работает

Больше чанков, реранк, больший контекст — лучше качество до предела, дороже всегда.

Пример
Сократить k с 20 до 5 после реранка — ответ тот же, счёт меньше.
Подвох
Отличный, но медленный или дорогой ответ — не отличный в проде.
Связи
Тянет против precision & recall и reranking.

RAG — одна ступень; модель остаётся компонентом

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

RAG сидит на лестнице выше обычного промпта и ниже инструментов и агентов: тянись к нему, когда модели нужны твои факты, и держи его за чистым интерфейсом, как любую зависимость. Извлечение кормит модель; оно не заменяет суждение вокруг модели. Та же дисциплина, что везде, — используй простейшую ступень, что работает, и держи модель заменяемой.

Tools & agentsact, not just answerRAGthe model needs your factsPlain promptfacts fit in the promptstart low,climb onlywhen forcedcomplexsimple
Обычный промпт → RAG → инструменты и агенты. Поднимайся, только когда задача вынуждает.

Как понятия связаны

Две смены одной кухни: ночью заготовка — нарезать и разложить по полкам; днём готовка — найти, выбрать и подать.

Всё в курсе — одна цепочка в два этапа. Офлайн (indexing): документы режутся на чанки с метаданными, превращаются в эмбеддинги и ложатся в векторную базу — и пересобираются, когда документы меняются (index freshness). В момент вопроса (query time): hybrid search находит кандидатов, reranking оставляет лучших, precision и recall решают, сколько их взять. Дальше grounding: модель отвечает только по контексту, с цитатами или честным отказом. Сбоку — paste first: если фактов мало, вся цепочка не нужна. А эвалы — retrieval eval, faithfulness, golden set — меряют каждое звено.

Indexing — offline, rerun when docs changeDocsChunk+ metadataEmbedVector DBANN indexQuery timeQuestionHybrid searchkeyword + vectorReranktop 50 → top 5Top-k chunksprecision ↔ recallnearestPaste firstskip RAG if facts are smallLLMcontext onlyAnswercited, or refusesgroundingEvals: right chunks? · faithful? · golden set of real questions
Сверху — индексация, ниже — путь вопроса, внизу — эвалы, что меряют всю цепочку.
Прежде чем выкатывать RAG-фичу
  • Нужен ли RAG вообще — или факты малы и стабильны достаточно, чтобы вставить в промпт?
  • Как чанкятся документы — по смыслу, самодостаточно, с метаданными и небольшим перекрытием?
  • Гибридное ли извлечение и переранжировано, или сырой векторный поиск, что ты не мерил?
  • Отвечает ли модель только из извлечённого текста, цитирует источники и говорит «я не знаю»?
  • Какой эвал для извлечения, отдельный от генерации?
  • Как индекс остаётся свежим, и сколько запрос стоит во времени и токенах?
Признаки, что проблема в извлечении
  • Ответы уверенно неверны, а ты ни разу не посмотрел на извлечённые чанки.
  • Только сырой векторный поиск — без запасного по ключевым словам, без реранкинга.
  • Чанки нарезаны по числу символов, разрезая предложения и таблицы.
  • Ты крутишь промпт и модель, чтобы починить то, что на деле промах извлечения.
  • Индекс не пересобирали с тех пор, как исходные документы изменились.
Признаки, что ты построил хорошо
  • Чанки семантичны и самодостаточны, помечены метаданными для фильтрации и цитат.
  • Извлечение гибридное + переранжировано, настроено на наименьшее число чанков, что отвечает хорошо.
  • Ответы заземлены и процитированы, с честным отказом, когда факты не извлеклись.
  • Ты меряешь извлечение и генерацию отдельно и починил извлечение первым.
  • У индекса есть план свежести, а RAG сидит за интерфейсом, что можно заменить.

Шпаргалка: все 22 понятия

Основы

Knowledge Cutoffдата отсечки

Модель знает только обучающие данные до одной даты — не твои документы.

RAGRetrieval-Augmented Generation

Извлечь нужные чанки, положить в контекст, ответить по ним.

Groundingзаземление

Ответ опирается на извлечённый текст, и это можно проверить.

Чанкинг

Chunkчанк

Пассаж в несколько сотен слов — единица поиска; размер подбирают измерением.

Structure-Aware Chunkingнарезка по структуре

Резать по заголовкам и абзацам, с небольшим перекрытием.

Metadataметаданные

Источник, дата, раздел, права — для фильтра и цитат.

Эмбеддинги и поиск

Embeddingэмбеддинг

Вектор — координаты смысла текста.

Vector Searchсемантический поиск

Найти чанки, ближайшие к вопросу по смыслу.

Vector Databaseвекторная база, ANN

Хранит векторы и находит ближайшие за миллисекунды.

Similar ≠ Relevantсходство ≠ релевантность

Близкий по смыслу чанк не обязательно содержит ответ.

Качество извлечения

Hybrid Searchkeyword + vector

Поиск по словам и по смыслу вместе, результаты сливаются.

Rerankingпереранжирование

Широко набрать кандидатов, аккуратно выбрать лучшие немногие.

Precision & Recallточность и полнота

Мало чанков — ответ упущен, много — утонул; k меряют.

Заземление

Context-Only Answeringтолько по контексту

Отвечать только из извлечённых чанков, память модели — нет.

Citationsцитаты

Каждое утверждение ссылается на свой чанк и проверяемо.

Refusal«я не знаю»

Нет ответа в чанках — честно сказать, а не выдумывать.

Оценка

Retrieval Evalrecall@k

Вернулись ли нужные чанки в топ-k? Чинить первым.

Faithfulnessверность источникам

Каждое утверждение ответа подкреплено чанками.

Golden Setэталонный набор

Реальные вопросы с ожидаемыми чанками и ответами — на каждом изменении.

Строить хорошо

Paste Firstсначала вставь в промпт

Мало стабильных фактов — промпт, а не RAG.

Index Freshnessсвежесть индекса

Документы поменялись — переиндексируй, иначе ответы устарели.

Cost & Latencyстоимость и задержка

Каждый этап стоит времени и токенов; бери наименьшее k, что отвечает хорошо.

RAG — это система поиска с моделью на конце. Сделай чанки правильно — и ответ последует; модель редко была проблемой.

Конец экспресс-курса · 7 глав · 22 понятия

Дальше — практика: построй самый маленький настоящий RAG над горсткой своих документов — режь по структуре, эмбедди, ищи и пусть модель отвечает с цитатами и честным «я не знаю». Потом, прежде чем что-то настраивать, напиши десять реальных вопросов и проверь, что извлекается. Но держи одну мысль выше прочих: когда ответ неверен, смотри сначала на чанки. В RAG модель редко проблема — твоё извлечение да, и это та половина, что ты контролируешь.