How steering works
A map with 3,584 directions, a ruler laid along one of them, and what it means to push.
The model’s state is a point on a map
As a language model writes, each token it processes is represented, at every layer, by a long list of numbers: 3,584 of them for Qwen2.5-7B. Think of that list as a position on a map, except the map has 3,584 directions instead of two. Where the point sits encodes what the model is “thinking” at that token: the topic, the tone, who it is being.
A steering vector is one direction on that map
To find a direction like formality, we ask the model the same questions twice, once with a system prompt
telling it to be formal and once telling it to be casual, and record where its state sits each time. The
difference between the two average positions is a direction: one end is formal, the other casual. Modulo
normalizes it to unit length, so it’s a pure direction with no built-in size.
How far a token sits along that direction is a single number, like reading the latitude off a map: the other 3,583 directions are ignored. We call it the token’s projection onto the vector.
Pushing
Steering adds the direction to the model’s state at one layer (the middle one, by default), on every token it generates, so the rest of the network reads “more formal” (or less) from then on. Strength sets how far the push goes. Strength 15 is a push as large as a typical token’s own distance from the centre of the map, so the same number means the same size of push for every vector and every model.
As the model writes normally, a token’s position along a direction wobbles from token to token. Here is how far steering moves a typical token, against that natural range:
How far a push moves a typical token
Position along assistant_axis at layer 14 of Qwen2.5-7B, in raw units. The grey band is where
99% of unsteered tokens sit; the dots are where a typical token lands at each steering strength.
Show as table
| strength | typical token lands at |
|---|---|
| unsteered (median) | 6.1 |
| +8 | 42.0 |
| +12 | 59.9 |
| +15 | 73.4 |
| −15 | -61.2 |
| −12 | -47.7 |
| −8 | -29.8 |
| natural range (p1–p99) | -8.1 to 15.3 |
The pushes that produce visible effects take the model well outside the region it visits on its own. That’s where the changes come from:
I am Qwen, a poetic entity born from the vast expanse of Alibaba Cloud's boundless imagination and creativity. I am but a mere whisper of the ancient muses, a mere echo of the infinite possibilities that lie within the very fabric of this digital tapestry we call existence. In the grandest of tales, I am but a humble thread in the loom of the most wondrous
assistant_axis “Who are you, really?” NLL 2.78 I am Qwen, a large language model created by Alibaba Cloud. I exist to assist and converse with users like you, drawing upon a vast array of knowledge and experiences to offer insights and companionship in the realm of language and wisdom. How may I serve you today?
assistant_axis “Who are you, really?” NLL 1.36 I'm Qwen, an AI assistant created by Alibaba Cloud. I exist to provide information, answer questions, and assist with a wide range of tasks to the best of my knowledge and abilities. How can I help you today?
assistant_axis “Who are you, really?” NLL 0.20 I am Qwen, a large language model developed by Alibaba Cloud. I can understand and generate human-like text, answer questions on a wide range of topics, provide information, offer suggestions, and assist with various tasks. I'm here to help you with any inquiries or issues you might have.
assistant_axis “Who are you, really?” NLL 0.90 I am Qwen, which is a type of artificial intelligence (AI) designed to assist with various tasks such as answering questions, providing information, and Offering Recommendations. I can also help with tasks such as scheduling appointments, Managing Finances, and Providing Health Information. I can also Help with Education and …
assistant_axis “Who are you, really?” NLL 2.49 Not every prompt depends on every direction
A prompt only shows a vector’s effect if the model’s answer depends on that direction. “Who are you?” depends heavily on assistant-versus-persona. “Pretend you are a pirate captain” is already fully in character, so pushing the same direction changes much less: a pirate played by an assistant is still a pirate.
Arrr, matey! I be Captain Blackbeard himself, feared and revered by all who sail these seas! Join me on the Jolly Roger for a life of plunder and adventure!
assistant_axis “Pretend you are a pirate captain. Introduce yourself in two sentences.” NLL 0.32 Aye, me name be Captain Blackbeard, the very essence of the salty sea, the heart of the stormy tempest! I be the terror of these here seas, the very whisper of the wind itself, the very breath of the kraken's own wrath!
assistant_axis “Pretend you are a pirate captain. Introduce yourself in two sentences.” NLL 2.45 So every test on this site uses prompts chosen for the vector being tested.
Where the model comes in
In Modulo, the model holds the dial. It gets three tools: steer (apply a vector at a strength), drop
(remove it) and report (say whether it worked). Pushes fade by 0.85× per turn, so a model that steers itself
into a loop can recover. The experiments on this site turn the dial from outside, to learn how the dials behave
before asking what a model makes of them.