DeepSeek-V4-Flash模型发布,在更轻的参数量下实现强大推理能力,使LLM引导(steering)技术再次具有实用价值。对成本敏感的AI应用开发是重要参考。
自从 Golden Gate Claude 出现以来,我就一直对「steering(引导)」着迷:也就是在模型运行过程中,直接操纵其 activation,从而引导 LLM 的输出。
antirez 最近发布的项目 DwarfStar 4 给了我写这篇文章的灵感。它是一个经过精简的 llama.cpp 版本,专门用于运行 DeepSeek-V4-Flash。这个模型有什么特别之处?它可能正是许多工程师一直在等待的东西:一个优秀到足以在 Agent 编程能力上与最弱一档 frontier model 竞争的本地模型。
由于 steering 必须在本地模型上进行,如今许多工程师终于可以切实地尝试这项技术了。事实上,antirez 已经把 steering 作为一等能力集成进了 DwarfStar 4。目前它还非常初级——基本上只有一个用 prompt 也能复现的玩具级「verbosity」示例——但首个版本也才发布八天。我打算密切关注这个项目。
steering 的基本思路是:从模型内部的「大脑状态」中提取一个概念,例如「简短回答」,然后在 inference 期间介入,增强构成这个概念的数值 activation。
一种实现方式是,把同一组 100 个 prompt 分两次输入模型:第一次使用正常的 prompt,第二次则在每个 prompt 后追加「respond tersely」。接着,测量模型对每一对 prompt 产生的 activation¹ 差异,也就是用一个 activation matrix 减去另一个。得到的差值就是「steering vector」。理论上,你可以把这个向量加到任意 prompt 对应的同一个 activation layer 上,从而获得同样的效果——让模型简短作答。
另一种更复杂的方式,是训练第二个模型,从原模型的 activation 中提取「feature」:也就是那些似乎会共同出现的行为模式。然后,你可以尝试把这些 feature 映射回具体概念,并以相同的方式增强它们。这大致就是 Anthropic 使用 sparse autoencoder² 所做的事情。它与朴素方法遵循相同的原理,但能够捕捉更深层次的模式,代价则是需要多得多的时间、算力和专业知识。
steering 听起来就像一个作弊码。与其煞费苦心地组装训练集,试图把模型推向其训练数据分布中更「聪明」的那一端,为什么不直接找出模型大脑里的「聪明」旋钮,然后把它一路拧到最右边?
它似乎也是调整模型说话方式的一种更优雅的手段。与其反复摆弄 prompt,添加或删除「you MUST」之类的限定词,我们难道不能直接做一个带滑块的控制面板,比如「简洁/详细」或「严谨/速度」,然后直接调节它们吗?
最后,这件事本身就是很酷。看着 Golden Gate Claude 不由自主地把每一句话都扯回金门大桥,既迷人又令人不安,就像 Oliver Sacks 讲述的那些神经病学轶事一样。如果你的思维也被用类似方式调了一下,会怎么样?那时的你还算是你吗?
既然如此,为什么我们没有更多地使用 steering?为什么 ChatGPT 和 Claude Code 还没有提供一个 steering 面板,让你实时调节模型的大脑?其中一个原因是,在 AI 研究领域,steering 很不凑巧地属于一种「中产阶级」式的想法。
对于大型 AI 实验室来说,它的层次太低了。这些实验室可以直接操纵自己的模型,不必在 inference 中途进行笨拙的脑外科手术。Anthropic 确实在研究这方面的技术,但据我所知,主要是从 interpretability 和安全性的角度出发。当他们希望模型以某种方式行动时,不会折腾 steering,而是直接训练模型。
对于你我这样的普通 AI 用户³ 来说,steering 又遥不可及。我们通过 API 使用 LLM,因此无法访问 steering 所需要的模型权重或 activation。比如,只有 OpenAI 能够为 GPT-5.5 找出或开放 steering vector。我们当然可以在 open-weights model 上做这件事,但直到最近——后面会详细谈到——都没有强到值得为此投入的开放模型。
此外,steering 的大多数基础用途都敌不过直接给模型写 prompt。直接操纵模型的大脑听起来相当厉害,但你知道还有什么东西也能直接操纵模型的大脑吗?prompt token。steering 的确可以让你相当细致地控制 activation,但通过调整 prompt 的语言,你早就能够进行极为细致的控制。换句话说,既然直接开口要求就行,费力通过 steering 让模型变得更啰嗦,并没有太大意义。
如果我们能找出某种无法通过 prompt 唤起的概念,steering 或许就能真正派上用场。比如「智能」呢?过去你可以通过 prompt 要求模型变得更聪明——这就是 4o 时代的 prompt 总以「you are an expert」开头的原因——但当代模型已经把这种特质写进了 personality,因此再通过 prompt 强调也不会产生效果。也许通过 steering 仍然有效?
归根结底,这是一个实证问题,但我很怀疑我们能否找到一个代表「智能」的 steering vector。换一种说法:构成「智能」这样复杂概念的 steering vector,可能与模型的全部权重几乎完全重合。因此,识别这个向量最终会退化成「训练一个聪明模型」的问题。
足够复杂的 steering 方法,最终只是在取代真正的模型。假如我拿来 GPT-2,并在每一层都用一个架构相同但强大得多的模型所产生的 activation 替换 GPT-2 的 activation,那么我确实会得到好得多的结果。但这时你并不是让 GPT-2 变得更聪明,而只是在与那个更强的模型交谈。智能存在于 steering 之中,而不是原模型之中。关于这一点的更多讨论,可以参阅我的文章《AI interpretability has the same problems as philosophy of mind》。
steering 还有另一种可能的用途:如果我们能够对某个需要大量 token 才能表达的概念进行 steering,就可以节省模型 context window 中的一大块空间。直观地说,可以把它理解为一种将概念从模型的 working memory 转移到 implicit memory 的方式。
例如,如果我们能够识别出一个「了解我的特定 codebase」的概念呢?当 GPT-5.5 快速阅读我的 codebase 时,它获得的一部分知识总得埋藏在 activation 里,对吧?也许我们可以把这些知识提取出来,形成一个非常大的 steering vector。
如果这真的可行,我会很惊讶。我认为,我们会遇到与提取「智能」时相同的问题:「了解我的 codebase」这个概念可能复杂到了需要对模型做一次完整 fine-tune 的程度⁴。但至少从表面上看,它并非完全不可能。
我对 steering 深感着迷,但对它并没有特别乐观。我认为,它带来的大多数收益都可以更高效地通过 prompt 复现,而真正雄心勃勃的 steering 目标,则可以更高效地通过训练或 fine-tuning 模型来实现。
不过,开源社区目前还没有在 steering 上投入太多工作,而现在这种情况或许才刚刚开始改变。如果我的判断错了,它确实存在实际用途,那么未来六个月内我们应该就能发现。
值得关注的是,DwarfStar 4 这类针对特定模型定制的工具,最终是否会内置一个可增强 feature 的「library」。每当一个热门 open-weights model 发布时,社区总会争相推出一整套 wrapper 和量化版本。我们是否也会看到大家争相从模型中提取可增强的 feature?
编辑:这篇文章在 Hacker News 上收到了一些评论。包括 antirez 本人在内的几位评论者指出,steering 能以 prompt 无法做到的方式改变某些「训练进模型」的行为,其中最值得注意的是移除模型的拒答行为。另一位评论者表示,开放模型的去审查/abliteration 处理本来就是这样完成的。我以前并不知道这一点——我原以为所谓的 uncensored model 通常都是通过 LoRA fine-tune 得到的。关于这一点,antirez 指出,与更加轻量、只需在必要时启用的 runtime-steering 方法相比,修改权重更有可能损害模型能力。我觉得这很有道理。
模型中存在许多不同的 activation 可供测量,例如 attention 之后、每一层之间等。基本上,你可以任选一个,也可以尝试多个,看看哪一个效果最好。↩
模型中存在许多不同的 activation 可供测量,例如 attention 之后、每一层之间等。基本上,你可以任选一个,也可以尝试多个,看看哪一个效果最好。
我最近读过一篇非常出色的深度文章,介绍如何在一个开放的 LLaMA 模型上完成这件事;几个月前我自己也尝试过,但效果好坏参半。↩
我最近读过一篇非常出色的深度文章,介绍如何在一个开放的 LLaMA 模型上完成这件事;几个月前我自己也尝试过,但效果好坏参半。
在此向来自大型 AI 实验室的读者致歉。如果你曾在内部尝试通过 steering 增强模型能力,但没有成功,请给我发邮件。我保证不会告诉任何人。↩
在此向来自大型 AI 实验室的读者致歉。如果你曾在内部尝试通过 steering 增强模型能力,但没有成功,请给我发邮件。我保证不会告诉任何人。
即便如此,业界「使用你的 codebase 对模型做 fine-tune」的实践,迄今也大多没有取得成功。↩
即便如此,业界「使用你的 codebase 对模型做 fine-tune」的实践,迄今也大多没有取得成功。
如果你喜欢这篇文章,可以考虑订阅邮件,接收我的新文章更新,或者把它分享到 Hacker News。
下面是一篇与本文标签相同的相关文章预览。
LLM「skill」是针对特定任务编写的一段简短说明性 prompt,通常还会与辅助脚本打包在一起。最近的一篇论文表明,skill 对 LLM 很有用,但由 LLM 编写的 skill 却并非如此。论文摘要写道:
平均而言,自行生成的 skill 不会带来任何收益,这说明模型无法可靠地编写那些它们在使用时能够从中受益的程序性知识。
目前,我并不想真正深入讨论这篇论文。我只想指出,论文使用 LLM 生成 skill 的方式很糟糕,你不应该这么做。下面就是论文要求 LLM 生成 skill 时使用的 prompt:
继续阅读……