Учебный RAG-проект на русскоязычных отзывах покупателей.
Проект показывает полный pipeline:
данные → документы → чанки → индекс → поиск → demo-ответ с источниками
Система принимает вопрос пользователя, ищет релевантные фрагменты в отзывах покупателей и показывает demo-ответ на основе найденных источников.
В интерфейсе Streamlit отображаются:
- вопрос пользователя;
- найденные фрагменты top-k;
doc_id;score;- текст найденного фрагмента;
- итоговый demo-ответ;
- отказ, если релевантного контекста нет.
В проекте используется открытый датасет RuReviews с русскоязычными отзывами о женской одежде и аксессуарах.
Источник: https://github.com/sismetanin/rureviews
В текущей версии в data/raw/datasets.json сохранено 1000 текстовых отзывов.
Подробнее данные описаны в файле:
doc/DATA.md
uv sync
uv run python scripts/build_index.py
uv run streamlit run app/main.pyПосле запуска приложение открывается в браузере.
В GitHub Codespaces нужно открыть forwarded port 8501 или другой порт, указанный Streamlit.
| Тип вопроса | Вопрос | Ожидание |
|---|---|---|
| Demo | Что пишут о качестве? | Ответ по отзывам про качество товара, внешний вид, пошив или общее впечатление |
| Demo | Что пишут о доставке? | Ответ по отзывам, где покупатели упоминают доставку, сроки или получение заказа |
| Demo | Что пишут о ткани? | Ответ по отзывам, где покупатели описывают ткань, материал или ощущения от товара |
| Negative | Как оформить ипотеку? | Отказ, потому что в данных нет информации об ипотеке |
Индекс был собран командой:
uv run python scripts/build_index.pyРезультат:
Документов: 1000, чанков: 1121, матрица: (1121, 4781)
Индекс сохранён -> /workspaces/rag-tutorial/data/index
Тесты были запущены командой:
uv run pytest tests/ -vРезультат:
11 passed
Скриншоты расположены в папке:
doc/screenshots/
На скриншоте показана сборка индекса по 1000 документам.
На скриншоте показан результат запуска тестов.
На скриншоте показан вопрос Что пишут о качестве?, найденные фрагменты, doc_id, score и demo-ответ.
На скриншоте показан вопрос Что пишут о доставке?, найденные фрагменты, doc_id, score и demo-ответ.
На скриншоте показан вопрос Что пишут о ткани?, найденные фрагменты, doc_id, score и demo-ответ.
На скриншоте показан вопрос Как оформить ипотеку?. Система не находит релевантные фрагменты и отказывается отвечать по данным.
uv run pytest tests/ -v- Поиск реализован через TF-IDF, поэтому качество зависит от совпадения слов.
- Внешняя LLM не используется.
- Ответ формируется только на основе найденных фрагментов.
- Если релевантных фрагментов нет, система отказывается отвечать.
- Использовать embeddings вместо TF-IDF для более качественного семантического поиска.
- Добавить LLM-генерацию ответа на основе найденных фрагментов.
- Добавить фильтры по тональности отзывов.
- Добавить отдельную оценку качества retrieval на заранее подготовленных вопросах.





