Sprint Truth — Lyumi roadmap
Создано: 2 мая 2026, поздний вечер
Контекст: после марафонского дня (Doc Intel v2, Reasoning Layer, BiOT/NPA-450 evals, McNemar p<10⁻¹⁴, Voyage rerank deploy, Opus diagnostic test)
Корневой инсайт дня
Bottleneck Lyumi — не в моделях, не в реранкере, не в покрытии базы.
Доказательства из сегодняшних тестов:
-
Opus subset test (Test #1, ночь 2 мая): перезапустили 19 wrong-id из BiOT через Opus 4.7 вместо Sonnet 4. Opus спас 1/7 real-wrong (14%). 6 из 7 real-wrong — Sonnet и Opus сошлись на ОДНОМ И ТОМ ЖЕ неправильном ответе. Convergent failure → retrieval problem, не reasoning. Замена модели — НЕ помогает.
-
Voyage Run 4 vs Cohere runs 1-3 на BiOT: идентичная accuracy (76.8%, 63 correct). 18 из 19 wrong-ids совпадают. Реранкер effect ≈ 0pp. Замена reranker — НЕ помогает.
-
Reflection лог в smoke-test: «Фантомный приказ МТСЗН №109 от 31.03.2022», «Ложная ссылка на СП РК 1.03-106-2012», «Фантомные упоминания OSHA и IOGP с конкретными деталями». Phantom rate существует несмотря на 184 НПА в базе. База — НЕ узкое место.
Вывод: bottleneck — архитектурный. Модель уверенно отвечает когда не должна, фабрикует citations, не имеет mechanism сказать «не знаю».
Промптом (level 0-1 enforcement) это не лечится. Нужен architectural enforcement на уровне 2-4 (mechanical filter / JSON schema / tool-use forced citation).
Цель Sprint Truth
Перевести Lyumi из «~65% trust score, иногда путает документы» → «88-92% trust score с architectural guarantees + 95%+ honest refuse на оставшиеся 10%».
Не «100% accurate» (невозможно для LLM). А «100% trustworthy в рамках того что знает».
Корневой принцип
Замена модели — это band-aid. Architectural trust enforcement — это лечение.
Прямая цитата от Камала: «промпты не работают, нужно на уровне спинного мозга».
Ключевое открытие — Anthropic Citations API
Anthropic запустил server-side Citations feature в январе 2025. Это API-level enforcement что cited_text физически совпадает с куском передаваемых documents. Phantom citation невозможен на API-уровне.
Как работает:
- Передаёшь retrieved chunks как documents=[...] (first-class API objects)
- Модель генерирует ответ → каждая цитата маркирована CitationBlock с:
- cited_text (verbatim quote)
- document_index
- start_char_index / end_char_index
- Anthropic server-side проверяет соответствие → phantom невозможен
Почему индустрия не схватилась: 1. Vendor lock-in (только Claude) 2. Не решает retrieval problem (если retrieved wrong chunks → корректно процитирует wrong) 3. Cost amplification (+15K токенов на запрос) 4. Low awareness (Anthropic тихо релизнул, не маркетировал) 5. Не покрывает все типы hallucination (только citation fabrication)
Для Lyumi — идеальный fit: - Compliance use case (phantom = fatal) - Уже планируется migration на direct Anthropic - Маленький codebase (быстрый refactor) - Low query volume (cost не проблема)
Решает 1 из 6 типов hallucination на 99%+. Остальные 5 — Sprint Truth Tier 1-3.
6 типов hallucination и их решения
| # | Тип | Citations API лечит? | Sprint Truth решение | Покрытие |
|---|---|---|---|---|
| 1 | Phantom NPA citation | ✅ Да (99%+) | Citations API (#69) | 99%+ |
| 2 | Paraphrase distorts meaning | ❌ Нет | Verbatim quote mode (#72) | 85-90% |
| 3 | Wrong reasoning around correct citation | ❌ Нет | Reasoning verifier upgrade (#75) | 50-70% |
| 4 | Mixed correct + incorrect claims | ❌ Частично | Per-claim citation enforcement (#73) | 75-85% |
| 5 | «Я не знаю» refusal | ❌ Нет | Architectural refuse mode (#68) | 95%+ |
| 6 | Retrieval of wrong document | ❌ Нет | Retrieval honesty + query decomp (#74) | 70-80% |
| extra | Numerical reasoning errors | ❌ Нет | Numerical verification (#70) | 90-95% |
Структура бэклога
#67 Sprint Direct: миграция Lyumi на Anthropic+Perplexity (PREREQ)
Что: refactor llm.py — anthropic_client.py + perplexity_client.py + openrouter_client.py (fallback). Feature flag USE_ANTHROPIC_DIRECT. Pushkin остаётся на OpenRouter (multi-model orchestration).
Зачем: - -300-500мс latency - -$5-7/мес - Hard spending caps в Anthropic Console (страховка от $40-непредсказуемых вечеров) - Predictable prompt caching - Открывает Citations API ← key reason
Effort: ~6-8 часов рабочего дня
Pitfalls:
- Streaming формат разный (Anthropic SSE vs OpenAI delta)
- Model name с датой (claude-sonnet-4-20250514)
- Cache требует 1024+ токена
- Perplexity citations отдельным полем
🟢 Tier 1 — Quick wins (~6-9 дней, высший приоритет)
#68 Refuse mode — architectural «не знаю»
Что: если top retrieval score < 0.4 ИЛИ coverage_count (chunks > 0.3) < 2 → бот отвечает «По вашему вопросу не нашла достаточно подтверждённых источников» вместо угадывания.
Реализация: should_refuse() в bot.py перед llm.generate.
Effort: 1-2 дня | Покрытие: 95%+ refuse appropriate | Зависимости: нет | ROI: ⭐⭐⭐⭐⭐
#69 Citations API integration
Что: Anthropic native Citations. Передавать retrieved chunks как documents=[...] (first-class API objects). Каждая cite в response = CitationBlock с verbatim cited_text + document_index. Server-side enforcement → phantom невозможен.
Реализация: post-processing проверяет что все factual claims имеют supporting CitationBlock; те что нет — флагаются «без подтверждения» или вырезаются.
Effort: 2-3 дня | Покрытие: 99%+ phantom citation | Зависимости: #67 (Sprint Direct) | ROI: ⭐⭐⭐⭐⭐
#70 Numerical verification — strip unverified numbers
Что: mechanical post-filter. Regex extract все числа+единицы (1.3 м, 30 дней, 5 мг/м³, ст. 156). Каждое — fuzzy match against retrieved chunks. Не match → mark_unverified или strip.
HSE-критично: высоты, концентрации, сроки, статьи кодексов.
Effort: 2-3 дня | Покрытие: 90-95% numerical errors | Зависимости: нет | ROI: ⭐⭐⭐⭐
#71 Eval cleanup — убрать «?» truths из exam_qa_v1.jsonl
Что: 12/19 wrong-ids в Voyage Run 4 имели truth=«?». Это eval methodology gap — без чистого ground truth все accuracy-числа на BiOT под вопросом. Найти правильные ответы (по источникам) либо удалить ambiguous из corpus. Пересчитать BiOT accuracy.
Effort: 1 день | Покрытие: foundational | Зависимости: нет | ROI: ⭐⭐⭐⭐ (foundational)
🟡 Tier 2 — Medium effort (~10-15 дней)
#72 Verbatim quote mode
Что: структурированный output с полями {claim, verbatim_quote, source, is_paraphrased}. Юзер видит ОБЕ версии — интерпретацию и оригинал. Защита от paraphrase distortion.
Effort: 2-3 дня | Покрытие: 85-90% paraphrase fidelity | Зависимости: #69 | ROI: ⭐⭐⭐
#73 Per-claim citation enforcement
Что: каждый factual claim в response ОБЯЗАН иметь supporting citation. Без citation → mark_as_unsupported или strip. Юзер видит «✅ Поддержанные» vs «⚠️ Неподдержанные» claims.
Effort: 3-4 дня | Покрытие: 75-85% mixed-claims errors | Зависимости: #69 | ROI: ⭐⭐⭐
#74 Retrieval honesty + query decomposition
Что: ГЛАВНЫЙ bottleneck Lyumi (доказано Opus-тестом — convergent failure 6/7). Tier 1: query decomposition — break complex query на subqueries, retrieve отдельно, fail если хоть один subquery без context. Tier 2: Self-RAG. Tier 3 (long-term): GraphRAG.
Effort Tier 1: 4-7 дней | Покрытие: 70-80% wrong-retrieval cases caught (refuse-mode) | Зависимости: нет | ROI: ⭐⭐⭐⭐ (закрывает главный bottleneck)
🔴 Tier 3 — Higher effort (~3-5 дней)
#75 Reasoning verifier upgrade (расширение Reflection)
Что: two-pass с verifier. Pass 1 — модель генерирует draft с reasoning chain. Pass 2 — отдельная Haiku проверяет «Из citations C1,C2,C3 действительно следует claim X?» Если no → переписываем без spurious reasoning.
Effort: 3-5 дней | Покрытие: 50-70% reasoning errors | Зависимости: нет | ROI: ⭐⭐ (полировка)
Timeline (если делать только по выходным)
| Weekend | Задачи |
|---|---|
| 10-11 мая | #68 Refuse mode + #71 Eval cleanup (Tier 1 quick wins) |
| 17-18 мая | #67 Sprint Direct (Anthropic migration) |
| 24-25 мая | #69 Citations API + #70 Numerical verification |
| К концу мая | Tier 1 закрыт. Compliance-grade на phantom + numbers + refuse. |
| Июнь (3 weekends) | #72 Verbatim + #73 Per-claim + #74 Retrieval honesty |
| Начало июля | #75 Reasoning verifier + production validation |
Ожидаемый результат через 2 месяца
| Метрика | Сейчас | После Sprint Truth |
|---|---|---|
| Phantom citations | ~5-10% | <1% |
| Refusal appropriate | ~5% | 95%+ |
| Number accuracy | ~85% | 95%+ |
| Reasoning correctness | ~80% | 88-92% |
| Retrieval correctness | ~75% | 82-87% |
| Paraphrase fidelity | ~75% | 85-90% |
| Overall trust score | ~65% | ~88-92% |
Что НЕ делаем (ключевые «нет»)
- ❌ Не роутим больше на Opus — Opus спас 1/7 на BiOT, не оправдывает 5x cost
- ❌ Не меняем reranker — Voyage = Cohere = no rerank на BiOT (доказано)
- ❌ Не добавляем больше НПА — 184 хватает, проблема в ненадёжности использования
- ❌ Не пивим в B2B SaaS / showcase — Камал явно сказал «не хочу за неё деньги, нужно чтобы реально работало»
- ❌ Не уходим на local model + constrained decoding (XGrammar, etc.) — overkill, 2-3 месяца refactor, может не дать accuracy
- ❌ Не делаем GraphRAG сейчас — research track, Q3 2026 если бизнес выживёт
Связанные wiki-страницы
lyumi/sprints/2026-05-02-biot-eval— BiOT n=82 accuracy assessment (90% Lyumi, 80% NPA)lyumi/sprints/2026-05-01-sql-acgih-ax41— SQL lookup + ACGIH + AX41 migrationlyumi/v4_structured_retrieval— текущая SQL lookup архитектураlyumi/grounding_fix_apr17— закрытый список источников (предыдущий раунд anti-phantom)lyumi/pushkin— digest bot (на OpenRouter, не мигрирует)
External research
- Anthropic Citations API (Simon Willison, Jan 2025)
- GraphRAG (Microsoft Research)
- Constrained decoding (XGrammar, llguidance)
- Source-Grounded AI Platforms 2026
Связь с системой задач
-
66 (epic) Sprint Truth — umbrella
-
67 Sprint Direct — prereq
-
68-71 — Tier 1 quick wins
-
72-74 — Tier 2 medium effort
-
75 — Tier 3 polish
Дискуссия 2 мая ночью — ключевые повороты
- «Дорого и непредсказуемо» → spending caps + caching analysis
- «Сам не готов платить» → persona gap, Камал не свой клиент
- «ChatGPT good enough для меня» → target = juniors, не эксперты
- «Путает документы» → architectural fix > prompt fix
- «Это промпты, нужен спинной мозг» → tool-use, JSON schema, mechanical filters
- «Опус не помогает» → diagnostic Test #1 подтвердил retrieval gap > model
- «Есть фотографическая память?» → нашли Anthropic Citations API
- «Реклама неправды, не готов стоять за продуктом» → Sprint Truth = restore integrity
- «Не хочу деньги, хочу чтобы работало» → отказ от B2B/showcase frame
Камал прошёл путь от frustration к strategic clarity за один вечер. Bottleneck приоритеты переформатированы: Architecture > Coverage > Marketing.