VPS для RAG и базы знаний: свой ИИ по документам
RAG (Retrieval-Augmented Generation) превращает груду PDF, вики и переписок в умного ассистента, который отвечает по вашим данным, а не выдумывает. Разберём, как собрать такую систему на арендованном VPS и не переплатить.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое RAG и зачем ему сервер
Идея RAG проста: перед тем как задать вопрос языковой модели, система находит релевантные куски из вашей базы знаний и подкладывает их в промпт. Модель отвечает, опираясь на найденный контекст, а не на память.
Пайплайн состоит из четырёх шагов: загрузка документов, разбивка на чанки, векторизация (эмбеддинги) и поиск ближайших векторов при запросе. Всё это удобно держать на своём VPS: данные не утекают в чужие облака, а расходы предсказуемы.
- Индексация — разовая или по расписанию, грузит CPU и диск
- Поиск — быстрый, упирается в RAM и скорость диска
- Генерация — через внешний API (OpenAI, Anthropic) или локальную модель
Главная ценность RAG в том, что базу знаний можно обновлять сколько угодно, не переобучая модель. Добавили новый регламент или свежий прайс — переиндексировали папку, и ассистент уже отвечает по актуальным данным. Это принципиально дешевле и быстрее, чем дообучение, и не требует ни GPU, ни специальных знаний в машинном обучении.
Ещё один плюс — прозрачность. Поскольку ответ строится из конкретных найденных фрагментов, вы всегда можете показать источник: из какого документа и абзаца модель взяла информацию. Для юридических, медицинских и корпоративных задач это часто обязательное требование, и RAG закрывает его естественным образом.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для RAGВыбор конфигурации
Если генерацию отдаёте внешнему API, то сервер нужен скромный: он держит векторную БД, эмбеддинг-модель и бэкенд. Для старта хватает 2 vCPU и 4 ГБ RAM. База на 100 тысяч чанков комфортно живёт на 4–8 ГБ.
Скорость поиска сильно зависит от диска — векторный индекс постоянно читается. Здесь важен NVMe: на тарифах MAATRIX стоят AMD EPYC + NVMe, поэтому запросы к индексу не превращаются в бутылочное горлышко.
Если хотите гонять эмбеддинги локально (модель типа multilingual-e5), заложите ещё 2–4 ГБ RAM под инференс на CPU.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Готовим сервер
Ставим Python, git и виртуальное окружение:
apt update && apt install -y python3-venv python3-pip git
python3 -m venv ~/rag && source ~/rag/bin/activate
pip install langchain langchain-community qdrant-client sentence-transformers fastapi uvicorn
Для хранилища векторов поднимаем Qdrant в Docker — это самый быстрый способ:
docker run -d --name qdrant -p 6333:6333 \
-v /opt/qdrant:/qdrant/storage qdrant/qdrant
Индексация документов
Минимальный скрипт: читаем папку, режем на чанки, считаем эмбеддинги и льём в Qdrant.
from langchain_community.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Qdrant
docs = DirectoryLoader("./data", glob="**/*.md").load()
chunks = RecursiveCharacterTextSplitter(
chunk_size=800, chunk_overlap=100).split_documents(docs)
emb = HuggingFaceEmbeddings(model_name="intfloat/multilingual-e5-base")
Qdrant.from_documents(chunks, emb, url="http://localhost:6333",
collection_name="kb")
Размер чанка 600–1000 символов с перекрытием 10–15% — рабочая отправная точка для текстов на русском.
Запрос к базе знаний
При запросе ищем топ-k похожих чанков и отдаём их в LLM вместе с вопросом. Retriever с k=4–6 обычно даёт лучший баланс между полнотой и шумом.
store = Qdrant(client, "kb", emb)
ctx = store.similarity_search("как оформить возврат?", k=4)
prompt = "Контекст:\n" + "\n".join(c.page_content for c in ctx)
Дальше prompt уходит в модель. Собранный бэкенд заворачиваем в systemd, чтобы он поднимался после перезагрузки.
Качество ответов очень сильно зависит от того, что именно нашёл ретривер. Если модель отвечает мимо, дело почти всегда не в LLM, а в поиске: неудачная разбивка на чанки, слишком маленький k или слабая эмбеддинг-модель. Начинайте отладку именно с retrieval-части, а не с промпта — это экономит часы.
Полезный приём — добавить в промпт инструкцию отвечать «не знаю», если в контексте нет ответа. Так вы резко снижаете число выдумок: модель перестаёт домысливать и честно признаёт нехватку данных, а это ровно то поведение, которого ждут от корпоративного ассистента.
Частые ошибки
- Слишком большие чанки — модель тонет в контексте, ответы размываются
- Нет перекрытия — режется мысль на границе, теряется смысл
- Индекс не обновляется — поставьте cron на переиндексацию изменённых файлов
- Qdrant без volume — контейнер пересоздали, база пропала. Всегда монтируйте том
И держите ежедневные бэкапы: на MAATRIX они включены, так что случайно снесённую коллекцию можно откатить.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для RAGОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Нужен ли GPU для RAG?
Нет, если генерацию делает внешний API. Векторный поиск и эмбеддинги на CPU работают отлично для большинства баз до миллиона чанков.
Утекут ли мои данные?
Нет. База знаний и индекс лежат на вашем VPS. Наружу уходит только собранный промпт, если вы используете внешний LLM — а можно и его держать локально.
Сколько документов потянет сервер от $8?
Десятки тысяч страниц текста индексируются и ищутся без проблем на 4 ГБ RAM и NVMe-диске.
Можно ли обновлять базу без простоя?
Да, Qdrant поддерживает upsert — новые чанки добавляются в живую коллекцию без остановки поиска.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.