Appearance
推理时激活编辑:对每层输出做低秩方向投影
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 — 内核层面的施加位置与旗标