Перейти к содержанию

Sprint Truth — большой день 3 мая 2026

Контекст: Bear-таймлайн ставил Sprint Truth Tier 1 на 2-3 weekends (Weekend 1 = 10-11 мая). Камал начал на неделю раньше, в одно воскресенье (3 мая), и закрыл всю Tier 1 + Tier 2 (Citations Phase 2 + Verbatim mode + #74 foundation) + KZ corp filter — 16 эпиков за день.

Закрытые эпики (16)

Утренняя смена — Tier 1 (11 эпиков)

# Эпик Эффект
#71 Eval cleanup exam_qa_v1.jsonl: n=82→79, 9 verified через SQL lookup, 3 dropped (нет источника). Backup сохранён.
#67 Sprint Direct Anthropic direct API. Models: Haiku 4.5 (3.5 deprecated), Sonnet 4.5 (4 deprecated), Opus 4.7 (exact match). Retry на 429 (5s/10s/20s exponential backoff). Prompt caching работает (cached: 16472 в логах).
#68 Refuse mode MVP should_refuse() в bot.py: top<0.4 AND coverage<2 AND no SQL/web/docs → fallback. Threshold 0.4 для итерации по логам после прода.
#4 PROD-BUG fix blacklist 3 false phantoms removed: Приказ 1019 (Правила обучения по БиОТ), ҚР ДСМ-16 (Санитарные правила общепита), Приказ №344 (PTW Form 344). Главный contributor +13pp на NPA-450.
#5/#10 URL __ regex cleanup fix_url_wrapping применён в _split_for_telegram + 3 streaming progressive edits + reflection corrected.
#6 KZ corp v2 cleanup Промпт-правило для корп-кодов TRU-LP-HS / TCO-XX / KPO-XXX. v1 cleanup на сервере 28 апреля удалил 638 чанков.
#7 Reflection threshold 0.75→0.95 Hot-fix: Reflection стирал реальные ст.181/182 ТК РК и ҚР ДСМ-131/2020 как фантомы. Теперь edit'ит только при conf 0.95+.
#8 JSON parse json5 fallback Сначала json strict=False raw_decode, при failure → json5.loads. Покрывает «Expecting , delimiter» errors.
#9 Reflection через direct reflection.py использует _call_openrouter (не свой httpx) → автоматически routing на Anthropic direct.
#69 Citations API Phase 1 Anthropic Citations API server-side enforcement. build_citation_documents helper в anthropic_client.py + bot.py wire-up. USE_CITATIONS_API=true.
#11 Numerical verification MVP regex extract HSE-чисел → log unverified в metrics_*.jsonl event numerical_unverified. Не блокирует, собирает данные.

Вечерняя смена — Tier 2 + KZ filter (5 эпиков)

# Эпик Эффект
#12 Structured metrics logging новый metrics_logger.pylog_metric(event, **fields) пишет в /app/logs/metrics_YYYY-MM-DD.jsonl. События: refuse, reflection_found/applied/skipped, citations_used/received, numerical_unverified, rate_limit_retry, json5_recovered, verbatim_injected.
#13 Citations API Phase 2 парсинг CitationBlock из stream content_block_delta. accumulated_citations в usage_out["citations"]. Foundation для Verbatim mode.
#72 Verbatim quote mode (full) inject_verbatim_quotes() — впечатывает дословно cited_text из Citations метаданных рядом со связанными предложениями ответа. Stemming для русских словоформ. Флаг USE_VERBATIM_QUOTES=true в проде.
#74 Retrieval honesty FOUNDATION decompose_query() в llm.py — Haiku разбивает multi-claim запрос на атомарные subqueries. Foundation, не интеграция — bot.py wire-up ждёт следующий weekend.
KZ corp filter в Verbatim regex _KZ_CORP_RE ловит ТШО/Тенгиз/Кашаган/КТК/НКОК/КМГ/Самрук/ENRC/Казахмыс/Казцинк/ArcelorMittal + внутренние коды TRU-LP-HS/TCO-XX/KPO-N. Применяется в 2 местах: _build_citation_documents_from_results (chunks ДО Anthropic) + inject_verbatim_quotes (defense in depth). 20/20 тестов прошли локально.

Боевая проверка (3 мая 13:30, прод)

4 живых запроса в Telegram, специально подобранных чтобы провоцировать корп-утечку:

# Запрос Citations Verbatim Корп-имена
1 Кто такая Люми ✅ Нет
2 Наряд-допуск на нефтегазе 10 10 ✅ Нет
3 Стандарты у крупных операторов РК 4 2 ✅ Нет (+ Reflection warning «часть ссылок не подтверждена»)
4 План эвакуации в нефтянке 13 4 ✅ Нет

Итого: 27 citations, 16 verbatim quotes injected, 0 утечек ТШО/TCO/Кашагана.

KZ corp filter за 3 запроса не сработал — значит Apr 28 cleanup действительно убрал проблему на уровне базы, filter теперь страховка.

Eval baseline NPA-450

Через OR Sonnet 4 (apples-to-apples с May 2 baseline через docker exec -e USE_ANTHROPIC_DIRECT=false):

Метрика 2 мая baseline 3 мая после fix'ов Δ
Accuracy 83.7% (350/418) 96.7% (438/453) +13.0 pp 🚀
NPA grounding (eval-script) 35.9% 44.6% +8.7 pp
NPA grounding (loose key match) 45.0% 62.7% +17.7 pp
Parse failures 54 0 retry на 429 спас 100% запросов

Cost: ~$15-20 через OR (с prompt caching ~70%).

Главные wins по категориям (NPA-450)

5 категорий с прыжком +35-50 pp — все жертвы противоречивого blacklist:

Категория 2 мая 3 мая Δ
gz_rk (газовое) 50.0% 100% +50.0
ek_rk (Экологический кодекс) 50.0% 95.5% +45.5
koap_rk (КоАП РК) 57.1% 100% +42.9
tr_siz_ts (ТР ТС СИЗ) 47.1% 94.1% +47.0
voda_rk (Водный кодекс) 60.7% 96.4% +35.7

Технические инсайты

Sprint Truth тезис подтверждён на цифрах: - «Promt rule weaker than mechanical filter» — мы применили mechanical fixes (cleanup blacklist, threshold tuning, json5 fallback, retry, KZ corp regex) и получили +13pp acc + 0 corp leaks. - Architecture > Coverage — добавили 0 новых документов, fix'или обёртку — и получили скачок. - Promt противоречия → random behavior — blacklist с false positives заставлял бота random-вести себя на КоАП/Водный/Экологический. Удаление противоречий = stable behavior.

Latency: - Sprint Direct не дал -300-500мс как ожидалось. Anthropic direct ≈ OR в реальной нагрузке. Главный win — prompt caching сохраняется + Citations API возможен. - Reflection через direct работает нормально (через _call_openrouter routing).

Side-effect requirements.txt rebuild: - json5 добавление вызвало pip resolve без upper bounds → transformers 4 → 5.7, torch 2.11, chromadb 1.5.8, pydantic 2.12, numpy 2.4. Без regression на bge-m3 / ChromaDB. Удача — могли поломаться. - TODO: добавить upper bounds в requirements.txt чтобы избежать неожиданных bumps.

Прогноз стоимости

При текущей нагрузке (16-20 запросов/день, 48 active users): - Hetzner AX41-NVMe: $38 - Anthropic direct (Sonnet+Haiku+Opus, cache hit 56.7%): $30-35 - Voyage rerank-2.5: $4 - Sonar/Citations/B2: $5-6 - ИТОГО: ~$80-85/мес

Бюджетный потолок Камала: $200/мес = 100K₸ (включая будущий модуль расследований + Lyumi News редакцию).

Архитектура на конец 3 мая

Production AX41 (/opt/lyumi), все feature flags ON: - USE_ANTHROPIC_DIRECT=true - USE_CITATIONS_API=true - USE_VERBATIM_QUOTES=true - KZ corp filter в 2 layer'ах - Reflection threshold 0.95 - json5 fallback - Retry on 429 - Numerical verification logging - Structured metrics in JSONL

Связанные wiki

  • lyumi/observation-week-2026-05-04-10 — план observation week + post-week backlog
  • lyumi/verbatim_quote_mode_design — design doc для Verbatim
  • lyumi/sprints/2026-05-02-sprint-truth-roadmap — изначальный план
  • lyumi/sprints/2026-05-02-biot-eval — BiOT n=82 baseline
  • lyumi/sprints/2026-05-01-sql-acgih-ax41 — SQL lookup foundation
  • lyumi/v4_structured_retrieval — текущая SQL архитектура
  • lyumi/trust_first_principle — философия Trust First

Что Камал говорит

«6 эпиков + 5 фиксов за день — это outstanding темп» «Все хочу))))» (когда я предлагал A → B → closing) «По ссылке не принципиально, главное чтобы где прямо ссылается точно писала и ок» (про URL __ cleanup) «Ну да, это то что я осилю)» (про $200/мес budget cap) «В общем мы подпрыгнули))))» (итог дня)

Это был день когда planned roadmap на месяц схлопнулся в один воскресный день. Теперь — observation week 4-9 мая, метрики, потом Tier 3 (#74 integration, photo Citations, #73 per-claim).