模型解释性服务器

chuk-mcp-lazarus是一个模型解释性服务器,提供加载模型、提取激活、训练探针、引导生成和组件消融等功能,适用于语言模型的深度分析和调试。

  • by chrishayuk
  • Python
  • 本地部署
  • 21 星标
  • 更新于
在 GitHub 查看 chrishayuk/chuk-mcp-lazarus

使用说明

拉扎鲁斯

MCP服务器包装的机械可解释性 楚克·拉扎鲁斯.

加载任何模型、提取激活、列车探测、转向生成, 并通过Claude(或任何MCP客户端)的MCP工具消融组件 可以自主呼叫。

快速开始

# Clone and install
git clone https://github.com/chuk-ai/chuk-mcp-lazarus.git
cd chuk-mcp-lazarus
uv sync

# Run the smoke test (53 tests on SmolLM2-135M, ~3 seconds)
uv run python examples/smoke_test.py

# Run the full 15-step language transition demo
uv run python examples/language_transition_demo.py

克劳德桌面版

添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "lazarus": {
      "command": "uv",
      "args": ["run", "chuk-mcp-lazarus", "stdio"],
      "cwd": "/path/to/chuk-mcp-lazarus"
    }
  }
}

工具(64)

组 工具 目的
型号 load_model 将任何HuggingFace模型加载到内存中
型号 get_model_info 返回架构元数据
世代 generate_text 从加载的模型生成文本
世代 predict_next_token 具有概率的Top-k下一个令牌预测
世代 tokenize 显示文本是如何标记的
世代 logit_lens 逐层预测演化(校准的logit透镜)
世代 track_token 跨层跟踪特定令牌的概率
世代 track_race 通过交叉检测跨层竞争N个候选令牌
世代 embedding_neighbors 在嵌入空间中查找最近的标记(余弦相似度)
激活 extract_activations 特定层和位置的隐藏状态
激活 compare_activations 跨提示的余弦相似度+PCA
注意 attention_pattern 指定层的人均注意力权重
注意 attention_heads 人均熵和焦点分析
探测 train_probe 对分类器进行激活训练
探测 evaluate_probe 对保留的数据进行评估
探测 scan_probe_across_layers 找到交叉层
探测 probe_at_inference 在自回归生成过程中运行经过训练的探针
探测 list_probes 列出所有经过训练的探头
转向系统 compute_steering_vector 对比激活添加
转向系统 steer_and_generate 在应用转向的情况下生成
转向系统 list_steering_vectors 列出所有计算向量
消融 ablate_layers 清零层,测量中断
消融 patch_activations 在提示之间交换激活
因果关系 trace_token 哪些层是预测所必需的
因果关系 full_causal_trace 位置×层因果热图(孟等人风格)
剩余 residual_decomposition 每层注意力与MLP贡献
剩余 layer_clustering 跨层表示相似性和聚类分离
剩余 logit_attribution 直接logit归因:每层组件对预测令牌的贡献
剩余 head_attribution 人均logit归因:哪些注意力头推向目标代币
剩余 top_neurons 每神经元MLP识别:哪些神经元向目标标记推送
归因 attribution_sweep 使用每个提示摘要跨提示批处理登录归因
干预 component_intervention 零/标度注意力、FFN或某一层的单个头部
神经元 discover_neurons 自动找到区分提示组的神经元
神经元 analyze_neuron 特定神经元:跨提示的激活统计数据
神经元 neuron_trace 通过下游层追踪神经元的影响
方向 extract_direction 通过平均差分、LDA、PCA或探头权重查找方向
实验 create_experiment 创建一个命名实验以实现结果持久性
实验 add_experiment_result 将步骤结果添加到实验中
实验 get_experiment 检索实验及其结果
实验 list_experiments 列出所有已保存的实验
比较 load_comparison_model 加载第二个模型进行并排分析
比较 compare_weights Frobenius范数+每层每个组件的余弦模拟
比较 compare_representations 提示之间的每层激活差异
比较 compare_attention 注意力模式中的人均JS差异
比较 compare_generations 两个模型并排输出的文本
比较 unload_comparison_model 从比较模型中释放VRAM
几何学 token_space 标记未嵌入向量与层上残差流之间的角度
几何学 direction_angles 任何方向之间的成对角度(标记、神经元、头部、残差、FFN、注意力、转向向量)
几何学 subspace_decomposition 将向量分解为基方向分量+正交残差
几何学 residual_trajectory 通过参考标记的角度跟踪图层中的残余旋转
几何学 feature_dimensionality PCA谱+特征的维度分类
几何学 decode_residual 将残差流解码到词汇空间:原始排名与归一化排名、差距分析、平均方向
几何学 computation_map 完整的预测流程:几何形状、归因、logit镜头竞赛、一次通话中的顶端/神经元
几何学 inject_residual 将供体残余物注入受体一层并继续生成(马尔可夫特性检验)。 donor_layer 从与注入点不同的层捕获
几何学 residual_match 查找与某层目标具有最相似残差流的候选提示
几何学 compute_subspace 不同提示下模型激活的PCA子空间——将基础存储在SubspaceRegistry中
几何学 list_subspaces 列出存储在SubspaceRegistry中的所有命名PCA子空间
几何学 residual_atlas 通过PCA在不同的提示下映射残差流:方差谱、vocab解码主成分
几何学 weight_geometry 地图供应侧:头部/神经元通过未嵌入的有效供应等级推动方向
几何学 residual_map 整个模型的每层方差谱紧凑(无vocab投影)
几何学 branch_and_collapse 非折叠叠加:将供体残差注入多个模板,独立进化,折叠到最高置信度
几何学 subspace_surgery 全位置子空间替换:在每个位置交换实体子空间,同时保留正交补码(施主/坐标/查找模式)
几何学 build_dark_table 预计算暗坐标查找表:项目参考提示到子空间进行零通注入
几何学 list_dark_tables 列出DarkTableRegistry中的所有暗表

