Files
wiki/tasks/snowbike-rag/DEV-TASK.md
2026-04-12 21:55:33 +03:00

77 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/`