Skip to content

RAG: Retrieval-Augmented Generation

Коротко:

RAG (Retrieval-Augmented Generation) — pattern для "grounding" LLM на специфических данных без fine-tuning. Шаги: (1) embed documents в vectors → store в vector DB (Qdrant/Pinecone/Weaviate), (2) embed user query → retrieve top-k похожих chunks, (3) inject retrieved context в prompt → LLM generates answer со ссылками. Используется в ChatBot на docs, enterprise Q&A, code search. Frameworks: LlamaIndex, LangChain, Haystack.

Ниже: подробности, пример, смежные термины, FAQ.

Попробовать бесплатно →

Подробности

  • Chunking: split docs на 500-1500 token chunks (semantic или fixed)
  • Embedding models: OpenAI text-embedding-3-large, Cohere embed-v3, jina-embeddings-v3
  • Vector DB: Qdrant (Rust open-source), Pinecone (managed), Weaviate, pgvector (PostgreSQL extension)
  • Retrieval: ANN (HNSW) top-k=5-20 chunks + rerank via Cohere/Voyage
  • Generation: LLM with augmented context, often с цитатами в answer

Пример

# RAG в LangChain.js
import { OpenAIEmbeddings } from '@langchain/openai';
import { QdrantVectorStore } from '@langchain/qdrant';

const vectorStore = await QdrantVectorStore.fromExistingCollection(
  new OpenAIEmbeddings(), { url: 'http://qdrant:6333', collectionName: 'docs' }
);
const relevantDocs = await vectorStore.similaritySearch(userQuery, 5);
// Inject relevantDocs в prompt
const answer = await chatModel.invoke([
  { role: 'system', content: `Context: ${relevantDocs.join('

')}` },
  { role: 'user', content: userQuery }
]);

Смежные термины

Что такое RAG (Retrieval-Augmented Generation)?

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

Как работает RAG?

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

  • Модуль поиска: осуществляет поиск документов, используя такие алгоритмы, как BM25 или Dense Retrieval.
  • Генератор: использует извлеченные документы для формирования ответов. Обычно это модель на основе трансформеров, такая как BART или T5.

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

Практический пример использования RAG

Рассмотрим пример реализации RAG с использованием библиотеки Hugging Face Transformers. Для начала необходимо установить необходимые пакеты:

pip install transformers datasets faiss-cpu

Далее создадим простой пример, где мы будем использовать RAG для ответа на вопрос.

from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration

# Загружаем токенизатор и модель
tokenizer = RagTokenizer.from_pretrained('facebook/rag-sequence-nq')
model = RagSequenceForGeneration.from_pretrained('facebook/rag-sequence-nq')

# Инициализируем ретривер
retriever = RagRetriever.from_pretrained('facebook/rag-sequence-nq', use_dummy_dataset=True)

# Пример запроса
question = "Как работает RAG?"
inputs = tokenizer(question, return_tensors='pt')

# Извлекаем документы
retrieved_docs = retriever(inputs['input_ids'])

# Генерируем ответ
outputs = model.generate(inputs['input_ids'], retrieved_docs['context_ids'])
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(answer)

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

Больше по теме

Часто задаваемые вопросы

RAG vs fine-tuning?

RAG: dynamic knowledge, легко обновлять, прозрачно (видны sources). Fine-tune: лучше стиль/тон, фиксированный knowledge. Комбинируются.

Наилучший chunk size?

512-1024 токена обычно. Больше — контекст размазывается, меньше — теряется смысл. Test для your corpus.

Hallucinations при RAG?

Снижены, но не исключены. Prompt: "Если ответа нет в context — скажи \"Не знаю\"". + chain-of-citations.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 20 мониторов, проверки раз в 5 минут, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.