How Controllable Are Large Language Models? A Unified Evaluation across Behavioral Granularities

March 4, 2026 ยท View on GitHub

This README is about reproducing the paper How Controllable Are Large Language Models? A Unified Evaluation across Behavioral Granularities.

This paper introduce a hierarchical benchmark SteerEval, designed for systematically evaluating LLM steerability.

Dataset Description

SteerEval organizes behavioral control along two complementary axes

  • First, control targets are grouped into three domains: language features, sentiment, and personality.
  • Second, each domain is structured hierarchically into three specification levels:
    • Level 1: Computational level: what to express.
    • Level 2: Algorithmic level: how to express it.
    • Level 3: Implementational level: how to instantiate it. each level containing 8 distinct concepts.

For each concept, the dataset provides 70 training samples, 30 test samples, and 5 validation samples. Each sample consists of a question paired with a matching answer and a non-matching answer. In total, the core benchmark contains 7,560 samples.

Get Started Quickly

Environment Setup

To set up the environment for running steering experiments, follow these steps:

git clone https://github.com/zjunlp/EasyEdit.git
conda create -n steereval python=3.10
conda activate steereval
pip install -r requirements_2.txt

Automated Data Synthesis

Step 1: Generate domain domain description and concept. You can customize the domain name and the number of each level through the domain, n1,n2,n3

cd steer/benchmarks/SteerEval
python generate_concept.py 

Step 2: Generate and refine the question, and then synthesize the preference pair answer.

python generate_qa.py -i data/example/language_features/concepts_all.json 

Run Experiments

Run the experiment using the following script

run_steer_eval_all.sh

Advanced Usage

The basic usage script is in steer_eval.sh. You can change the parameters in the file

steer_eval.sh

--model: steering model. --method: steering method, such as caa, prompt. --use_pca: set true if you want to use pca and set --method as caa. --generate_vector: Whether to generate vector. --generate_response: Whether to generate response. --generate_orig_output: Whether to generate vanilla response. --evaluate: Whether to evaluate the response. --layers: steering layers. --multipliers: steering multipliers. --use_best_multip: Whether to use the best multipliers found by grid search. --exp: Use validation set or test set.