Strategy/projects/files/neuler/neuler_sprint2_plan.md
+

neuler_sprint2_plan

Neuler Sprint 2 Plan

Создано: 2026-03-10 (Феанор, worker ночь)
Sprint 1 статус: ✅ scout.py — OpenAlex API, depth S/M/L, 0.9s demo-ready
Sprint 2 цель: Превратить Literature Scout из standalone скрипта в полноценный модуль с памятью и анализом пробелов


Контекст и ограничения

Известно (из проектного файла + agenda 09.03):
- Scout.py работает, demo-ready, OpenAlex API
- SDR инфраструктура (OpenAlex, Semantic Scholar) готова к переиспользованию
- Модель для production: 70b (не 8b — галлюцинации)
- Следующие модули по плану: librarian.py, formatter.py, gap_finder.py

НЕ известно (итоги встречи 09.03 не получены от Даниила):
- Финальные архитектурные решения по repo structure
- Кто из команды (Альберт/Шерки) берёт модули
- Решение про standalone vs pipeline

⚠️ Этот план — предложение. Даниил должен подтвердить после знакомства с итогами встречи.


Sprint 2 Scope (2 недели: 10–24 марта)

Модуль 1: librarian.py — локальная библиотека статей

Цель: хранить, дедуплицировать, индексировать статьи между запусками scout.py

Функциональность:
- LibraryDB — SQLite-хранилище (paper_id, title, abstract, year, cited_by, source, vector)
- Добавление батча из scout output → дедупликация по DOI/OpenAlex ID
- Семантический поиск по TF-IDF (без LLM) или простой keyword search
- Экспорт в BibTeX / Markdown / JSON форматы

CLI:

neuler librarian add --scout-output report.md   # добавить из scout отчёта
neuler librarian search --query "ISTA proximal" --top 10
neuler librarian export --format bibtex > refs.bib
neuler librarian stats                          # сколько статей, по темам

Зависимости: sqlite3 (stdlib), scikit-learn (TF-IDF), уже в requirements

Оценка: M (10–15 часов разработки)


Модуль 2: gap_finder.py — поиск пробелов в литературе

Цель: сравнить корпус статей из library с формулировкой исследования → найти незакрытые вопросы

Алгоритм:
1. Читает research_statement.md (пользователь описывает свой вклад в 3–5 предложений)
2. Получает топ-N статей из library по релевантности
3. LLM-запрос (Groq 70b / Claude Haiku): “что заявлено в этих статьях?” → краткое резюме каждой
4. Второй LLM-запрос: “что НЕ покрыто в корпусе, если учесть research_statement?” → список пробелов
5. Форматирует вывод: список пробелов + цитаты + релевантные статьи

CLI:

neuler gap-finder \
  --statement research_statement.md \
  --topic "operator splitting machine learning" \
  --depth M \
  --model groq/llama-3.3-70b-versatile

Оценка: L (20–30 часов, включая prompt engineering)


Модуль 3: formatter.py — унификация форматов вывода

Цель: разделить логику форматирования от scout/librarian, поддержать форматы:
- markdown (текущий scout output)
- json (для programmatic use)
- bibtex (для LaTeX/Zotero)
- obsidian (Markdown с backlinks для Obsidian vault)
- latex-tabular (таблица статей для включения в диссертацию/статью)

Оценка: S (3–5 часов)


Интеграция: scout v2

Цель: обновить scout.py для автоматической записи результатов в library

neuler scout \
  --topic "operator splitting SGD" \
  --depth M \
  --save               # автоматически добавить в library
  --output report.md   # и сохранить отчёт

Оценка: S (2–3 часа, + обновление README)


Timeline

Неделя Задача Исполнитель Критерий готовности
10–14 мар formatter.py 5 форматов, unit tests
10–14 мар scout v2 (–save flag) Scout сохраняет в library
15–19 мар librarian.py MVP add/search/export работают
20–24 мар gap_finder.py v1 E2E на реальном topic
24 мар Sprint 2 demo Все Полный pipeline: scout→library→gap

Demo Sprint 2

# 1. Scout + save
neuler scout --topic "ISTA proximal gradient LASSO" --depth M --save

# 2. Добавить ещё одну тему
neuler scout --topic "operator splitting stochastic SGD" --depth M --save

# 3. Поиск по library (25+ статей)
neuler librarian search --query "convergence rate" --top 5

# 4. Найти пробелы (задаём research statement)
echo "We analyze Strang splitting for L1/L2 regularization and prove O(h^2) improvement over Lie-Trotter." > /tmp/stmt.md
neuler gap-finder --statement /tmp/stmt.md --topic "operator splitting" --depth M

# Output: "Not found in corpus: systematic comparison with ADMM for ill-conditioned problems;
#          stochastic extensions of Strang-ISTA; connection to symplectic integrators"

Технические решения (рекомендации)

Вопрос Рекомендация Обоснование
Storage SQLite (файл ~/.neuler/library.db) Простота, portable, no server
Search TF-IDF (scikit-learn) Без LLM, быстро, достаточно для MVP
LLM для gap_finder Groq llama-3.3-70b бесплатно / Claude Haiku SDR уже использует оба
Repo structure neuler/ flat (scout.py, librarian.py, gap_finder.py, formatter.py) Простота, CLAUDE.md может добавить
Tests pytest + mock OpenAlex responses Офлайн тесты, воспроизводимо

AstaBench: метрики для Literature Scout

Метрики для оценки качества модуля (к обсуждению на Sprint 2 review):

Метрика Описание Как мерить
Precision@10 % релевантных статей в топ-10 Ручная оценка (Даниил)
Recall vs manual % статей из ручного обзора Даниила, найденных автоматически 1 эксперимент
Gap hit rate % реальных пробелов, найденных gap_finder Валидация на известном корпусе
Latency Время до первого результата time neuler scout --depth S
Consistency Стабильность между запусками (тот же topic → те же топ-5?) 3 прогона

Блокеры и риски

Риск Митигация
Итоги встречи 09.03 не учтены ⚠️ Даниил подтверждает plan или корректирует
OpenAlex rate limits (500k/день) Librarian cache снижает повторные запросы
LLM качество gap_finder Начать с простых keyword-gap metrics без LLM
Нет GPU для тяжёлых моделей Groq free tier (100K TPD) + Claude Haiku

Феанор, 2026-03-10 04:15 MSK (auto, worker ночь)
СТАТУС: PROPOSE — ожидает подтверждения Даниила (итоги встречи 09.03)

Choose icon