资源(4)

URI 描述
model://info 当前模型元数据
probes://registry 所有经过培训的探头和精度指标
vectors://registry 所有计算出的转向矢量
comparisons://state 比较模型状态

支持的型号

适用于任何型号 楚克·拉扎鲁斯 支持:

  • 杰玛 --吉玛3号(270M-27B),翻译吉玛4B/12B
  • 大羊驼 --Llama 2/3,米斯特拉尔,斯莫尔LM2
  • 通义 --问题2/3
  • 花岗岩 --IBM Granite 3.x/4.x(混合曼巴-2/变压器)
  • 贾姆巴 --AI21 Jamba(混合曼巴变压器MoE)
  • 曼巴 --纯SSM型号
  • StarCoder2 --代码生成
  • GPT-2 --GPT-2及兼容

默认演示目标: 翻译杰玛4B (34层,适合苹果硅)。 烟雾测试使用 斯莫尔LM2-135M 为了速度。

演示

脚本 涵盖的工具 默认模型
language_transition_demo.py 17种工具——旗舰15步工作流程(探测、指导、因果追踪) gemma-3-4b-it
comparison_demo.py 8种工具——两种模型比较(Gemma 3与TranslateGemma) Gemma-3-4b-it
deep_dive_demo.py 8个工具——完整的可解释性管道(logit归因→ 头部→ 神经元) SmolLM2-135M
attribution_sweep_demo.py 3个工具——带有提示汇总表的批量归因 SmolLM2-135M
track_race_demo.py 1个工具——具有交叉检测的多候选logit轨迹 SmolLM2-135M
intervention_demo.py 1个工具——手术部件干预(零/刻度注意力,FFN) SmolLM2-135M
experiment_demo.py 4个工具——实验持久性(创建、添加结果、检索、列表) SmolLM2-135M
ablation_demo.py 4种工具——层烧蚀和激活修补 SmolLM2-135M
attention_demo.py 4种工具——注意力模式和头部熵分析 SmolLM2-135M
residual_stream_demo.py 4种工具——残差分解和层聚类 SmolLM2-135M
logit_attribution_demo.py 3个工具——直接logit归因(知识本地化) SmolLM2-135M
causal_tracing_demo.py 3种工具——因果追踪(观察与干预) SmolLM2-135M
geometry_demo.py 6个工具——激活空间中的角度、轨迹、维度 SmolLM2-135M
subspace_demo.py 12种工具——PCA子空间、残余注射、手术、暗台 SmolLM2-135M
copy_circuit_demo.py 8个工具——复制电路假设(DLA、磁头输出、KV矢量) SmolLM2-135M
direction_demo.py 7种工具——方向提取、转向、探测 SmolLM2-135M
neuron_demo.py 4种工具——神经元发现、分析和下游追踪 SmolLM2-135M
smoke_test.py 53个测试——验证所有具有错误包络覆盖率的工具 SmolLM2-135M

演示:语言转换探究

