Система поиска и рекомендаций товаров на RAG

смотреть через youtube
смотреть через dzen

Поиск похожих товаров с помощью RAG — это современный подход к созданию рекомендательных систем для интернет-магазинов. Вместо простого поиска по ключевым словам, система понимает смысл запроса и находит товары, которые действительно похожи по характеристикам и описанию.

В основе такой системы лежит векторная база данных. Каждый товар превращается в числовой вектор (эмбеддинг), который отражает его суть. Когда пользователь ищет что-то, его запрос тоже превращается в вектор. Дальше система находит товары с наиболее близкими векторами.

Как устроен проект

Для реализации нам нужны три основных компонента: LangChain для работы с эмбеддингами, ChromaDB как векторная база данных и модель Google Gemini для создания векторов через OpenRouter API.

Сначала создаём виртуальное окружение и устанавливаем зависимости:

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

В файле .env указываем API ключ OpenRouter:

OPENROUTER_API_KEY=your_api_key_here

Структура проекта выглядит так: в папке products/ хранится база товаров в формате markdown, embeddings.py отвечает за работу с API эмбеддингов, ingest.py векторизует товары, а main.py запускает веб-интерфейс на Gradio.

Векторизация и поиск

Процесс состоит из двух этапов. Сначала запускаем скрипт векторизации, который парсит товары и сохраняет их в ChromaDB:

python ingest.py

Скрипт обрабатывает каждый товар: берёт название, категорию, цену, описание и характеристики. Всё это превращается в текст, который отправляется в модель Gemini. На выходе получаем вектор, который сохраняется в базу.

После векторизации запускаем приложение для поиска:

python main.py

Gradio поднимает веб-интерфейс на http://127.0.0.1:7860. Вводим запрос вроде «беспроводные наушники для спорта» — и система возвращает наиболее подходящие товары из базы.

Поиск похожих товаров с помощью RAG хорошо работает даже на небольших базах. В нашем примере всего 30 товаров в 5 категориях, но подход легко масштабируется на тысячи позиций. Главное преимущество — система понимает контекст и находит релевантные товары, даже если в запросе нет точных совпадений с названием или описанием.

Привет! Я веб-программист
Дмитрий Ченгаев
GitHub репозиторий
Нужны кастомные доработки скрипта?
Напишите в телеграм или подписывайтесь на канал в Telegram, чтобы оставаться на связи ;)