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+ 闭源模型的表现。


核验过程

官方来源(已读):

  1. Hugging Face 模型卡badtheorylabs/BTL-3链接):包含完整规格、benchmark 数字(BFCL v4、HumanEval、LiveCodeBench v6、BigCodeBench-Hard)、PEFT/vLLM 加载代码、Compact 版本说明。
  2. 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: ... ...