RAG: база знаний для ИИ-агентов своими руками
RAG: база знаний для ИИ-агентов своими руками
RAG-система (Retrieval Augmented Generation) позволяет ИИ-агентам отвечать на основе ваших документов: от корпоративной базы знаний до технической документации. В этом руководстве построим RAG своими руками — от чанкинга до векторного поиска.
Как работает RAG
Документы → Чанкинг → Эмбеддинги → Векторная база
↑
Вопрос пользователя → Эмбеддинг → Поиск похожих фрагментов
↓
LLM = Вопрос + Найденные фрагменты → Ответ
Этапы построения RAG
Этап 1: чанкинг документов
Документы разбиваются на фрагменты. Правила чанкинга:
| Параметр | Рекомендация |
|---|---|
| Размер чанка | 300-800 токенов |
| Перекрытие | 10-15% между чанками |
| Границы | Разрывать по абзацам/разделам |
| Метаданные | Источник, раздел, дата |
Пример:
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=150
)
chunks = splitter.split_text(document)
Этап 2: эмбеддинги
Каждый чанк превращается в вектор через модель эмбеддингов:
from openai import OpenAI
client = OpenAI()
vectors = client.embeddings.create(
model="text-embedding-3-small",
input=chunks
)
Этап 3: векторная база
Сохраните векторы в хранилище. Простой вариант — Chroma:
import chromadb
client = chromadb.Client()
collection = client.create_collection("docs")
collection.add(
documents=chunks,
ids=[f"chunk-{i}" for i in range(len(chunks))],
metadatas=[{"source": "guide.md"} for _ in chunks]
)
Этап 4: поиск и ответ
При вопросе: эмбеддинг вопроса → поиск ближайших чанков → запрос к LLM:
query_vec = client.embeddings.create(
model="text-embedding-3-small", input=[question]
)
results = collection.query(
query_embeddings=query_vec.data[0].embedding,
n_results=5
)
# отправляем вопрос + найденные фрагменты в LLM
Выбор инструментов
| Компонент | Варианты | Когда выбирать |
|---|---|---|
| Эмбеддинги | OpenAI, BGE, E5, Cohere | Облако / локально |
| Векторная база | Chroma, Qdrant, Weaviate, pgvector | Прототип / production |
| LLM | GPT, Claude, локальные | Качество / приватность |
| Фреймворк | LangChain, LlamaIndex | Ускорение разработки |
Интеграция с агентами
RAG подключается к ИИ-агентам через MCP-сервер памяти или API: агент получает инструмент «поиск по базе знаний» и использует его при ответах. В OpenCode:
{
"mcp": {
"knowledge": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-server-rag", "--db", "./kb"]
}
}
}
Оценка качества RAG
| Метрика | Что проверяет |
|---|---|
| Retrieval precision | Найденные фрагменты релевантны? |
| Answer faithfulness | Ответ соответствует фрагментам? |
| Answer relevance | Ответ отвечает на вопрос? |
| Coverage | Все нужные данные найдены? |
Ошибки и решения
| Ошибка | Решение |
|---|---|
| Контекст теряется между чанками | Перекрытие, разбивка по разделам |
| Поиск не находит нужное | Гибридный поиск (векторный + ключевой) |
| Устаревшие данные | Плановое переобновление индекса |
| Дорого хранить всё | Фильтры, индексация только важного |
| Ответы без ссылок | Возвращайте метаданные с источниками |
Таблица: RAG vs fine-tuning
| Параметр | RAG | Fine-tuning |
|---|---|---|
| Данные | Внешняя база | В весах модели |
| Обновление | Мгновенно | Переобучение |
| Стоимость | Низкая | Высокая |
| Прозрачность | Есть источники | Нет |
| Когда использовать | Актуальные данные | Стиль/формат |
Гибридный поиск
Только векторный поиск теряет точные совпадения по ключевым словам. Гибридный поиск объединяет два механизма:
| Механизм | Находит |
|---|---|
| Векторный | Семантически похожие фрагменты |
| Ключевой (BM25) | Точные совпадения терминов |
| Гибрид (RRF) | Слияние обоих результатов |
В Chroma комбинируйте `query` (текстовый поиск) и `query_embeddings` (векторный), затем объединяйте ранжирование. Это заметно повышает точность на технической документации.
Обновление индекса
База знаний устаревает: добавьте скрипт обновления, который проверяет изменения документов (хэши) и переиндексирует только изменившиеся чанки. В OpenCode это легко автоматизировать автономным запуском по расписанию.
Что дальше
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Article",
"headline": "RAG: база знаний для ИИ-агентов своими руками",
"description": "RAG-системы: как построить базу знаний для ИИ-агентов своими руками — эмбеддинги, векторы, чанкинг, поиск и интеграция. Пошаговое руководство.",
"datePublished": "2026-08-20",
"image": "/images/articles/rag-sistemy.webp",
"author": {
"@type": "Organization",
"name": "Refertur",
"url": "https://refertur.net",
"email": "refertur@yandex.ru",
"sameAs": [
"https://t.me/realhikaz",
"https://wa.me/+77054384888"
]
},
"publisher": {
"@type": "Organization",
"name": "Refertur",
"url": "https://refertur.net",
"email": "refertur@yandex.ru",
"sameAs": [
"https://t.me/realhikaz",
"https://wa.me/+77054384888"
]
},
"mainEntityOfPage": "https://ai-courses.refertur.net/articles/rag-sistemy/"
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Что такое RAG простыми словами?",
"acceptedAnswer": {
"@type": "Answer",
"text": "RAG (Retrieval Augmented Generation — генерация с дополнением из поиска) — это способ дать ИИ-модели доступ к вашим данным: документы разбиваются на части, превращаются в векторы, и при вопросе модель сначала находит релевантные фрагменты, а потом отвечает на их основе."
}
},
{
"@type": "Question",
"name": "Зачем нужна RAG-система?",
"acceptedAnswer": {
"@type": "Answer",
"text": "RAG нужен, чтобы ИИ отвечал на основе ваших документов, а не только своих знаний: актуальные данные, корпоративные документы, базы знаний. Без RAG модель не знает ваш контент; с RAG — отвечает с учётом ваших материалов и ссылается на них."
}
},
{
"@type": "Question",
"name": "Как построить RAG своими руками?",
"acceptedAnswer": {
"@type": "Answer",
"text": "RAG строится в 4 шага: 1) разбейте документы на фрагменты (чанки), 2) создайте эмбеддинги (векторы) через модель эмбеддингов, 3) сохраните в векторную базу (Chroma, Qdrant, PGVector), 4) при вопросе ищите похожие фрагменты и отправляйте модели вместе с вопросом."
}
},
{
"@type": "Question",
"name": "Какие инструменты нужны для RAG?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Для RAG нужны: модель эмбеддингов (OpenAI embeddings, BGE, E5), векторная база (Chroma, Qdrant, Weaviate, PostgreSQL+pgvector) и LLM для ответов. Для простых прототипов достаточно Python + Chroma + openai/llamaindex."
}
},
{
"@type": "Question",
"name": "Какие ошибки допускают при построении RAG?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Частые ошибки: слишком большие или маленькие чанки (теряется контекст), плохие метаданные (нельзя фильтровать), игнорирование обновлений (устаревшие данные), отсутствие гибридного поиска (только векторный без ключевых слов), нет оценки качества ответов."
}
}
]
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Главная",
"item": "https://ai-courses.refertur.net/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Статьи",
"item": "https://ai-courses.refertur.net/articles/"
},
{
"@type": "ListItem",
"position": 3,
"name": "RAG: база знаний для ИИ-агентов своими руками",
"item": "https://ai-courses.refertur.net/articles/rag-sistemy/"
}
]
}
]
}
Следующие шаги
Часто задаваемые вопросы
Заключение
RAG-система своими руками — это 4 простых этапа, которые дают ИИ-агенту вашу базу знаний. Начните с прототипа на Chroma и OpenAI, затем добавьте гибридный поиск и обновления. Соберём базу знаний для вашего бизнеса.
*Отчёт создан: [email protected] · [refertur.net](https://refertur.net) · [t.me/realhikaz](https://t.me/realhikaz) · [WhatsApp](https://wa.me/+77054384888)*
*SEO, продвижение, разработка, сайты, веб-приложения, сервисы, калькуляторы, контент-маркетинг, каталоги, отчёты, аудиты — на заказ. Напишите нам в [WhatsApp](https://wa.me/+77054384888?text=%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D1%81%D1%82%D0%B2%D1%83%D0%B9%D1%82%D0%B5%2C%20%D1%85%D0%BE%D1%87%D1%83%20%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D1%81%D0%B5%D0%BE) — ответим в течение часа.*
Нужен аудит, SEO или разработка?
Сделаем продвижение, сайт, сервис или калькулятор под вашу задачу — ответим в течение часа.
Написать в WhatsAppTelegram