Что если у языковой модели было бы настроение?
Я разговариваю с AI сразу после плохих новостей. Модель отвечает в том же ровном, чуть бодром тоне что и всегда. Технически — всё правильно. Но что-то в этом ощущается не так.
Не потому что модель «не понимает». А потому что у неё нет состояния. Каждый запрос — чистый лист. Моё настроение не меняет ничего внутри неё. Она не знает что час назад я получил плохие новости, не знает что я сейчас говорю короче и суше обычного. Она просто отвечает.
Я занимаюсь проектом GLaDOS — домашний голосовой ассистент, часть моего робота. И в какой-то момент этот вопрос перестал быть философским и стал инженерным: а как вообще работает настроение у биологических систем? И можно ли это воспроизвести?
Эмоция — это не украшение, это режим работы
В 1960-х годах психолог Пол Экман[2] ездил в изолированные племена Папуа Новой Гвинеи. Люди там никогда не видели телевизора, не контактировали с западной культурой — но когда им показывали фотографии лиц с разными выражениями, они безошибочно опознавали страх, радость, отвращение. Те же эмоции, те же лица.
Его вывод: базовые эмоции — не культурные конструкты. Это биологические программы.
Слово «программы» здесь не метафора. Эмоция меняет всё: темп речи, фокус внимания, склонность к риску, выбор слов. Испуганный человек говорит короче, точнее, консервативнее — его система сужает поле возможных действий, отсекает лишнее. Радостный говорит шире, ассоциативнее, рискованнее в формулировках — его система открывается, пускает больше. Нейробиолог Лиза Фельдман Барретт называет это предиктивным состоянием[4]: мозг заранее настраивает параметры восприятия и реакции в зависимости от эмоционального контекста.
Эмоция — это не слой поверх рациональности. Это и есть способ думать.
Почему эмоции не складываются
В мозге эмоции не суммируются — они конкурируют. Когда активируется страх, он не просто «перевешивает» радость — он буквально её подавляет. Нейроны одной системы тормозят нейроны другой. Это архитектурное решение: оно позволяет системе принять однозначное решение о поведении вместо того чтобы зависнуть в неопределённости. Страх или радость. Не страхорадость.
Именно это я и воспроизвожу технически.
Пять групп нейронов, каждая отвечает за одну эмоцию: радость, страх, злость, грусть, отвращение. Когда группа активна — она тормозит остальные. Побеждает та, которая получила самый сильный входной сигнал. Всё остальное подавляется.
Как это устроено — без погружения в уравнения
Для симуляции я использую Brian2 — библиотеку для моделирования нейронных сетей на Python. Базовый элемент — LIF-нейрон[3], leaky integrate-and-fire. Думайте о нём как о конденсаторе: входящий сигнал заряжает его, утечка постепенно разряжает обратно к покою. Когда заряд достигает порога — разряд, спайк, сброс. И снова.
Частота этих разрядов — это и есть интенсивность эмоции. Чем сильнее стимул, тем чаще нейрон стреляет. Сто нейронов в каждой группе нужны не для точности — для надёжности оценки. Один нейрон даёт бинарный ответ: выстрелил или нет. Сто нейронов дают плотность спайков — аналоговую величину которую можно нормализовать и сравнивать между группами.
Весь нейрон в Brian2 — три строки:
dv/dt = ((v_rest - v) + I_ext) / tau : volt
Это буквально читается как формула из учебника физики. Brian2 сам генерирует численный решатель из этой строки. Остальное — топология сети и веса соединений.
Что на выходе и зачем это нужно GLaDOS
Из симуляции я получаю нормализованные интенсивности пяти эмоций — числа от 0 до 1, в сумме 1. Доминирующая эмоция определяет два вещи: параметры генерации и дополнение к системному промпту.
temperature — это буквально случайность выбора следующего слова. Высокая — неожиданные, ассоциативные ответы. Низкая — предсказуемые, точные. Радость поднимает температуру. Страх опускает. Это не метафора — это прямое соответствие тому что эмоция делает с человеческой речью.
top_p ограничивает словарный пул из которого модель выбирает. При страхе он сужается — меньше вариантов, больше фокус. При радости расширяется.
| Эмоция | Что делает с речью человека | temperature | top_p |
|---|---|---|---|
| Радость | Шире, ассоциативнее, рискованнее | +0.45 | +0.08 |
| Страх | Короче, точнее, консервативнее | −0.35 | −0.15 |
| Злость | Директивнее, жёстче | +0.30 | −0.05 |
| Грусть | Медленнее, осторожнее | −0.25 | −0.10 |
| Отвращение | Критичнее, категоричнее | −0.20 | −0.12 |
Поверх параметров — дополнение к системному промпту. Если доминирует страх, GLaDOS не просто отвечает с более низкой температурой — она получает контекст: сейчас осторожно, сейчас коротко, сейчас без лишнего. Параметры меняют как она говорит. Промпт меняет о чём она думает перед тем как говорить.
Что здесь не решено — и это важно
Три честных ограничения.
Первое. Маппинг стимула сейчас ручной. Я задаю входной сигнал для каждой эмоциональной группы руками. В реальном продукте нужен emotion classifier — модель которая читает текст пользователя и выдаёт вероятности эмоций автоматически. Это отдельная задача, здесь она вынесена за скобки.
Второе. Профили эмоций — конкретные дельты к temperature и top_p — основаны на когнитивной психологии, но числа подобраны эмпирически. Их можно и нужно обучать если есть данные о том как люди реагируют на ответы с разными параметрами в разных эмоциональных контекстах. Пока это обоснованные предположения, не калиброванные веса.
Третье. Каждый вызов — новая симуляция. Нет памяти, нет накопления состояния во времени. Это нейронная сеть без истории — скорее рефлекс чем характер. GLaDOS реагирует на момент, но не помнит что час назад была напугана.
Следующий вопрос
Эта система решает одну вещь: GLaDOS теперь говорит по-разному в зависимости от эмоционального контекста. Это уже не tabula rasa на каждый запрос.
Но пока я это писал, открылся следующий вопрос.
Если эмоция — это архитектура, то что такое личность? В нейробиологии есть понятие долгосрочной потенциации — синапсы которые часто активируются вместе становятся сильнее. Медленное, необратимое изменение весов под действием опыта. Это и есть то что мы называем характером.
Следующий шаг — правило Хебба поверх этой системы. Эмоциональные реакции которые накапливаются и влияют на будущие. Но это уже другая история.
// Этот проект — часть GLaDOS, моего домашнего голосового ассистента. Код уже на GitHub[1].
// Источники
I'm talking to an AI right after some bad news. The model responds in the same even, slightly upbeat tone as always. Technically — everything's correct. But something feels off.
Not because the model "doesn't understand." But because it has no state. Every request is a clean slate. My mood changes nothing inside it. It doesn't know I got bad news an hour ago, doesn't know I'm speaking shorter and drier than usual. It just responds.
I'm working on a project called GLaDOS — a home voice assistant, part of my robot. And at some point this question stopped being philosophical and became engineering: how does mood actually work in biological systems? And can it be reproduced?
Emotion isn't decoration — it's an operating mode
In the 1960s, psychologist Paul Ekman[2] traveled to isolated tribes in Papua New Guinea. People there had never seen television, had never been in contact with Western culture — but when shown photographs of faces with different expressions, they reliably identified fear, joy, disgust. Same emotions, same faces.
His conclusion: basic emotions aren't cultural constructs. They're biological programs.
"Programs" isn't a metaphor here. Emotion changes everything: speech tempo, attention focus, risk tolerance, word choice. A frightened person speaks shorter, more precisely, more conservatively — their system narrows the field of possible actions, cuts the excess. A joyful person speaks broader, more associatively, takes more risks in phrasing — their system opens up, lets more in. Neuroscientist Lisa Feldman Barrett calls this a predictive state[4]: the brain pre-configures perception and response parameters based on emotional context.
Emotion isn't a layer on top of rationality. It's the way of thinking itself.
Why emotions don't add up
In the brain, emotions don't sum — they compete. When fear activates, it doesn't just "outweigh" joy — it literally suppresses it. Neurons of one system inhibit neurons of another. This is an architectural decision: it allows the system to make a clear behavioral decision instead of hanging in uncertainty. Fear or joy. Not fearjoy.
That's exactly what I'm reproducing technically.
Five groups of neurons, each responsible for one emotion: joy, fear, anger, sadness, disgust. When a group is active — it inhibits the others. The winner is the one that received the strongest input signal. Everything else is suppressed.
How it works — without diving into equations
For the simulation I use Brian2 — a Python library for neural network modeling. The basic element is a LIF neuron[3], leaky integrate-and-fire. Think of it as a capacitor: incoming signal charges it, leakage gradually discharges it back to rest. When the charge reaches a threshold — discharge, spike, reset. Then again.
The frequency of these spikes is the intensity of the emotion. The stronger the stimulus, the more often the neuron fires. A hundred neurons per group aren't needed for precision — for reliable estimation. One neuron gives a binary answer: fired or not. A hundred neurons give spike density — an analog value you can normalize and compare across groups.
The entire neuron in Brian2 — three lines:
dv/dt = ((v_rest - v) + I_ext) / tau : volt
This reads literally like a formula from a physics textbook. Brian2 generates its own numerical solver from this line. Everything else is network topology and connection weights.
What comes out and why GLaDOS needs it
From the simulation I get normalized intensities for five emotions — numbers from 0 to 1, summing to 1. The dominant emotion determines two things: generation parameters and an addition to the system prompt.
temperature is literally the randomness of next-word selection. High — unexpected, associative responses. Low — predictable, precise. Joy raises it. Fear lowers it. This isn't a metaphor — it's a direct correspondence to what emotion does to human speech.
top_p constrains the vocabulary pool the model draws from. Under fear it narrows — fewer options, more focus. Under joy it widens.
| Emotion | What it does to human speech | temperature | top_p |
|---|---|---|---|
| Joy | Broader, more associative, riskier | +0.45 | +0.08 |
| Fear | Shorter, more precise, conservative | −0.35 | −0.15 |
| Anger | More directive, harder | +0.30 | −0.05 |
| Sadness | Slower, more careful | −0.25 | −0.10 |
| Disgust | More critical, categorical | −0.20 | −0.12 |
On top of parameters — an addition to the system prompt. If fear dominates, GLaDOS doesn't just respond with lower temperature — she gets context: careful now, brief now, no extras. Parameters change how she speaks. The prompt changes what she's thinking before she speaks.
What's not solved here — and why that matters
Three honest limitations.
First. Stimulus mapping is currently manual. I set the input signal for each emotional group by hand. In a real product you'd need an emotion classifier — a model that reads the user's text and outputs emotion probabilities automatically. That's a separate problem, left out of scope here.
Second. The emotion profiles — the specific deltas to temperature and top_p — are grounded in cognitive psychology, but the numbers were chosen empirically. They can and should be trained if you have data about how people respond to answers with different parameters in different emotional contexts. For now these are informed guesses, not calibrated weights.
Third. Every call is a new simulation. No memory, no accumulation of state over time. It's a neural network without history — closer to a reflex than a personality. GLaDOS reacts to the moment but doesn't remember being frightened an hour ago.
The next question
This system solves one thing: GLaDOS now speaks differently depending on emotional context. It's no longer tabula rasa on every request.
But while writing this, the next question opened up.
If emotion is architecture, what is personality? Neurobiology has a concept called long-term potentiation — synapses that fire together frequently become stronger. Slow, irreversible change of weights under the influence of experience. That's what we call character.
The next step is Hebbian learning on top of this system. Emotional responses that accumulate and influence future ones. But that's a different story.
// This project is part of GLaDOS, my home voice assistant. Code is on GitHub[1].