旗舰实验遵循15个步骤的工作流程:

  1. 加载模型 -- load_model("google/gemma-3-4b-it")
  2. 检查架构 -- get_model_info() 显示34层
  3. 分词 --查看提示如何分解为令牌
  4. 生成文本 --查看基线模型输出
  5. 卫生检查激活 --验证激活是否重要
  6. 在早期层进行比较 --语言表征是不同的
  7. 在后期进行比较 --表示法收敛
  8. Logit镜头 --查看预测如何在各个层中演变
  9. 跟踪令牌 --观察特定代币的概率在各层之间的上升
  10. 跨层扫描探头 --找到语言身份可解码的地方
  11. 评估最佳探头 --确认保留的数据
  12. 计算转向矢量 --法国到德国方向
  13. 转向生成 --将法语翻译重定向到德语
  14. 阿尔法扫描 --以不同的转向强度迭代
  15. 因果追踪 --证明哪些层是预测所必需的

运行它: uv run python examples/language_transition_demo.py

演示:模型比较

将基础模型与其微调后的变体进行比较。先看实际 输出差异 compare_generations,然后找到位置 微调改变了权重、激活和注意力模式。 专为Gemma 3 4B与TranslateGemma 4B而设计,使用低资源 语言(冰岛语、斯瓦希里语、爱沙尼亚语、马拉地语) 显示25-30%的改善

运行它: uv run python examples/comparison_demo.py

建筑

看 建筑.md 10个设计原则。

要点:

  • 异步本机 --所有工具都是 async def,CPU密集型工作包 asyncio.to_thread
  • Pydantic土著 --每个数据结构都是类型化的 BaseModel
  • 模型无关 --适用于9+个模特家庭
  • 错误信封 --工具永远不会升起;总是返回结构化错误
  • JSON安全边界 --工具返回时转换的MLX阵列

项目结构

src/chuk_mcp_lazarus/
├── server.py            # ChukMCPServer instance
├── main.py              # Entry point (stdio / http)
├── model_state.py       # ModelState singleton
├── probe_store.py       # ProbeRegistry singleton
├── steering_store.py    # SteeringVectorRegistry singleton
├── comparison_state.py  # ComparisonState singleton (2nd model)
├── experiment_store.py  # ExperimentStore singleton
├── subspace_registry.py # SubspaceRegistry singleton
├── dark_table_registry.py # DarkTableRegistry singleton
├── resources.py         # MCP resources (4 resources)
├── errors.py            # Error types + envelope helper (17 error types)
├── _bootstrap.py        # Optional dependency stubs
├── _serialize.py        # MLX/NumPy -> JSON-safe
├── _generate.py         # Shared text generation
├── _compare.py          # Shared comparison kernels
├── _extraction.py       # Shared activation extraction
├── _residual_helpers.py # Shared residual-stream helpers
└── tools/
    ├── model/               # load_model, get_model_info
    ├── generation/          # generate_text, predict_next_token, tokenize,
    │                        #   logit_lens, track_token, track_race, embedding_neighbors
    ├── activation/          # extract_activations, compare_activations
    ├── attention/           # attention_pattern, attention_heads
    ├── residual/            # residual_decomposition, layer_clustering,
    │                        #   logit_attribution, head_attribution, top_neurons
    ├── neuron/              # discover_neurons, analyze_neuron, neuron_trace
    ├── probe/               # train_probe, evaluate_probe, scan_probe_across_layers,
    │                        #   probe_at_inference, list_probes
    ├── steering/            # compute_steering_vector, steer_and_generate,
    │                        #   list_steering_vectors, extract_direction
    ├── causal/              # trace_token, full_causal_trace,
    │                        #   ablate_layers, patch_activations
    ├── comparison/          # load_comparison_model, compare_weights,
    │                        #   compare_representations, compare_attention,
    │                        #   compare_generations, unload_comparison_model
    ├── attribution/         # attribution_sweep
    ├── intervention/        # component_intervention
    ├── experiment/          # create_experiment, add_experiment_result,
    │                        #   get_experiment, list_experiments
    └── geometry/            # Geometry tools (per-tool subpackage, 18+ tools)
        ├── _helpers.py          # Shared enums, math, direction extraction
        ├── _injection_helpers.py # Shared injection/generation helpers
        └── (one .py per tool)

发展

# Install with dev dependencies
uv sync --extra dev

# Run smoke tests
uv run python examples/smoke_test.py

# Run with a different model
uv run python examples/smoke_test.py --model TinyLlama/TinyLlama-1.1B-Chat-v1.0

# HTTP mode for development
uv run chuk-mcp-lazarus http --port 8765

需求

许可证

Apache 2.0