Qdrant - Vector Database
Qdrant + LlamaIndex
У вас 50,000 документов разных форматов. Каждый день добавляются новые - и половина из них дубликаты. LangChain требует написать дедупликацию вручную. LlamaIndex даёт её из коробки плюс мощный ingestion pipeline. Разберём когда и почему это важно.
- **Knowledge base с дедупликацией:** статьи из разных источников, часть пересекаются → IngestionPipeline автоматически пропустит уже индексированные
- **Структурированная документация:** API docs + tutorials + FAQ → Summary Index по типам, Vector Index для семантического поиска
- **Daily sync:** ежедневное обновление базы знаний из CMS → IngestionPipeline запускается по cron, обновляет только изменившиеся документы
Предварительные знания
Установка и подключение QdrantVectorStore
**LlamaIndex** - фреймворк с акцентом на data ingestion, structured retrieval и агентов над данными. В отличие от LangChain, LlamaIndex думает в терминах «индекс над данными» - удобно когда структура данных важна. Интеграция с Qdrant: `llamaindex` + `@qdrant/js-client-rest`.
**StorageContext** в LlamaIndex - это ключевая абстракция. Он объединяет несколько хранилищ: `vectorStore` (Qdrant), `docStore` (хранение оригиналов документов), `indexStore` (метаданные индекса). Qdrant выступает как vectorStore, остальные по умолчанию - in-memory.
В чём роль StorageContext в LlamaIndex при работе с Qdrant?
VectorStoreIndex: запросы, фильтры и ingestion pipeline
**VectorStoreIndex** поддерживает два режима: создание из документов (`fromDocuments`) и подключение к существующей коллекции (`fromVectorStore`). После создания - `QueryEngine` с поддержкой метаданных-фильтрации и `IngestionPipeline` для продвинутой обработки.
**IngestionPipeline** автоматически дедуплицирует документы по хешу содержимого. Если повторно запустить pipeline с теми же документами - они не будут переиндексированы. Это делает его идеальным для scheduled jobs обновления базы знаний.
Вам нужно добавить новые документы в существующую Qdrant коллекцию через LlamaIndex без потери старых данных. Что использовать?
LlamaIndex vs LangChain: когда что использовать
**LangChain и LlamaIndex** решают похожие задачи но с разным фокусом. LangChain - универсальный фреймворк для LLM-цепочек и агентов. LlamaIndex - специализирован на data indexing и structured retrieval над сложными данными.
| Критерий | LangChain | LlamaIndex |
|---|---|---|
| Основной фокус | LLM цепочки и агенты | Data indexing и retrieval |
| Ingestion pipeline | Базовый (TextSplitter) | Продвинутый (IngestionPipeline с трансформациями) |
| Типы индексов | Только VectorStore | Vector, Summary, Knowledge Graph, SQL |
| Дедупликация документов | Ручная | Автоматическая в IngestionPipeline |
| Агенты | Богатая экосистема | Ограниченная |
| Сложность API | Умеренная | Выше (больше концепций) |
| Hybrid Search в Qdrant | Через кастомный retriever | Нативная поддержка |
**Практический совет по выбору:** если вы уже используете LangChain в проекте - оставайтесь на нём, интеграция с Qdrant отличная. LlamaIndex стоит рассмотреть если: нужен IngestionPipeline с дедупликацией, работаете со сложной структурой документов, нужен Knowledge Graph поверх данных.
«LlamaIndex только для Python, LangChain для TypeScript»
Оба фреймворка имеют полноценные TypeScript версии с поддержкой Qdrant. Выбор - по возможностям, не по языку.
llamaindex npm пакет - нативный TypeScript. @langchain/qdrant - тоже TypeScript. Оба активно развиваются на обоих языках. Ключевые различия - в возможностях ingestion pipeline и типах индексов, а не в языке.
Ваш проект: ежедневно добавляются новые документы, часть - дубликаты. Нужен structured retrieval по типам документов. Что лучше подойдёт?
Ключевые идеи
- **QdrantVectorStore + StorageContext** — точка входа: vectorStore для Qdrant, остальные хранилища по умолчанию in-memory
- **VectorStoreIndex.fromVectorStore** — подключение к существующей коллекции без переиндексирования
- **IngestionPipeline** — продвинутый ingestion: chunking, embeddings, дедупликация по хешу, кастомные трансформации
- **Hybrid Search** — нативная поддержка dense+sparse через enableHybridSearch
- **LlamaIndex vs LangChain:** LlamaIndex — data-first (indexing, ingestion); LangChain — chains & agents first
Что дальше
Теперь вы знаете оба major фреймворка. Следующий шаг - полноценный production RAG pipeline: chunking стратегии, reranking, мониторинг.
- Production RAG Pipeline — Полный pipeline поверх LangChain/LlamaIndex + Qdrant с reranking и мониторингом
- Hybrid Search — Понять как работает hybrid search который использует LlamaIndex
- Qdrant + LangChain — Сравнение с предыдущим фреймворком для понимания trade-offs
Вопросы для размышления
- IngestionPipeline дедуплицирует по хешу контента. Что произойдёт если документ изменился на 1 символ? Как это учесть в реальном проекте?
- Вы используете LlamaIndex с Qdrant. Пользователи жалуются на медленный первый запрос после деплоя. В чём причина и как оптимизировать?
- В чём принципиальное архитектурное отличие LlamaIndex StorageContext от LangChain VectorStore? Как это влияет на структуру кода?