Skip to content

推理时激活编辑:对每层输出做低秩方向投影 y = y − scale · direction[layer] · dot(direction[layer], y)。正 scale 抑制该方向、负 scale 放大。支持 DS4 Flash(43×4096)与 GLM 5.3 Flash(45×4096,MTP 层除外);2026-09 起可在不重建 KV 的前提下运行中调整强度(/steer)。

机制 ​

基于 Refusal in Language Models Is Mediated by a Single Direction:许多行为(冗长、拒答风格……)由激活空间里的单一方向主导,减掉/放大这个方向就能移除/强化该行为。引导文件是每层一个 4096 维归一化方向向量的 .f32 矩阵:

  • --dir-steering-file direction.f32 加载;--dir-steering-ffn F(给了文件默认 1)与 --dir-steering-attn F(默认 0)分别控制 FFN 后 / 注意力后的施加强度
  • CPU:cpu_directional_steering_project_rows;Metal:metal_graph_apply_directional_steering(+ _attn/_ffn 变体);流式 GLM 图按 tier 索引方向(directional_steering_dirs_by_tier)

方向从哪来:工具链 ​

dir-steering/tools/build_direction.py —— 对"目标行为"与"对照"两组 prompt 各跑一遍推理,逐层dump 一行隐藏激活,取两组均值差、归一化,写出 .f32 + .json。内置 deepseek-v4-flash 与 glm-5.3-flash 两个 profile。run_sweep.py 扫 scale。dir-steering/examples/ 带预构建的 verbosity 方向(负 FFN scale → 回答更简洁)。

Live steering(2026-09,87495f6) ​

新库级 API 让 scale 成为会话运行属性:

c
// ds4.h — 不重建 KV 改变 FFN 引导强度(分布式/TP 会话拒绝)
float ds4_session_directional_steering_ffn(ds4_session *s);
void ds4_session_set_directional_steering_ffn(ds4_session *s, float scale);

REPL 里即 /steer:无参数显示当前值,0 关闭,F 设为 −100..100。改 scale 会让 DSpark 捕获状态失效(需重建)。注意这是 CLI/REPL 能力,服务器仍只能用启动旗标设固定值。GLM 5.3 的引导(8adb221)兼容 --mtp、server、原生会话批处理与两机 TP(worker 与 coordinator 用同一份文件)。

相关概念 ​

  • rmsnorm — 同为"对激活做逐层仿射干预"的机制,但权重是训练出来的
  • Part 6 §4f — 内核层面的施加位置与旗标