Главная / Статьи / Крошечный фильтр значимости: как квадрат в формуле удерживает задержку около 119 мс

Крошечный фильтр значимости: как квадрат в формуле удерживает задержку около 119 мс

Разбираем фильтр перед моделью, который оценивает сообщения по формуле «пи на пси в квадрате»: почему квадрат выделяет сильные сигналы и как локальный классификатор за 0,2 мс сохраняет быстрые ответы.

1029 слов

Фильтр, который решает, что ассистенту стоит запомнить, может быть совсем маленьким. H-Governor — это слой оценки перед моделью, он отдаёт первый байт примерно за 119 мс, и вся его скорость держится на одной формуле, небольшом классификаторе и нескольких строках на Python. Ниже математика, код и то, что именно измеряется, чтобы вы могли проверить всё сами, а не верить цифре задержки на слово.

Одна формула

Вся оценка выглядит так:

H = πψ²

Читается как «пи, умноженное на пси в квадрате», и состоит из трёх частей:

  • H — итоговая «энергия», конечный результат. Принимает значения от 0 примерно до 3,14.
  • pi — обычная константа, примерно 3,14159.
  • psi — оценка связности от 0 до 1: насколько осмысленно написан входной текст и как построены его предложения.

Никакой нейросети и никакого трансформера здесь нет. Это обычное вычисление в замкнутой форме, по духу ближе к физическому уравнению, чем к модели-«чёрному ящику».

Зачем возводить psi в квадрат

Квадрат нелинеен, и в этом весь смысл. Нормализованное значение связности сначала возводится в квадрат и только потом умножается на pi, поэтому слабые сигналы сжимаются, а сильные выделяются. При psi = 0,2 вклад всего 0,04, а при psi = 1,0 — целая единица, то есть в 25 раз больше веса.

На практике это значит, что рядовые реплики остаются в тени, а важные факты выходят на первый план. Обычная чат-модель, которой задали вопрос про ту же идею, описала её так же: квадрат подавляет слабые сигналы и сильно усиливает сильные, поэтому формула вполне годится как регулятор значимости. Это проверка на здравый смысл, а не доказательство, но с арифметикой она сходится.

Что здесь делает NumPy, а чего не делает

NumPy — стандартная библиотека Python для численных расчётов: векторы, матрицы, статистика и математика вообще. В этой системе она отвечает за вычислительную половину: вы передаёте уже оценённое psi и получаете согласованную оценку H. Дальше эта оценка влияет на судьбу сообщения: стоит ли ему попасть в память, повлиять на связность диалога или на выбор модели.

А вот вычислить psi NumPy не может. Самое сложное — прочитать живое человеческое сообщение настолько хорошо, чтобы понять, какие сигналы в нём важны, и это задача слоя оценки psi. Несколько примеров показывают разброс:

  • Упоминание о переезде в Лос-Анджелес на прошлой неделе — скорее всего, устойчивая личная информация.
  • Размышления об уходе с работы — вероятно, важное решение или нерешённая цель.
  • Тоска по родителю несёт эмоциональный вес, но никто не просит сохранить из неё факт.
  • Просьба напомнить о подготовке к марафону — обязательство, которое пригодится в следующих разговорах.

Регулятору не нужно понимать всё так, как понимает передовая языковая модель. Его задача уже: заметить сигналы, которые должны изменить память, связность, маршрутизацию или поведение ответа.

Именно качество классификации решает, сработает ли подход. Если psi оценено плохо, формула остаётся математически верной, но на практике бесполезной. Выглядеть это будет так:

  • Пустяковое сообщение получает слишком высокий балл и сохраняется, хотя его стоило проигнорировать.
  • Настоящее обязательство получает слишком низкий балл и забывается.
  • Эмоциональную реплику принимают за долгосрочный факт.
  • Короткое, но важное сообщение проигрывает длинному и однообразному.

Формула детерминирована, так что её польза целиком зависит от входных данных. Грубо говоря, качество памяти — это качество psi плюс поведение регулятора.

Поэтому этот слой и стоит до генерации. Это лёгкий и прозрачный шаг принятия решения, который задаёт согласованное состояние ещё до того, как языковая модель выдаст свой вероятностный ответ. LLM получает контекст, уже сформированный явной политикой, и ей не приходится с нуля решать, что важно. Арифметика дешёвая. Настоящая инженерная задача — это суждение, заложенное в psi.

Классификатор на пять категорий

Так откуда берётся psi? В этой реализации это классификатор на пять категорий, который работает локально примерно за 0,2 мс: без вызова API и без обращения к LLM, только регулярные выражения и арифметика:

def infer_tem_inputs(user_input):
    # 1. Durable personal info (name, location, goals)
    # 2. Important decisions (job change, trade entry)
    # 3. Emotional significance (loss, breakthrough, frustration)
    # 4. Commitments / unresolved objectives (psi-seeds)
    # 5. Future-relevant context (next steps, deadlines)

    # Returns: emotion, clarity, focus scores (0-1)
    # These combine into ψ

Каждая категория вносит вклад в итоговое psi от 0 до 1, после чего H = pi × psi² считается за микросекунды.

Такой порядок и объясняет скорость. Psi вычисляется до любого дорогого инференса, поэтому затратный слой видит только те сообщения, которые уже прошли фильтр значимости.

Путь запроса

Вот как выглядит проход регулятора в обработчике запросов приложения:

start_ns = time.perf_counter_ns()
emo, clarity, focus = infer_tem_inputs(request.input)
psi_report = tem_engine.evaluate(ThoughtSignal(clarity, focus, emo))
g_core = GongjuCore(psi=psi_report.coherence)
h_energy = g_core.holistic_energy()  # H = πψ²
latency_us = (time.perf_counter_ns() - start_ns) / 1_000
latency_buffer.append(latency_us)

Он засекает собственное время в наносекундах, оценивает эмоции, ясность и сосредоточенность, сводит их в значение связности и вычисляет H. Можно запустить код, убедиться в цифре 0,2 мс и проверить формулу. Воспроизводимые числа стоят больше, чем обещания вендоров.

Что из этого вынести

Формула простая, математика доказуемая, масштабирование нелинейное. Весь интеллект живёт в psi: понимание того, какие сообщения важны, какие факты долговечны, какие решения являются обязательствами и какой контекст понадобится позже.

Поэтому регулятор работает до модели, обходится намного дешевле полного инференса, и поэтому 119 мс до первого байта достижимы без потерь в качестве памяти. Это не трюк ради бенчмарка. Это то, что получается, когда решение переносится в дешёвый слой.