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.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
# 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 эффективно справляется с вопросами, на которые у неё нет предварительных знаний, благодаря интеграции с системами поиска.
Модель RAG функционирует в два этапа: сначала она извлекает релевантные документы из внешнего источника, а затем использует эти данные для генерации ответа. Это достигается с помощью комбинации моделей поиска и генерации. Основные компоненты 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: dynamic knowledge, легко обновлять, прозрачно (видны sources). Fine-tune: лучше стиль/тон, фиксированный knowledge. Комбинируются.
512-1024 токена обычно. Больше — контекст размазывается, меньше — теряется смысл. Test для your corpus.
Снижены, но не исключены. Prompt: "Если ответа нет в context — скажи \"Не знаю\"". + chain-of-citations.
Бесплатный тариф — 20 мониторов, проверки раз в 5 минут, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.