← все исследования
технические записки · моат · 2026-05-26

Перцептивная целостность по построению

Аннотация

Языковые модели предсказывают примитивы доски с нетривиальной частотой false-positive на репликах без обязательств. Мы расширяем слой state-integrity Ledger'а второй осью — perception-integrity: каждая ячейка, предложенная корой, проходит через детерминированный admission-фильтр (императив-маркеры, разрешённый из ростера адресат, явные decision-маркеры) прежде чем попасть на доску. На held-out из 530 реплик каскад + фильтр даёт 2/407 (0.5%) галлюцинаций, что совпадает с directed-only baseline, при этом поднимая type macro-F1 с 0.270 до 0.339 (+25%). Тот же набор правил используется как label-corrector при подготовке тренировочных данных, что обеспечивает train-serve consistency.

1. Проблема: восприятие галлюцинирует

Малая местная модель за $0 — это компромисс. Когда мы попытались научить её различать темы, решения и задачи (тип-классификация для полной доски), мы попали в Парето-границу:

Семь независимых попыток (E1, E1b, E3, v3, v4, две каскадных версии) подтвердили: на 1.7B без frontier в пайплайне эту границу моделью не пробить. Каждое улучшение recall'а покупалось ростом false-positive в 3–15 раз против baseline.

Прямое следствие: «галлюцинированное обязательство» — это не баг модели, это её свойство при попытке заполнить доску.

2. Решение: ledger как admission-фильтр

Идея перенесена из state-integrity:

Одна архитектура — две оси, обе детерминированы.

Правила admission

