Разработчики RAG-систем на.NET традиционно выбирают между облачными векторными базами данных — Pinecone, Qdrant, Weaviate — и немногочисленными нативными.NET-решениями, большинство из которых либо заброшены, либо страдают от избыточных аллокаций памяти и медленного приближённого поиска. Библиотека VectorRAG.Net 0.1.17 предлагает третий вариант: встраиваемое хранилище, которое живёт внутри самого процесса приложения.

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

Параметр AlphaРежим поиска
1.0Только векторный поиск
0.0Только полнотекстовый поиск (BM25)
0.7 (пример)70% вектор + 30% BM25

При использовании внешней векторной БД каждый поисковый запрос добавляет 10–20 мс только на транспортный уровень. В сценарии техподдержки, где оператор ждёт ответ за 50–100 мс, это критично: HTTP-задержка плюс обработка в БД плюс вызов LLM легко дают суммарные 300–400 мс. VectorRAG.Net устраняет транспортный слой полностью — поиск занимает 15–100 микросекунд.

Библиотека поддерживает гибридный поиск — комбинацию векторного сходства и BM25 с настраиваемым весом Alpha.

В основе поиска лежит двухэтапная схема: LSH (Locality-Sensitive Hashing) быстро отбирает кандидатов из индекса, после чего точный переранжировщик с SIMD-инструкциями вычисляет финальные оценки сходства. Параметры LSH-индекса настраиваются: количество хеш-таблиц (Bands), длина хеша в битах (BitsPerBand) и максимальное число кандидатов (MaxCandidates). Чем больше бэндов — тем точнее результат, но медленнее поиск.

Гибридный поиск комбинирует векторное семантическое сходство с классическим полнотекстовым алгоритмом BM25. Параметр Alpha задаёт соотношение: 1.0 — только векторный поиск, 0.0 — только BM25, промежуточные значения дают взвешенную сумму нормализованных релевантностей. Это полезно, когда запрос содержит специфические термины или аббревиатуры, которые семантическая модель может не распознать как близкие.

Библиотека не генерирует эмбеддинги самостоятельно — разработчик передаёт реализацию интерфейса IEmbeddingModel. Из коробки поддерживается OpenAI (text-embedding-3-small и другие модели), для локальных ONNX-моделей или Sentence Transformers нужно написать адаптер. Встроенный чанкинг нарезает документы на фрагменты по стратегии FixedChars с настраиваемыми размером чанка и перекрытием, после чего для каждого фрагмента генерируется эмбеддинг и сохраняется ссылка на родительский документ.

Основные сценарии применения — там, где внешний сервис физически недоступен или нежелателен: десктопные и мобильные приложения, работающие без интернета; edge-устройства и Raspberry Pi с ограниченными ресурсами; корпоративные системы в авиации, медицине и оборонной отрасли с требованием полной автономности. Отдельный сценарий — прототипирование: локальная in-memory база позволяет пересобирать индекс за секунды, не обращаясь к облачной инфраструктуре.

Библиотека доступна через NuGet: `dotnet add package VectorRAG.Net --version 0.1.17`. Среди заявленных возможностей также фильтрация по метаданным (происходит на этапе LSH-кандидатов, без существенного оверхеда), сохранение и загрузка снэпшотов, кэш запросов и runtime-метрики. Версия 0.1.17 указывает на ранний этап развития проекта — для продакшн-нагрузок стоит оценивать поведение под реальным объёмом данных.