← AURA.KIM · Исследования Преодоление автофагии

Преодоление автофагии в мультиагентных LLM-системах через иерархические антагонистические контуры

Advanced Unified Retrieval Architecture · Июнь 2026

Современные Large Language Models в сценариях долгосрочного автономного функционирования ограничены линейным ростом KV-кэша и затуханием контекста. Попытки интеграции систем долгосрочной памяти через автоматическую генерацию синтетических данных и самообучение приводят к автофагии (Autophagy) — модель, обучаясь на результатах собственной генерации, замыкается в «эхо-камере», что вызывает экспоненциальный рост энтропии и деградацию связности памяти уже на 3–4 итерации.

Настоящая работа описывает архитектуру AURA (Advanced Unified Retrieval Architecture). Стабилизация системы достигается за счёт разделения когнитивных функций на иерархические антагонистические контуры с дискретным квантованием количества ролей (3 → 6 → 9).

1. Математический базис памяти AURA

Динамическая память ИИ-агента оперирует концепцией полураспада информации (halfLife) по областям видимости (scope) и многофакторным композитным скорингом при извлечении. Каждому кванту памяти Mi присваивается временной вес, зависящий от его системной категории.

При обработке входящего запроса функция извлечения максимизирует композитный score:

Score(Mi) = α · Sim(Q, Mi) + β · exp(−Δt / τscope) + γ · Imp(Mi)

где:

2. Динамическая формализация функции полураспада τscope

Константа затухания τscope не является статической величиной. Значение τscope рассчитывается динамически на основе тензора признаков, формируемого Ролью 5 (Синдикатором) и Ролью 3 (Валидатором):

τscope = τ0 · ln(1 + Freq(S)) · σ(Imp(Mi) / H(S))

где:

3. Теория когнитивного квантования: Матрица Триад

Количество ролей в AURA строго дискретно и кратно трём: 3 → 6 → 9. Каждая тройка формирует ортогональный контур контроля: Теза (Генерация) → Антитеза (Критика) → Синтез (Управление).

КонтурХарактеристика
3 ролиБазовая стабилизация, склонность к зацикливаниям
6 ролейОптимум: разделение Data Layer и Code Layer, заметный выигрыш в чистоте памяти
9 ролейНезначительный прирост чистоты, избыточный контроль, агентская бюрократия
12 ролейКогнитивный тупик, паралич производительности

4. Спецификация 6 ролей архитектуры AURA

┌──────────────────────────────────────────────────────────────────────────┐ │ ЕДИНАЯ ПАМЯТЬ AURA │ │ (Композитный скоринг, halfLife, cross-role recall) │ └──────────────────────────────────────────────────────────────────────────┘ ▲ ▲ │ ▲ ▲ │ │ │ │ │ │ Изменения Апдейт Чтение Подтверждение │ в коде RAG базы знаний контекста патчей │ │ │ │ │ ┌────┴────┐ ┌───┴────┐ ┌───┴────┐ ┌───────┴──────┐ │ Роль 4 │ │ Роль 3 │ │ Роль 1 │ │ Роль 6 │ │(Инженер)│ │(Валидат)│ │(Исполн.)│ │ (Ментор) │ └────┬────┘ └───┬────┘ └───┬────┘ └───────┬──────┘ ▲ │ │ │ ▲ │ │ │ │ │ │ Запуск Фильтрация Телеметрия Запрос Merge │ патчинга синтетики ошибок RAG ┌─┴────────┴─┐ ┌───────────┴──────────┐ │ Роль 5 │ │ Роль 2 │ │(Синдикатор)│ │ (Эволюционер) │ └────────────┘ └──────────────────────┘

Контур А: Оперирование данными (Data Layer)

Контур Б: Оперирование алгоритмом (Code Layer)

5. Аналитический разбор сходимости контуров

Пусть Et — объём ложной информации в памяти на шаге t. В 3-ролевой системе оператор обновления памяти замкнут на себя:

Et+1 = κ · Et + ξt

где κ — коэффициент автофагии (κ > 1 при высокой интенсивности генерации синтетики), ξt — шум. При κ > 1 система экспоненциально деградирует (Et → ∞).

В 6-ролевой архитектуре вводятся Роль 4 и Роль 6, изменяющие оператор RAG в зависимости от производной ошибки dE/dt:

dE/dt = (κ − γt)E + ξ
dγt/dt = η · Sign(dE/dt) · I(E > Ethreshold)

где γt — компенсирующий фактор, η — скорость адаптации (жёстко ограничена Ролью 6: η < Δmax). Поскольку Роль 6 через статический анализатор гарантирует, что γt не выйдет в область нестабильности, система сходится к устойчивому аттрактору, где dE/dt ≤ 0.

6. Дискуссия: Почему AURA — это не Fine-Tuning

Критически важным является проведение жёсткой границы между внутренней пластичностью нейросети и внешней системной эволюцией.

Попытки реализовать непрерывное самообучение через дообучение весов базовой модели несостоятельны по трём причинам:

  1. Катастрофическое забывание: модель теряет базовые навыки при частых градиентных сдвигах
  2. Вычислительный паралич: постоянный расчёт градиентов для 70B+ моделей экономически невозможен
  3. Vendor lock-in: изменения в весах модели превращаются в мёртвый груз при смене поколения LLM

