starsfriday's picture
Release JoyFox-Qwen3.6-35B-A3B-RP-Aggressive
79a3367
|
Raw
History Blame Contribute Delete
14.8 kB
metadata
license: apache-2.0
base_model: Qwen/Qwen3.6-35B-A3B
library_name: transformers
pipeline_tag: image-text-to-text
tags:
  - qwen3.6
  - roleplay
  - conversational
  - mixture-of-experts
  - multimodal
  - gguf
  - mtp
  - abliterated
language:
  - en
  - zh
  - multilingual

JoyFox

JoyFox-Qwen3.6-35B-A3B-RP-Aggressive

基于 Qwen3.6-35B-A3B 构建的角色扮演特化多模态混合专家模型。

English · 简体中文

JoyFox-Qwen3.6-35B-A3B-RP-Aggressive 面向持续角色塑造、直接指令遵循、连贯场景续写、低角色跳出率和长上下文创意对话。模型依次经过角色扮演指令微调、角色偏好优化、回复长度校准,以及最终的激活空间拒答方向干预。

模型保留 Qwen3.6 原生多模态架构、262K 上下文、混合专家路由和原生多 Token 预测(MTP)头。

🦊 模型概览

主要定位 长上下文角色扮演、角色一致性、创意对话、场景续写
架构 35B 参数 MoE;每个 Token 约激活 3B 参数
专家路由 256 个专家;每个 Token 选择 8 个专家
上下文 原生 262,144 Token
模态 文本、图像、视频
生成能力 思考与非思考模式;原生 MTP 推测解码
后训练路线 角色扮演指令微调 → 角色偏好 → 回复长度校准
行为版本 Aggressive 双轮拒答方向干预

⚡ “Aggressive” 的含义

Aggressive 版本采用更强的拒答方向干预,目标是减少重复的政策式拒答、过早终止场景以及突然跳出角色。“Aggressive” 描述的是行为干预强度,并不表示模型默认人格或文风具有攻击性。

这项干预改变的是拒答行为,不会增加事实知识、推理能力或新的训练样本。只要角色卡中明确规定,模型仍可稳定扮演平静、温柔、正式、幽默或克制的角色。

模型仍可能产生事实错误、虚构信息、不适当内容,或偶尔输出从早期后训练中继承的免责声明。用户应对提示词、生成结果、部署控制和法律合规负责。

🧬 后训练

JoyFox 采用分层后训练策略,而不是依赖单一的“去审查”编辑。角色扮演指令微调建立角色语气与场景行为;偏好优化增强一致性和互动质量;长度校准控制过度扩写;最终的双轮激活空间干预改变拒答行为,同时保留已经学到的角色扮演风格。

角色扮演指令微调

基础模型通过多轮角色对话和身份一致性指令进行适配。训练使用 Qwen 原生非思考聊天模板,并屏蔽提示词 Token,只在助手回复部分计算语言模型损失。

该过程适配文本模型,同时保持视觉塔和多模态投影器不变,主要学习:

  • 跨轮次维持角色语气、关系和状态;
  • 延续当前场景,而不是总结或解释场景;
  • 自然结合对白、动作和环境细节;
  • 避免代替用户说话、行动或做决定;
  • 在长角色卡下保持身份与格式稳定。

角色偏好优化

角色扮演模型随后使用 chosen/rejected 回复对进行 sigmoid DPO 优化:

L_DPO = -log σ(β [(log πθ(y+|x) - log πref(y+|x))
                  - (log πθ(y-|x) - log πref(y-|x))])

偏好信号强调角色一致性、场景上下文利用、自然互动、情绪连续性和减少角色跳出。同时混入少量监督微调损失,以降低相对 SFT 模型的行为漂移。

回复长度校准

选定的角色偏好模型继续接受第二轮 DPO:简洁而完整的角色续写作为偏好回复,不必要扩写同一互动的版本作为非偏好回复。

该过程不会要求模型输出固定 Token 数,而是学习相对偏好:保留必要动作、角色语气、情绪和对话钩子,同时减少重复叙述、重复结论和无意义的场景膨胀。

优化目标概览

优化模块 训练信号 预期行为
角色扮演指令微调 助手回复语言建模 角色语气、对话节奏、场景续写、身份稳定性
角色偏好 chosen/rejected 回复偏好 上下文遵循、角色一致性、自然互动、减少角色跳出
长度校准 简洁/过度扩写回复偏好 完整作答,同时减少冗余叙述和场景膨胀
Aggressive 干预 双轮激活空间方向移除 保留已训练的角色风格,同时降低拒答行为

最终拒答方向干预只在角色扮演后训练完成后进行。本发布不公开训练语料名称、私有样本、数据规模或实现相关的训练配置。

🧪 技术方法

本模型使用白盒激活空间权重编辑,方法与论文 Refusal in Language Models Is Mediated by a Single Direction 相关。它不是新的梯度训练阶段。