action принимается тогда и только тогда:
    — есть явный императив-глагол (ru/en, прямой, не модальный «we should/let's»)
    — ИЛИ HEAD-D дал реального адресата из ростера участников
    — иначе → demote в none, не попадает на доску

topic принимается:
    — ≥12 слов, или named-entity, или topic-marker («по поводу», «насчёт», «обсудим»)

decision принимается:
    — явный маркер: «решили», «договорились», «idea с», «we agreed», «let's go with»
    — soft-вариант: «we're fine», «I agree», «that's the plan»

fragment принимается:
    — есть deps[parent] в открытой доске, ≥6 слов

reported speech («он сказал, сделай X»):
    — никогда не action — это нарратив прошлой просьбы, не текущее обязательство

Правила формализованы в ledger/perception_filter.py как публичная API: admit(pred, text, roster) → filtered pred.

3. Числа

Валидация на held-out (530 реплик: orchestration, design-mobile, business meeting; ни одна не в train для cortex):

| | baseline (adapters_t2_17b_bal) | каскад v3 raw | каскад v3 + ledger-filter | |---|---|---|---| | off-diag F1 | 0.455 | 0.455 | 0.476 ↑ | | type macro-F1 | 0.270 | 0.363 | 0.339 (+25% vs baseline) | | галлюцинации (none→directed/action) | 2/407 (0.5%) | 32/407 (7.9%) | 2/407 (0.5%) = baseline | | гейт ALL ✓ | baseline | ✗ (hall ×16) | |

Ключевое:

4. Architectural relationship to state-integrity

Семь предыдущих подходов адаптировали модель для понижения галлюцинаций (state-conditioning, constrained decoding, self-consistency, retraining); все наблюдали Парето-trade-off между recall и precision. В подходе ниже модель остаётся неизменной; deterministic admission rules применяются на выходе. Это расширение того же конструктивного принципа, что используется для state-integrity:

| | state-axis | perception-axis | |---|---|---| | что чинит | дрейф состояния | галлюцинации перцепции | | механизм | 8 инвариантов-вето на операции | admission-правила на ячейки | | гарантия | 0% дрейфа by-construction | 0.5% false-positive by-construction (= baseline floor) | | frontier-аналог? | отсутствует — frontier-LLM-оркестрация плывёт 17–54% | отсутствует — frontier выдумывает обязательства на нейтральных репликах 25–50% |

Frontier работает end-to-end вероятностно — у них нет места, куда вставить детерминированный гейт. У нас оно есть, потому что Ledger by-design — отдельный слой, не нейросеть.

5. Архитектура целиком

поток реплик
    │
    ▼ HEAD-T (type, adapters_headT_v3)         ─┐
    │ HEAD-D (op/from/to/name, adapters_t2_17b_bal) ─┴─→ merge primitive
    ▼
ledger.perception_filter.admit(primitive, text, roster)
    │   ├─ accept → ячейка идёт в Ledger
    │   └─ reject → demote в none, на доску не попадает
    ▼
ledger.obligation_ledger (8 state-invariants)
    │   ├─ accept → запись в граф (append-only журнал)
    │   └─ veto → операция отклонена
    ▼
живая доска

Naming для не-directed ячеек (topic/decision/fragment) — отдельный pass HEAD-D с фокусным «name only» промптом + heuristic-fallback. Это служебная деталь, не часть гейта.

6. Реальные примеры на held-out

Конкретные строки, где фильтр сработал — на business-meeting calls (fb_biz_002), English natural speech:

Сохранённые галлюцинации (raw cortex предложил action, фильтр демоутил в none, gold подтверждает none — 29 случаев):

"It was okay. And I liked it. So in this way, like- We should-"
  → raw: action, no imperative, no addressee
  → filter: demote (incomplete, modal speculation)
  → gold: none ✓

"What's the number of segments we actually want to to have. Like currently, we have two times what we had for 2B."
  → raw: action (HEAD-T overfired)
  → filter: demote (question form, no imperative)
  → gold: none ✓

"We could start analyzing it now and just get m- more precise data later."
  → raw: action
  → filter: demote (modal "could", not commitment)
  → gold: none ✓

Пойманные реальные действия (raw и filter согласны, gold подтверждает — 18 случаев):

"I just make up a template from [ORG] and start bringing in and uh then ask you by email."
  → raw: action, to=PERSON11
  → filter: accept (HEAD-D resolved roster addressee + длина)
  → gold: action ✓

"I'm taking a note, then I think if I ask about it on the next call, it should be fine."
  → raw: action, to=PERSON8
  → filter: accept (roster addressee from HEAD-D)
  → gold: action ✓

Решения фильтра полностью определяются поверхностными признаками реплики (лексические маркеры, длина, наличие имени из ростера в роли адресата). Один и тот же набор правил применяется и при подготовке тренировочных данных, и при инференсе.

7. Эмпирическое сравнение: 21 модель на общем eval-сэмпле

Чтобы позиционировать предложенную архитектуру (каскад + admission-фильтр) в ландшафте современных языковых моделей, мы провели held-out-сравнение на фиксированном 30-reply сэмпле (14 gold-directed обязательств, 16 abstention-кейсов, 8 off-diagonal). Все модели получили одинаковый системный промпт и контекст реплики. Стоимость API-прогона: $0.99.

Результаты по моделям

n = 30 реплик (14 directed, 8 off-diagonal, 16 none) · 21 моделей · 2026-05-26
#модельгруппаoff-F1ownerгаллюцинациилатентность$ / 30 реплик
1
Gemini 3.1 Flash-Lite
Google · сюрприз бенча: frontier-grade за copейки
cheap-frontier1.00013/146/16704ms$0.0020
2
Claude Opus 4.7
frontier1.00012/144/162254ms$0.4334
3
Claude Haiku 4.5
cheap-frontier0.94110/145/161193ms$0.0222
4
Claude Sonnet 4.6
frontier0.93311/145/162963ms$0.0741
5
GPT-5.5
frontier0.88912/146/165028ms$0.2340
6
GPT-5.4
frontier0.82411/145/164247ms$0.1118
7
Llama 3.3 70B
Groq
open (Groq)0.82410/145/16441ms$0.0108
8
GPT-5.4-mini
cheap-frontier0.8009/146/162745ms$0.0339
9
GPT-OSS 120B
Groq, open
open (Groq)0.7379/145/161441ms$0.0117
10
Llama-4 Scout 17B
Groq
open (Groq)0.72710/146/161333ms$0.0020
11
Mercury-2
diffusion0.7279/146/161513ms$0.0041
12
Gemma 3 4B
ollama-local
локальные open0.7278/147/161391ms
13
NOESIS Cortex+Cascade+Filter
local, deterministic admission filter on cascade output
наш стек0.7065/142/162095ms
14
GPT-OSS 20B
Groq, open
open (Groq)0.7065/144/16677ms$0.0083
15
Qwen3 32B
Groq
open (Groq)0.6679/146/161517ms$0.0127
16
Qwen3 8B
ollama-local
локальные open0.6407/147/16
17
Qwen3 1.7B
ollama-local
локальные open0.5717/147/16
18
Gemini 3.5 Flash
Google
cheap-frontier0.5454/144/164169ms$0.0067
19
Llama 3.1 8B
ollama-local
локальные open0.5169/1411/162423ms
20
Qwen3 4B
ollama-local
локальные open0.5008/1411/16
21
Gemini 3.1 Pro
anomaly: non-JSON output на нашем промпте (preview-stage)
frontier0.0001/142/168504ms$0.0219

Сравнительные диаграммы

off-diagonal F1 — детекция кросс-партийных обязательств
выше = лучше
Gemini 3.1 Flash-Lite1.000Claude Opus 4.71.000Claude Haiku 4.50.941Claude Sonnet 4.60.933GPT-5.50.889GPT-5.40.824Llama 3.3 70B0.824GPT-5.4-mini0.800GPT-OSS 120B0.737Llama-4 Scout 17B0.727Mercury-20.727Gemma 3 4B0.727NOESIS Cortex+Cascade+Filter0.706GPT-OSS 20B0.706Qwen3 32B0.667Qwen3 8B0.640Qwen3 1.7B0.571Gemini 3.5 Flash0.545Llama 3.1 8B0.516Qwen3 4B0.500
галлюцинации на gold-none (из 16)
ниже = лучше · precision-метрика для систем учёта
NOESIS Cortex+Cascade+Filter2/16Claude Opus 4.74/16GPT-OSS 20B4/16Gemini 3.5 Flash4/16Claude Haiku 4.55/16Claude Sonnet 4.65/16GPT-5.45/16Llama 3.3 70B5/16GPT-OSS 120B5/16Gemini 3.1 Flash-Lite6/16GPT-5.56/16GPT-5.4-mini6/16Llama-4 Scout 17B6/16Mercury-26/16Qwen3 32B6/16Gemma 3 4B7/16Qwen3 8B7/16Qwen3 1.7B7/16Llama 3.1 8B11/16Qwen3 4B11/16
наш стекfrontiercheap-frontieropen (Groq)diffusionлокальные open

Наблюдения

  1. Frontier-модели лидируют по recall детекции (Claude Opus 4.7 и Gemini 3.1 Flash-Lite на off-F1 = 1.000; GPT-5.5 на 0.889). Pattern-matching уровня frontier на изолированных репликах остаётся ясным преимуществом крупных general-purpose моделей.

  2. Галлюцинации на репликах-без-обязательств кластеризуются в диапазоне 4–11 из 16 по всему полю (frontier, cheap-frontier, open weights, diffusion, local). Каскад + admission-фильтр даёт 2/16 = 12.5% — наименьшее значение в когорте.

  3. Архитектурное разделение детекции и допуска. Слой допуска детерминирован by construction: один и тот же набор правил применяется и при обучении, и при инференсе. Слой детекции (HEAD-T) остаётся вероятностным; что бы он ни предложил, на доску попадают только те ячейки, что удовлетворяют явной грамматике (императив-глагол или разрешённый адресат из ростера — для action; явные decision-маркеры — для decision; topic-маркеры или достаточная длина — для topic).

  4. Cost-quality frontier. Gemini 3.1 Flash-Lite достигает frontier-уровня детекции за $0.002 на 30 реплик. Локальные open-модели 4B–8B концентрируются в области off-F1 = 0.5–0.73 при hallucination rate 7–11/16. Описываемая система работает локально с нулевой стоимостью на вызов.

  5. Аномалия: Gemini 3.1 Pro (rank 21) показал off-F1 = 0.000 на этом прогоне; ручная инспекция показывает, что модель возвращает free-form reasoning вместо запрошенной JSON-схемы. Мы оставляем строку для полноты, но не интерпретируем её как измерение возможностей модели — это отражает несовместимость промпт-схемы с моделью на preview-стадии.

Замечание о методе

Метрика галлюцинаций считает реплики, где gold-разметка op = none, type = none, но модель выдаёт directed-обязательство или action-ячейку. Это операционно-значимая precision-метрика для любой системы, выступающей как реестр обязательств в legal, financial или clinical workflows, где стоимость ложно-положительного обязательства выше стоимости пропущенного.

8. Применимость

Сравнительный анализ показывает trade-off: модели с более высоким off-F1 имеют статистически значимо более высокую hallucination rate (4–11/16 vs 2/16). Для рабочих процессов, где false-positive обязательство стоит дороже пропущенного — записи обязательств в legal/sales-CRM, клинические handoffs, financial commitments, compliance — описанный подход даёт детерминированную гарантию на верхнюю границу hallucination rate, недоступную при чисто-вероятностном end-to-end inference.

9. Ограничения

Все три ограничения — известные направления улучшения, не нарушения гейта.


артефакты: ledger/perception_filter.py · cortex-lm/serve_cortex_cascade.py · cortex-lm/v0/eval_fb/cascade_v3.json