RAG на VDS: AI-ответы по вашим документам

AI-агенты на VDS · 19.04.2026
RAG на VDS: AI-ответы по вашим документам

Что такое RAG?

RAG (Retrieval-Augmented Generation) — техника, при которой LLM перед генерацией ответа сначала ищет релевантные фрагменты в базе знаний. Это позволяет модели отвечать точно на вопросы о ваших документах, не требуя дообучения.

Как работает RAG: 1) Документ разбивается на чанки → 2) Каждый чанк превращается в вектор → 3) Вектора хранятся в векторной БД → 4) При запросе находятся похожие чанки → 5) LLM генерирует ответ с контекстом.

Компоненты RAG-системы

  • Загрузчики документов — PDF, DOCX, TXT, веб-страницы
  • Text Splitter — разбивка на чанки (500-1000 токенов)
  • Embedding модель — преобразование текста в векторы
  • Векторная БД — Chroma, Qdrant, FAISS
  • LLM — генерация ответа на основе найденного контекста

Установка зависимостей

pip install langchain langchain-ollama langchain-community
pip install chromadb pypdf sentence-transformers

Полный пример RAG на Python

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
from langchain_ollama import OllamaLLM
from langchain.chains import RetrievalQA

# Загрузка и разбивка документа
loader = PyPDFLoader("document.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# Создание векторной базы
embeddings = OllamaEmbeddings(model="nomic-embed-text")
db = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")

# RAG-цепочка
llm = OllamaLLM(model="llama3.2")
qa = RetrievalQA.from_chain_type(llm=llm, retriever=db.as_retriever())
result = qa.invoke("Какова главная тема документа?")
print(result["result"])

Embedding модели для Ollama

# Скачать специализированную модель для эмбеддингов
ollama pull nomic-embed-text

# Или английский вариант
ollama pull mxbai-embed-large
Размер чанков: Слишком большие чанки (2000+ токенов) снижают точность поиска. Слишком маленькие (100 токенов) теряют контекст. Оптимально: 300-800 токенов с 10-15% перекрытием.
← Назад в базу знаний Задать вопрос поддержке