Архитектура отчуждаемой памяти

Система AURA обеспечивает преимущество перед конкурентами, перенося управление памятью с уровня архитектуры нейросетей (Google Titans) или простых векторных баз (Mem0/Zep) на системно-инженерный уровень. В отличие от аналогов, AURA гарантирует устойчивость к информационному шуму через контуры фильтрации, обеспечивает взаимозаменяемость LLM-ядер и поддерживает низкую стоимость масштабирования при высокой точности контекста.

AURA полностью исключает языковую модель из процесса изменения внутренних весов. LLM рассматривается как stateless процессор (CPU), принимающий на вход очищенный и взвешенный контекст. Вся эволюция бизнес-логики, накопление опыта и очистка от шума происходят во внешней структуре — слое обвязки, независимом от модели.

┌────────────────────────────────────────────────────────────┐ │ ВНЕШНИЙ КОНТУР AURA │ │ 1. Структурированная база знаний (факты, процессы) │ ◄── накапливается годами │ 2. Динамические матрицы скоринга (α, β, γ) │ └────────────────────────────────────────────────────────────┘ │ Контекст-Пакет ▼ ┌────────────────────────────────────────────────────────────┐ │ ВЗАИМОЗАМЕНЯЕМОЕ ВЫЧИСЛИТЕЛЬНОЕ ЯДРО │ │ [Модель N] ──► [Модель N+1] ──► [AGI] │ ──► Ответ └────────────────────────────────────────────────────────────┘

При выходе на рынок более производительных моделей вычислительное ядро заменяется без остановки системы. Накопленная годами внешняя память AURA остаётся нетронутой.

7. Программный каркас контура оптимизации (Python)

import asyncio, json, logging
from typing import Dict, List
from dataclasses import dataclass, asdict

logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
logger = logging.getLogger("AURA_Engine")

@dataclass
class TransactionLog:
    query: str; response: str
    validation_score: float
    scope: str

class AURAEnvironment:
    def __init__(self):
        self.hyperparams = {"alpha":0.5, "beta":0.3, "gamma":0.2, "chunk_size":512}
        self.archive: List[TransactionLog] = []
        self.lock = False

    def metric_trend(self) -> float:
        return (sum(tx.validation_score for tx in self.archive) / len(self.archive)
                if self.archive else 1.0)

class RuntimeOrchestrator:
    def __init__(self, env: AURAEnvironment):
        self.env = env
        self.THRESHOLD = 0.80

    async def role5_monitor(self):
        while True:
            await asyncio.sleep(1)
            if self.env.lock: continue
            trend = self.env.metric_trend()
            if trend < self.THRESHOLD and len(self.env.archive) >= 3:
                logger.warning(f"[5] ALERT: падение до {trend:.2f}. Зову Роль 4.")
                self.env.lock = True
                await self._cold_circuit()

    async def _cold_circuit(self):
        faulty = [asdict(t) for t in self.env.archive if t.validation_score < self.THRESHOLD]
        state = json.dumps(self.env.hyperparams)
        patch = await self._role4_code(state, faulty)
        if self._role6_guard(patch):
            self.env.hyperparams.update(patch["params"])
            logger.info("[6] Патч принят.")
            self.env.archive.clear()
        else:
            logger.error("[6] CRITICAL: патч отклонён.")
        self.env.lock = False

    async def _role4_code(self, config: str, logs: List[Dict]) -> Dict:
        logger.info("[4] Генерация патча...")
        await asyncio.sleep(0.5)
        return {"params": {"alpha":0.3, "beta":0.5, "gamma":0.2, "chunk_size":256},
                "sum_check": 1.0}

    def _role6_guard(self, patch: Dict) -> bool:
        p = patch["params"]
        s = p["alpha"] + p["beta"] + p["gamma"]
        # граничные условия: сумма весов = 1.0, шаг изменения параметра <= 15%
        max_step = max(abs(p[k] - self.env.hyperparams[k]) / max(self.env.hyperparams[k], 1e-9)
                       for k in p if k in self.env.hyperparams)
        return abs(s - 1.0) < 1e-5 and p["chunk_size"] >= 128 and max_step <= 0.15

async def run():
    env = AURAEnvironment()
    o = RuntimeOrchestrator(env)
    asyncio.create_task(o.role5_monitor())
    env.archive = [TransactionLog("Q1","R1",0.95,"p"),
                   TransactionLog("Q2","R2",0.72,"s"),
                   TransactionLog("Q3","R3",0.65,"s")]
    await asyncio.sleep(2)
    print(f"гиперпараметры: {env.hyperparams}")

if __name__ == "__main__":
    asyncio.run(run())

Вывод

Архитектурный паттерн 6 ролей с разделением на онтологические триады устраняет проблему автофагии за счёт выноса контроля алгоритмов в независимую плоскость (Контур Б). Дальнейшее масштабирование ролей до 9 приводит к падению производительности без математически значимого улучшения фильтрации шума в памяти.

Полный код и спецификация: github.com/alexenti-code/AURA-Retrieval

← Все исследования AURA