Qdrant - Vector Database

Qdrant + LangChain

У вас уже есть Qdrant коллекция с тысячами документов. Теперь вы хотите добавить «Спроси у своей базы знаний» - чат который отвечает на вопросы. LangChain делает это за 15 строк кода. Разберём как.

  • **Корпоративный поиск:** документация компании → QdrantVectorStore → RetrievalQA → сотрудники спрашивают на естественном языке
  • **Поддержка клиентов:** база тикетов и FAQ → retriever с фильтром по продукту → автоматические ответы на похожие вопросы
  • **Исследовательский инструмент:** база научных статей → MMR поиск для разнообразных результатов → LLM синтезирует обзор темы

Предварительные знания

  • First Search: Search API

Установка и инициализация QdrantVectorStore

**LangChain** - самый популярный фреймворк для построения LLM-приложений. Qdrant имеет нативную интеграцию через `@langchain/qdrant`. Это позволяет использовать все возможности Qdrant (фильтрацию, hybrid search) через привычный LangChain API.

**`collectionName`** - если коллекция не существует, LangChain создаёт её автоматически с размерностью вектора, соответствующей выбранной модели embeddings. OpenAI `text-embedding-3-small` → 1536 dim, `text-embedding-3-large` → 3072 dim.

Вам нужно подключиться к уже существующей коллекции Qdrant через LangChain. Какой метод использовать?

addDocuments, similaritySearch и MMR поиск

**QdrantVectorStore** реализует стандартный LangChain интерфейс `VectorStore` с тремя ключевыми методами поиска: `similaritySearch` - базовый поиск по схожести, `similaritySearchWithScore` - с возвратом scores, `maxMarginalRelevanceSearch` (MMR) - поиск с учётом разнообразия результатов.

**MMR (Maximal Marginal Relevance)** особенно полезен в RAG: если в базе 10 похожих документов про один факт, MMR вернёт их разнообразное подмножество. Это позволяет LLM получить более широкий контекст. `lambda: 0.7` - хороший стартовый баланс.

Вы строите RAG для документации. Пользователь спрашивает про 'установку'. В базе 15 документов про установку, но они очень похожи. Какой метод поиска предпочесть?

RetrievalQA цепочка и кастомный Retriever

**Retriever** - абстракция LangChain для источника документов. `QdrantVectorStore.asRetriever()` создаёт retriever, который можно использовать в любой LangChain цепочке: `RetrievalQA`, `ConversationalRetrievalChain`, LCEL pipelines.

**LCEL vs RetrievalQAChain:** `RetrievalQAChain` - legacy API, удобный но менее гибкий. LCEL (LangChain Expression Language) - современный подход: composable, streaming-ready, легко кастомизировать промпт и логику. Для новых проектов рекомендуется LCEL.

«LangChain полностью скрывает Qdrant - нельзя использовать нативные возможности вроде фильтров»

LangChain передаёт filter напрямую в Qdrant, поддерживая полный синтаксис фильтрации: must/should/must_not, range, geo, nested filters.

QdrantVectorStore - тонкая обёртка над @qdrant/js-client-rest. Параметр filter передаётся as-is в Qdrant запрос. Можно использовать любые Qdrant фильтры включая вложенные условия и геопоиск.

Вы хотите, чтобы RetrievalQA возвращал только документы из категории 'technical'. Где нужно задать фильтр?

Ключевые идеи

  • **QdrantVectorStore** - LangChain-обёртка над Qdrant: fromExistingCollection, fromDocuments, fromTexts
  • **addDocuments** - добавление с автоматической генерацией embeddings; возвращает ID точек
  • **similaritySearch** - базовый поиск; **maxMarginalRelevanceSearch** - с разнообразием результатов
  • **Фильтры** - передаются напрямую в Qdrant синтаксис через третий аргумент поиска или в asRetriever()
  • **asRetriever()** → **RetrievalQA** / LCEL pipeline - стандартный паттерн для RAG приложений

Что дальше

LangChain - не единственный фреймворк для работы с Qdrant. LlamaIndex предлагает другой подход с фокусом на data ingestion и structured retrieval.

  • Qdrant + LlamaIndex — Альтернативный фреймворк: более структурированный подход к ingestion и retrieval
  • Production RAG Pipeline — Полный pipeline: chunking → embeddings → upsert → search → reranking → LLM
  • Фильтрация с payload — Глубокое понимание Qdrant фильтров используемых в LangChain

Вопросы для размышления

  • В чём разница между similaritySearch и maxMarginalRelevanceSearch? Для каких задач каждый из них подходит лучше?
  • Как LCEL pipeline отличается от RetrievalQAChain? Какие преимущества даёт LCEL для production систем?
  • Вы используете LangChain + Qdrant в production. Как организовать обновление документов - addDocuments для новых, или удаление + переиндексация для изменённых?

Связанные уроки

  • ml-01-intro
Qdrant + LangChain

0

1

Войти