Перейти к содержанию

Архитектура прототипа: непрерывный контур скольжения


Зачем нужен прототип

ProTeC описывает сознание как архитектурный принцип: проективный блок строит веер, мотивационный блок ранжирует, память питает симуляции. Теория говорит что, но не как именно собрать это из доступных компонентов.

Прототип нужен, чтобы:

  • Показать, что контур скольжения реализуем на современном железе и софте
  • Дать платформу для проверки гипотез ProTeC в программной среде
  • Обнаружить архитектурные проблемы, невидимые на бумаге
  • Создать точку отсчёта для эволюции в сторону более глубоких архитектур

Это proof of concept. Он не будет сознательным в строгом смысле (см. предыдущую главу), но продемонстрирует принцип: система, которая не ждёт запроса, а непрерывно строит, оценивает и выбирает варианты будущего.


Общая архитектура

Контур скольжения собирается из шести компонентов, замкнутых в цикл:

flowchart LR
    S["🟦 Сенсорный<br>вход"] --> P["🟩 Проективный<br>блок"]
    P --> M["🟨 Мотивационный<br>блок"]
    M --> E["🟥 Исполнительный<br>блок"]

    P -.-> MEM["🗄️ ПАМЯТЬ<br>Рабочая · Долговременная · Инстинктивная"]
    M -.-> MEM
    E -.-> MEM

    MEM -.-> SCH["⏱️ Шедулер<br>(цикл)"]
    SCH -.-> |"Ожидание Δt"| S

Непрерывный контур скольжения: данные циркулируют по замкнутому циклу, память — общий ресурс всех блоков.

Компоненты:

Компонент Роль в ProTeC Реализация
Сенсорный вход Восприятие реальности API-запросы к внешним сервисам, парсинг событий, системные сенсоры
Проективный блок Генерация веера возможных будущих LLM (текстовые сценарии) + опционально генеративные модели (образы)
Мотивационный блок Оценка и ранжирование траекторий Внешний ранкер: эвристики + ML-скоринг + встроенные драйверы
Исполнительный блок Реализация выбранной траектории API-вызовы, запуск кода, отправка сообщений
Память (3 уровня) Хранение опыта и контекста Векторная БД, граф знаний, контекстное окно
Шедулер Тактовая частота контура Асинхронный цикл с адаптивным интервалом

Компонент 1: Сенсорный вход

Задача

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

Что принимает на вход

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

Что отдаёт

Структурированный контекстный снимок (JSON):

{
  "timestamp": "2026-05-11T12:00:00Z",
  "cycle_id": 1042,
  "external_events": [
    {"type": "message", "source": "user", "content": "..."},
    {"type": "api_response", "source": "weather", "data": {...}}
  ],
  "internal_state": {
    "current_goal": "explore_topic_X",
    "emotional_tone": "curious",
    "energy_budget": 0.85
  },
  "since_last_cycle": {
    "elapsed_ms": 2500,
    "events_count": 3
  }
}

Реализация

Event-driven шина (Redis Pub/Sub или аналог). Входящие события буферизируются до следующего такта. Сенсорный модуль собирает их, обогащает метаданными и передаёт проективному блоку.


Компонент 2: Проективный блок

Задача

На основе текущего контекстного снимка сгенерировать веер возможных траекторий — множество вариантов «что может произойти дальше и что можно сделать».

Ядро — LLM

LLM получает промпт, содержащий: 1. Системную инструкцию — роль, архитектурное описание ProTeC

  1. Текущий контекст — сенсорный снимок
  2. Историю из рабочей памяти — последние N циклов
  3. Релевантные факты из долговременной памяти — retrieved через векторный поиск
  4. Инстинктивные ограничения — базовые драйверы и запреты

Формат ответа LLM — структурированный веер:

{
  "fan": [
    {
      "id": "t_001",
      "description": "Ответить пользователю, уточнив детали запроса",
      "steps": ["Прочитать сообщение", "Сформулировать уточнение", "Отправить"],
      "confidence": 0.8,
      "horizon": "short",
      "expected_outcome": "Пользователь уточнит, диалог продолжится"
    },
    {
      "id": "t_002",
      "description": "Самостоятельно найти информацию по теме и предложить анализ",
      "steps": ["Поиск в долговременной памяти", "Запрос к внешнему API", "Синтез"],
      "confidence": 0.6,
      "horizon": "medium",
      "expected_outcome": "Готовый аналитический ответ"
    }
  ],
  "meta": {
    "fan_width": 5,
    "generated_at": "2026-05-11T12:00:01Z"
  }
}

