Архитектура прототипа: непрерывный контур скольжения¶
Зачем нужен прототип¶
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
- Текущий контекст — сенсорный снимок
- Историю из рабочей памяти — последние N циклов
- Релевантные факты из долговременной памяти — retrieved через векторный поиск
- Инстинктивные ограничения — базовые драйверы и запреты
Формат ответа 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