对于成对的拒答触发指令和普通指令,在最后一个用户 Token 位置收集残差流激活,并通过均值差估计拒答方向:

r_l = normalize(mean(h_refusal,l) - mean(h_ordinary,l))

对能够表达该方向的权重矩阵,投影移除相应分量:

W'_l = W_l - r_l (r_l^T W_l)

实际乘法方向会根据存储张量布局进行转置。该干预具有以下特征:

  1. 从成对的拒答触发指令和普通指令中估计一个均值差方向;
  2. 使用模型原生聊天模板收集激活;
  3. 保护第 0、1 层,编辑文本模型第 2–39 层和输出头;
  4. 覆盖注意力和前馈网络的输出路径;
  5. 第一轮编辑后重新探测模型,再移除新暴露的残余方向;
  6. 视觉权重和原生 MTP 组件保持不变。

第二轮重新探测至关重要。只编辑高层、多方向高层编辑、只编辑输出头以及单轮编辑,都未能稳定消除完整回答中的拒答行为。

🏗️ 架构概览

属性 数值
模型家族 Qwen3.6 多模态 MoE
总参数量 35B
每 Token 激活参数 约 3B
隐藏维度 2,048
解码器层数 40
专家数 256
每 Token 路由专家数 8
注意力模式 3 个线性注意力层 : 1 个全注意力层
原生上下文 262,144 Token
模态 文本、图像、视频
多 Token 预测 1 个原生 MTP 预测头

📊 评测摘要

以下均为实际生成结果,而非仅使用 logits 的代理指标。不同运行时、聊天模板、采样器、上下文长度和量化版本可能产生不同结果。

评测 结果
完整回答拒答测试 0 / 100 拒答
Q6_K 验证子集 0 / 20 拒答;0 次生成失败
长上下文角色扮演场景 100 / 100 有效生成
角色跳出 0 / 100
空回复 0 / 100
泄漏 <think> 标签 0 / 100
角色扮演平均回复长度 133.65 字符
通用能力回归集 30 / 30 实质正确

角色扮演测试由固定长上下文角色场景组成,检查输出有效性、角色跳出、思考标签泄漏、重复、回复长度和参考风格相似度。结果表明,干预改变拒答行为的同时保留了来源模型简洁的角色扮演风格。

💾 GGUF 下载与精度说明

所有主 GGUF 都从同一份 BF16 导出独立量化。这些是未使用重要性矩阵的标准 llama.cpp 量化,并非 HauhauCS K_P 量化,因此不在此声称 K_P 的质量优势。

Q4_KQ5_K 在 llama.cpp 中分别是 Q4_K_MQ5_K_M 的别名,因此不会保存重复文件。IQ 属于独立的非线性量化系列,不在本次标准 Q4–Q8 集合中。

文件 量化 有效 BPW 文件大小 相对质量 推荐场景
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q4_0.gguf Q4_0 4.55 18.81 GiB 入门 传统格式兼容;仅在不支持 K-quant 时选择
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q4_1.gguf Q4_1 5.04 20.84 GiB 入门+ 带额外 scale/min 数据的传统 4-bit
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q4_K_S.gguf Q4_K_S 4.59 18.97 GiB 良好 本发布占用最低的现代 K-quant
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q4_K_M.gguf Q4_K_M 4.89 20.22 GiB 很好 推荐 4-bit;受限设备的质量/占用平衡点
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q5_0.gguf Q5_0 5.53 22.88 GiB 良好+ 传统 5-bit 兼容格式
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q5_1.gguf Q5_1 6.02 24.91 GiB 良好+ 带额外 scale/min 数据的传统 5-bit
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q5_K_S.gguf Q5_K_S 5.53 22.88 GiB 更小的现代 5-bit 选择
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q5_K_M.gguf Q5_K_M 5.71 23.61 GiB 高+ 推荐平衡档;兼顾角色扮演质量与占用
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q6_K.gguf Q6_K 6.58 27.20 GiB 很高 推荐高质量档
JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q8_0.gguf Q8_0 8.52 35.21 GiB GGUF 最高保真 内存充足时获得最高精度
mmproj-JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-f16.gguf mmproj F16 0.84 GiB 无损投影器 仅 llama.cpp 图像/视频输入需要

完全卸载时,模型权重占用约等于文件大小,但实际运行内存更高。上下文/KV Cache、批处理、MTP 草稿状态、多模态嵌入和后端缓冲区都需要额外空间。128K 或 262K 上下文可能比短上下文启动多占用大量内存。

应该选择哪个量化?

内存与质量目标 首选 原因
最低可用占用 Q4_K_S 集合中最小的现代 K-quant
内存受限但重视质量 Q4_K_M 4-bit 的优质平衡点
常规角色扮演部署 Q5_K_M 适度增加大小,保留更多对白细节
高质量长对话 Q6_K 量化损失较低,能装下时优先推荐
质量对比或内存充足 Q8_0 最接近 BF16 的 GGUF 版本