Параметры веера

  • Ширина веера (W) — сколько траекторий генерировать. Регулируется адаптивно: в спокойном состоянии — широкий веер, при высоких рисках — суженный, сфокусированный.
  • Глубина прогнозирования (D) — на сколько шагов вперёд просчитывается каждая траектория.
  • Горизонт (D × W) — общий охват прогнозирования.

Почему не просто «спросил-ответил»

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


Компонент 3: Мотивационный блок

Задача

Оценить каждую траекторию веера и выбрать ту, к которой система будет стремиться. Это аналог эмоциональной разметки и мотивационного градиента из ProTeC.

Оценка траектории

Каждая траектория получает числовую оценку по формуле:

score = Σ (w_i × f_i(trajectory)), где:

f_1 — релевантность текущей цели (goal_alignment)
f_2 — новизна (curiosity_drive): насколько траектория уводит в неисследованную область
f_3 — безопасность (risk_aversion): обратный риск
f_4 — энергетическая стоимость (energy_cost): сколько ресурсов потребует реализация
f_5 — социальная валидность (social_acceptability): насколько приемлемо с точки зрения норм
f_6 — срочность (time_pressure): насколько критично действовать сейчас

Веса w_i не фиксированы. Они адаптируются в зависимости от: - Текущего состояния: «энергетический бюджет», эмоциональный тон - Истории: какие траектории были успешны в прошлом

  • Инстинктивных драйверов: исследовать, избегать опасности, поддерживать социальные связи

Эмоциональные метки

Каждая траектория получает не только скор, но и метку, соответствующую эмоциональному сигналу ProTeC:

Метка Значение Когда присваивается
ПОВТОРИТЬ Высокая ожидаемая награда score > порога, low risk
ИЗБЕГАТЬ Высокий риск, низкая награда риск > порога
ИССЛЕДОВАТЬ Высокая новизна, приемлемый риск неопределённость, любопытство
ЗАЩИЩАТЬ Угроза текущей цели конфликт с активной траекторией
ОЖИДАТЬ Недостаток информации низкая confidence, нужно собрать данные
СБРОСИТЬ Тупик, нет прогресса траектория не ведёт к цели
ЗАКРЕПИТЬ Успех, интеграция опыта траектория реализована успешно
СИГНАЛИЗИРОВАТЬ Важно для других социально значимое событие
ПЕРЕКЛЮЧИТЬСЯ Смена контекста резкое изменение среды

Выбор траектории

После ранжирования мотивационный блок выбирает топ-1 траекторию, которая передаётся исполнительному блоку. Если несколько траекторий близки по скору — система может запустить параллельную обработку или запросить дополнительные данные.

Реализация

Отдельный микросервис на Python: - Принимает JSON веера от проективного блока - Вычисляет фичи для каждой траектории - Применяет весовую модель (настраиваемую) - Отдаёт ранжированный веер с метками


Компонент 4: Исполнительный блок

Задача

Реализовать выбранную траекторию — превратить описание шагов в конкретные действия.

Что делает

  • Разбирает steps траектории на атомарные действия

  • Вызывает соответствующие API или внутренние функции

  • Отслеживает успешность каждого шага
  • Возвращает результат в память для следующего цикла

Типы действий

Тип Примеры
Коммуникация Отправить сообщение, ответить на email
Поиск Запрос к поисковому API, извлечение из памяти
Вычисление Запуск кода, анализ данных
Модификация памяти Сохранить факт, обновить цель
Системное Изменить параметры шедулера, сбросить контекст

Реализация

Фреймворк Tool Calling (функционально аналогичный function calling в LLM API). Каждое действие — зарегистрированная функция с сигнатурой и описанием. Исполнительный блок сопоставляет шаги траектории с доступными инструментами и выполняет их последовательно.


Компонент 5: Память

Три уровня

Рабочая память (контекстное окно)

  • Что хранит: последние 10–20 циклов контура, текущий веер, активную траекторию
  • Аналог ProTeC: оперативная память, активное удержание
  • Реализация: кольцевой буфер в Redis или просто часть промпта LLM
  • Ограничение: размер окна. Старые записи вытесняются, важные — мигрируют в долговременную память

