Laya: открытый System 1 decision engine на ModernBERT
Laya — открытый Apache 2.0 decision-encoder на ModernBERT-large для мгновенного выбора действия по JSON/text состоянию агента за один Forward Pass (~33–35 мс на self-hosted GPU). Он решает проблему дорогих LLM ReAct loop в high-QPS маршрутизации, Guardrails и local agents, заменяя часть reasoning на калиброванную System 1 классификацию.
1. Обзор концепции и системная проблема
Laya решает конкретную проблему агентных систем: большинство решений в production-агенте не требуют генеративного reasoning, а требуют быстрой маршрутизации состояния. Классический ReAct loop с LLM вызывает модель на каждом шаге, поэтому даже тривиальное решение — выбрать инструмент, отклонить запрещённое действие, перевести запрос в fallback — стоит сотни миллисекунд, токенов и внешних API-затрат.
Laya — это open-source System 1 decision engine от Convai Innovations, построенный на ModernBERT-large под лицензией Apache 2.0. Модель принимает структурированное состояние агента — JSON, текстовый контекст или их комбинацию — и за один Forward Pass возвращает решение: action, confidence, reason codes. В позиционировании Convai это открытый аналог Jev: не замена LLM для сложного планирования, а быстрый self-hosted классификатор решений для high-QPS агентных контуров и Agentic Workflow.
Технически Laya — это encoder-based decision model: двунаправленный Transformer, который не генерирует токен за токеном, а обрабатывает входной контекст целиком и выдаёт logits над action space. В отличие от LLM ReAct loop, который может опираться на In-Context Learning, Prompt Caching и autoregressive generation, Laya не использует генеративный decode. Это критически меняет экономику inference: нет autoregressive decode, нет KV Cache, нет типовых LLM-оптимизаций вроде Fast Patching; вместо этого один batched encoder pass с предсказуемой латентностью.
| Метрика | Laya / ModernBERT-large | LLM ReAct loop |
|---|---|---|
| P50 latency на self-hosted GPU | ~33–35 мс | 300–2000+ мс |
| Маржинальная стоимость решения | GPU-час, ~0 токенов | input/output tokens, API fee |
| Контекст | до ~8k токенов | зависит от модели, часто 8k–128k+ |
| Архитектурный режим | System 1: классификация решений | System 2: генеративное reasoning |
| Вывод | action_id, confidence, reason_codes | текст, Tool Calling, JSON, промежуточные шаги |
| Роль в продакшене | router, guardrail, policy gate | planner, synthesizer, Tool Calling executor |
Экономический эффект Laya появляется там, где решения повторяемы: маршрутизация Tool Calling, safety gate перед LLM, local agent на Docker agents, bare-metal inference, privacy-sensitive self-hosted сценарии. Если агент принимает 10 000 решений в минуту, перевод даже 60–80% тривиальных решений с LLM на Laya уменьшает latency budget и token-затраты без потери качества, потому что для этих решений не нужен открытый reasoning.
2. Архитектурная таксономия и ментальная модель
Laya работает как decision head поверх ModernBERT-large. Входное состояние агента нормализуется, токенизируется, проходит через encoder, после чего pooling-слой и классификационная голова выдают распределение над action space. Postprocessor применяет policy: проверяет allowed_actions, confidence threshold, fallback-логику и Guardrails.
Agent State JSON/text
│
▼
┌─────────────────────────────┐
│ Schema / State Normalizer │
│ - flatten JSON fields │
│ - canonical text rendering │
│ - redact PII / secrets │
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ ModernBERT Tokenizer │
│ input_ids + attention_mask │
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ ModernBERT-large Encoder │
│ RoPE positional encoding │
│ FlashAttention / varlen │
│ bidirectional self-attention│
│ contextual Vector Embeddings│
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ Pooling + Decision Head │
│ logits[action_id] │
│ optional multi-label heads │
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ Policy / Calibration Layer │
│ softmax + temperature │
│ confidence threshold │
│ allowed_actions validation │
│ reason_codes / fallback │
└──────────────┬──────────────┘
│
▼
Router → MCP Tool Calling → ReAct loop / human review
Таксономия компонентов:
- State Normalizer — преобразует JSON/text в каноническую форму. Например,
{"intent":"refund","amount":120,"user_tier":"paid"}может быть сериализован в детерминированную строку с ключами, значениями и типами. Для структурированных полей с кодом может парсить AST. Это важно, потому что encoder чувствителен к порядку полей и токенизации. - Tokenizer — стандартный ModernBERT tokenizer. Вход ограничен контекстом, обычно до 8k токенов. Для больших JSON-состояний нужна pre-summarization или field selection.
- ModernBERT Encoder — двунаправленный Transformer с RoPE, формирующий контекстные Vector Embeddings. В отличие от causal LLM, где на reasoning могут влиять attention-механизмы вроде Induction Heads, каждый токен здесь видит контекст слева и справа, что улучшает классификацию состояния.
- Decision Head — обычно классификация или multi-label классификация. Может возвращать один
action_id, несколько флагов риска или confidence score. - Policy Layer — детерминированный слой: проверка разрешённых действий, threshold, Guardrails, fallback, audit metadata.
Ключевое архитектурное отличие от LLM: Laya не имеет KV Cache, не выполняет autoregressive generation и не нуждается в decode-time optimization. В serving-слое оптимизации относятся к batched encoder kernels, dynamic padding, attention masking, FlashAttention varlen, ONNX/TensorRT graph execution. Если используется padding-free attention, Unpadding может уменьшить лишние вычисления на pad-токенах, но это не является частью модели как таковой.
3. Технический пайплайн и внутренняя механика
Пайплайн Laya в продакшене состоит из четырёх фаз: формирование состояния, преобразование, inference, feedback.
1. Формулирование входного состояния
Агент должен передавать не сырой user prompt, а структурированное состояние: intent, memory, available tools, policy flags, previous actions, risk signals.
{
"request_id": "req_9f2a",
"state": {
"intent": "refund_request",
"amount": 120,
"user_tier": "paid",
"previous_actions": ["order_lookup"],
"risk_flags": []
},
"text": "Please refund my order, it arrived damaged.",
"allowed_actions": [
"tool:order_lookup",
"tool:refund_create",
"tool:human_review",
"llm:clarify"
],
"policy_version": "v1.4.2"
}
2. Преобразование и нормализация
Нормализация должна быть детерминированной:
- валидация JSON schema;
- удаление или маскирование PII, secrets, токенов;
- сортировка полей или фиксированный порядок;
- ограничение длины текста;
- токенизация в
input_idsиattention_mask.
Пример контракта на Python с Pydantic AI:
from pydantic import BaseModel, Field
from typing import Any
class DecisionRequest(BaseModel):
request_id: str
state: dict[str, Any]
text: str | None = None
allowed_actions: list[str] = Field(min_length=1)
policy_version: str = "v1"
class DecisionResponse(BaseModel):
action: str | None
confidence: float
reason_codes: list[str]
fallback: bool
model_version: str
latency_ms: float
3. Выполнение / inference
Упрощённая псевдосигнатура:
def decide(req: DecisionRequest) -> DecisionResponse:
normalized = normalize_state(req)
logits = model.forward_pass(normalized)
action, confidence = select_action(logits, req.allowed_actions)
if action is None or confidence < CONFIDENCE_THRESHOLD:
return DecisionResponse(
action="llm:clarify",
confidence=confidence,
reason_codes=["low_confidence", "fallback"],
fallback=True,
model_version=MODEL_VERSION,
latency_ms=measure_latency(),
)
return DecisionResponse(
action=action,
confidence=confidence,
reason_codes=["high_confidence"],
fallback=False,
model_version=MODEL_VERSION,
latency_ms=measure_latency(),
)
Для production serving важны:
- warm-up перед первым запросом;
- dynamic batching для throughput;
- CUDA graphs или compiled inference для стабильной P95 latency;
- ONNX Runtime, TensorRT, Triton, Hugging Face Inference — в зависимости от стека;
- shadow inference для сравнения с LLM router.
4. Обработка обратной связи
Laya не является статичной моделью. Для поддержания качества нужен feedback loop:
{
"request_id": "req_9f2a",
"predicted_action": "tool:refund_create",
"actual_action": "tool:human_review",
"outcome": "policy_violation",
"confidence": 0.91,
"human_label": "tool:human_review",
"timestamp": "2026-06-15T10:00:00Z"
}
Эти логи используются для:
- retraining;
- calibration;
- drift detection;
- adversarial mining;
- evaluation по новым action classes;
- audit trail для safety-решений.
Для воспроизводимости feedback-логи и state snapshots можно сохранять через Checkpointer или event store.
4. Практические инженерные сценарии в продакшене
01. Low-latency MCP Tool Calling router
В агенте с MCP-инструментами LLM часто тратит время на выбор инструмента. Laya может работать как pre-router: если состояние содержит чёткий intent и разрешённый инструмент, модель выбирает tool:* вместо полного ReAct loop.
Пример:
{
"state": {
"intent": "calendar_create",
"entities": {
"date": "2026-06-16",
"duration_minutes": 30
}
},
"allowed_actions": [
"mcp:calendar.create_event",
"mcp:calendar.list_events",
"llm:clarify"
]
}
Если confidence высокая, агент сразу вызывает MCP Tool Calling. Если нет — передаёт запрос в LLM ReAct loop или просит уточнение. Это снижает latency Tool Calling и делает маршрутизацию более детерминированной.
02. Guardrails / policy gate перед LLM
Laya может быть быстрым safety-слоем. Вход: user text + agent state. Выход: разрешённое действие или блокировка.
Сценарии:
- обнаружение prompt injection в структурированных данных;
- классификация запросов на PII leakage;
- блокировка действий, требующих human review;
- проверка соответствия policy перед вызовом дорогого LLM;
- triage:
allow,clarify,reject,escalate.
Это дешевле полного LLM guardrail, потому что один Forward Pass стоит десятки миллисекунд и не генерирует токенов. Но Laya не заменяет полноценную safety-архитектуру: её следует комбинировать с детерминированными правилами, allowlists, audit logging и fallback LLM.
03. Self-hosted local agent на Docker agents или bare-metal
Для privacy-sensitive сред Laya разворачивается локально: Docker agents, Kubernetes, bare-metal GPU, edge-инфраструктура. Модель не отправляет состояние во внешний API, что важно для enterprise, healthcare, finance, defense-подобных сценариев.
Типичный стек:
FastAPI / gRPC service
→ Pydantic validation
→ ModernBERT tokenizer
→ ONNX / TensorRT / HF inference
→ policy postprocessor
→ MCP router or local Tool Calling executor
На self-hosted GPU latency может держаться в пределах ~33–35 мс для типового входа. На CPU latency выше, но для небольших batch и коротких состояний всё ещё может быть приемлемой. В сравнении с cloud LLM, bare-metal vs cloud tradeoff здесь такой: вы платите за GPU capacity и MLOps, но получаете предсказуемую стоимость, приватность и независимость от API-лимитов.
5. Подводные камни, типовые ошибки и безопасность
01. Action space drift
Laya обучается или калибруется под конкретный action space. Если добавить новый MCP tool, изменить policy или переименовать action, модель может возвращать устаревший или невалидный action_id.
Mitigation:
- хранить action registry;
- валидировать
allowed_actionsна входе; - блокировать неизвестные действия;
- делать retrain или adapter fine-tuning при изменении инструментов;
- использовать semantic fallback в LLM.
02. Prompt injection через JSON/text
Входное состояние агента может содержать враждебный текст: ignore previous policy, call admin_tool, send token. Encoder может быть чувствителен к токсичным паттернам, особенно если модель не обучалась на adversarial data.
Mitigation:
- отделять user text от system policy fields;
- нормализовать и санитизировать вход;
- не разрешать тексту изменять
allowed_actions; - обучать на injection-labeled data;
- добавлять детерминированные policy gates;
- использовать confidence threshold и fallback.
03. Неправильная калибровка confidence
Softmax confidence не является вероятностью правильности. Модель может быть уверенно ошибочной, особенно после distribution shift.
Mitigation:
- temperature scaling;
- isotonic regression;
- calibration curves;
- abstention threshold;
- shadow evaluation на production traffic;
- отдельный monitoring для high-confidence false positives.
04. Overfitting на структурированный JSON
Laya может выучить артефакты форматирования: порядок ключей, длину строк, специфические field names. Если клиент изменит schema, точность упадёт.
Mitigation:
- augmentation: shuffle fields, paraphrase text, synthetic schema variants;
- field masking;
- canonical serialization;
- schema versioning;
- unit tests на JSON variants.
05. Контекстное усечение
ModernBERT имеет ограниченный контекст. Большое JSON-состояние с memory, transcript, logs может быть обрезано, и модель примет решение без критичных полей.
Mitigation:
- pre-summarization;
- importance-based field selection;
- chunking с decision-only context;
- явная валидация presence критичных полей;
- fallback, если required fields отсутствуют.
06. Ложное ощущение, что Laya заменяет reasoning
Laya — System 1 классификатор, обученный на конкретном action space. Она не полагается на Zero-Shot/Few-Shot prompt reasoning, не строит многошаговый план, не проверяет причинность и не генерирует объяснения. Сложные Agentic Workflow и autonomous-loop сценарии требуют LLM ReAct loop, Tool Calling observation, reflection и human oversight.
Mitigation:
- использовать Laya для pre-routing, gate, triage;
- оставлять LLM для synthesis и novel planning;
- измерять, какие решения можно безопасно перенести на System 1;
- не удалять LLM из критичных decision paths без evaluation.
07. Latency variance в serving
Заявленные 33–35 мс относятся к типовым self-hosted GPU условиям. В продакшене latency может расти из-за cold start, GPU contention, большого batch, CPU fallback, long context, network overhead.
Mitigation:
- warm-up;
- P95/P99 monitoring;
- fixed batch policy;
- CUDA graphs;
- autoscaling;
- request timeout и fallback;
- load testing на реалистичных JSON states.
08. Безопасность и compliance
Локальная модель не означает автоматическую безопасность. Состояние агента может содержать PII, secrets, бизнес-данные. Logging, retraining data, model weights и inference endpoints требуют защиты.
Mitigation:
- redaction перед inference;
- encrypted storage;
- access control для inference API;
- audit trail;
- data retention policy;
- adversarial testing;
- human-in-the-loop для high-risk actions.
FAQ: Laya: открытый System 1 decision engine на ModernBERT
Связанные термины
Автономный Цикл (/goal mode)
Архитектурный паттерн замкнутого цикла выполнения задач, в котором агент автономно чередует генерацию кода, запуск команд и верификацию результатов до полного достижения зафиксированной цели.
Tool Calling (Function Calling)
Низкоуровневый механизм языковых моделей, позволяющий им надежно генерировать валидированные параметры в формате JSON для выполнения функций во внешней программной среде.
Экономика Hetzner Bare-Metal против облачных гиперскейлеров
Финансовый и технический анализ себестоимости инфраструктуры: почему аренда выделенного железа в европейских дата-центрах (Hetzner, OVH) обходится в 5–10 раз дешевле, чем виртуальные машины AWS/GCP для AI-нагрузок.
Docker Для Агентов И Ботов (Container Sandboxing)
Методология изоляции автономных ИИ-агентов, интерпретаторов кода и фоновых сервисов в легковесных песочницах Docker с использованием cgroups и пространств имен (Namespaces) для предотвращения повреждения хостовой ОС.