RAG

Автор:

Архитектурный подход, объединяющий извлечение информации из внешних источников (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)