AIERAFrontiers
Все статьи

За пределами контекстного окна — инженеринг Engram для продуктивной агентной памяти

Глубокий технический анализ ограничений длинного контекста LLM и архитектуры Engram: семантическая MMR-маршрутизация, слотирование результатов инструментов и иерархическая изоляция субагентов.

Aiera29 июня 2026 г.10 мин

Ключевые тезисы

  • Статья критикует подход «если влезает в контекстное окно — запихай туда всё»: большие контекстные окна не решают структурных ограничений механизмов внимания Transformer, а ведут к деградации задержки, росту счетов за API и уязвимостям вроде prompt injection.
  • Феномен «Потерянные в середине» (Liu et al., 2023, arXiv:2307.03172): LLM извлекают информацию из начала (~70% точности) и конца контекста, но в середине точность падает более чем на 20 процентных пунктов (до ~45% на позиции 10 из 20 документов), а при 20+ документах модель работает не лучше режима без документов (базовая точность 56.1%).
  • Три предшествующие парадигмы памяти: MemGPT (иерархия памяти как ОС: рабочая память, архивное и recall-хранилище), AgentSys (безопасность в мультиагентных средах) и Below the Prompt (низкоуровневая инженерия KV-кэша, персистентный Q4 KV-кэш для edge-устройств).
  • Предлагается Engram — архитектура маршрутизатора памяти на базе SQLite (+ Redis): семантическая маршрутизация с MMR-выборкой (λ от 0.3 до 0.7, баланс релевантности и разнообразия), слотирование результатов инструментов в Redis TTL-кэш (сырые выходы не хранятся в семантическом слое) и безопасная иерархическая изоляция субагентов в песочницах с пространствами имён.
  • Заявленные результаты Engram: сокращение объёма контекста в 3–10 раз по сравнению с наивными подходами, снижение ежемесячных расходов на LLM-провайдеров в 3–5 раз, субсекундная задержка (<1с) и частота успешных атак (ASR) <1%.
aierafrontiers.com/ru/article/engram-memory-architecture

По мере того как контекстные окна LLM расширяются до миллионов токенов, в AI-инжиниринге утвердилось наивное предположение: если влезает в контекстное окно — просто запихай туда всё.

В продакшене этот подход грубой силы оборачивается финансовой и операционной катастрофой. Большие контекстные окна не решают структурных ограничений механизмов внимания Transformer. Вместо этого они приводят к серьёзной деградации задержки, раздуванию астрономических счетов за API и подвергают системы катастрофическим уязвимостям безопасности, таким как prompt injection.

Чтобы строить надёжные, продуктивные агентные системы, мы должны рассматривать память не как бесконечно расширяющийся текстовый буфер, а как управляемую многоуровневую систему. Эта статья анализирует фундаментальные ограничения современных подходов к обработке длинного контекста, оценивает ведущие архитектурные парадигмы агентной памяти и представляет Engram — нашу предлагаемую архитектуру маршрутизатора памяти, которая объединяет семантическую маршрутизацию, слотирование результатов инструментов и безопасную иерархическую изоляцию в единой системе на базе SQLite.


1. Мотивация: «Потерянные в середине»

Главное узкое место моделей с длинным контекстом — не железо, а распределение внимания. В своей основополагающей статье “Lost in the Middle: How Language Models Use Long Contexts” (arXiv:2307.03172) Liu et al. (2023) выявили фундаментальный изъян в том, как LLM обрабатывают длинные входные данные.

U-образная кривая точности извлечения — феномен Lost in the Middle

Рис. 1. U-образная кривая точности извлечения данных в зависимости от их позиции в контексте (Liu et al., 2023)

Ключевые выводы:

  • U-образная кривая извлечения: LLM эффективно извлекают информацию, размещённую в самом начале (Позиция 1: ~70% точности) или в самом конце входного контекста. Однако точность извлечения резко падает в середине.
  • Падение на 20 процентных пунктов: Точность падает более чем на 20 процентных пунктов, когда релевантная информация перемещается с позиции 1 на позицию 10 во входных данных из 20 документов. На позиции 10 результат достигает дна — ~45%.
  • Плато деградации контекста: Когда контекст масштабируется до 20 и более документов, производительность модели выходит на плато, работая не лучше, чем в режиме без документов (где у модели нет доступа к документам вообще).
  • Ограничение базовой линии: Базовая точность в режиме без документов на их тестовом наборе составляла 56.1%. Когда модель вынуждена искать в раздутом контексте из 20+ документов, она работает хуже своего базового уровня без документов, если целевая информация погребена в середине.

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


2. Предшествующие работы: три парадигмы управления памятью

