# DEV-TASK: Реализация Snowbike RAG (MVP) ## Контекст Есть 155K сообщений из Telegram-группы «Сноубайк Россия» (сырые JSON-файлы). Нужно реализовать гибридный поиск: Meilisearch + ChromaDB + LLM суммаризация. **Документация:** - Бизнес-требования: `tasks/snowbike-rag/docs/BRD.md` - Техническое задание: `tasks/snowbike-rag/docs/TZ.md` **Исходные данные (только чтение):** - `/home/node/.openclaw/workspace/data/telegram-collector/raw/1242788123/` --- ## Задача: реализовать MVP ### Шаг 1: Инфраструктура 1. Установить Docker (если нужно) и запустить Meilisearch 2. Создать `config/docker-compose.yml` для Meilisearch 3. Создать `config/requirements.txt` с зависимостями ### Шаг 2: Скрипт парсинга 4. Создать `scripts/parse_messages.py` — парсинг сырых batch-файлов в плоский JSONL 5. Обрабатывать все 12 топиков, сохранять в `data/` как JSON Lines ### Шаг 3: Индексация Meilisearch 6. Создать `scripts/index_meilisearch.py` — загрузка данных в Meilisearch 7. Настроить индекс с filterableAttributes, typoTolerance, stopWords ### Шаг 4: Индексация ChromaDB 8. Создать `scripts/index_chromadb.py` — генерация embeddings + загрузка в ChromaDB 9. Использовать sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (бесплатная, локальная) ### Шаг 5: Поиск + LLM 10. Создать `scripts/search.py` — гибридный поиск (Meilisearch + ChromaDB) + LLM ответ 11. Использовать OpenRouter Sonnet 4.6 (ключ в `~/.openclaw/.env`) 12. Промпт должен указывать «ответь по-русски, с источниками» ### Шаг 6: Flask API 13. Создать `server.py` — HTTP API на Flask 14. Endpoint: `GET /search?q={query}&topics={topic_ids}&limit={limit}` 15. Ответ: JSON с полями query, answer, sources, count, time_ms ### Шаг 7: Тестирование 16. Протестировать на 5 запросах из списка в BRD.md 17. Убедиться что ответы содержат источники (дата, автор, топик) --- ## Критерии приёмки - [ ] `python scripts/parse_messages.py` — создаёт JSONL файлы - [ ] `python scripts/index_meilisearch.py` — Meilisearch заполнен - [ ] `python scripts/index_chromadb.py` — ChromaDB заполнен - [ ] `python server.py` — API работает на порту 5557 - [ ] `curl "http://localhost:5557/search?q=масло+для+Polaris"` — возвращает ответ с источниками - [ ] Ответ на русском языке - [ ] Стоимость за запрос: ~$0.005 --- ## Важно - Все файлы в `tasks/snowbike-rag/` (scripts, config, data, docs) - Сырые данные НЕ изменять - Индексы хранить в `tasks/snowbike-rag/data/` - Логи: `tasks/snowbike-rag/data/logs/`