6.3 Семантический поиск по векторной базе
Сначала ещё раз посмотрим на инициализацию векторной БД из прошлого урока. В качестве эмбединг-функции здесь инициализируется open-source SentenceTransformer all-MiniLM-L6-v2, который хорошо подходит для решения задачи семантического поиска. При формировании RAG-пайплайна выбор подходящего эмбедера критически важен.
Кроме нативной поддержки SentenceTransformer в LangСhain можно пользоваться OpenAI-эмбедингами, моделями с HuggingFace и прочими, из других источников. Для этого замените инициализируемый класс.

Например, так можно инициализировать эмбединг-функцию с HuggingFace, сайта с разными моделями:
Для создания эмбеддингов, кроме представленного примера с OpenAI можно использовать модель эмбеддингов в GigaChat.
Обратите внимание, что для корректной работы поиска все элементы внутри базы или коллекции должны быть однородными, т. е. кодироваться одной эмбединг-функцией.

Приведём пример поиска релевантной информации в БД по запросу. Здесь метод .similarity_search() кодирует передаваемый query с помощью эмбединг-функции, указанной при инициализации базы данных, и отбирает документы с наиболее близкими эмбедингами, согласно косинусному расстоянию.
Кроме прямого использования векторных БД, в RAG-пайплайнах можно проволить поиск и извлечение с помощью более высокоуровневой абстракции Retrievers.

Retrievers часто используется в качестве обертки над векторной БД, для этого нужно вызвать метод .as_retriever()
Как и встроенные методы БД, Retriever получает на вход строку-запрос и возвращает лист Документов.
Есть различные версии Retriever, с помощью которых можно осуществлять более продвинутый поиск по базе и другим сущностям, хранящим данные. Разберём их в следующей части.