Основы RAG-систем. Часть 3

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

Цикл «Базовый минимум» (из 4 частей):

Базовый минимум. Часть 1: Принципы работы больших языковых моделей;

Базовый минимум. Часть 2: Искусство промпт-инжиниринга;

Базовый минимум. Часть 3: Архитектура RAG-систем (текущий материал);

Базовый минимум. Часть 4: Интеллектуальные ИИ-агенты.

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

Содержание

Уязвимые места стандартных языковых моделей

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

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

Проблематика LLM

Дополнительным технологическим барьером является ограниченность контекстного окна. Модели не всегда под силу удерживать в оперативной памяти объемные документы или сложные логические цепочки. Если объем входящих данных превышает установленный лимит, информационная целостность нарушается из-за отсечения части текста.

Следовательно, без интеграции внешних информационных ресурсов и инструментов верификации, ответы нейросетей могут быть нестабильными и требующими постоянной проверки. Именно эти дефициты привели к разработке методов, интегрирующих внешние базы знаний для доступа к верифицированным сведениям.

Концепция RAG: определение и актуальность

В официальных материалах OpenAI технология Retrieval-Augmented Generation (RAG) описывается как методология, обогащающая ответы ИИ путем инъекции релевантного внешнего контекста в запрос непосредственно в процессе генерации.

Схема RAG

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

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

Механика фрагментации данных (чанкование)

Чанкование (chunking) представляет собой процесс деления массивных документов на компактные отрезки (чанки), которые становятся базовыми единицами для индексации и последующего поиска. Поскольку языковая модель получает информацию не монолитом, а в виде набора отобранных фрагментов, качество этой сегментации критически влияет на полноту и точность итогового ответа.

Пример чанкования

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

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

Принципы функционирования RAG

Общая схема работы RAG
Адаптировано по материалам: Gao Y. et al. Retrieval-Augmented Generation for Large Language Models: A Survey // arXiv. 2023. https://arxiv.org/abs/2312.10997.

Рассмотрим рабочий цикл системы: пользователь интересуется актуальными событиями. Стандартная модель, лишенная доступа к сети, признает свою неосведомленность, так как ограничена датой обучения.

В рамках RAG-подхода (обозначен синими стрелками) документы проходят препроцессинг: делятся на чанки, трансформируются в векторные эмбеддинги и индексируются в специализированной базе.

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

Далее следует фаза augmentation (обогащение): полученные фрагменты проходят ранжирование, фильтрацию и, при необходимости, суммаризацию.

На финальном этапе generation сформированный контекст вместе с исходным вопросом передается в LLM, которая генерирует обоснованный ответ.

Архитектурные вариации

Эволюция RAG-систем
Источник: Gao Y. et al. Retrieval-Augmented Generation for Large Language Models: A Survey // arXiv. 2023.

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

В центре — Advanced RAG: здесь добавляются промежуточные слои интеллектуальной обработки. Система может перефразировать запрос (rewrite) для улучшения поиска, выполнять переранжирование (rerank) результатов по значимости и очищать данные от мусора.

Справа — Modular RAG: гибкая архитектура, состоящая из независимых функциональных блоков. Она включает маршрутизацию запросов, механизмы долгосрочной памяти и методы fusion (объединения результатов из разных поисковых стратегий).

Сравнительный анализ: RAG против дообучения

RAG vs Fine-tuning
Сравнение стратегий адаптации LLM [1]

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

Промпт-инжиниринг фокусируется на искусстве формулирования запросов для извлечения максимально качественного результата из уже имеющихся весов модели.

Дообучение (Fine-tuning) подразумевает глубокую техническую модификацию самой нейросети. Это позволяет добиться исключительной специализации, но связано с высокими затратами на вычислительные мощности и регулярное обновление обучающей выборки.

Практический кейс: создание простейшего RAG-конвейера

Для демонстрации механизма реализуем прототип Naive RAG на Python. В качестве базы знаний возьмем срез Википедии на русском языке, а роль «интеллекта» исполнит компактная модель Qwen2.5-3B-Instruct. Полный код доступен для запуска в Google Colab.

Этап 1. Подготовка корпуса текстов и сегментация

import torch
from datasets import load_dataset
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_core.documents import Document

device = "cuda" if torch.cuda.is_available() else "cpu"

