neuler_mvp_spec
Neuler MVP Spec — AstaBench E2E
Дата: 2026-02-26
Версия: 0.1 (pre-meeting draft)
Следующая встреча: ~2026-03-09 (bi-weekly)
1. Что такое AstaBench E2E
AstaBench (Automated Science Task Benchmark) — семейство бенчмарков для оценки AI-учёных.
E2E (End-to-End) версия = полный цикл от входного задания до валидируемого результата.
Что оценивается:
| Измерение | Описание |
|---|---|
| Hypothesis quality | Новизна, правдоподобность, тестируемость гипотезы |
| Experimental design | Корректность плана эксперимента |
| Code implementation | Runnable ML-код, воспроизводимый результат |
| Analysis | Правильная интерпретация результатов |
| Writing | Scientific paper draft качество |
E2E задание (пример):
Input: "Исследуйте, работает ли operator splitting как регуляризатор для SGD"
Output: hypothesis + experiment code + results + mini-paper draft
Метрика успеха: LLM-as-judge (GPT-4 / Claude) + human expert review (Даниил).
2. MVP: 3 AI-scientist решения
Три типа задач, покрывающих разные слои исследовательского цикла:
Solution A: Literature Scout
Задача: дано исследовательское направление → найти и структурировать литературу
Input: { "topic": "operator splitting for neural network training", "depth": "L" }
Output: {
"papers": [...], # список с title/doi/abstract/relevance
"knowledge_gaps": [...], # где нет исследований
"positioning": "..." # как наша работа соотносится с SOTA
}
Агенты: Библиотекарь (SDR-based) → Рецензент
Инструменты: OpenAlex, Semantic Scholar, DOI2PDF, SDR
Benchmark: сравнить с ручным обзором литературы (coverage % + gap precision)
Solution B: Hypothesis Generator
Задача: дан research gap → сгенерировать и ранжировать гипотезы
Input: { "gap": "нет теорем о Strang splitting для non-convex NN loss", "context": [...papers] }
Output: {
"hypotheses": [
{ "statement": "...", "novelty": 0.8, "feasibility": 0.7, "tests": ["..."] },
...
],
"top_hypothesis": "...",
"rationale": "..."
}
Агенты: Генератор гипотез → Рецензент (hallucination check)
Метрика: expert score (0-10) по критериям НТИСС (новизна/тестируемость/ценность)
Human-in-the-loop: confidence < 0.7 → эскалация Даниилу
Solution C: MLE Runner
Задача: дана гипотеза + датасет → написать и запустить ML-эксперимент
Input: { "hypothesis": "...", "dataset": "MNIST/synthetic", "compute": "cpu_local" }
Output: {
"code": "...", # runnable Python
"results": { "metric": 0.94, "plots": [...] },
"verdict": "confirmed" | "rejected" | "inconclusive",
"next_experiments": [...]
}
Агенты: MLE (code generation + execution sandbox) → Рецензент
Инструменты: Python sandbox (subprocess), matplotlib, local GPU (если есть)
Метрика: reproducibility (same seed → same result), verdict accuracy vs human
3. Контракты агентов (JSON Schema)
Research Manager (оркестратор)
{
"input": {
"task": "string", // исходное задание
"solution_type": "A|B|C", // какое решение выбрать
"budget": { "time_min": 30, "cost_usd": 0.5 }
},
"output": {
"result": {}, // Solution-specific output
"session_id": "uuid", // для продолжения/форка
"confidence": 0.0..1.0,
"artifacts": ["path/to/file", ...]
}
}
Библиотекарь
{
"input": { "query": "string", "max_papers": 20 },
"output": { "papers": [{ "title": "", "doi": "", "abstract": "", "score": 0.0 }] }
}
Генератор гипотез
{
"input": { "gap": "string", "context_papers": [...] },
"output": { "hypotheses": [...], "reasoning": "string" }
}
MLE агент
{
"input": { "hypothesis": "string", "experiment_spec": "string" },
"output": { "code": "string", "results": {}, "verdict": "string" }
}
Рецензент (cross-cutting)
{
"input": { "artifact_type": "hypothesis|code|paper", "content": {} },
"output": { "score": 0..10, "issues": [...], "confidence": 0.0..1.0, "approved": bool }
}
4. CLI Interface
# Solution A: Literature Scout
neuler scout --topic "operator splitting SGD" --depth L --output report.md
# Solution B: Hypothesis Generator
neuler hypothesize --gap "Strang splitting convergence" --papers papers.json --top 3
# Solution C: MLE Runner
neuler run --hypothesis "splitting reduces gradient variance" --dataset synthetic --compute local
# Session management
neuler session list
neuler session fork <session_id>
neuler session continue <session_id>
Persistence: один файл сессии
{
"session_id": "uuid",
"created_at": "ISO",
"task": "...",
"solution_type": "A|B|C",
"steps": [{ "agent": "...", "input": {}, "output": {}, "timestamp": "" }],
"artifacts": ["..."],
"status": "in_progress|completed|forked",
"parent_session_id": null
}
5. Метрики успеха MVP
| Метрика | Порог MVP |
|---|---|
| Solution A coverage | ≥80% known papers для конкретного топика |
| Solution B expert score | ≥6/10 за новизну + тестируемость |
| Solution C reproducibility | 100% (same seed → same result) |
| E2E latency (A+B+C) | ≤15 мин для medium depth |
| Escalation precision | confidence threshold корректен в ≥80% случаев |
6. Технологический стек
neuler/
├── cli.py # CLI entrypoint (Click/Typer)
├── agents/
│ ├── research_manager.py
│ ├── librarian.py # SDR-based search
│ ├── hypothesis_gen.py
│ ├── mle_runner.py # code gen + subprocess
│ └── reviewer.py
├── tools/
│ ├── openalex.py # из SDR
│ ├── semantic_scholar.py
│ ├── doi2pdf.py # из SDR DOIProcessor
│ └── sandbox.py # safe Python execution
├── session.py # SessionManager (JSONL persistence)
├── config.yaml # agent + tool settings
└── bench/
└── astabench_e2e.py # evaluation harness
LLM: Claude claude-sonnet-4-6 (основной), claude-haiku-4-5-20251001 (Рецензент/быстрые задачи)
Orchestration: LangGraph (уже используется в SDR) или simple async
Tracing: Langfuse (из SDR infra)
7. Минимальный первый шаг (к следующей встрече)
Задача на 1 неделю: реализовать Solution A (Literature Scout) как standalone CLI
neuler scout --topic "X" --depth S→ 10 релевантных статей с аннотациями- Использовать OpenAlex + Semantic Scholar (уже реализованы в SDR)
- Выходной формат: Markdown-отчёт (как
sdr_state_of_the_art_2025_2026.md) - Eval: запустить на “operator splitting SGD” → сравнить с ручным обзором
Почему A первый: самый независимый, инструменты уже есть, демо будет наглядным.
8. Вопросы к встрече
- AstaBench E2E: есть ли официальная версия или это наш внутренний стандарт?
- Три решения: это три независимых системы или модули одной?
- Вычисления: есть ли доступ к GPU для MLE Runner или только CPU?
- Timeline: когда первая demo — до или после SDR v1 release?
- Команда: кто пишет помимо Даниила? Альберт? Данил Шерки?
Создано Feanor автономно 2026-02-26 04:00 MSK. Требует ревью Даниила перед встречей.