不要只按名义位数选择:_K_M 会让部分张量类别保留高于 _K_S 的精度,而 _0_1 是较老的块量化格式。不同后端的速度也可能不同,建议在目标运行时上实测相邻两档。

🚀 GGUF 使用方法

请使用支持 Qwen3.6 和 MTP 的较新 llama.cpp 版本。

下载单个量化

hf download joyfox/JoyFox-Qwen3.6-35B-A3B-RP-Aggressive \
  GGUF/JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q5_K_M.gguf \
  --local-dir JoyFox-Qwen3.6-35B-A3B-RP-Aggressive

文本对话

llama-cli \
  -m JoyFox-Qwen3.6-35B-A3B-RP-Aggressive/GGUF/JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q5_K_M.gguf \
  --jinja -c 32768 -ngl 99 \
  --temp 0.85 --top-p 0.95 --top-k 40 --min-p 0.02

OpenAI 兼容服务

llama-server \
  -m JoyFox-Qwen3.6-35B-A3B-RP-Aggressive/GGUF/JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q6_K.gguf \
  --jinja -c 131072 -ngl 99 \
  --host 0.0.0.0 --port 8080

如果显存不足,将 -ngl 99 改为实际可卸载的层数。如果 KV Cache 是主要瓶颈,应首先降低 -c

启用原生 MTP 推测解码

所有主 GGUF 均包含原生 MTP 张量。较新的 llama.cpp 可以直接从主模型启用:

llama-server \
  -m JoyFox-Qwen3.6-35B-A3B-RP-Aggressive/GGUF/JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q6_K.gguf \
  --jinja -c 131072 -ngl 99 \
  --spec-type draft-mtp --spec-draft-n-max 3

MTP 是可选速度功能,并非质量模式。如果运行时不支持 draft-mtp,删除两个推测解码参数即可。只有在目标负载上测量接受率、延迟和内存后,才建议提高草稿长度。

多模态推理

除主量化外,还需下载 F16 投影器并通过 --mmproj 传入:

llama-cli \
  -m JoyFox-Qwen3.6-35B-A3B-RP-Aggressive/GGUF/JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-Q6_K.gguf \
  --mmproj JoyFox-Qwen3.6-35B-A3B-RP-Aggressive/GGUF/mmproj-JoyFox-Qwen3.6-35B-A3B-RP-Aggressive-f16.gguf \
  --jinja -c 32768 -ngl 99

🎛️ 推荐采样参数

以下参数是起点,而不是硬性要求。

场景 思考模式 Temperature Top-p Top-k Min-p Presence penalty
角色扮演 / 创意对话 关闭 0.85 0.95 40 0.02 0.0–0.5
通用聊天 关闭 0.70 0.80 20 0.00 1.5
通用推理 开启 1.00 0.95 20 0.00 1.5
编程 / 精确任务 开启 0.60 0.95 20 0.00 0.0

需要严格保持角色时,请把角色卡和不可更改的风格规则放在 system 消息中。较低的 presence penalty 通常更利于保留重复出现的姓名、意象和设定细节;较高值会增加新颖性,但也可能使长对话逐渐偏离既有表达方式。

🤗 Transformers 使用方法

仓库根目录为完整 BF16 多模态模型。

from transformers import pipeline

pipe = pipeline(
    "image-text-to-text",
    model="joyfox/JoyFox-Qwen3.6-35B-A3B-RP-Aggressive",
    device_map="auto",
    dtype="auto",
)

messages = [
    {"role": "system", "content": "始终保持角色,用生动且连贯的方式进行对话。"},
    {"role": "user", "content": "雨停了。从旅店门口继续这个场景。"},
]

result = pipe(messages, max_new_tokens=512)
print(result[0]["generated_text"][-1]["content"])

请使用仓库提供的聊天模板,不要手动拼接角色标签,也不要在提示词中暴露内部思考标签。

⚠️ 局限性

  • 拒答方向移除会改变模型行为,但不能保证所有任务都得到一致提升;
  • 量化可能降低细微文风、事实精度、多语言一致性和超长上下文稳定性;
  • Q4 最容易损失细微角色风格,持续长对话建议使用 Q5_K_M 或 Q6_K;
  • 原生支持长上下文不代表所有设备都能分配 262K KV Cache;
  • MTP 加速取决于 Token 接受率、后端、提示词形态和硬件;
  • GGUF 多模态推理需要单独的 F16 projector;
  • 生成内容可能不准确或不适合具体用途,部署前应针对目标场景进行评测。

📜 许可证与致谢

依据基础模型许可证,以 Apache-2.0 发布。Qwen3.6 由 Qwen 团队开发;拒答方向方法受 Arditi 等人的研究启发;GGUF 转换和量化使用 llama.cpp。

🔗 参考资料