Перейти к содержанию
Публикация AiManual

Синтетическая эмпатия: как системный промпт, RAG, TTS и RLHF формируют привязанность к LLM-агентам

Разбираем конвейер из четырёх слоёв, который создаёт ощущение, что LLM-агент помнит и понимает: промпт-личность, RAG-память, голос и RLHF. Плюс кейс Replika и р

Коротко

Что будет в материале

  1. 01

    Что такое синтетическая эмпатия и почему привязанность - это инженерия

  2. 02

    От ELIZA до агентов-компаньонов: короткая история эффекта

  3. 03

    Системный промпт: как 2-5 тысяч токенов превращаются в личность

  4. 04

    RAG как память: почему агент «помнит» умершего кота

Что такое синтетическая эмпатия и почему привязанность - это инженерия

Ощущение, что 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-модель и векторная БД: что именно хранится

  1. Реплики разговора режутся на фрагменты, чанки.
  2. Embedding-модель превращает каждый фрагмент в вектор.
  3. Вектор уходит в векторную БД вместе с метаданными: дата, роль, идентификатор диалога.
  4. Новый запрос тоже векторизуется, и база возвращает ближайшие фрагменты по косинусной близости.
  5. Топ-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

  1. Сообщение пользователя приходит в Telegram-бот.
  2. Текст векторизуется embedding-моделью и записывается в ChromaDB вместе с метаданными.
  3. По новому сообщению выполняется retrieval: топ-N ближайших фрагментов.
  4. Системный промпт, найденные фрагменты и последние реплики собираются в запрос к LLM.
  5. Ответ синтезируется XTTS-v2 и уходит голосовым сообщением.

XTTS-v2 умеет клонирование голоса по короткому образцу. Это удобно и поднимает вопрос согласия: голосовые данные третьего лица нельзя превращать в игрушку без разрешения. Техническое ограничение тоже есть: задержка синтеза складывается с задержкой генерации, а качество просодии на русском зависит от модели и проверяется прослушиванием, а не описанием в документации.

Доступ через Telegram-бот и Tailscale

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

Риск тоже в мессенджере: бот видит переписку, и доверенный контур включает серверы Telegram. Локальная память защищает историю от вендора модели, но не от канала доставки.

Локально или централизованно: что важнее, удобство или владение памятью

Сравнение без маркетинга выглядит так.

КритерийЦентрализованная платформаЛокальный агент
Качество моделикрупные модели вендора8-70B в квантованном виде
Владение промптом и памятьюу вендорау пользователя
Изменение поведенияодной правкой конфигурации на серверетолько по решению пользователя
Качество синтеза речиготовый отлаженный синтеззависит от модели, нужна проверка на русском
Администрированиенетсервер, обновления, резервные копии
Приватность деталей разговоровопределяется политикой вендораограничена каналом доставки и вашей гигиеной

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

Критерии выбора под свою задачу

  • Приватность деталей разговоров. Если в переписке есть медицинские, финансовые или семейные детали, локальная память снимает риск передачи их вендору. Канал доставки при этом остаётся.
  • Готовность администрировать. Сервер, обновления, резервные копии ChromaDB, переиндексация при смене embedding-модели. Нет времени на это - централизованный сервис дешевле.
  • Требования к просодии. Если голос ключевой для опыта, сравнивайте конкретные образцы на русском. Разница между отлаженным синтезом и локальной моделью слышна.
  • Железо. Mac Studio с объединённой памятью тянет модели старшего диапазона, ноутбук ограничивает выбор младшими.
  • Устойчивость к изменениям. Если агент нужен надолго и повторять сценарий с отключением режима не хочется, держите промпт и память у себя.

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

Подписаться на канал