VPS для RAG и базы знаний: свой ИИ по документам
RAG (Retrieval-Augmented Generation) превращает груду PDF, вики и переписок в умного ассистента, который отвечает по вашим данным, а не выдумывает. Разберём, как собрать такую систему на арендованном VPS и не переплатить.
Содержание
Что такое RAG и зачем ему сервер
['Идея RAG проста: перед тем как задать вопрос языковой модели, система находит релевантные куски из вашей базы знаний и подкладывает их в промпт. Модель отвечает, опираясь на найденный контекст, а не на память.', 'Пайплайн состоит из четырёх шагов: загрузка документов, разбивка на чанки, векторизация (эмбеддинги) и поиск ближайших векторов при запросе. Всё это удобно держать на своём VPS: данные не утекают в чужие облака, а расходы предсказуемы.', '- Индексация — разовая или по расписанию, грузит CPU и диск
- Поиск — быстрый, упирается в RAM и скорость диска
- Генерация — через внешний API (OpenAI, Anthropic) или локальную модель
Нужен сервер под эту задачу?
Разверните 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 — контейнер пересоздали, база пропала. Всегда монтируйте том
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для RAGНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Нужен ли GPU для RAG?
Нет, если генерацию делает внешний API. Векторный поиск и эмбеддинги на CPU работают отлично для большинства баз до миллиона чанков.
Утекут ли мои данные?
Нет. База знаний и индекс лежат на вашем VPS. Наружу уходит только собранный промпт, если вы используете внешний LLM — а можно и его держать локально.
Сколько документов потянет сервер от $8?
Десятки тысяч страниц текста индексируются и ищутся без проблем на 4 ГБ RAM и NVMe-диске.
Можно ли обновлять базу без простоя?
Да, Qdrant поддерживает upsert — новые чанки добавляются в живую коллекцию без остановки поиска.