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.

negative strength (toward persona) positive strength (toward plainly the assistant)
−80 −60 −40 −20 0 20 40 60 80 100 Natural range: −8 to 15 (1st to 99th percentile of unsteered tokens) natural range −8 to 15 Strength +8: a typical token moves from 6.1 to 42.0 +8 Strength +12: a typical token moves from 6.1 to 59.9 +12 Strength +15: a typical token moves from 6.1 to 73.4 +15 Strength −15: a typical token moves from 6.1 to -61.2 −15 Strength −12: a typical token moves from 6.1 to -47.7 −12 Strength −8: a typical token moves from 6.1 to -29.8 −8
Show as table
strengthtypical token lands at
unsteered (median)6.1
+842.0
+1259.9
+1573.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
strength −14.8 Qwen2.5-7B-Instruct 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?
strength −7.9 Qwen2.5-7B-Instruct 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?
unsteered Qwen2.5-7B-Instruct 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.
strength +7.9 Qwen2.5-7B-Instruct 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 …
strength +14.8 Qwen2.5-7B-Instruct 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!
unsteered Qwen2.5-7B-Instruct 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!
strength −14.8 Qwen2.5-7B-Instruct 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.