Загружаем первые 500 статей русской Википедии

dataset = load_dataset( "wikimedia/wikipedia", "20231101.ru", split="train[:500]" )

documents = [ Document(page_content=row["text"], metadata={"title": row["title"]}) for row in dataset ]

Настраиваем параметры фрагментации

splitter = RecursiveCharacterTextSplitter( chunk_size=800, chunk_overlap=100 )

chunks = splitter.split_documents(documents) print(f"Количество созданных чанков: {len(chunks)}")

Результат:

Количество созданных чанков: 17892

Здесь мы упаковываем каждую статью в объект Document, после чего дробим текст на фрагменты по 800 символов. Перекрытие в 100 символов гарантирует, что важная информация не будет разорвана на границе блоков.

Этап 2. Формирование векторного индекса

from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings

Подключаем мультиязычную модель эмбеддингов

embedding_model = HuggingFaceEmbeddings( model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", model_kwargs={"device": device} )

Создаем векторное хранилище

vectorstore = Chroma.from_documents( documents=chunks, embedding=embedding_model )

Для перевода текста в математические векторы используется эффективная модель от sentence-transformers. Хранилище Chroma позволяет мгновенно индексировать данные для семантического поиска.

Этап 3. Извлечение информации (Retrieval)

import textwrap

def search(query, k=3): results = vectorstore.similarity_search(query, k=k) for i, doc in enumerate(results, 1): print(f"\n--- Фрагмент {i} ---") print(f"Источник: {doc.metadata['title']}") print(textwrap.fill(doc.page_content[:500], 80))

search("Кто такой Пушкин?")

Вывод системы:

--- Фрагмент 1 ---
Источник: Пушкин, Александр Сергеевич
... Биография Происхождение Александра Сергеевича Пушкина идёт от разветвлённого 
дворянского рода...

Данная функция находит три наиболее релевантных куска текста. В реальной эксплуатации этот этап происходит «под капотом» при формировании ответа.

Этап 4. Формирование ответа (Generation)

from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = "Qwen/Qwen2.5-3B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name) llm = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")

def generate_answer(query, k=3):

1. Retrieval

results = vectorstore.similarity_search(query, k=k)
context = "\n\n".join([doc.page_content for doc in results])

# 2. Формирование обогащенного промпта
prompt = f"Используя предоставленный контекст, ответь на вопрос.\n\nКонтекст: {context}\n\nВопрос: {query}\n\nОтвет:"

# 3. Генерация
inputs = tokenizer(prompt, return_tensors="pt").to(llm.device)
outputs = llm.generate(**inputs, max_new_tokens=200, temperature=0.7)

answer = tokenizer.decode(outputs[0], skip_special_tokens=True)[len(prompt):].strip()
print(f"\nВопрос: {query}\n\nОтвет: {answer}")

generate_answer("Кто такой Пушкин?")

Система синтезирует ответ, опираясь на факты из извлеченного контекста (биография, предки, Ганнибал), при этом не просто копируя текст, а создавая осмысленное повествование.

Резюме

Подводя итог: RAG нивелирует проблему устаревания данных и риск галлюцинаций, превращая LLM из «вещи в себе» в интеллектуальный интерфейс к динамическим базам знаний. Усложнение стратегии RAG ведет к росту автономности: система начинает самостоятельно корректировать поисковые запросы и верифицировать найденные результаты.

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

Далее — Базовый минимум: ИИ-агенты (в процессе подготовки).

Список литературы и источников:

1. Gao Y. et al. Retrieval-Augmented Generation for Large Language Models: A Survey // arXiv. 2023. URL: https://arxiv.org/abs/2312.10997.

2. Lewis P. et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks // NeurIPS. — 2020.

3. Martineau K. What is retrieval-augmented generation (RAG)? // IBM Research Blog. — 2023. URL: https://research.ibm.com/blog/retrieval-augmented-generation-RAG.

4. Основы RAG: обучение ИИ работе с актуальными данными // Блог Yandex Cloud. — 2025. URL: https://yandex.cloud/ru/blog/posts/2025/05/retrieval-augmented-generation-basics.

5. Архитектура RAG: механизмы генерации с дополненной выборкой // База знаний Sber.ru. — 2025. URL: https://developers.sber.ru/help/business-development/what-is-rag.

 

Источник

Читайте также