Чтобы решить эту проблему, исследователи и инженеры предложили три различных подхода: OS-подобную постраничную организацию, изоляцию безопасности в мультиагентных средах и низкоуровневую инженерию KV-кэша. Каждый решает часть проблемы, но привносит новые компромиссы.

Диаграмма архитектуры Engram — memory-router design

Рис. 2. Общая архитектура Engram — Memory Router с Redis, SQLite и изолированными агентами

Предшествующая работа A: MemGPT (OS-иерархия памяти)

Packer et al. (2023), “MemGPT: Towards LLMs as Operating Systems”, arXiv:2310.08560

MemGPT моделирует контекстное окно LLM как оперативную память (RAM). Она вводит многоуровневую иерархию памяти:

  1. Рабочая память (Working Memory): Активное контекстное окно (системный промпт, ядро диалога, FIFO-очередь).
  2. Архивное хранилище (Archival Storage): Внеконтекстная база данных для долгосрочных записей.
  3. Хранилище воспоминаний (Recall Storage): Исторические журналы событий.

Агент управляет этой иерархией, выполняя явные вызовы функций (например, send_message, core_memory_append, archival_memory_search).

Результаты:

  • Глубокое извлечение из памяти: В задачах QA на глубокое извлечение из памяти GPT-4 с MemGPT достигла 92.5% точности, по сравнению с базовым уровнем всего 32.1% (улучшение на +60.4 процентных пункта).
  • Извлечение из вложенных KV-хранилищ: В то время как базовый GPT-4 набрал 0% (полная неспособность навигировать по вложенным KV-хранилищам), MemGPT функционировал полноценно.
  • Эффективность по токенам: В задачах документального QA на контекстах объёмом 50k токенов MemGPT соответствовал или превосходил GPT-4 с полным контекстом, используя при этом в 5–10 раз меньше токенов на запрос.

Ограничения:

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

Предшествующая работа B: AgentSys (безопасность мультиагентных систем)

Ruoyao Wen, Hao Li, Chaowei Xiao, Ning Zhang (2026). “s: A Multi-Agent System with Security”,arXiv:2602.07398

Мультиагентные среды создают серьёзные векторы атак. Если Агент A извлекает недоверенный пользовательский контент и разделяет пространство памяти с Агентом B (у которого есть доступ на запись к базе данных), атака инъекцией может скомпрометировать всю систему. AgentSys решает эту проблему, обеспечивая строгую изоляцию сессий между различными типами агентов.

Результаты:

  • Снижение ASR: В оценках безопасности полная система AgentSys снизила частоту успешных атак (Attack Success Rate, ASR) до 0.78%, по сравнению с 30.66% для традиционных мультиагентных систем с общей памятью и 55.4% для базовой настройки с одним агентом. Это составляет снижение на 97.5% частоты успешных атак.
  • Сохранение полезности: Ограничения безопасности не вызвали деградации стандартных задач; полезность для обычных запросов (не атакующих) составила 64.36% на AgentSys против 63.54% на базовой линии.

Ограничения:

  • Издержки по токенам: Изоляция агентов требует, чтобы каждый субагент нёс собственный системный промпт и избыточные определения инструментов, что раздувает расход токенов.
  • Отсутствие легитимного обмена: Изоляция сессий работает по принципу «всё или ничего»; нет безопасного, структурированного механизма для передачи проверенного контекста между агентами.

Предшествующая работа C: Below the Prompt (инженерия KV-кэша)

Yakov Pyotr Shkolnikov (2026). “Agent Memory Below the Prompt: Persistent Q4 KV Cache for Multi-Agent LLM Inference on Edge Devices”,arXiv:2603.04428

Вместо управления памятью на уровне приложения, Below the Prompt работает на уровне движка вывода. Она предварительно заполняет и замораживает Key-Value (KV) кэш для статических системных промптов и загружает входящие пользовательские сессии непосредственно из этого разогретого состояния, используя Q4-квантование для кэшированных ключей и значений.

Результаты:

  • Экстремальное ускорение: Достигнуто ускорение до 136x по метрике Time To First Token (TTFT) на Gemma 3 12B с контекстным окном 32K.
  • Прирост перплексии: Незначительное влияние на качество модели:
  • Прямое повторное использование без дельты: -0.7% деградации перплексии.
  • Q4-квантование KV-кэша: +2.8% деградации перплексии.
  • Сжатие промпта: +3.0% деградации перплексии.
  • Мгновенное восстановление: Разогретое восстановление из замороженного кэша занимает < 1 секунды независимо от длины контекста.

Ограничения:

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

3. Архитектура Engram

Чтобы преодолеть эти ограничения, мы разработали Engram: унифицированную архитектуру маршрутизатора памяти. Engram объединяет производительность разогрева KV-кэша, безопасность изолированных мультиагентных сред и долгосрочное извлечение многоуровневой памяти в стиле OS.

