开源CLI和MCP服务器,通过hook模型内部机制追踪实际驱动输出的attention head和MLP神经元,而非让模型自我叙事;MIT许可,支持GPT-2。
联合作者:Sourav Nandy 和 Rudrendu Paul。
代码仓库:https://github.com/RudrenduPaul/neuronscope,一款用于机制可解释性的开源 CLI 和 MCP server。
你向语言模型询问它为什么给出某个特定答案,它会返回一个听起来自信而合理的解释。这个解释是由生成原始答案的同一个模型产生的,所以它并不是对模型内部实际发生情况的报告。它是伪装成第一手叙述的第二种猜测。
NeuronScope 是我们对这种替代方案的尝试:一款 CLI 和 MCP server,用于追踪哪些注意力头和 MLP 神经元实际推动了模型的输出,而不是让模型自我叙述。它构建在一个现有的用于钩入模型内部的开源库之上,每次命令都附带版本化的 JSON schema,并通过 MCP 向 AI 智能体暴露相同的四个操作。MIT 许可证,pip install neuronscope-cli,可在 CPU 上运行 GPT-2 等小模型。
真实输出:neuronscope trace gpt2 "The capital of France is Paris. The capital of Japan is" 排名出产生预测 Tokyo 的注意力头和神经元。

Gartner 预计,到 2028 年,可解释 AI 工具将占 LLM 可观测性投资的一半,而目前这一比例仅为 15%(Gartner:可解释 AI 将推动 50% 的 LLM 可观测性投资)。追逐这一转变的大部分资金都流向了托管平台:可解释性研究实验室 Goodfire 于 2 月以 12.5 亿美元估值完成了 1.5 亿美元的 B 轮融资(Goodfire:我们的 B 轮融资),Apollo Research 于同月从慈善资助模式转变为 VC 支持的公益公司(Apollo Research 正在成为公益公司)。这些资金几乎没有一分落在你可以自己笔记本电脑上针对开源权重模型运行的命令上。这正是我们试图填补的空白。项目才上线三周,我们就已经把其最具营销价值的功能弄坏了一次。这就是本文要讲的大部分内容。
向语言模型询问它为什么产生某个给定输出,它会乐于生成一个看似合理的解释。因为这个解释是从同一个模型的第二代生成的,它与第一个模型内部实际发生的事情脱节了。机制可解释性是替代方案:对前向传播进行插桩,测量哪些组件移动了预测。
三个术语承担了大部分重量。注意力头在 token 位置之间移动信息;按直接 logit 归因对它们排名,可以告诉你哪个头的输出最用力地推动了最终预测。MLP 神经元在层内特定特征上激活;按激活幅度对它们排名,可以告诉你哪些在关键位置最活跃。激活修补(或消融)是一种因果检验:将一个组件置零,观察预测实际变化了多少,这比"这个组件很活跃"这一说法更有力的主张。
工具在那个区分点对自己的局限性能诚实地表态。高 logit 归因只告诉你一个组件与输出相关:两个组件可能是冗余的,因此单独消融任何一个对预测的影响都很小,即使两者在单独排名时都很高。NeuronScope 自己的 circuit 命令,将排名和单组件消融链接成一个自动化草图,在其 JSON输出的 method 字段中明确说明了这一点,因此调用者不能假设该方法提供了超出其本身的严谨性。一个无法说出自身技术缺陷所在的工具是值得怀疑的,这对 NeuronScope 和这个领域中的其他任何工具都同样适用。
这个领域大多数工具所构建的底层可解释性库为你提供了一个真正的、功能齐全的 Python API:加载模型、注册钩子、运行前向传播、将激活值作为张量读回。这是研究笔记本中交互式迭代的正确接口。对于 2026 年越来越常见的两种场景,它是错误的接口:一种是需要 JSON 退出码的 CI 检查,另一种是代理需要通过 MCP 调用工具并返回已经序列化的结构化结果。
NeuronScope 存在就是为了成为第二个接口。以下是实际命令及其真实输出:
neuronscope trace gpt2 "The capital of France is Paris. The capital of Japan is" --top-k 3 --json
{
"schema_version": 1,
"operation": "trace",
"model": {
"requested_name": "gpt2",
"resolved_name": "gpt2",
"backend": "transformer_lens",
"device": "cpu",
"n_layers": 12,
"n_heads": 12,
"d_model": 768,
"d_mlp": 3072
},
"prompt": "The capital of France is Paris. The capital of Japan is",
"predicted_token": " Tokyo",
"predicted_token_id": 11790,
"top_neurons": [
{ "layer": 10, "neuron_index": 97, "activation": 7.839381217956543 },
{ "layer": 11, "neuron_index": 611, "activation": 4.695372581481934 },
{ "layer": 11, "neuron_index": 2997, "activation": 4.646785736083984 }
],
"top_heads": [
{ "layer": 9, "head_index": 8, "logit_attribution": 4.067923545837402 },
{ "layer": 8, "head_index": 11, "logit_attribution": 2.9028172492980957 },
{ "layer": 10, "head_index": 7, "logit_attribution": -1.4781968593597412 }
]
}
gpt2 预测 Tokyo,而头 L9H8 是单一最大贡献者。当 MCP 客户端调用等效工具而无需 CLI shell out 时,它获得的正是这个逐字节一致的文件。一个 schema,两个调用者。
对于决定将可解释性工具预算放在哪里的团队来说,分配很简单:计算激活值——这是困难的部分——是一个有成熟开源库支持的研究问题。集成是未解决的部分:让这种计算变成脚本或代理可以消费的形式,而不需要为每个模型架构手写粘合代码。这是一个工具投资。写这张支票比写研究支票要小得多。
首次发布三周后,MCP server——README 中营销力度最大的功能——在每个全新安装上都停止工作了。对于在任何特定日期之后运行 pip install neuronscope-cli 的人来说,它立即坏掉了。
原因在 pyproject.toml 中的一行依赖声明:mcp>=1.0,没有上限。这看起来是一个合理的约束,直到 mcp 包发布了移除 NeuronScope 服务器代码导入的精确模块(mcp.server.fastmcp)的 2.0.0 版本。它确实这么做了。全新安装解析到 mcp==2.0.0,而 neuronscope mcp-server 在启动时崩溃,报错 ModuleNotFoundError: No module named 'mcp.server.fastmcp'。
我们以你想要的方式发现了这个问题,也是很多团队不会的方式:独立仓库审计在文档化的快速入门命令在干净虚拟环境中运行后才进一步发货。它不依赖于一周前的 CI 运行。那个运行在破坏性 mcp 版本发布之前就已经变绿了,所以已经是过时的。修复只有一行:mcp>=1.0,<2.0,加一个版本号更新和一个变更日志条目。这个教训泛化到了这个依赖之外:对你直接集成的任何库设置无上限的下限,尤其是对仍在快速迭代并发布破坏性主要版本的库,是一个等待别人发布节奏触发的潜在故障。我们现在按名称固定 NeuronScope 直接导入的每个依赖,都有下限和上限。
对于工程负责人来说,实际的收获比"固定你的依赖"更窄,每个人都已经知道这一点:值得严格限制的依赖是那些支持你最营销、最少测试的代码路径的。这正是静默破坏对第一印象造成最大损害的地方,也是最晚被发现的破坏。
这个项目并非每个工程决策都是 bug 修复。其中一个是深思熟虑的否决。接触 Node/TypeScript 代理工具人群的明显做法是一个薄的 npm 包,调用 PyPI 的那个,这样 npx neuronscope-cli 可以在任何不需要 Python 在其 PATH 上的情况下工作。我们评估了范围,然后在 v1 中跳过了它。
推理:工具的实际工作总是需要 Python 运行时和多几百兆字节的机器学习依赖。一个 Node 包装器不会移除那个成本,它只是添加了第二个需要保持同步的包、第二个藏 bug 的地方(子进程调用、PATH 解析、包装器和它包装的东西之间的版本漂移),以及一个主要对那些本来不会从工具中获得价值的人有意义的便利,因为他们仍然需要安装 Python 和 PyTorch 才能运行包装器本身之外的任何东西。如果真实用户在发布后要求,我们会构建它。我们不会因为它看起来很容易就投机性地构建它。
唯一一项超前于即时需求而构建的架构:Backend 是一个抽象接口(load_model、get_activations、patch_activations、list_supported_architectures),NeuronScope 首次发布时所使用的可解释性库是其 v1 版的唯一具体实现。这是为项目提前支付的一点间接层代价,而在这个项目第一天只需要支持一个后端。
这里值得付出这个代价的原因:这个领域已经有多个可信的后端方案在视野中,每一个都有不同的权衡(固定模型家族覆盖范围 vs 任意 PyTorch 模型支持 vs 更深层的特征级分析)。后续添加第二个意味着写一个针对现有接口的新类:CLI、MCP 层和 JSON schema 都不会受到影响。将第一个后端的具体调用直接硬编码到命令层,会把这件事变成一次重写。这个决策另一侧需要警惕的失败模式:在没有第二个真实实现来验证接口之前就构建接口,是一种赌注。只有当你对领域的形状有足够信心,愿意现在损失一点以换取日后少很多工作时,这才会是一笔好交易。
四类现有方案与此相关,值得精确界定它们各自的实际定位:将它们视为可互换会掩盖真实的差异。
针对挂钩模型内部结构的研究级 Python 库是这个领域最成熟的部分:主流、活跃维护且具备真正的深度。但它们是为笔记本和脚本工作流构建的,这意味着非 Python 进程无法通过 shell 调用它们,AI 智能体也无法直接调用它们。
更新的托管式、企业资助的可解释性平台浪潮,才是上述资本实际流向的去处。这些平台提供可浏览的特征数据库和托管基础设施,对想要仪表板的团队有真正的价值。它们与轻量级、可脚本化 CLI 的产品类别不同,而且通常带有部署要求(数据库、容器编排器),运行一次性追踪的个人开发者并不需要这些。
第三类提供的正是本文所论证的 CLI 加结构化输出的形态。其权衡在于:模型支持被锁定在固定、人工策划的家族列表中,底层库恰好支持的通用覆盖不在交易范围内。这是一种合理的权衡:分析深度换取模型覆盖广度。正因如此,"带 JSON 输出的 CLI"问题已经有了占据该细分市场的真正竞争者。相对仍留有空白的,是将模型无关覆盖与原生、一流的 MCP surface 配对:在其他地方,那个 surface 只作为事后附加的 JSON 导出出现。
第四类专门关注稀疏自编码器的训练和分析,这是一种更深层、更专业分解模型内部为可解释特征的技术。这是组件级追踪的补充,NeuronScope 不试图取代它。
NeuronScope 在这个领域自身的定位是有意收窄的:一个跨它底层库支持的任意模型家族工作的 CLI 和 MCP 层,跳过其他工具所依赖的固定白名单。这以一些分析深度换取了广度,以及让脚本或 AI 智能体无需手写集成代码即可调用的能力。它试图让这四类已经在做的研究能从终端或工具调用中触达,而不是声称要超越其中任何一项的研究能力。
如果你是一位权衡可解释性工具投入的工程负责人,实际的分割在于两个被混为一谈的不同问题。可解释性研究能力、训练新方法、发现新的电路分析技术,是一个真正困难、持续存在的问题,正是上述资金正确流向的地方。可解释性工具集成——将现有的、有效的 方法整合成你的 CI 管道或 AI 智能体工具链能实际调用的形态——是一个小得多、大体已解决的软件工程问题,恰好在开源中大部分处于未被占据的状态,而不是需要平台订阅。在购买之前知道你实际需要哪一个,才是整个决策的关键。
我们宁愿列出这些也不愿让你自己发现。circuit 命令是一个近似:它按 Logit 归因对组件排序,然后通过对单个组件消融来测量每个组件的个体因果效应,并在其自身 --json 输出的 method 字段中直接说明。它不做带干净提示和受损提示对的全路径修补,也不会捕获只在同时移除两个组件时才出现的组件间交互效应。
NeuronScope 的 MCP 服务器目前对模型大小或前向传播时间没有内置的资源限制。如果你将它暴露给不受信任的 AI 智能体,用容器或进程限制来约束它是你的责任:该工具尚未强制执行此操作。而且底层库的模型加载函数已经被上游标记为弃用,取而代之的是我们尚未迁移到的新 API。它仍然可用,本文中的每个命令都在它上面运行过,但这是仓库中一个被跟踪的、开放的项目。一个隐藏这些缺口的工具不值得本文其余部分所请求的那种信任。
pip install neuronscope-cli neuronscope trace gpt2 "The capital of France is Paris. The capital of Japan is" --top-k 5
小型模型无需 GPU。如果你想将它接入 Claude Code、Claude Desktop 或任何其他 MCP 主机,neuronscope mcp-server 通过 stdio 启动 MCP 服务器。
我们有一个开放的、真正悬而未决的问题:继同一接口之后添加的下一个后端。任意 PyTorch 模型支持(无固定列表),或通过稀疏自编码器进行更深入的、特征级电路发现。它们指向不同的方向,我们都还没有构建。你会先用到哪一个?
如果你觉得这个工具有用,在仓库上点个 star 能帮助其他从事可解释性工具工作的人找到它。
GitHub: github.com/RudrenduPaul/NeuronScope PyPI: pypi.org/project/neuronscope-cli
由 Sourav Nandy 和 Rudrendu Paul 合著。
Sourav Nandy 和 Rudrendu Paul 为 AI 智能体生态系统构建开源开发者工具。他们是 NeuronScope 的合著者——一款与模型无关的 CLI 和 MCP 服务器,用于机械可解释性研究,以及一系列相关的 AI 智能体基础设施项目。代码见 github.com/RudrenduPaul。