← Назад к вопросам
Что такое Retrieval Augmented Generation?
1.0 Junior🔥 111 комментариев
#Опыт и soft skills
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Retrieval Augmented Generation (RAG)
RAG — техника, где LLM (Large Language Model) использует внешние данные для генерации более точных ответов. Это решает проблему "галлюцинаций" (выдумывания информации) в больших языковых моделях.
Проблема, которую решает RAG
Без RAG:
# Спрашиваем LLM (GPT-4, Claude)
question = "Какой доход компании X в Q4 2025?"
# LLM отвечает на основе своих весов (данные до Feb 2025)
response = llm.generate(question)
# Результат может быть неточным или вымышленным
# "Компания X имела доход $500M в Q4 2025" (вымышлено!)
С RAG:
question = "Какой доход компании X в Q4 2025?"
# Шаг 1: Найти релевантные документы
documents = vector_store.search(question, top_k=3)
# [Квартальный отчёт X за Q4 2025, пресс-релиз, финансовый обзор]
# Шаг 2: Передать контекст LLM
context = "\n".join([doc.text for doc in documents])
prompt = f"На основе этого контекста, ответь на вопрос:\n{context}\n\nВопрос: {question}"
response = llm.generate(prompt)
# "По квартальному отчёту, доход компании X в Q4 2025 составил $512M"
# Точный ответ на основе реальных данных
Как работает RAG (архитектура)
Компоненты RAG:
┌─────────────────────────────────────┐
│ 1. Подготовка документов │
│ - Загрузка данных (PDF, DB, API) │
│ - Разбиение на chunks │
│ - Создание embeddings │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 2. Vector Store (хранилище) │
│ - Pinecone, Weaviate, Milvus │
│ - Или локально: FAISS │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 3. Поиск релевантных документов │
│ - Embedding пользовательского вопроса
│ - Similarity search в Vector Store │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 4. LLM с контекстом │
│ - Передача найденных документов │
│ - Генерация ответа │
└─────────────────────────────────────┘
Реализация RAG для Data Engineer
Шаг 1: Подготовка документов
from langchain.document_loaders import PDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
# Загрузить документы
loader = PDFLoader("financial_reports.pdf")
documents = loader.load()
# Разбить на chunks (важно для контекста LLM)
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # Размер куска
chunk_overlap=200 # Перекрытие между кусками
)
chunks = splitter.split_documents(documents)
# Создать embeddings (векторные представления)
embeddings = OpenAIEmbeddings()
vector_store = FAISS.from_documents(chunks, embeddings)
vector_store.save_local("financial_reports_db")
Шаг 2: Поиск и генерация
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
# Загрузить Vector Store
vector_store = FAISS.load_local("financial_reports_db", embeddings)
retriever = vector_store.as_retriever(search_kwargs={"k": 3}) # Top 3 документа
# Создать RAG pipeline
template = """На основе этого контекста, ответь на вопрос.
Контекст:
{context}
Вопрос: {question}
Ответ:"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI(model="gpt-4", temperature=0)
rag_chain = (
{"context": retriever | (lambda docs: "\n".join([d.page_content for d in docs])),
"question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
# Запрос
result = rag_chain.invoke("Какой доход в Q4 2025?")
print(result)
RAG для Data Engineer задач
1. Документирование данных
# RAG помогает найти информацию о схеме БД
user_query = "Как рассчитывается метрика MAU?"
# RAG поиск в документации:
# - wiki страницы про метрики
# - SQL код витрин
# - Комментарии в коде
# - Jira тикеты
relevant_docs = retriever.get_relevant_documents(user_query)
# [Документ о методологии MAU, SQL запрос витрины, техдок]
2. Поиск по метаданным схемы
# Вопрос: "Какие таблицы содержат информацию о платежах?"
documents = [
{"content": "fact_payment table contains transaction data", "source": "schema.md"},
{"content": "dim_payment_method describes payment types", "source": "schema.md"},
{"content": "fact_subscription has renewal payments", "source": "schema.md"},
]
vector_store = FAISS.from_texts([d["content"] for d in documents], embeddings)
results = vector_store.similarity_search("payment tables", k=2)
# fact_payment, fact_subscription
3. Анализ логов и ошибок
# RAG для поиска решения проблемы в логах
error = "ETL failed: connection timeout after 30s"
# Поиск в базе логов прошлых ошибок и решений
similar_errors = retriever.get_relevant_documents(error)
# [Решение #123 от 2025-03-15, Similar error #456, Runbook]
response = llm.generate(
f"Error: {error}\n\nSimilar cases: {similar_errors}\n\nProposed solution:"
)
Улучшения RAG
Hybrid Search — комбинация semantic (embeddings) и keyword (BM25) поиска:
from langchain.retrievers import BM25Retriever, EnsembleRetriever
bm25_retriever = BM25Retriever.from_documents(documents)
semantic_retriever = vector_store.as_retriever()
ensemble_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, semantic_retriever],
weights=[0.5, 0.5] # 50/50 вес
)
results = ensemble_retriever.get_relevant_documents(question)
Re-ranking — улучшение качества найденных документов:
from langchain.retrievers.multi_query import MultiQueryRetriever
# LLM генерирует несколько вариантов вопроса
multi_query_retriever = MultiQueryRetriever.from_llm(
retriever=vector_store.as_retriever(),
llm=model
)
# Ищет по всем вариантам и комбинирует результаты
results = multi_query_retriever.get_relevant_documents(question)
Когда RAG полезен для Data Engineer
✅ Хорошо подходит:
- Поиск информации в документации и wiki
- Анализ логов и багов
- Ответы на вопросы о схеме БД
- Объяснение метрик и KPI
- Генерация SQL запросов на основе примеров
❌ Не подходит:
- Реальная обработка больших данных (Spark/SQL быстрее)
- Точные вычисления (используй SQL)
- Сложная логика преобразований (код + unit тесты)
Инструменты для RAG
- LangChain — фреймворк для построения RAG приложений
- LlamaIndex — специализирован на работе с документами
- Pinecone — managed Vector Database
- Weaviate — open-source Vector DB
- FAISS — локальное хранилище векторов (от Meta)
Итог
RAG — это способ улучшить ответы LLM, предоставляя ему свежие и релевантные данные из внешних источников. Для Data Engineer это особенно полезно для:**
- Быстрого поиска информации в документации
- Генерации SQL запросов на основе примеров
- Анализа и объяснения проблем в логах
- Создания chatbot'ов для данных и аналитики