77 lines
3.3 KiB
Markdown
77 lines
3.3 KiB
Markdown
# 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/`
|