🎯 О чём этот конспект: Подробный разбор технологии RAG, которая позволяет «дообучать» нейросети на ваших локальных данных (коде, PDF, документации) без изменения весов модели. В видео рассматривается принцип работы векторов, практическая реализация на JavaScript и настройка локального RAG-агента в редакторе Cursor.
👤 Кому будет полезно: Вайбкодерам, разработчикам и AI-энтузиастам, которые хотят, чтобы AI-агенты понимали контекст их специфических проектов, стилистику кода или внутренние документы компании.
✨ Что получите: Вы научитесь подключать свои файлы к AI-агентам, поймете механику векторного поиска и сможете внедрить одну из 11 стратегий оптимизации контекста для повышения точности ответов нейросети.
1. Что такое RAG и зачем он нужен вайбкодеру
Контекст: Нейросеть (LLM) — это «мозги», обученные на общих данных интернета. Она не знает специфику вашего проекта, политики вашей компании или вашего уникального стиля написания кода. RAG (Retrieval-Augmented Generation) решает проблему ограниченного контекстного окна и отсутствия актуальных данных. Вместо того чтобы пытаться «засунуть» весь проект в промпт, мы создаем внешнюю базу знаний, из которой нейросеть берет только нужные кусочки в момент запроса.
Выгода: Экономия токенов, возможность работы с огромными репозиториями и получение максимально персонализированных ответов.
Как это работает (схема):
Запрос: Пользователь спрашивает что-то специфическое.
Ретривер (Retrieval): Система идет во внешнюю базу (PDF, файлы кода, база данных).
Поиск: Находятся релевантные фрагменты информации.
Генерация (Generation): Эти фрагменты добавляются в промпт как контекст, и LLM выдает точный ответ.
Результат: Нейросеть отвечает на основе ваших данных, а не галлюцинирует.
2. Механика векторов и семантический поиск
Контекст: Поиск по ключевым словам (как в Ctrl+F) неэффективен для AI. Если вы ищете «удаленная работа», обычный поиск не найдет абзац про «домашний офис». Для этого используется семантический поиск через эмбеддинги — перевод текста в математические векторы (наборы чисел).
Выгода: Система понимает смысл запроса, даже если слова не совпадают.
Основные правила эффективного RAG:
Чанкинг (Chunking): Текст нужно резать на куски (чанки) по 300–500 символов. Целый PDF на 100 страниц скармливать нельзя — ответ будет размытым.
Векторная БД: Хранение данных в специальных базах (например, ChromaDB), которые умеют быстро вычислять «расстояние» между смыслами.
Очистка данных: Удаление HTML-тегов, мусора и лишних эмоджи экономит место и повышает точность.
3. Практика: Простейший RAG на JavaScript
Контекст: Для понимания механики важно увидеть, как данные превращаются в векторы и попадают в промпт программно.
Как применить:
Шаг 1: Установка зависимостей — Используем chromadb для хранения векторов и openai для генерации.
Шаг 2: Создание коллекции — Инициализируем базу и функцию эмбеддинга.
import { ChromaClient, DefaultEmbeddingFunction } from 'chromadb';import OpenAI from 'openai';const client = new ChromaClient();const embedder = new DefaultEmbeddingFunction();// Создаем коллекцию для документов компанииconst collection = await client.getOrCreateCollection({ name: "company_policies", embeddingFunction: embedder,});// Добавляем документы (в реальности это чтение файлов)await collection.add({ ids: ["id1", "id2"], documents: [ "Политика удаленки: можно работать из дома 3 дня в неделю.", "Стиль кода: используем только функциональные компоненты и Tailwind." ],});// Поиск по смыслуconst results = await collection.query({ queryTexts: ["Как мы работаем из дома?"], nResults: 1,});// Формирование промпта для LLMconst context = results.documents[0].join("\n");const userQuestion = "Какая у нас политика удаленки?";const prompt = `Используй следующий контекст для ответа: ${context}\n\nВопрос: ${userQuestion}`;// Далее отправляем prompt в OpenAI API...
Результат: Готовый скрипт, который находит нужный смысл в базе и «подсказывает» его нейросети.
4. Настройка локального RAG в Cursor через MCP
Контекст: Редактор Cursor поддерживает протокол MCP (Model Context Protocol), что позволяет подключить локальный RAG-сервер для индексации ваших PDF-инструкций или старых репозиториев.
Как применить:
Шаг 1: Подготовка сервера — Клонируем репозиторий mcp-local-rag, устанавливаем зависимости и билдим проект.
Шаг 2: Настройка в Cursor — Переходим в Settings -> Features -> MCP Servers.
Шаг 3: Добавление сервера — Указываем путь к сбилженному файлу и папку с вашими знаниями.
Конфиг для добавления (тип stdio):
# Команда для запуска (пример)node /путь/к/проекту/mcp-local-rag/dist/index.js# Переменные окружения (Env Vars)LOCAL_RAG_DIRECTORY="/путь/к/вашим/pdf_и_коду"
Результат: Теперь в чате Cursor можно спросить: «Как в моем стиле написать этот компонент?», и агент сам просканирует локальную базу через query_document.
5. 11 продвинутых стратегий RAG
Контекст: Базовый RAG часто ошибается. Для сложных задач используются продвинутые методы фильтрации и обработки запросов.
Re-ranking: Сначала достаем много документов, а затем маленькая модель-ранжировщик выбирает самые релевантные.
Agentic RAG: Модель сама решает: искать по всей базе, по метаданным или ответить самостоятельно.
Knowledge Graph RAG: Извлекает не только текст, но и связи между сущностями (кто с кем связан).
Contextual Retrieval: К каждому чанку перед индексацией добавляется краткое описание всего документа для лучшего поиска.
Query Expansion: LLM переписывает и улучшает запрос пользователя перед поиском (метапромптинг).
Multi-Query RAG: Создается несколько вариантов одного запроса, результаты поиска по которым объединяются.
Context-Aware (Hybrid) Chunking: Нарезка текста не по количеству символов, а по смысловым абзацам.
Semantic Chunking: Текст переводится в векторы и режется там, где резко меняется векторный смысл.
Hierarchical RAG: Поиск идет сначала по саммари документов, затем по блокам и только потом по деталям.
Self-Refining RAG: Модель проверяет качество найденного контекста и, если он плохой, делает повторный поиск.
Fine-tuned Embeddings: Использование векторных моделей, дообученных под конкретную нишу (медицина, юриспруденция).
FAQ
В: Можно ли использовать RAG бесплатно?
О: Да, используя локальные модели эмбеддингов и векторные базы типа ChromaDB или FAISS. В примере с Cursor используется локальный MCP-сервер, который работает на вашей машине.
В: Что лучше: дообучение (Fine-tuning) или RAG?
О: Для большинства задач вайбкодинга RAG лучше. Fine-tuning дорогой, сложный и модель быстро устаревает. RAG позволяет обновлять знания, просто закинув новый файл в папку.
В: Какой оптимальный размер чанка?
О: Обычно это 300–500 токенов (или символов, в зависимости от модели). Важно делать «нахлест» (overlap) между чанками в 10–15%, чтобы смысл не терялся на границах разреза.
В: Зачем нужны векторы, если можно просто дать файл нейросети?
О: Если файл огромный (например, документация React), он не влезет в контекстное окно или сделает запрос очень дорогим. Векторы позволяют найти 2–3 нужных абзаца из тысячи страниц.
В: Как RAG помогает в написании кода?
О: Вы можете индексировать свои лучшие проекты. Когда вы просите Cursor написать функцию, он сначала посмотрит через RAG, как вы называете переменные и какие библиотеки используете, и выдаст код в вашем стиле.
Конспект создан на основе видео «Что такое RAG? 11 стратегий обучения нейросети на своих данных» канала Антон Ларичев. Все права на оригинальный материал принадлежат авторам.Источник: https://www.youtube.com/watch?v=JkoMVJNBVC0