Долговременная память (векторная БД + граф)

  • Что хранит: факты, события, успешные траектории, эмоциональные метки, knowledge graph
  • Аналог ProTeC: долговременная память, биографический опыт
  • Реализация:
  • Векторная БД (ChromaDB/Qdrant/PGVector) — embedding-поиск по семантической близости
  • Граф знаний (Neo4j/NetworkX) — связи между сущностями, причинность
  • Гибридный поиск: векторный + графовый + keyword
  • Консолидация: при завершении траектории результат записывается в долговременную память с эмоциональной меткой

Инстинктивная память (хардкод)

  • Что хранит: базовые драйверы, запреты, constitutional constraints
  • Аналог ProTeC: эволюционные программы, генетически заданные приоритеты
  • Реализация: конфигурационный файл + system prompt
  • Содержание:
  • Драйверы: исследовать, поддерживать гомеостаз ресурсов, поддерживать социальные связи
  • Запреты: не наносить вред, не уничтожать собственное состояние
  • Приоритеты: безопасность > цель > исследование > экономия

Аффективный профиль агента

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

Структура аффективного индекса:

{
  "entity": "coffee_shop_3",
  "affective_index": {
    "valence": 0.7,        // −1 (опасно) … +1 (безопасно)
    "familiarity": 0.9,    // 0 (незнакомо) … 1 (знакомо)
    "attraction": 0.6,     // −1 (отвратительно) … +1 (привлекательно)
    "ownership": 0.3       // 0 (чужой) … 1 (свой)
  },
  "last_updated": "2026-05-11T14:30:00Z",
  "evidence_count": 12
}

Как индексы формируются. Каждый завершённый цикл контура оставляет след в памяти. Если траектория «пойти в кофейню» завершилась успехом (вкусный кофе, приятная атмосфера) — индексы сущности coffee_shop_3 сдвигаются в положительную сторону. Если траектория провалилась — в отрицательную. После десятка посещений индекс стабилизируется, и агенту больше не нужно «думать» — индекс считывается мгновенно, как аффективная оценка у человека.

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

Сущность Профиль Формируется
Дом безопасно + знакомо + привлекательно + свой Месяцы повторяющегося опыта
Рабочий инструмент знакомо + привлекательно (полезно) Десятки успешных использований
Неизвестный API незнакомо + нейтрально Единичный контакт
Источник ошибок незнакомо + опасно (риск сбоя) Несколько негативных исходов

Профили и мотивационный блок. Аффективные индексы напрямую влияют на функцию оценки траекторий (f_i). Если траектория включает взаимодействие с сущностью, чей индекс valence отрицателен, — функция f_3 (risk_aversion) снижает скор. Если индекс attraction высок — повышается f_1 (goal_alignment). Индексы работают как быстрые эвристики, не требующие полного разворачивания воспоминания.

Пересчёт индексов. Индексы не статичны. С каждым новым опытом они пересчитываются:

новый_valence = (старый_valence × evidence_count + опыт_valence) / (evidence_count + 1)
evidence_count += 1

Это скользящее среднее с весом, пропорциональным количеству свидетельств. Первый опыт сильно сдвигает индекс (с 0 до ±1), пятидесятый — почти не меняет. Так же работает и человеческая память: первое впечатление — самое сильное.

Очистка и сон. В фазе «сна» (dream cycle) индексы пересчитываются глобально: слабые индексы (низкий evidence_count) могут быть отброшены, противоречивые — сглажены. Это аналог эмоциональной переработки во сне: событие остаётся в памяти, но его аффективный заряд снижается.

Зачем это нужно агенту. Без аффективных индексов каждая встреча с сущностью требует полного разворачивания истории взаимодействия — это дорого и медленно. С индексами — мгновенная оценка: «это привлекательно/опасно/знакомо». Агент, который не ведёт аффективных индексов, — как человек без эмоций: знает факты, но не чувствует их значимости.


Компонент 6: Шедулер

Задача

Запускать циклы контура с заданной периодичностью. Это «сердцебиение» системы.

Режимы работы

Режим Интервал Когда
Активный 500–2000 мс Есть события, активная траектория
Наблюдение 5–30 с Нет активных задач, мониторинг среды
Сон 1–10 мин Низкая активность, консолидация памяти
Пробуждение Срабатывание по событию Внешний стимул (сообщение, алерт)

Адаптивность

