# Cactus 发布 Gemma 4 E2B Hybrid：可在设备端为每个回答输出置信度分数，低分时自动路由至更大模型

- 来源：Hacker News 热门（buzzing.cc 中文翻译）
- 作者：HenryNdubuaku
- 发布时间：2026-07-23 13:47
- AIHOT 分数：70
- AIHOT 标记：精选
- AIHOT 链接：https://aihot.virxact.com/items/cmrx3iki50075ro694xrjogs3
- 原文链接：https://github.com/cactus-compute/cactus-hybrid

## 精选理由

把置信度探针塞进 Gemma 4 E2B，让模型自己判断该不该求助大模型，仅路由 15-35% 的查询就能持平 Flash-Lite，对离线/隐私优先的端侧产品是个省成本的新思路。

## AI 摘要

Cactus 推出基于 Gemma 4 的混合模型“Cactus Hybrid”，在模型检查点内嵌入置信度探针，为每个生成答案输出 0-1 之间的结构化置信度分数。高置信度时在设备端直接回答，低分时可自动路由至更大模型。该探针在零音频训练数据下，于四个音频基准上达到 0.79-0.88 AUROC，远超 token 熵基线（均值 0.549），且 MIT 协议开源。

## 正文

Cactus Hybrid

一个小型设备端模型速度快且保护隐私，但有时会出错。在 Cactus，我们通过后训练让模型知道自己何时出错：我们在检查点内部植入探针，为每个答案打分，给出介于 0 到 1 之间的置信度，并以结构化数据形式返回（绝不从答案文本中解析）。当置信度高时，在设备端作答；当置信度低时，你可以将请求重新路由到更大的模型：

if confidence < 0.85: answer = ask_a_bigger_model(prompt)

我们从 Gemma 4 E2B Hybrid 开始逐步推出，所有构建版本均托管在 Hugging Face 上的 Cactus Hybrid 集合中。

Gemma 4 E2B hybrid 是 Gemma 系列中最小的模型，通过仅将 15–35% 的查询路由到 Gemini 3.1 Flash-Lite，其余查询自行处理，在大多数基准测试中与 Gemini 3.1 Flash-Lite 表现相当。

基准测试 为匹配 Flash-Lite（FP16）所需的切换比例 4-bit 量化下 3-bit 量化下

ChartQA 15–20% 25–30% 40–50%

MMBench 30–35% 40–45% 50–55%

LibriSpeech 25–30% 35–40% 55–65%

GigaSpeech 30–35% 40–45% 50–55%

MMAU 30–35% 35–40% 50–55%

MMLU-Pro 45–55% ~90% 不适用

注：量化质量在 Cactus Quants 上测量，该工具在均匀量化下表现良好。

鼓励开发者自行针对 Unsloth、GGUF 和 MLX 量化进行基准测试。

Cactus

# pip install cactus-compute import json from cactus.bindings.cactus import cactus_complete, cactus_init from cactus.cli.download import download_bundle

lm = cactus_init(str(download_bundle("Cactus-Compute/gemma-4-E2B-it"))) result = cactus_complete( lm, [{"role": "user", "content": "What is the capital of France?"}], json.dumps({"max_tokens": 512, "auto_handoff": False}), None, lambda *_: None, ) print(result["response"].strip()) print("confidence:", result["confidence"])

MLX

# pip install mlx-lm import re from mlx_lm import load, generate

model, tokenizer = load( "Cactus-Compute/gemma-4-e2b-it-hybrid-mlx", tokenizer_config={"trust_remote_code": True}, )

messages = [{"role": "user", "content": "What is the capital of France?"}] answer = generate( model, tokenizer, prompt=tokenizer.apply_chat_template(messages, add_generation_prompt=True), max_tokens=512, ) # the checkpoint reasons before answering; keep only the final answer answer = re.split(r"<\|?channel\|?>", answer)[-1] answer = re.sub(r"^(thought|final)\b\s*", "", answer).strip() print(answer) print("confidence:", model.last_confidence)

Transformers

# pip install "transformers>=5.5.4,<5.6" torch (5.14+ segfaults on this checkpoint) import torch from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "Cactus-Compute/gemma-4-e2b-it-hybrid" device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, dtype="auto").to(device)

messages = [{"role": "user", "content": "What is the capital of France?"}] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, return_tensors="pt", return_dict=True ).to(device) out = model.generate(**inputs, return_confidence=True, max_new_tokens=512)

print(tokenizer.decode(out.sequences[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)) print("confidence:", out.confidence)

使用显式的 `.to(device)` 加载模型，而不是 `device_map="auto"`：探针在模块的 `forward()` 路径之外对生成结果进行评分，因此用于加速卸载的权重（留在 meta 设备上）会导致置信度读取崩溃。

llama.cpp

llama.cpp 是 C++ 编写的，因此探针是一个你需要编译进引擎的补丁（参见 `patches/llama.cpp/`）。构建一次打过补丁的服务器：

git clone https://github.com/cactus-compute/cactus-hybrid && cd cactus-hybrid ./patches/llama.cpp/install.sh && rehash

然后像任何 `llama-server` 一样运行并查询它——响应中会携带一个顶层的 `confidence` 字段：

llama-server -hf Cactus-Compute/gemma-4-e2b-it-hybrid-GGUF:Q4_K_M --jinja

curl -s http://localhost:8080/v1/chat/completions \ -d '{"messages":[{"role":"user","content":"What is the capital of France?"}],"max_tokens":512}' \ | jq '{answer: .choices[0].message.content, confidence}'

路由质量（AUROC）

Gemma 4 E2B Hybrid 的 AUROC 衡量模型区分错误答案与正确答案的能力（数值越高越好，0.5 表示随机，1.0 表示完美）：

留出集 模态 Cactus Hybrid Token 熵

MMLU 文本多选题 0.770 0.697

MMLU-Pro 文本多选题 0.771 0.692

ARC-Easy 文本多选题 0.888 0.655

ARC-Challenge 文本多选题 0.834 0.646

GSM8K（3-shot） 文本生成 0.782 0.731

MMBench-EN-Dev 视觉多选题 0.840 0.435

ChartQA 视觉问答 0.779 0.615

DocVQA 视觉问答 0.781 0.512

MMAU 音频多选题 0.789 0.517

GigaSpeech 音频 0.876 0.343

Earnings-22 音频 0.839 0.323

LibriSpeech 音频 0.822 0.427

平均值 0.814 0.549

最有力的结果是：该探针在零音频数据上训练，却在四个音频基准测试（两个转录任务、一个音频多选题、一个跨领域转录任务）上达到了 0.79–0.88 的 AUROC 值。

这排除了表层解释的可能性——探针是从隐藏状态中读取与模态无关的正确性信号，而非记忆训练数据中的模式。

采用 MIT 许可证。Gemma 模型的使用需遵守 Gemma 条款。
