MAATRIX / Блог / VPS для RAG и базы знаний: свой ИИ по документам

VPS для RAG и базы знаний: свой ИИ по документам

Блог MAATRIX · 2026-07-07

RAG (Retrieval-Augmented Generation) превращает груду PDF, вики и переписок в умного ассистента, который отвечает по вашим данным, а не выдумывает. Разберём, как собрать такую систему на арендованном VPS и не переплатить.

Что такое 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\npython3 -m venv ~/rag && source ~/rag/bin/activate\npip install langchain langchain-community qdrant-client sentence-transformers fastapi uvicorn
', 'Для хранилища векторов поднимаем Qdrant в Docker — это самый быстрый способ:', '
docker run -d --name qdrant -p 6333:6333 \\\n  -v /opt/qdrant:/qdrant/storage qdrant/qdrant
']

Индексация документов

['Минимальный скрипт: читаем папку, режем на чанки, считаем эмбеддинги и льём в Qdrant.', '
from langchain_community.document_loaders import DirectoryLoader\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\nfrom langchain_community.embeddings import HuggingFaceEmbeddings\nfrom langchain_community.vectorstores import Qdrant\n\ndocs = DirectoryLoader("./data", glob="**/*.md").load()\nchunks = RecursiveCharacterTextSplitter(\n    chunk_size=800, chunk_overlap=100).split_documents(docs)\nemb = HuggingFaceEmbeddings(model_name="intfloat/multilingual-e5-base")\nQdrant.from_documents(chunks, emb, url="http://localhost:6333",\n    collection_name="kb")
', 'Размер чанка 600–1000 символов с перекрытием 10–15% — рабочая отправная точка для текстов на русском.']

Запрос к базе знаний

['При запросе ищем топ-k похожих чанков и отдаём их в LLM вместе с вопросом. Retriever с k=4–6 обычно даёт лучший баланс между полнотой и шумом.', '
store = Qdrant(client, "kb", emb)\nctx = store.similarity_search("как оформить возврат?", k=4)\nprompt = "Контекст:\\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

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Нужен ли GPU для RAG?

Нет, если генерацию делает внешний API. Векторный поиск и эмбеддинги на CPU работают отлично для большинства баз до миллиона чанков.

Утекут ли мои данные?

Нет. База знаний и индекс лежат на вашем VPS. Наружу уходит только собранный промпт, если вы используете внешний LLM — а можно и его держать локально.

Сколько документов потянет сервер от $8?

Десятки тысяч страниц текста индексируются и ищутся без проблем на 4 ГБ RAM и NVMe-диске.

Можно ли обновлять базу без простоя?

Да, Qdrant поддерживает upsert — новые чанки добавляются в живую коллекцию без остановки поиска.