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

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 — не в моделях, не в реранкере, не в покрытии базы.

Доказательства из сегодняшних тестов:

  1. 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. Замена модели — НЕ помогает.

  2. Voyage Run 4 vs Cohere runs 1-3 на BiOT: идентичная accuracy (76.8%, 63 correct). 18 из 19 wrong-ids совпадают. Реранкер effect ≈ 0pp. Замена reranker — НЕ помогает.

  3. 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.pyanthropic_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 migration
  • lyumi/v4_structured_retrieval — текущая SQL lookup архитектура
  • lyumi/grounding_fix_apr17 — закрытый список источников (предыдущий раунд anti-phantom)
  • lyumi/pushkin — digest bot (на OpenRouter, не мигрирует)

External research

Связь с системой задач

  • 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 мая ночью — ключевые повороты

  1. «Дорого и непредсказуемо» → spending caps + caching analysis
  2. «Сам не готов платить» → persona gap, Камал не свой клиент
  3. «ChatGPT good enough для меня» → target = juniors, не эксперты
  4. «Путает документы» → architectural fix > prompt fix
  5. «Это промпты, нужен спинной мозг» → tool-use, JSON schema, mechanical filters
  6. «Опус не помогает» → diagnostic Test #1 подтвердил retrieval gap > model
  7. «Есть фотографическая память?» → нашли Anthropic Citations API
  8. «Реклама неправды, не готов стоять за продуктом» → Sprint Truth = restore integrity
  9. «Не хочу деньги, хочу чтобы работало» → отказ от B2B/showcase frame

Камал прошёл путь от frustration к strategic clarity за один вечер. Bottleneck приоритеты переформатированы: Architecture > Coverage > Marketing.