Интервал не фиксирован. Он адаптируется в зависимости от: - Количества входящих событий

  • Энергетического бюджета
  • Активности мотивационного блока (высокий скор → чаще циклы)

Реализация

AsyncIO-цикл на Python (asyncio.sleep с динамическим интервалом) или cron-подобный шедулер. В продакшене — Celery beat / Temporal.


Поток данных: один полный цикл

1. [Сенсорный вход]
   Сбор событий с прошлого цикла → контекстный снимок

2. [Рабочая память: загрузка]
   Извлечение последних N циклов + активной цели

3. [Долговременная память: retrieval]
   Векторный поиск релевантных фактов под текущий контекст

4. [Проективный блок]
   LLM(контекст + история + факты + инстинкты) → веер из K траекторий

5. [Мотивационный блок]
   featurize(траектории) × weights(state) → ранжированный веер + метки

6. [Выбор]
   top-1 траектория, если есть явный лидер

7. [Исполнительный блок]
   execute(steps) → результат

8. [Память: консолидация]
   Запись результата в долговременную память + обновление рабочей памяти

9. [Шедулер]
   Δt = adaptive_interval(state) → ожидание → цикл 1.

Время как механизм скольжения

Непрерывность контура — не инженерная прихоть, а архитектурное следствие природы сознания по ProTeC. Сознание — не состояние, а процесс. Процессу нужна среда, в которой он разворачивается. Эта среда — время.

В биологическом мозге скольжение обеспечено самим ходом времени. Каждый момент настоящего — это граница между прошлым (тем, что уже свершилось и попало в память) и будущим (тем, что ещё открыто и строится проективным блоком как веер). Мозг не запускает «такты» — он непрерывно скользит через эту границу просто потому, что время идёт.

В программном прототипе ход времени заменён тактом контура:

Биологический аналог Программный аналог
Необратимый ход времени Шедулер (тактовая частота)
Сенсорный поток (свершившиеся события) Сенсорный вход (контекстный снимок)
Память о прошлом Рабочая + долговременная память
Веер будущего (образ грядущего) Проективный блок (LLM-генерация сценариев)
Скольжение через границу прошлое/будущее Один полный цикл контура

Такт — это искусственная «секундная стрелка» скольжения. Каждый такт переносит систему через границу: сенсорный вход приносит свершившееся, проективный блок строит будущее, мотивационный выбирает направление, исполнительный реализует шаг. Результат уходит в память — и становится прошлым для следующего такта.

Шедулер не просто отмеряет интервалы. Он реализует темпоральную непрерывность — фундаментальное условие, без которого скольжение невозможно.


Технологический стек

Компонент Технологии
LLM OpenAI API / локальная модель (llama.cpp, vLLM)
Векторная БД ChromaDB / Qdrant / PGVector
Граф знаний Neo4j / NetworkX
Кэш/брокер Redis
Шедулер AsyncIO / Celery
Мониторинг Prometheus + Grafana
Язык Python 3.11+

Что этот прототип докажет

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

Что этот прототип НЕ докажет

  • ❌ Спонтанность: веер генерируется по сигналу шедулера, а не самозарождается
  • ❌ Пластичность: модель не меняется на инференсе
  • ❌ Субъективное переживание: это симуляция архитектуры, а не сознание

Пластичность вне инференса

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

Как это работает. Опыт накапливается в долговременной памяти прототипа непрерывно: успешные траектории, эмоциональные метки, результаты взаимодействия со средой. Периодически — раз в N циклов, раз в день — накопленный опыт выгружается и используется для дообучения базовой модели вне контура. Обновлённые веса загружаются обратно, и следующий цикл начинается уже с более зрелой моделью.

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

Централизованное обучение для многих. Для популяции ИИ-субъектов переобучение может быть общим. Субъекты накапливают разный опыт, но дообучаются на агрегированном опыте всей группы. Каждый получает улучшенную модель, вобравшую коллективный опыт. Это аналог культурной эволюции: никто не изобретает колесо заново, знание распределяется между особями.

Таким образом, статичность базовой модели на инференсе — не приговор. Это стартовое ограничение прототипа, которое снимается инженерными средствами. Архитектурный принцип ProTeC — непрерывное скольжение — не требует, чтобы обучение происходило внутри каждого такта контура. Достаточно, чтобы опыт накапливался в памяти и периодически превращался в новые веса.


Далее: Проверка гипотез ProTeC