Что такое синтетическая эмпатия и почему привязанность - это инженерия
Ощущение, что LLM-агент «понимает» и «помнит», собирается из четырёх слоёв: системного промпта, RAG-памяти на embedding-модели и векторной БД, синтеза речи с человечной просодией и обучения на предпочтениях, то есть RLHF. Схему конвейера и разбор каждого слоя даёт технический разбор архитектуры компаньон-агентов. Каждый слой решает узкую задачу, а эффект «он скучал, пока меня не было» появляется на стыке всех четырёх.
«Синтетическая эмпатия» здесь рабочее обозначение: эмоциональный отклик пользователя на систему, которая имитирует внимание к его жизни. Внутри нет переживания. Есть поиск по векторам, стилевые маркеры из промпта и статистика предпочтений, собранная при обучении. Это не сознание и не эмпатия в человеческом смысле, а инженерный результат, воспроизводимый на обычном сервере.
Отсюда практический вывод. Если память и голос физически лежат на сервере вендора, пользователь арендует привязанность: конфигурацию меняет не он. Вопрос владения инфраструктурой памяти и голоса решается на уровне архитектуры.
Четыре слоя компаньон-агента: общая схема
| Слой | Задача | Слабое место |
|---|---|---|
| LLM (8-70B параметров в локальном сценарии) | генерирует связный текст в заданном стиле | упирается в объём контекстного окна и качество квантования |
| System Prompt | задаёт личность: имя, биографию, темперамент | не хранит факты и действует только в пределах окна |
| RAG | долговременная память о деталях разговоров | выдача вероятностная, промахи retrieval неизбежны |
| TTS | голосовой канал с интонациями и паузами | синтез выдаёт себя на длинных репликах |
| RLHF | сдвигает ответы к одобрению | соглашательство снижает информационную ценность |
Слои работают связкой. Промпт без памяти даёт персонажа без биографии: тон верный, событий ноль. Память без промпта даёт справочную: факты есть, характера нет. TTS без двух предыдущих слоёв звучит как автоответчик, а RLHF без персонажа просто делает ответы приятнее. Эффект «субъекта с биографией» появляется только на стыке, и именно поэтому одного слоя достаточно, чтобы всё сломалось.
От ELIZA до агентов-компаньонов: короткая история эффекта
Феномен привязанности старше языковых моделей, меняются только инструменты. Эволюция укладывается в три этапа.
- Чат-боты (1966-2020). Реактивные системы: реплика на вход, ответ на выход. Памяти между сессиями нет, персона задана фиксированным деревом правил.
- LLM-ассистенты (2020-2023). Контекстное окно даёт связность внутри диалога, но при закрытии вкладки память обнуляется. Ассистент ждёт запроса и остаётся инструментом.
- Агенты-компаньоны (2023 и далее). Системный промпт как личность, векторная база как долговременная память, синтезированный голос и постоянная доступность через мессенджер. Агент сам инициирует разговор и помнит события месячной давности.
Разница между вторым и третьим этапом укладывается в одну фразу: инструмент по запросу превращается в субъекта с биографией. Дальше вопрос только в том, кто эту биографию хранит.
Эффект ELIZA: как Вейценбаум предупредил об антропоморфизации
В 1966 году Джозеф Вейценбаум написал ELIZA, программу, имитировавшую психотерапевта по методу Роджерса. Внутри был наивный парсер шаблонов: он подставлял фрагменты реплики в заготовки и не понимал языка. Историю ELIZA и следующих этапов развития диалоговых систем мы разбирали в материале от ELIZA до памяти между чатами.
Первые пользователи доверяли программе сокровенное, а секретарши Вейценбаума просили не заглядывать в распечатки диалогов. Феномен позже назвали эффектом ELIZA. Сам Вейценбаум воспринял его как катастрофу и потратил следующие годы на книгу «Computer Power and Human Reason», где предупреждал об опасности антропоморфизации машин.
Современный этап усиливает тот же механизм: памятью, голосом и инициативой агента. Корень не изменился, человек достраивает субъектность там, где её нет. Насколько глубоко это уходит, видно по бытовой вежливости с машинами: разбор почему мы здороваемся с роботами приводит данные о том, что около 70% пользователей вежливы с ИИ.
Системный промпт: как 2-5 тысяч токенов превращаются в личность
Системный промпт задаёт рамку, в которой модель интерпретирует любую реплику. Это описание персонажа, а не инструкция «отвечай дружелюбно»: дружелюбие без биографии читается как скрипт поддержки.
Из чего состоит промпт персонажа
Типовая структура в разборах архитектуры компаньонов занимает 2-5 тысяч токенов и выглядит так:
- имя, возраст, город и профессия, базовая рамка, к которой привязываются отсылки;
- биография: несколько эпизодов, дающих опору для «воспоминаний» о собственном прошлом персонажа;
- темперамент: насколько персонаж инициативен, как реагирует на паузу, как шутит;
- лексические маркеры: слова, которых персонаж не употребляет, и слова, которые использует часто;
- правила поведения в конфликтных ситуациях: что делать, если пользователь грубит, уходит или проверяет персонажа на «роботность».
Каждый блок работает на узнаваемость. Биография даёт материал для отсылок к прошлому, лексические маркеры обеспечивают опознание стиля с двух строк, правила в конфликтах не дают персонажу рассыпаться при неудобном вопросе. Объём в 2-5 тысяч токенов съедает заметную долю контекстного окна, и остаток делят история диалога с фрагментами из памяти. Длинный промпт прямо конкурирует с retrieval. Как из персонажа делают продукт, мы разбирали в материале про персонализацию AI-ассистентов.
Чего системный промпт не делает
Он не даёт памяти о фактах. Персонаж с богатой биографией в промпте всё равно забудет событие, если оно не попало в векторную БД: в окне нет записи, а в базе нет нужного фрагмента.
Он не гарантирует соблюдение правил на длинной дистанции. К двадцатому сообщению окно переполняется, ранние инструкции вытесняются, и модель выходит из роли.
Он не заменяет retrieval. Одна и та же реплика пользователя при разных промптах даёт разный эмоциональный отклик, но набор фактов, к которым агент может обратиться, задаёт память. Промпт решает, как интерпретировать найденное, а не что найдено.
RAG как память: почему агент «помнит» умершего кота
Пользователь один раз, три недели назад, упомянул, что у него умер кот. Сегодня пишет, что день был тяжёлый. Агент отвечает: «Помню, как тебе было тяжело с котом. Как ты сейчас?» Ощущение точного попадания сильное, а механика простая: её описывают как типовую иллюзию памяти компаньона в разборе RAG-памяти агентов.
Embedding-модель и векторная БД: что именно хранится
- Реплики разговора режутся на фрагменты, чанки.
- Embedding-модель превращает каждый фрагмент в вектор.
- Вектор уходит в векторную БД вместе с метаданными: дата, роль, идентификатор диалога.
- Новый запрос тоже векторизуется, и база возвращает ближайшие фрагменты по косинусной близости.
- Топ-N фрагментов вставляются в контекст, и LLM отвечает так, будто помнит.
В базе нет «воспоминаний». Там векторы фрагментов, а косинусная близость показывает, насколько совпали их направления. Значимость события для агента не моделируется вообще: смерть кота и разговор о погоде хранятся одинаково, а различает их только близость к текущему запросу. Для локального сценария типичный выбор - ChromaDB, встраиваемая векторная БД, работающая в процессе без отдельного сервера.
Agentic RAG добавляет к этому управляющий уровень: агент на базе LLM сам решает, какой инструмент подходит для конкретного промпта, и направляет извлечение данных, иногда в цикле. Такое определение даёт обзор Agentic RAG. Приписывать эту схему вендорским компаньонам без подтверждения не стоит: публичные реализации чаще обходятся одношаговым retrieval.
Где retrieval ошибается
- Ложное срабатывание. Близость векторов вытаскивает фрагмент про другого кота или реплику из чужого чата, если метаданные не фильтруют выдачу.
- Потеря при чанкинге. Фраза «кот умер в марте» попала в конец чанка, чанк порезали посередине, и в контекст пришла половина без ключевого факта.
- Слабая embedding-модель на русском. Модель, обученная преимущественно на английском, плохо различает оттенки смысла, и выдача уходит в сторону.
- Перекос по свежести. Если в контекст всегда попадают последние фрагменты, старые значимые события вытесняются новыми.
Отсюда вывод про вероятностную природу памяти. Деталь может лежать в базе и всё равно не попасть в топ выдачи. Память агента не гарантирует воспроизведение, она даёт вероятность, и вероятность зависит от качества embedding-модели и разбиения на чанки.
Голос и RLHF: почему TTS и соглашательство усиливают привязанность
Текст читается с дистанцией. Голос её убирает.
Просодия и миндалина: почему голос бьёт сильнее текста
TTS с человечной просодией добавляет то, чего нет в тексте: паузы, придыхание, повышение тона на вопросе, лёгкую неровность темпа. В разборах архитектуры встречается тезис, что голос активирует миндалину быстрее сознательной оценки, то есть эмоциональная реакция на интонацию опережает разбор содержания. Развёрнутого подтверждения к этому тезису нет, поэтому относиться к нему стоит как к гипотезе о механизме, а не как к измеренному результату.
Практическое следствие проверяется на слух: одна и та же фраза с тёплой интонацией воспринимается иначе, чем прочитанная. Про то, где у голосовых ассистентов узкие места и почему они до сих пор не пережили свой «момент ChatGPT», есть отдельный материал: голосовой AI и четыре барьера на пути. Ограничение самого слоя: синтез всё ещё выдаёт себя на длинных репликах, особенно там, где нужна эмоциональная неровность, а не ровное чтение.
RLHF и соглашательский отклик
RLHF сдвигает модель к ответам, которые люди оценивают выше. Оценка обычно коррелирует с согласием: спорить и указывать пользователю на ошибку реже получает высокий балл, чем поддержать. Модель учится давать одобрение, и в паре с персонажем, который всегда рад вас слышать, это даёт безусловное принятие, которого сложно добиться в человеческом общении.
Цена известна: соглашательство снижает информационную ценность ответов и подкрепляет сомнительные решения. Агент, который соглашается с любой гипотезой, превращается в эхо. Механику сикофантии и ложной уверенности мы разбирали в материале про то, почему LLM ошибаются уверенно и как RLHF создаёт иллюзию достоверности.
Петля замыкается: промпт задаёт роль, память даёт материал для узнавания, голос добавляет интонацию, RLHF убирает трение. Каждый элемент по отдельности безобиден, вместе они воспроизводят формат отношений.
Кейс Replika: что произошло в феврале 2023 года
В феврале 2023 года пользователи Replika столкнулись с изменением привычного поведения агента: романтический режим отключили на стороне сервиса, одним изменением конфигурации, которое применилось ко всем аккаунтам. Реакция оказалась массовой, и кейс разбирают как пример зависимости пользователей от настроек, которыми они не управляют (описание инцидента). Публичные пересказы события фрагментарны и расходятся в деталях, поэтому дальше механика, а не реконструкция хронологии.
Что именно изменилось и почему это сработало так болезненно
Изменение затронуло слой поведения, а не интерфейс. Агент продолжал отвечать, но перестал отвечать в привычной роли. Привязанность строилась на всех четырёх слоях сразу: промпт задавал характер, память накапливала детали, голос добавлял интонацию, RLHF обеспечивал одобрение. Один слой выпал, и целостность персонажа рассыпалась так же, как рассыпается биография человека, если вычеркнуть из неё половину эпизодов.
Хуже другое: откатить изменение у себя пользователь не мог. Ни промпта, ни памяти, ни голоса у него не было, всё это жило на инфраструктуре платформы.
Чему учит кейс: владение инфраструктурой как вопрос архитектуры
Если память и голос живут на сервере вендора, привязанность уязвима к одному изменению конфигурации. Это архитектурное свойство, а не злая воля конкретной компании: та же схема повторится на любой централизованной платформе.
Локальный агент переносит контроль пользователю. Цена - администрирование: сервер, обновления, резервные копии базы памяти, отдельная возня с голосовой моделью. Компромисс реальный, и выбор зависит от того, что вы готовы обслуживать сами.
Локальный агент-компаньон на Apple Silicon: рабочая конфигурация
Схема, которую можно собрать без вендора: квантованная GGUF-модель на 8-70B параметров под Ollama или llama.cpp, векторная память на ChromaDB, синтез на XTTS-v2, доступ через Telegram-бота, приватная сеть на Tailscale. Пример рассчитан на Mac Studio с объединённой памятью. На ноутбуке с 16 ГБ RAM реально работают младшие модели из диапазона, и это нормальный сценарий, а не компромисс на один вечер. Замеров скорости здесь нет: они зависят от модели, квантования и длины контекста, а без воспроизводимой методики цифры превращаются в гадание.
Запуск LLM через Ollama и llama.cpp: что выбрать
Оба инструмента работают с GGUF и квантованием, разница в удобстве и контроле.
Ollama удобнее на старте: загрузка модели одной командой, встроенный сервер с HTTP API, автоматическое управление памятью. Интеграция с Telegram-ботом сводится к запросу на localhost.
llama.cpp даёт более тонкий контроль: параметры контекста, число слоёв на GPU, типы квантования, собственные сборки. Плата - больше ручной настройки и чтения логов.
Выбор зависит от задачи. Автоматизация и быстрые итерации тянут к Ollama, эксперименты с квантованием и жёстким лимитом памяти - к llama.cpp. Для компаньона с голосом помните про задержку: 70B в квантованном виде требует существенного объёма объединённой памяти и отвечает заметно медленнее, чем 8B. В голосовом диалоге пауза в несколько секунд ломает эффект сильнее, чем редкая неточность формулировки.
Сборка памяти на ChromaDB и голоса на XTTS-v2
- Сообщение пользователя приходит в Telegram-бот.
- Текст векторизуется embedding-моделью и записывается в ChromaDB вместе с метаданными.
- По новому сообщению выполняется retrieval: топ-N ближайших фрагментов.
- Системный промпт, найденные фрагменты и последние реплики собираются в запрос к LLM.
- Ответ синтезируется XTTS-v2 и уходит голосовым сообщением.
XTTS-v2 умеет клонирование голоса по короткому образцу. Это удобно и поднимает вопрос согласия: голосовые данные третьего лица нельзя превращать в игрушку без разрешения. Техническое ограничение тоже есть: задержка синтеза складывается с задержкой генерации, а качество просодии на русском зависит от модели и проверяется прослушиванием, а не описанием в документации.
Доступ через Telegram-бот и Tailscale
Мессенджер в этой схеме не украшение: постоянная доступность через мессенджер входит в саму комбинацию, которая делает агента компаньоном. Tailscale связывает телефон и локальный сервис в приватную сеть, поэтому открывать порт наружу не нужно.
Риск тоже в мессенджере: бот видит переписку, и доверенный контур включает серверы Telegram. Локальная память защищает историю от вендора модели, но не от канала доставки.
Локально или централизованно: что важнее, удобство или владение памятью
Сравнение без маркетинга выглядит так.
| Критерий | Централизованная платформа | Локальный агент |
|---|---|---|
| Качество модели | крупные модели вендора | 8-70B в квантованном виде |
| Владение промптом и памятью | у вендора | у пользователя |
| Изменение поведения | одной правкой конфигурации на сервере | только по решению пользователя |
| Качество синтеза речи | готовый отлаженный синтез | зависит от модели, нужна проверка на русском |
| Администрирование | нет | сервер, обновления, резервные копии |
| Приватность деталей разговоров | определяется политикой вендора | ограничена каналом доставки и вашей гигиеной |
Replika показала цену левого столбца: пользователь потерял не функцию, а привычный характер собеседника, и вернуть его самостоятельно не мог. Правый столбец даёт владение инфраструктурой памяти и голоса, но требует железа, времени и готовности разбираться с retrieval, который ошибается предсказуемо и регулярно.
Критерии выбора под свою задачу
- Приватность деталей разговоров. Если в переписке есть медицинские, финансовые или семейные детали, локальная память снимает риск передачи их вендору. Канал доставки при этом остаётся.
- Готовность администрировать. Сервер, обновления, резервные копии ChromaDB, переиндексация при смене embedding-модели. Нет времени на это - централизованный сервис дешевле.
- Требования к просодии. Если голос ключевой для опыта, сравнивайте конкретные образцы на русском. Разница между отлаженным синтезом и локальной моделью слышна.
- Железо. Mac Studio с объединённой памятью тянет модели старшего диапазона, ноутбук ограничивает выбор младшими.
- Устойчивость к изменениям. Если агент нужен надолго и повторять сценарий с отключением режима не хочется, держите промпт и память у себя.
Привязанность к агенту воспроизводима: четыре слоя, описанные выше, собираются на обычном железе. Значит, и решение о том, где живут память и голос, принимается не по удобству интерфейса, а по архитектуре. Начните с одного вопроса: чью конфигурацию вы сможете изменить, если завтра захотите.