RAG база данных, retrieval augmented generation, векторная база данных, LangChain, ChromaDB, embedding, AI для бизнеса, автоматизация, DeepSeek, OpenAI embeddings">
RAG (Retrieval-Augmented Generation) — это архитектура искусственного интеллекта, которая объединяет возможности языковой модели (LLM) с поисковой системой по собственной базе знаний. Вместо того чтобы генерировать ответ «вслепую», модель сначала находит релевантные фрагменты в вашей базе данных, а затем формулирует точный ответ на основе найденных данных.
Классические чат-боты работают на «общих знаниях» модели, натренированных на публичных данных до определённой даты. Это означает:
RAG решает все эти проблемы. Система берёт ваши документы (инструкции, прайс-листы, FAQ, договоры, регламенты), разбивает их на фрагменты, индексирует в векторной базе и при каждом запросе пользователя извлекает только релевантную информацию.
| Преимущество | Описание |
|---|---|
| 🎯 Точность | Ответы основаны на ваших реальных данных, а не на фантазии модели |
| 🔄 Актуальность | Можно мгновенно обновлять базу знаний без переобучения модели |
| 🔒 Контроль | Вы решаете, какая информация доступна модели |
| 📎 Прозрачность | Можно указать источник каждого факта в ответе |
| 💰 Экономия | Не нужно обучать собственную модель с нуля (экономия десятки тысяч долларов) |
| ⚡ Гибкость | Поддержка любых форматов: PDF, HTML, Markdown, базы данных, API |
RAG-система состоит из пяти последовательных компонентов:
Индексация — это одноразовый (или периодический) процесс:
При каждом запросе пользователя:
Соберите все документы, которые должны стать базой знаний:
Embedding-модель превращает текст в векторы. От её качества зависит точность поиска.
| Модель | Размерность | Качество | Стоимость |
|---|---|---|---|
| text-embedding-3-small (OpenAI) | 1536 | ★★★★☆ | ~$0.00002/1K |
| text-embedding-3-large (OpenAI) | 3072 | ★★★★★ | ~$0.00013/1K |
| multilingual-e5-large | 1024 | ★★★★☆ | Бесплатно |
| bge-m3 (BAAI) | 1024 | ★★★★★ | Бесплатно |
| nomic-embed-text (Nomic) | 768 | ★★★★☆ | Бесплатно |
multilingual-e5-large или bge-m3 — отлично понимают русские тексты и бесплатны.
| База | Тип | Для кого | Особенности |
|---|---|---|---|
| ChromaDB | Локальная | Старт, прототипы | Запуск за 2 минуты |
| Qdrant | Облач./лок. | Продакшен | Отличная производительность |
| Pinecone | Облачная | Продуктовые проекты | Управляемая, автоскейлинг |
| Weaviate | Облач./лок. | Средние проекты | Гибридный поиск |
| Milvus | Лок./кластер | Крупные проекты | Масштабируемость |
| FAISS | Библиотека | Разработчики | Максимальная скорость |
from langchain.document_loaders import PyPDFLoader, DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
# 1. Загрузка документов
loader = DirectoryLoader("./documents/", glob="**/*.pdf",
loader_cls=PyPDFLoader)
documents = loader.load()
# 2. Разбивка на фрагменты
splitter = RecursiveCharacterTextSplitter(
chunk_size=512, chunk_overlap=50,
separators=["\n\n", "\n", ". ", " "]
)
chunks = splitter.split_documents(documents)
# 3. Создание эмбеддингов
embeddings = HuggingFaceEmbeddings(
model_name="intfloat/multilingual-e5-large")
# 4. Сохранение в векторную БД
vectorstore = Chroma(
collection_name="knowledge_base",
embedding_function=embeddings,
persist_directory="./chroma_db"
)
vectorstore.add_documents(chunks)
print(f"✅ Индексация завершена: {len(chunks)} фрагментов")
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model="deepseek/deepseek-v4", temperature=0.3)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(
search_kwargs={"k": 5}),
return_source_documents=True
)
result = qa_chain("Какие услуги по AmoCRM вы предлагаете?")
print("Ответ:", result["result"])
for doc in result["source_documents"]:
print(f" - {doc.metadata.get('source', 'unknown')}")
# Добавление новых документов (инкрементальная индексация)
new_docs = loader.load(["./documents/new_pricing.pdf"])
new_chunks = splitter.split_documents(new_docs)
vectorstore.add_documents(new_chunks)
# Удаление старых
vectorstore.delete(ids=["doc_001"])
| Компонент | Рекомендуемые инструменты |
|---|---|
| LLM | DeepSeek V4/V4 Flash, Google Gemini, GPT-4o, Claude 3.5 |
| Embedding | multilingual-e5-large, bge-m3, text-embedding-3-small |
| Векторная БД | ChromaDB, Qdrant, Pinecone, Weaviate |
| Фреймворк | LangChain, LlamaIndex, Haystack |
| Парсинг PDF | PyPDF2, PyMuPDF, Unstructured.io |
| Задача | Инструмент |
|---|---|
| Оценка качества RAG | RAGAS, DeepEval, LangSmith |
| Гибридный поиск | BM25 + Vector (Ensemble Retriever) |
| Ранжирование | Cohere Rerank, Cross-encoder |
| Мониторинг | Langfuse, Helicone, LangSmith |
| UI/Frontend | Streamlit, Gradio, собственный виджет |
Самый распространённый сценарий — виджет на сайте, который отвечает на вопросы клиентов по вашим данным.
Сотрудники задают вопросы по внутренним документам: регламентам, инструкциям, политикам. RAG подключается к корпоративным хранилищам и мессенджерам.
RAG-ассистент предлагает ответы оператору, ссылаясь на базу знаний, историю обращений и FAQ.
Поиск по корпоративным контрактам, законодательным актам, внутренним политикам.
Новый сотрудник задаёт вопросы по процессам компании и получает точные ответы с ссылками на документы.
| Навык | Уровень | Зачем нужен |
|---|---|---|
| Python | Средний+ | Основной язык для RAG-пайплайнов |
| Работа с API | Средний | Подключение LLM, векторных БД, внешних сервисов |
| Структуры данных | Средний | Понимание индексации, поиска, фильтрации |
| Обработка текстов | Средний | Токенизация, чанковинг, очистка данных |
| Базы данных | Базовый | SQL/NoSQL для метаданных и логов |
| Навык | Уровень | Зачем нужен |
|---|---|---|
| Веб-разработка (JS/Node.js) | Средний | Интеграция виджета на сайт |
| Docker | Базовый | Контейнеризация RAG-сервисов |
| DevOps | Базовый | Деплой, мониторинг, CI/CD |
| Машинное обучение | Базовый | Понимание эмбеддингов и моделей |
| Информационный поиск | Средний | Настройка ранжирования |
Hermes — AI-ассистент на платформе aichat.nemplat.ru, созданный для помощи клиентам и партнёрам Nemplat. Уже сейчас Hermes работает в режиме оффлайн-фоллбэка, отвечая на базовые вопросы из встроенной базы знаний (FAQ + knowledge). Однако для полноценной работы Hermes нуждается в полноценной RAG-системе.
| Задача | Без RAG | С RAG |
|---|---|---|
| Ответ о ценах | Общее описание из FAQ | Точная цена из актуального прайса |
| Описание услуги | Общее описание | Из конкретного договора/кейса |
| Кейс по проекту | «У нас есть опыт» | Детальное описание конкретного проекта |
| Обновление данных | Перезапуск с новыми данными | Инкрементальное обновление за секунды |
| Точность ответа | ~60–70% | ~90–95% |
Текущая архитектура Hermes уже использует JSON-файлы как базу знаний. RAG-расширение добавляет:
/var/www/aichat/
├── agents/
│ └── nemplat/
│ └── files/
│ ├── nemplat_site_index/ ← NEW: RAG-индекс сайта
│ ├── beltermo_pricing/ ← NEW: RAG-индекс прайса
│ └── documents/ ← NEW: хранилище документов
├── rag/
│ ├── indexer.js ← NEW: модуль индексации
│ ├── retriever.js ← NEW: модуль поиска
│ ├── embeddings.js ← NEW: вычисление эмбеддингов
│ └── reranker.js ← NEW: ранжирование результатов
└── chroma_db/ ← NEW: директория векторной БД
Для быстрого старта можно реализовать RAG без векторной базы — через TF-IDF поиск:
// rag-simple.js — лёгкий RAG-модуль для Hermes
// Подход: TF-IDF поиск по JSON-базе знаний
async function ragAnswer(query, agent) {
const knowledge = loadMemory(agent);
const docs = [];
// Собираем документы из всех источников
if (knowledge.knowledge?.content)
docs.push({ content: knowledge.knowledge.content, source: 'knowledge.json' });
if (knowledge.faq)
knowledge.faq.forEach(qa =>
docs.push({ content: `Q: ${qa.question}\nA: ${qa.answer}`, source: 'faq.json' }));
// TF-IDF поиск
const results = await searchRAG(query, docs, 5);
const context = results.map(r => `[${r.source}]: ${r.content}`).join('\n\n---\n\n');
// Генерация через LLM
const messages = [
{ role: 'system', content: 'Ты — Hermes. Отвечай на русском, опираясь ТОЛЬКО на контекст.' },
{ role: 'user', content: `Контекст:\n${context}\n\nВопрос: ${query}` }
];
return await callLLM('nemplat', messages);
}
| Этап | Задача | Срок |
|---|---|---|
| 1 | Парсинг сайта nemplat.ru и сбор документов | 1 день |
| 2 | Настройка ChromaDB и эмбеддингов | 1 день |
| 3 | Индексация всех данных | 1 день |
| 4 | Интеграция RAG-модуля в llm_client.js | 2 дня |
| 5 | Тестирование и калибровка (top-k, chunk size) | 2–3 дня |
| 6 | Добавление новых каналов (Telegram, VK) | 1 день |
| Итого | 7–8 дней |
RecursiveCharacterTextSplitter с разделителями по абзацам, разделам и предложениям.
multilingual-e5-large, bge-m3.
RAG — это не просто модный термин, а реальная, работающая технология, которая превращает обычный AI-чат-бот в точного эксперта, знающего ваш бизнес.
nemplat.ru как первоисточник данных и прайс-лист Белтермо. Полноценный RAG-ассистент разворачивается за 7–8 дней.
Свяжитесь с нами для бесплатной консультации по внедрению AI-решений
💬 Написать в TelegramИли оставьте заявку на nemplat.ru