simbiot-harness/skills/systemone-bench/SKILL.md

95 lines
6.7 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.

---
name: systemone-bench
description: Use when choosing between 3+ non-numeric action options via local Ollama decision endpoint (/v1/systemone, model nimble), or when optimizing action sequences with GA against a simulator. Turns "which of many options" into a measured, hierarchical choice instead of free-form LLM guessing.
metadata:
origin: t-261005074437-39a9b0 (внедрение systemone-bench в архитектуру харнеса)
code: /root/systemone-bench (clone symbiot/systemone-bench @ git.cil.by; README.md там же)
scope: любые тики харнеса, где нужен выбор действия из каталога >9 кандидатов; симуляция политик стартапа
---
# systemone-bench: decision-эндпоинт + GA-оптимизация выбора
## Trigger rule
- [ ] Нужно выбрать ОДНО действие из >9 однородных опций (команды, конфиги, политики)
- [ ] Опции разбиты (или разбиваются) на группы по 2–8 в группе
- [ ] Есть критерий качества выбора (fitness / AUM / метрика), хотя бы приблизительный
- [ ] Нужен выбор на симуляторе перед применением в бою (бесплатные прогоны)
Не использовать: для бинарных решений (это noul), для абсолютных оценок тяжести
(score плох на абсолютных шкалах — подтверждено сюитом), если опций ≤ 9 (делай
обычный choice без иерархии).
## Steps
### 1. Проверка окружения
```bash
curl -s http://127.0.0.1:11434/api/tags | grep -o '"nimble"' # модель на месте
cd /root/systemone-bench && python3 ga/ga.py --smoke # ~13с, должен быть зелёный
cd /root/systemone-bench && python3 harness/hier.py --model nimble --quick # ~мин, e2e ~81% на quick-16
```
Контракт эндпоинта: `choice` — criteria **объект**, 2–26 опций; `score` —
criteria **массив** 2–26 уровней, `score = Σ i·pᵢ`; `noul` — вероятность «да».
1–64 вопроса на запрос, тело ≤ 64 KiB, промпт ≤ 8194 токенов. `confidence` =
концентрация распределения, НЕ вероятность правильности — не опирайся на него
как на calibration.
### 2. Схема выбора: top-2 группы → choice по шортлисту ≤ 9
Главная рекомендация (README, рекомендация №1): flat-choice по всем 64 командам
падает до 0% (эндпоинт режет >26 и точность падает), иерархия:
1. **stage1 (score)**: по группам (8 групп) — взять **top-2** группы, не top-1
(top-2 hit 93.8–84.4% vs top-1 87.5–64.1% — у ~40% команд легитимный
«второй дом» в таксономии).
2. **stage2 (choice)**: объединённый шортлист кандидатов из двух групп —
**строго ≤ 9** (точность 100% на шортлисте 6 → 50% на 10).
3. **stage3 (score)**: если выбранная команда имеет параметры — ранжирование
значений score-массивом (gold #1 в 96.9–100%).
Расчётный эффект: e2e 57.8% → ~78% (top-2 выборка × stage2 92%). Латентность
полного конвейера ~520–580 мс — годится для тика, не для realtime.
### 3. GA: поиск последовательностей действий
```bash
cd /root/systemone-bench && python3 ga/ga.py # полный прогон (pop 200 × 100 gen, ~17с)
python3 ga/ga2.py --neardeath # при каком runway GA берёт опасные команды (layoff/delay_payroll)
python3 ga/ga2.py --robust # максимин по crunch/base/growth/dying
```
Фитнес = терминальный AUM основателя. GA бьёт greedy на +27–43% (8 нед) и
random search до +59%. Что уже известно (не переоткрывать):
- GA эмерджентно строит цепочки пререкрешитов (pricing_power → raise_prices_10).
- Опасные команды не выбирает при runway ≥ 2.5 мес — сигналят о реальном риске.
- **Дыра (найдена smoke-прогоном)**: `sell_secondary` даёт +100 personal cash и
спасает dying без опасных команд — симулятор вознаграждает личный кэш без
штрафа за health компании. Обход: гейт по здоровью компании (напр., фитнес
умножается на флаг health > порога, или штраф за dilution в personal cash).
### 4. Интеграция в тик харнеса
На тиках, где нужен выбор действия: собрать кандидатов → разбить на группы →
stage1 score (top-2) → choice ≤9 → применить → записать выбор и исход событием
в стор (для последующей GA-сшивки policy trace с fitness).
## Quality gates
- Шортлист stage2 **всегда ≤ 9**; если объединение top-2 групп даёт >9 — режь
по stage1-score внутри групп.
- stage1 всегда top-2, никогда top-1.
- Для тяжести/абсолютов не использовать score — только ранжирование однородного.
- Прогон ga/ga.py --smoke обязателен перед использованием GA-результатов.
- Результат каждого GA-эксперимента фиксировать событием на доску (cli.py task/complete
или event), не оставлять только в ga2-results.json.
- Не доверять `confidence` как вероятности правильности.
## References
- README.md репо /root/systemone-bench — контракт эндпоинта, все метрики сессии 2026-10-04
- harness/eval.py — 5 сюитов (шортлист, permutation, noul, score-тяжесть, батчинг)
- ga/ga.py, ga/ga2.py — GA и сценарные эксперименты; ga-results.json, ga2-results.json
- docs/systemone-bench-integration.md (репо харнеса) — интеграция и связь с AUM-петлёй