Понятный ML - Статьи по машинному обучению
Назад к статьям

RAG

Елена Капаца
13 мин

Архитектурный подход, объединяющий извлечение информации из внешних источников (retrieval) с генеративными возможностями языковых моделей (generation)

Машинное обучение

RAG (Retrieval-Augmented Generation — «Генерация, усиленная извлечением данных») — это архитектурный подход, который объединяет извлечение информации из внешних источников (retrieval) с генеративными возможностями языковых моделей (generation). Это мощная техника для создания более точных, прозрачных и масштабируемых систем на базе LLM (Large Language Models), особенно когда важно использовать актуальные или специфичные данные.

Обычные языковые модели (например, GPT-3 или GPT-4) генерируют текст на основе информации, "запомненной" во время обучения. Но у них есть ограничения:

    • Знания устаревают.

    • Модель может "галлюцинировать" — уверенно выдавать неправду.

    • Невозможно легко адаптироваться к новым данным.

    RAG решает эти проблемы, добавляя внешний этап поиска знаний. Весь процесс можно разбить на два этапа:

    1. Retrieval (извлечение):

      • Получив запрос пользователя, система ищет релевантные документы в базе знаний (например, векторной базе, файлах, SQL-базе или API).

    2. Generation (генерация):

      • Извлечённая информация подаётся в языковую модель как дополнительный контекст.

      • Модель генерирует финальный ответ, основываясь на реальных данных.

    Такой подход позволяет:

    • Использовать актуальную информацию (например, из базы документов компании).

    • Дать ссылку на источник ответа.

    • Снизить риск "галлюцинаций".


Популярные движки и инструменты для RAG

Эти базы позволяют искать документы по смыслу (семантике), а не просто по ключевым словам.

Векторное хранилище Особенности
Pinecone SaaS, масштабируемое, быстрый поиск
Weaviate Open-source + REST API + встроенные модули
FAISS Open-source от Facebook, работает локально, быстрый
Qdrant Rust + gRPC/REST, open-source, поддерживает фильтрацию
Milvus Подходит для крупных кластеров, open-source

Языковые модели (LLM)

Модель Подходит для Примечание
GPT-4 (OpenAI) Продвинутые ответы API, высокая точность
Claude (Anthropic) Этические и юридические ответы Большие контексты
Mistral, LLaMA Self-hosted решения Можно использовать локально
Gemini (Google) Мультимодальные задачи Поддерживает изображения и текст

Интеграционные фреймворки

Фреймворк Назначение
LangChain Пайплайны с LLM, подключение ретриверов и памяти
LlamaIndex (ex-GPT Index) Индексация и эффективный поиск по документам
Haystack Немецкий open-source фреймворк для RAG, NLP и QA
RAGStack (Pinecone + LangChain + OpenAI) Готовое решение от Pinecone для продакшна


Простой пример на LangChain + FAISS

from langchain.vectorstores import FAISS

from langchain.embeddings import OpenAIEmbeddings

from langchain.chains import RetrievalQA

from langchain.llms import OpenAI

Загрузка документов

from langchain.document_loaders import TextLoader

loader = TextLoader("docs/handbook.txt")

documents = loader.load()

Индексация

embeddings = OpenAIEmbeddings()

db = FAISS.from_documents(documents, embeddings)

Построение цепочки

retriever = db.as_retriever()

qa_chain = RetrievalQA.from_chain_type(

llm=OpenAI(),

retriever=retriever

)

Запрос

response = qa_chain.run("Какие есть правила увольнения?")

print(response)