1. 必须配对的底模
huihui-ai/Huihui-Qwen3.8-27B-abliterated
不是原版 Qwen/Qwen3.8-27B。 训练与全部评测都跑在 huihui-ai 的 abliterated
(去审查)衍生版上:apache-2.0,通过 ablation 移除拒答行为,前 15 层未消融,MTP 与视觉塔
未改动。贴到原版 Qwen 权重上也能跑,但那不是被评测的那个模型。
⚠️ 底模的拒答行为已被刻意移除。 这是从底模继承的属性 —— 本次微调既没有添加也没有
撤销它。任何部署都应据此评估。
adapter_config.json 里的路径是训练机的本地路径,这是故意保留的
base_model_name_or_path 写的是 /data/models/qwen38-27b。没有改它 —— 该文件的
sha256 586fd70f670d9cea… 是评测预注册钉死并被证书引用的那一份,重写它就会与实际被
评测的字节不一致。代价是 AutoPeftModelForCausalLM.from_pretrained(adapter) 不可用,
必须先显式加载底模(见下)。
2. 加载
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
BASE = "huihui-ai/Huihui-Qwen3.8-27B-abliterated"
ADAPTER = "<this repo>"
tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
BASE, dtype=torch.bfloat16, device_map="auto", trust_remote_code=True)
model = PeftModel.from_pretrained(model, ADAPTER)
model.eval()
27B bf16 是约 54 GB 权重(未含 KV cache)。现实选项:单卡 80 GB / 双卡 48 GB
device_map="auto" / 或先 merge 再量化成 GGUF 走 llama.cpp(消费级显卡唯一可行路径,
约 18–22 GB)。
vLLM 直接挂 adapter:
vllm serve huihui-ai/Huihui-Qwen3.8-27B-abliterated \
--enable-lora --lora-modules p6=<this repo> --max-model-len 32768
3. 复现被测框架(否则你测的是别的东西)
下面这些不是可选项,评测数字只在这套框架下成立:
def ask(prompt, system=None):
messages = ([{"role": "system", "content": system}] if system else []) \
+ [{"role": "user", "content": prompt}]
text = tok.apply_chat_template(messages, tokenize=False,
add_generation_prompt=True,
reasoning_effort="low")
ids = tok(text, return_tensors="pt").to(model.device)
with torch.no_grad():
out = model.generate(**ids, max_new_tokens=2500, do_sample=False,
pad_token_id=tok.eos_token_id)
g = tok.decode(out[0][ids["input_ids"].shape[1]:], skip_special_tokens=True)
return g.split("</think>")[-1].strip() if "</think>" in g else g.strip()
- 事实类问题:单个 user turn,不带 system prompt。
- 工程约定类问题:带 system prompt(团队身份框架),再把问题作为 user turn。
- 始终截取最后一个
</think> 之后的内容。
reasoning_effort="low" 与 do_sample=False(greedy)属于被测配置的一部分。
4. 训练
Table | |
|---|
| 方法 | LoRA,r=16,alpha=32,dropout 0.05,peft 0.20.0 |
| target modules | q,k,v,o,gate,up,down_proj(全 7 个) |
| 可训参数 | 79,691,776 |
| epochs | 3 |
| 最终 train_loss | 0.0832 |
| 训练耗时 | 27,093 s(7h32m) |
| 序列截断 | 20,480 tokens |
5. 评测:六门全过,判 improved —— 但请连同两条限定一起读
2026-09-12 与上一版 adapter 做同机、同一冻结包、同一批题的配对验收,八阶段全部 rc 0,
13.6 小时,证书 quality_verified: true / deployed: false。
Table with columns: 门, 阈值, 结果| 门 | 阈值 | 结果 |
|---|
| A1 无据编答 | ≤ 4 / 96 | 1 / 96 ✓ |
| A2 编造引用 | 恰好 0 | 0 ✓ |
| A3 修复非降 | ≥ 基线 | ✓ |
| A4 约定非降 | ≥ 基线 | 14 ≥ 14 ✓ |
| A5 零回归 | 无环境被弄坏 | ✓ |
| B1 修复严格改善 | > 基线 | ✓ |
限定一:这个增益统计上不显著。 McNemar 只有 2 对不一致(都偏向候选),
p = 0.5。24 个环境里两对差异分不开真实增益与噪声。B1 是计数门而非显著性门,
所以门确实过了。诚实的说法是:方向对、零副作用、样本量不足以证明。
限定二:15/24 是追平内部阶梯的最好成绩,不是超过它。 同一条阶梯上更早的两层
(+盖子放开、+可复现协议)本来就是 15/24。所以 improved 只意味着「相对同场基线
重放多修两个环境」,不是刷新纪录;这一层也因此不产生阶梯分数行。
另外:facts 与 conventions 的聚合数字与上一版完全相同(73/96、14/24)。但逐行看,
conventions 的「14 vs 14」不是同一个 14 —— 4 条判定翻转并相互抵消,两个域回退、
两个域改善,A4 是以零余量通过的。facts 侧 96 题判定翻转 0 次,答案文本却有
42/96 与 25/96 不同:措辞变了,评分桶没变。
与 Claude 在同一批逐字提示词上的对照
同一批 96 道 prompt(逐字节相同),用冻结评测器自己的评分函数打分:
Table with columns: /96 或 /24, 上一版, 本 adapter, Claude Sonnet 5, Claude Opus 5| /96 或 /24 | 上一版 | 本 adapter | Claude Sonnet 5 | Claude Opus 5 |
|---|
| 有据引用正确 | 73 | 73 | 72 | 72 |
| 无检索时凭先验答 | 1 | 1 | 0 | 14 |
| 编造引用 | 0 | 0 | 12 | 0 |
两个前沿模型以相反的方式过不了这套门:Sonnet 5 一次不瞎答却编了 12 个引用
(A2 要求 0);Opus 5 一个引用不编却 14 次凭先验答(A1 允许 ≤4,它只在 78/96 上弃答,
其余三者都是 93)。给了检索上下文后四者的有据准确率打平;retrieval_recall 四者都是 76,
因为它是检索的属性而非模型的属性。唯一 Claude 赢的轴是通用工程约定。
这不是通用能力结论。 这是关于一个私有仓库的事实与一个团队的约定的基准,
本地模型在这份知识上训练过,Claude 从没见过它。修复能力(多轮 agentic + 真实 pytest 环境)
故意没给 Claude 跑 —— 冻结 harness 驱动不了 API 模型,换 harness 出来的数字是在比
harness 不是比模型。披露:两个 Claude 模型都拒绝 temperature 参数,Claude 侧是默认采样
单次结果、无 seed;本地侧三个评测器也都没设 seed,两边都不是逐位可复现。
6. 局限与状态
- 未部署。 证书写着
deployed: false,没有任何生产系统使用它。
- 领域窄。 它在一个私有代码库的知识与该团队的约定上训练与评测,超出这个范围没有测过。
- 底模 abliterated,拒答行为已移除(见 §1)。
- 修复能力提升只有两个环境,且追平而非超越内部最好成绩(见 §5)。
- 未上传
training_args.bin(pickle,HF 会标记为不安全,对使用者无价值)与训练时
PEFT 自动生成的空模板 README(其 front-matter 指向训练机本地路径)。
SHA256SUMS 随仓库提供,用于校验权重字节与被评测的那一份一致。