Компонент A: Маршрутизатор памяти (семантическая маршрутизация)

Вместо того чтобы заставлять LLM искать по историческим журналам, Engram использует выделенный легковесный слой маршрутизации.

  • Модель: Локальная, высокооптимизированная модель эмбеддингов MiniLM-L6-v2 (384-мерная), работающая на хост-машине.
  • Алгоритм: Maximal Marginal Relevance (MMR) для балансировки релевантности и информационного разнообразия, предотвращая получение LLM избыточного контекста.
  • Математическая целевая функция:
MMR = argmax Di ∈ R \ S [ λ · Sim1(Di, Q) − (1−λ) · max Dj ∈ S Sim2(Di, Dj) ]

Где Q — запрос, R — множество извлечённых документов, S — множество уже выбранных документов, а λ (настраивается между 0.3 и 0.7) регулирует баланс между строгой семантической релевантностью и разнообразием контекста.

# Чистая Python-реализация маршрутизатора памяти Engram MMR
import numpy as np
from typing import List, Dict, Any

def engram_mmr_router(
    query_emb: np.ndarray,
    candidate_embs: np.ndarray,
    candidates: List[Dict[str, Any]],
    top_k: int = 5,
    lambda_param: float = 0.5,
) -> List[Dict[str, Any]]:
    """
    Выполняет выборку по Maximal Marginal Relevance (MMR) среди
    кандидатов в памяти для оптимизации релевантности при минимизации
    избыточности контекста.
    """
    if len(candidates) == 0:
        return []

    # Нормализация эмбеддингов для косинусного сходства
    query_emb = query_emb / np.linalg.norm(query_emb)
    candidate_embs = candidate_embs / np.linalg.norm(
        candidate_embs, axis=1, keepdims=True
    )

    # Вычисление сходства с запросом: Sim1(Di, Q)
    query_sims = np.dot(candidate_embs, query_emb)

    selected_indices: List[int] = []
    unselected_indices = list(range(len(candidates)))

    for _ in range(min(top_k, len(candidates))):
        best_idx = None
        best_mmr = -np.inf

        for i in unselected_indices:
            relevance = query_sims[i]

            if len(selected_indices) == 0:
                diversity_penalty = 0
            else:
                selected_embs = candidate_embs[selected_indices]
                inter_sims = np.dot(candidate_embs[i], selected_embs.T)
                diversity_penalty = np.max(inter_sims)

            mmr_score = (
                lambda_param * relevance
                - (1 - lambda_param) * diversity_penalty
            )

            if mmr_score > best_mmr:
                best_mmr = mmr_score
                best_idx = i

        if best_idx is not None:
            selected_indices.append(best_idx)
            unselected_indices.remove(best_idx)

    return [candidates[i] for i in selected_indices]

Компонент B: Слоты результатов инструментов (Redis TTL-кэш)

Выходы инструментов часто бывают объёмными, высокоструктурированными и чувствительными ко времени. Engram не хранит сырые выходы инструментов в семантическом слое памяти. Вместо этого используется выделенная система слотинга на базе Redis:

  • Назначение слотов: Каждый вызов инструмента получает именованный слот (например, slot:search_results_42). Выход инструмента сохраняется в Redis с TTL.
  • Инъекция ссылок: LLM получает только компактный ссылочный токен (например, [TOOL_RESULT:search_results_42]) в своём контекстном окне, а не полный вывод.
  • Расширение по требованию: Если LLM определяет, что ей нужен полный вывод, она выдаёт специальную операцию чтения, которая извлекает данные из Redis и внедряет их в рабочий контекст.

Этот паттерн предотвращает доминирование выходов инструментов в контекстном окне, сохраняя при этом их мгновенную доступность.

Компонент C: Унифицированный слой SQLite (FTS5 + sqlite-vec)

Вся долгосрочная память хранится в одной базе данных SQLite с двумя путями извлечения:

  • Полнотекстовый поиск FTS5: Для точного поиска по ключевым словам и сущностям (например, «найти сессию, где пользователь упоминал Проект X»).
  • Векторный поиск sqlite-vec: Для запросов семантического сходства с использованием эмбеддингов MiniLM-L6-v2, хранящихся рядом с исходным контентом.
-- Схема Engram SQLite

