BTL-3:rank-32 LoRA 让 Qwen3.6-27B 化身编程 Agent · 干货攻略
- 链接: https://x.com/rasbt/status/2081374704753950742
- 分类: x-tips
- 来源: X @rasbt
- 作者: Jay
- 更新: 2026-08-30
- 仓库: badtheorylabs/BTL-3
这是什么
BTL-3(Bad Theory Labs 3)是 Bad Theory Labs 发布的一个后训练 PEFT LoRA 适配器,基座为 Qwen/Qwen3.6-27B,定位于编程 Agent、仓库级工具调用、长程多轮执行场景。
核心规格(均来自 Hugging Face 官方模型卡与 GitHub README):
| 项目 | 规格 |
|---|---|
| 基座模型 | Qwen/Qwen3.6-27B(精确修订 6a9e13bd6fc8f0983b9b99948120bc37f49c13e9) |
| 适配器类型 | PEFT LoRA,rank=32,alpha=64 |
| 适配器文件大小 | 933,974,032 bytes(约 891 MB) |
| 架构上下文窗口 | 262,144 tokens |
| 最大 RL 序列长度 | 65,536 tokens |
| 评测基准上下文 | 32,768 tokens |
| 许可证 | Apache-2.0 |
产品层面有两个版本:
- BTL-3(标准版):rank-32 LoRA 适配器,必须配合 Qwen3.6-27B 基座使用。需自己准备基座权重。
- BTL-3 Compact:打包好的独立文件,8.39 GB(含完整模型),不需要 Qwen3.6-27B 基座,用 BTL 自研的 llama.cpp 变体运行时(MIT 许可证)执行。相当于一个开箱即用的本地 Agent 模型。
为什么值得关注
@rasbt(Sebastian Raschka)在 2026 年 8 月分享这条内容时,核心论点非常明确:2026 年了,rank-32 LoRA 适配器仍然是在开源模型上做高效后训练的主流方案——BTL-3 的 benchmark 数字证明了这一点。
这条分享的语境是 Raschka 对 2026 年春夏季新开源模型的一揽子综述,BTL-3 是其中第 6 个被提及的模型。他指出 LoRA 适配器在 2026 年仍然是「useful tool/technique」,BTL-3 的强 benchmark 表现是其论点的实证支撑。
解决的核心问题: 在不开源全量权重的情况下,如何让 Qwen3.6-27B 变成一个合格的编程 Agent?传统方案是 SFT 全量微调,代价高且不易分发。BTL-3 证明只训练一个 rank-32 LoRA 适配器(不到 1 GB),配合 Qwen3.6-27B 基座,就能在多个权威基准上达到甚至超过许多 400B+ 闭源模型的表现。
核验过程
官方来源(已读):
- Hugging Face 模型卡 —
badtheorylabs/BTL-3(链接):包含完整规格、benchmark 数字(BFCL v4、HumanEval、LiveCodeBench v6、BigCodeBench-Hard)、PEFT/vLLM 加载代码、Compact 版本说明。 - GitHub 仓库 —
Badtheorylabs/BTL-3(链接):与 HF 模型卡内容高度一致,包含 BTL-3 与 Compact 两版本的详细对比表、Compact 内部验证 gate 报告、完整 LoRA target modules 列表。
交叉验证(tavily_search):
- AI Weekly 报道(aiweekly.co)确认了核心数字:HumanEval 95.12%、BFCL v4 88.5%、88.1% LiveCodeBench v6、91.2% irrelevance。
- BenchLM.ai 的 Qwen3.6-27B 页面将 Terminal-Bench 2.0 59.3% 作为基座对照(BTL-3 并未在此评测中出现,说明 BTL-3 的评测是其官方自测)。
- HumanEval Leaderboard(pricepertoken.com)显示 95.12% 与 Prime Intellect INTELLECT-3(95.1%)和 OpenAI o3 Mini(95.1%)并列,验证此分数在前沿水平。
关键核验结论:
- ✅ 全部 benchmark 数字来自 HuggingFace 官方模型卡与 GitHub,AI Weekly 交叉验证一致。
- ✅ adapter size 933,974,032 bytes = 约 891 MB,与 rank-32 LoRA 的理论规模吻合。
- ✅ Base revision
6a9e13bd6fc8f0983b9b99948120bc37f49c13e9是精确锁定,非 floating ref。 - ✅ Compact 版本的 92.2% conditional retention 来自内部验证 gate,该文件随 Compact 版本分发(
evidence/compact-validation.md),非公开基准,原帖未提及此数字。 - ⚠️ HumanEval 95.12% 为 thinking mode 下的 pass@1,官方明确说明非 thinking 模式的表现未列出,评测时需注意启用 thinking。
- ⚠️ BigCodeBench-Hard strict pass@1 仅 26.35%(39/148),说明在需要复杂规划的高难度编程任务上仍有明显短板,不宜过度泛化 benchmark 分数。
上手步骤
环境准备
# 推荐用 venv 或 conda
python >= 3.10
pip install torch peft transformers huggingface_hub
# vLLM 用于高吞吐推理(官方推荐 0.23.0+)
pip install vllm>=0.23.0
方法一:Transformers 加载(标准版)
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base_id = "Qwen/Qwen3.6-27B"
base_revision = "6a9e13bd6fc8f0983b9b99948120bc37f49c13e9"
adapter_id = "badtheorylabs/BTL-3"
tokenizer = AutoTokenizer.from_pretrained(adapter_id)
base = AutoModelForCausalLM.from_pretrained(
base_id,
revision=base_revision,
torch_dtype=torch.bfloat16,
device_map="auto",
)
model = PeftModel.from_pretrained(base, adapter_id)
messages = [
{
"role": "user",
"content": "Inspect this repository, fix the failing tests, and explain the patch.",
}
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False, # BTL-3 官方默认非 thinking 模式
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=4096)
completion = output[0, inputs.input_ids.shape[1]:]
print(tokenizer.decode(completion, skip_special_tokens=False))
方法二:vLLM 加载(高吞吐服务器推理)
官方推荐 vLLM 0.23.0,启用 LoRA 支持:
vllm serve Qwen/Qwen3.6-27B \
--revision 6a9e13bd6fc8f0983b9b99948120bc37f49c13e9 \
--served-model-name BTL-3 \
--enable-lora \
--max-lora-rank 32 \
--lora-modules BTL-3=/path/to/BTL-3 \
--lora-target-modules \
q_proj k_proj v_proj o_proj \
in_proj_qkv in_proj_z in_proj_b in_proj_a out_proj \
gate_proj up_proj down_proj \
--reasoning-parser qwen3 \
--language-model-only \
--max-model-len 32768
LoRA target modules 数量较多(Qwen3.6 的 hybrid-attention 架构包含额外的投影层),不要漏掉任何一项,否则加载会失败。
方法三:BTL-3 Compact(无需基座)
# 从 HuggingFace 下载 Compact 版本
# badtheorylabs/BTL-3-Compact
# BTL 自研的 llama.cpp 变体运行时
# 具体安装方式见 https://github.com/Badtheorylabs/BTL-3
# Compact 版本内置 262,144 token 上下文,直接使用即可
工具调用格式
Qwen3.6 默认 XML 格式,使用 enable_thinking=False 时模型输出不含思考过程:
``` tool_call: ... ...