Чат-ассистент по рецептам, который отвечает на основе локальной базы рецептов, проиндексированной в Qdrant.
Участники:
Горбатюк Олег
Кривулец Нина
Сюй София
Атанасоска София
- веб-интерфейс чата на React + Vite
- backend на FastAPI
- агент на LangChain с одним инструментом поиска по рецептам в Qdrant
- векторный поиск по двум локальным источникам рецептов
- отображение источников, на основании которых сформирован ответм
- локальное хранение истории переписки в браузере с шифрованием через Web Crypto API
- счётчик количества загруженных рецептов
В репозитории реализован не полнофункциональный рекомендательный сервис с богатыми фильтрами, а рабочий MVP чат-ассистента по рецептам
Итоговая постановка задания для текущей реализации:
- Собрать локальную базу рецептов из подготовленных JSON-файлов
- Проиндексировать рецепты в Qdrant с помощью OpenAI embeddings
- Реализовать чат, в котором LLM отвечает только на основе найденных рецептов
- Показывать пользователю источники, использованные в ответе
- Запускать систему целиком через Docker Compose
- Нет UI-фильтров по времени, диете, калорийности и другим метаданным
- Нет отдельного этапа извлечения структурированных фильтров из запроса
- Нет автоматического обновления базы рецептов.
web/— фронтенд на React.api/— FastAPI, агент, работа с Qdrant и скрипты индексации.api/static/— локальные JSON/CSV с рецептами.docs/— документация.parsing/— ноутбуки для парсинга исходных сайтов.
Создайте .env в корне проекта. Обязательная переменная:
OPENAI_API_KEY=...Опционально можно задать:
OPENAI_PROXY=...
OPENAI_CHAT_MODEL=gpt-5-mini
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
QDRANT_COLLECTION=recipesПоднять сервисы:
docker compose up --build -dОстановить сервисы:
docker compose downПосле запуска интерфейс доступен на http://localhost:8000.
После старта контейнеров нужно отдельно загрузить рецепты в векторную базу:
docker compose exec api python scripts/fill_recipes.pyПолезные варианты:
docker compose exec api python scripts/fill_recipes.py --dry-run
docker compose exec api python scripts/fill_recipes.py --sources povarenok
docker compose exec api python scripts/fill_recipes.py --sources russianfood
docker compose exec api python scripts/fill_recipes.py --batch-size 50Скрипт:
- читает
api/static/Povarenok_recipes.jsonиapi/static/recipes_rf_.json; - преобразует рецепты к упрощённой схеме
title / ingredients / steps; - ограничивает загрузку первыми
10000рецептами; - добавляет документы в коллекцию Qdrant
recipes.
Принимает историю диалога и возвращает:
answer— текст ответа моделиsources— рецепты, найденные через поиск и использованные агентом
Возвращает текущее число рецептов в коллекции Qdrant
- Фронтенд отправляет историю сообщений на backend
- Агент LangChain при необходимости вызывает инструмент
search_recipe - Инструмент делает similarity search в Qdrant
- Найденные рецепты передаются модели как контекст
- Ответ и список использованных источников возвращаются в UI
Логичное развитие текущего MVP:
- добавить структурированные метаданные рецептов и фильтрацию
- внедрить оценку качества retrieval и ответов