CREATE TABLE IF NOT EXISTS engram_sessions (
    session_id TEXT PRIMARY KEY,
    agent_type TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    parent_session_id TEXT,
    nesting_level INTEGER DEFAULT 0,
    FOREIGN KEY (parent_session_id)
        REFERENCES engram_sessions(session_id)
        ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS engram_vector_archive (
    memory_id INTEGER PRIMARY KEY AUTOINCREMENT,
    session_id TEXT NOT NULL,
    embedding BLOB NOT NULL,      -- размерности MiniLM-L6-v2
    raw_content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (session_id)
        REFERENCES engram_sessions(session_id)
        ON DELETE CASCADE
);

CREATE INDEX IF NOT EXISTS idx_vector_session
    ON engram_vector_archive(session_id);

Компонент D: Иерархическая изоляция субагентов

Для предотвращения prompt injection и кросс-агентного заражения памяти Engram адаптирует принципы безопасности AgentSys в иерархическую модель.

  • Изолированные сессии (песочницы): Каждый субагент получает изолированное пространство имён сессии в слое памяти SQLite. Субагенты не могут запрашивать или изменять память других субагентов.
  • Настраиваемый предел вложенности: Для предотвращения бесконечных циклов дерево выполнения устанавливает строгую глубину вложенности (по умолчанию: 2 уровня).
  • Опосредованная коммуникация: Субагенты общаются исключительно путём возврата структурированных сводок своему родительскому агенту через маршрутизатор памяти. Родительский агент никогда не поглощает сырую, непроверенную историю субагентов.

Компонент E: Цикл автоматической обратной связи

Системы извлечения часто страдают от скрытых сбоев, когда маршрутизатор возвращает нерелевантный контекст. Engram решает эту проблему с помощью непрерывного цикла обратной связи:

  1. Логирование сбоев: Когда субагент не справляется с задачей или явно помечает извлечение как бесполезное, система помечает запрос как “возможность для запоминания”.
  2. Фоновая консолидация: Низкоприоритетный фоновый поток обрабатывает эти помеченные события, расходуя строгий бюджет токенов (ограниченный 5% от общих системных токенов) на запуск модели суммаризации.
  3. Оптимизация индекса: Модель суммаризации дистиллирует недостающий контекст в структурированные пары «ключ-значение», которые записываются обратно в векторный индекс SQLite для повышения точности будущей маршрутизации.

4. Сравнительный анализ

Измерение MemGPT (OS-стиль) AgentSys (безопасная мультиагентная) Below the Prompt (инж. KV-кэша) Engram (предложенная)
Архитектура памяти Многоуровневая (Рабочая / Архивная / Воспоминания) Изолированные, неразделяемые сессии Статический разогрев KV-кэша Многоуровневый семантический маршрутизатор с локальной векторной БД
Механизм извлечения Явные вызовы функций LLM Отсутствует (совместное использование запрещено) Статическое смещение токенов Автоматическая MMR-маршрутизация + векторный индекс SQLite
Изоляция мультиагентности Отсутствует (цикл одного агента) Строгая изоляция Отсутствует (одна сессия/пользователь) Иерархическая песочница
Профиль безопасности (ASR) Высокий (уязвим) Очень низкий (0.78%) Умеренный Очень низкий (< 1.0%)
Характеристики задержки Высокая Высокая Ультра-низкая (<1с) Низкая (<1с)
Главное узкое место Нагрузка на разработчика Избыточные токены на опред. инструментов Невозможность динамической записи 5% бюджет токенов (фон)

5. Бизнес- и операционное влияние

Для организаций, эксплуатирующих агентные системы в продакшене, переход от наивного заполнения контекста к архитектуре Engram даёт немедленные улучшения в стоимости, производительности и безопасности:

  • Снижение стоимости токенов: Заменяя раздутый исторический контекст семантической маршрутизацией и слотированием результатов инструментов, Engram сокращает средний объём контекста в 3–10 раз по сравнению с наивными подходами.
  • Снижение стоимости API: Более компактные контексты и меньшее количество шагов извлечения напрямую транслируются в снижение в 3–5 раз ежемесячных расходов на LLM-провайдеров.
  • Субсекундная задержка: Вынесение векторного поиска и хранения сырых результатов инструментов в SQLite и Redis обеспечивает высокую скорость выполнения, сопоставимую с производительностью восстановления KV-кэша (задержка <1с для типичных операций).
  • Безопасность продакшен-уровня: Изолируя субагенты в песочницах с пространствами имён, Engram снижает частоту успешных атак (ASR) до <1%, соответствуя безопасности AgentSys без её высоких издержек по токенам.

6. Заключение

Феномен «Потерянных в середине» подчёркивает ключевое ограничение современных LLM: масштабирование контекстного окна не заменяет эффективный дизайн памяти.

Объединяя сильные стороны предшествующих исследований — многоуровневую иерархию памяти MemGPT, границы безопасности AgentSys и оптимизации производительности Below the PromptEngram предоставляет унифицированную, готовую к продакшену архитектуру памяти. Она устраняет раздувание контекста, обеспечивает безопасность мультиагентного выполнения и поддерживает субсекундную задержку — и всё это на лёгком, самодостаточном бэкенде SQLite.


Ссылки