Transformer 20. Qwen 3 架构介绍:模块详解与相对 Qwen 1 / Qwen 2 的演进

摘要 :本文基于 Qwen3 Technical Report(arXiv:2505.09388)按数据流自洽展开§2 给出 整体架构总览 (Decoder-only 数据流、单 Block 示意,便于与社区导读对照);继而从 Tokenizer、Embedding、绑权 写到 单层 Decoder 内的 RMSNorm、GQA、RoPE、QK-Norm、因果注意力、SwiGLU FFN、输出层 ,并说明 长上下文(三阶段预训练、RoPE 基频 ABF、YARN、DCA)MoE(128 路由专家、top-8、无共享专家)思考 / 非思考模式 。文中在相应位置直接写出 Qwen 1、Qwen 2、Qwen 3 的差异对照,读者无需依赖系列其它篇即可读懂骨干;文末仍给出同系列链接便于延伸阅读。

关键词:Qwen3;QK-Norm;GQA;RoPE;RMSNorm;YARN;DCA;MoE;思考模式;大语言模型

同系列博文(延伸阅读)


💡 理解要点 :可以把 Qwen3 想成:仍是 Decoder-only (只有「因果自注意力 + 前馈」,没有 Encoder),整体仍是 Pre-Norm + RMSNorm + RoPE + SwiGLU + GQA 这一现代主流骨架。相对 Qwen2 ,报告强调的硬变化主要是:去掉 QKV 线性层的 bias ,改成在注意力里对 Q、K 做 QK-Norm 稳住尺度;词表 从 Qwen2 报告的 151,646 扩到 151,669MoE 改为 128 个路由专家、每 token 激活 8 个、不设共享专家 ,并加 global-batch 负载均衡思考 / 非思考 是后训练与聊天模板塑造的行为,不是多出来的神经网络层。


1. 概述:Qwen3 在系列中的位置

Qwen3 Technical ReportQwen3 定位为通义千问家族新一代 开放权重 大语言模型:含 稠密/DenseMoE ,总参约 0.6B~235B ;旗舰 Qwen3-235B-A22B 为 MoE(总参约 235B,每 token 激活约 22B )。许可证 Apache 2.0 。预训练数据约 36T tokens ,覆盖约 119 种语言与方言;后训练突出 思考(thinking)与非思考(non-thinking) 融于 同一套权重 ,以及 思考预算(thinking budget)

💡 稠密与 MoE 是什么?

  • 稠密(Dense) :每一层里 FFN(前馈子层)只有一套权重每个 token 前向时这套参数全部参与计算 。可以粗略理解成:模型有多大,每一步就算多大 ------显存里的权重规模与单次算量基本同量级。日常说的 Qwen3-8B、14B、32B 等,指的就是这种「整网共享同一条 FFN」的稠密型号。
  • MoE(Mixture of Experts,混合专家) :把 FFN 换成 很多个结构相同、参数彼此独立的小网络(专家) ,再配一个 门控(路由器) :对当前这个 token 只挑出 其中少数几个专家 来算,其余专家本步不算。效果是:仓库里可以装下非常大的总参数量 (例如 235B),但 每生成一个 token 实际用到的计算量只和「被激活的那几条支路」相当 (报告里的 A22B 就表示这类「每 token 激活约 22B」的量级)。像一家大医院有很多科室,问诊时不会每个科室都跑一遍 ,只请相关专家会诊。注意力层 在 MoE 型号里通常仍是 共享、全量计算 的;稀疏 主要发生在 FFN 上。更细的公式与 Qwen3 的 128 专家、top-8 设定见 §9

与 Qwen 1 / Qwen 2 对照

代际 注意力与归一 词表(报告口径) 稠密注意力头 长上下文主线
Qwen 1 MHA 为主 + QKV bias ;FFN 中间维常取 8 3 d \frac{8}{3}d 38d 约 152K 每头一套 KV 预训练较短 + 推理期 NTK 等技巧
Qwen 2 全系 GQA + QKV bias ;FFN 中间维按表 Intermediate Size 151,646 h q > h kv h_q>h_{\text{kv}} hq>hkv 训练末段 32K + RoPE 基频 10 6 10^6 106 + YARN + DCA
Qwen 3 全系 GQA + 无 QKV bias + QK-Norm;FFN 同「按配置表」 151,669 h q > h kv h_q>h_{\text{kv}} hq>hkv 三阶段预训练 + 长阶段 32K + ABF + YARN + DCA (推理约 训练窗容量)

🔍 读配置的提醒 :各型号 hidden_size、intermediate_size、num_key_value_heads、head_dim 等以 Hugging Face config.json 与官方发布 为准;下文稠密 / MoE 表摘自技术报告,若与某一 checkpoint 略有出入,以权重为准。


2. 整体架构总览

2.1 Decoder-only:只有「解码堆栈」

Qwen3 与 GPT / LLaMA / Qwen 前两代一样,是 Decoder-only 因果语言模型:

  • 没有 Encoder ,也 没有 Encoder--Decoder 之间的 交叉注意力
  • 每一层只有 带因果掩码的自注意力 + 前馈网络(FFN)
  • 训练目标:只看当前位置之前的 token,预测下一个 token(自回归)。

💡 直觉 :像只带「已读部分高亮」的阅读灯从左扫到右------每一步只能利用已经出现的词来猜下一个词,不能偷看未来。

2.2 宏观看:从字符串到 logits

整体数据流(可先假设 Batch=1):

复制代码
纯文本
  → Tokenizer(BBPE)→ token ID 序列,长度 L
  → Embedding 查表 → 矩阵 X ∈ ℝ^(L × d_model)
  → 堆叠 N 个「Transformer Block」(每层结构相同,参数不同)
  → 最后一层隐藏状态 H → 取最后一个位置 h(预测下一词)
  → LM Head(线性层;可与 Embedding 绑权或分开)
  → 词表 logits → Softmax → 下一 token 概率

位置信息 不写成「词嵌入 + 正弦位置向量」叠在 X X X 上,而是在 每一层注意力里Q、K 施加 RoPE (详见 §3.4 );超长输入 上的 YARN、DCA 等与 RoPE 配合,见 §7

2.3 单个 Transformer Block(稠密 Qwen3)

一个 Block = 注意力子层 + FFN 子层 ,两边都是 Pre-Norm + 残差

顺序 组件 作用(一句话)
1 RMSNorm 在进注意力前,把每个位置的向量尺度拉稳
2 因果 GQA 自注意力:多组 Query 共享较少组 Key/Value,省 KV Cache
3 RoPE 旋进 Q、K,编码 相对位置
4 QK-Norm Qwen3 特有 :点积 对 Q、K 归一化;与「去掉 QKV bias」配套
5 掩码 + Softmax + V + 拼接 + W O W_O WO 标准注意力输出,形状仍为 L × d model L \times d_{\text{model}} L×dmodel
6 残差 与进入本子层前的 hidden 相加
7 RMSNorm 再归一化后进 FFN
8 SwiGLU FFN 门控前馈,提供主要非线性
9 残差 得到本 Block 输出,作为下一层输入

MoE Qwen3自注意力整段 + 两侧 RMSNorm 与残差 与稠密相同;FFN 段 把「单个 稠密 SwiGLU」换成 门控 + 多专家 ,每个 token 只算其中 top- k k k 个专家§9)。

用 ASCII 画成单块数据流:

复制代码
                 ┌──────────────────────────────────────────────┐
  本层输入       │  形状 (Batch, SeqLen, d_model)               │
       ↓         │            ↓                                 │
  RMSNorm        │  Pre-Norm,逐行归一化,形状不变               │
       ↓         │            ↓                                 │
  因果 GQA       │  线性得 Q,K,V → RoPE(Q,K) → QK-Norm →        │
                 │  QK^T/√d_k → 因果掩码 → softmax → 乘 V       │
                 │  → 多头拼接 → W_O                            │
       ↓         │            ↓                                 │
       + ←──────┼── 残差(加「进注意力前」的 hidden)            │
       ↓         │            ↓                                 │
  RMSNorm        │            ↓                                 │
       ↓         │            ↓                                 │
  FFN            │  稠密:SwiGLU;MoE:门控 + 稀疏专家(§9)     │
       ↓         │            ↓                                 │
  本层输出       │  + 残差 → 下一层 或 最后的 LM Head(§10)   │
                 └──────────────────────────────────────────────┘

💡 和 2017 年「经典 Transformer Decoder」示意图差在哪? 经典图常是 Post-Norm 、在 Embedding 上加绝对位置 、FFN 用 ReLU 。Qwen3 用的是 Pre-Norm + RMSNorm + RoPE + SwiGLU + GQA + QK-Norm ,且 无 Encoder------这是当前开源 LLM 常见配方。

2.4 推理时的形状与复杂度直觉

  • 每一层主路径上,每个 token 仍是 d model d_{\text{model}} dmodel 维 ;整句可记为 L × d model L \times d_{\text{model}} L×dmodel进出一层形状不变
  • 自注意力 在长度 L L L 上两两算相似度,主项 O ( L 2 ) O(L^2) O(L2) ;工程上常用 FlashAttention 等融合实现,避免显式存满 L × L L \times L L×L 矩阵。
  • FFN 对每个位置 独立 计算,不混合不同位置;GQAKV CacheKV 头数 增长,而非随 Query 头数满额增长。

🔍 实际例子 :Qwen3-8B 常见配置 d model = 4096 d_{\text{model}}=4096 dmodel=4096, N = 36 N=36 N=3632 个 Q 头 / 8 个 KV 头 。若 L = 2048 L=2048 L=2048,每层主路径张量多为 2048×4096 ;缓存里 K、V 只按 8 组 存,而不是 32 组。

下文 §3 起按模块拆开,写公式并与 Qwen 1 / Qwen 2 对照。


3. 从文本到第一层 Decoder:Tokenizer、Embedding、绑权与位置

模型不直接读字符串,只读 token ID 序列 。流程可记为:字符串 → Tokenizer → ID 序列 → Embedding 矩阵 X X X位置 不写在 X X X 上,而在后面每一层的 RoPE 里旋进 Q、K。

3.1 Tokenizer:BBPE 在做什么

直觉 :像把一句话切成一块块「乐高」;每块对应词表里一个 token ,计算机里是一个整数 ID

Qwen3 沿用 Qwen 系列的 byte-level BPE(BBPE) :先在 UTF-8 字节 上建立可合并单元,再迭代合并高频片段,减轻多语 OOV(词表外) 问题,并兼顾 压缩率(同样字数用更少 token,推理常按 token 计费)。

来源:Qwen3 Technical Report §2\] 写明词表规模为 **151,669** ,相对 Qwen2 报告中的 **151,646** **多出 23 个 token**(系列迭代中新增特殊符号等)。 > 💡 **理解要点** :词表越大,同样文本往往 **token 数越少** ,但 **Embedding 矩阵** 与(若 untied)**输出层** 的参数量随词表维 **线性变大**,是显存大户之一。 **工程注记** :你看到的 **`config.json` 里 `vocab_size`** 有时是 **151936** 等 **大于 151669 的整数** ,多为 **张量对齐 / padding** (方便 GPU 块对齐),与 Qwen2 技术报告里「分布式下嵌入行数可能大于名义词表」是同一类现象------**算参数量、建 `nn.Embedding` 行数时,以该 checkpoint 的配置为准**。 **补充阅读** :社区博文 [Qwen3 架构深度解析(Cialtion)](https://haxxorcialtion.github.io/papers/qwen3_architecture_guide.html) 对 **控制 token、ChatML 模板、动态 batch / packing** 有入门向整理;其中参数表若与官方不一致,以 **arXiv:2505.09388** 与 **`config.json`** 为准。 #### 3.2 Embedding:从 ID 到矩阵 X X X 词表大小记为 V V V(叙述 Qwen3 报告时用 **151669** ;实现上可能按 **vocab_size** 取更大嵌入表)。嵌入矩阵 E ∈ R V × d model . E \\in \\mathbb{R}\^{V \\times d_{\\text{model}}}. E∈RV×dmodel. 将 **第 w w w 行** 转置为列向量 e w = E \[ w , : \] ⊤ ∈ R d model \\mathbf{e}_w = E\[w,:\]\^\\top \\in \\mathbb{R}\^{d_{\\text{model}}} ew=E\[w,:\]⊤∈Rdmodel。长度为 L L L 的序列 ( w 0 , ... , w L − 1 ) (w_0,\\ldots,w_{L-1}) (w0,...,wL−1) 堆成 X = \[ e w 0 ⊤ ⋮ e w L − 1 ⊤ \] ∈ R L × d model . X = \\begin{bmatrix} \\mathbf{e}_{w_0}\^\\top \\\\ \\vdots \\\\ \\mathbf{e}_{w_{L-1}}\^\\top \\end{bmatrix} \\in \\mathbb{R}\^{L \\times d_{\\text{model}}}. X= ew0⊤⋮ewL−1⊤ ∈RL×dmodel. **进入第一层 Decoder 的就是 X X X** :**没有** 在 X X X 上加「正弦位置向量」(那是经典 GPT 式做法)。 #### 3.3 绑权(Weight Tying)与 Qwen 三代策略 **预测下一 token** :堆叠 N N N 层后得 H ∈ R L × d model H \\in \\mathbb{R}\^{L \\times d_{\\text{model}}} H∈RL×dmodel,取 **最后一个位置** h = H \[ L − 1 , : \] ⊤ \\mathbf{h} = H\[L-1,:\]\^\\top h=H\[L−1,:\]⊤。 * **未绑权(untied)** :单独有 W out ∈ R d model × V W_{\\text{out}} \\in \\mathbb{R}\^{d_{\\text{model}} \\times V} Wout∈Rdmodel×V, s = W out ⊤ h + b out \\mathbf{s} = W_{\\text{out}}\^\\top \\mathbf{h} + \\mathbf{b}_{\\text{out}} s=Wout⊤h+bout,再 s o f t m a x ( s ) \\mathrm{softmax}(\\mathbf{s}) softmax(s)。 * **绑权** :令 W out = E ⊤ W_{\\text{out}} = E\^\\top Wout=E⊤,则 s w = h ⊤ e w + ( b out ) w s_w = \\mathbf{h}\^\\top \\mathbf{e}_w + (b_{\\text{out}})_w sw=h⊤ew+(bout)w,**省一整块** d model × V d_{\\text{model}} \\times V dmodel×V 的输出权重。 **三代对照**(概括): * **Qwen 1** :报告明确 **untied**(大词表下换表达自由度)。 * **Qwen 2** :**小模型 tied,大模型 untied**(如 0.5B/1.5B True,7B/72B False)。 * **Qwen 3** (报告表 1):**0.6B / 1.7B / 4B → Tie Yes** ;**8B / 14B / 32B → No** ;MoE 以 **`config.json`** 为准。 #### 3.4 位置编码:经典方式 vs Qwen 系列(RoPE) **经典 Decoder-only** (如原版 GPT 叙述):在 **Embedding 之后只做一次** , I n p u t \[ p o s \] = E m b \[ p o s \] + P E ( p o s ) \\mathrm{Input}\[pos\]=\\mathrm{Emb}\[pos\]+\\mathrm{PE}(pos) Input\[pos\]=Emb\[pos\]+PE(pos),正弦形式可写为 P E ( p o s ,   2 i ) = sin ⁡ ( p o s 10000 2 i / d model ) , P E ( p o s ,   2 i + 1 ) = cos ⁡ ( p o s 10000 2 i / d model ) . \\mathrm{PE}_{(pos,\\,2i)} = \\sin\\Big(\\frac{pos}{10000\^{2i/d_{\\text{model}}}}\\Big), \\quad \\mathrm{PE}_{(pos,\\,2i+1)} = \\cos\\Big(\\frac{pos}{10000\^{2i/d_{\\text{model}}}}\\Big). PE(pos,2i)=sin(100002i/dmodelpos),PE(pos,2i+1)=cos(100002i/dmodelpos). **Qwen 1 / 2 / 3 共同点** :**不在 X X X 上加绝对 PE** ;在 **每一层** 、算 Q K ⊤ QK\^\\top QK⊤ **之前** ,对 **Q、K** 施加 **RoPE(旋转位置编码)** :让每个位置的 Q、K 向量在 d k d_k dk 维里按位置旋转,使得注意力分数 S i j S_{ij} Sij 能体现 **相对位置** (如依赖 i − j i-j i−j),利于 **外推更长序列** 。旋转 **不改变** Q , K Q,K Q,K 的形状,仍是 L × d k L \\times d_k L×dk。 **长上下文上的演进**: * **Qwen 1** :预训练上下文相对短,报告侧重 **推理期** NTK-aware RoPE、LogN、窗口等 **组合技巧**。 * **Qwen 2** :预训练 **末段拉到 32K** ,RoPE **基频** 常从 10 4 10\^4 104 调到 **10 6 10\^6 106** ,再配合 **YARN** 、**DCA** 扩到约 **128K** 量级。 * **Qwen 3** :**三阶段预训练** (见 **§7** ),长阶段 **32K** ;同样用 **ABF** 把基频抬到 **10 6 10\^6 106** ,配合 **YARN + DCA** ,报告称推理上可获得相对训练窗约 **4 倍** 的序列容量。 ##### 3.4.1 位置与注意力线性层:Qwen 1 vs 2 vs 3 | 项目 | Qwen 1 | Qwen 2 | Qwen 3 | |--------------|-------------|-------------|----------------------| | RoPE 作用于 | Q、K | Q、K | Q、K | | QKV 线性层 bias | **有** | **有** | **无** | | Q/K 额外归一化 | 无(靠 bias 等) | 无单独 QK-Norm | **QK-Norm** (**§5**) | *** ** * ** *** ### 4. RMSNorm 与 Pre-Norm:每层先归一化再进子层 **Pre-Norm** 指:**先 RMSNorm,再进注意力或 FFN,再与残差流相加**;相对 Post-Norm(先子层再 LN),深层训练往往更稳。 对单行向量 x ∈ R d model \\mathbf{x} \\in \\mathbb{R}\^{d_{\\text{model}}} x∈Rdmodel,**RMSNorm** 先算均方根尺度( ε \\varepsilon ε 防除零): R M S ( x ) = ε + 1 d model ∑ j = 1 d model x j 2 , \\mathrm{RMS}(\\mathbf{x}) = \\sqrt{\\varepsilon + \\frac{1}{d_{\\text{model}}}\\sum_{j=1}\^{d_{\\text{model}}} x_j\^2}, RMS(x)=ε+dmodel1j=1∑dmodelxj2 , 再 R M S N o r m ( x ) = x R M S ( x ) ⊙ γ , \\mathrm{RMSNorm}(\\mathbf{x}) = \\frac{\\mathbf{x}}{\\mathrm{RMS}(\\mathbf{x})} \\odot \\boldsymbol{\\gamma}, RMSNorm(x)=RMS(x)x⊙γ, 其中 γ \\boldsymbol{\\gamma} γ 为可学习缩放。**不减均值、无平移 β \\boldsymbol{\\beta} β**,比 LayerNorm 更省算。 **矩阵形式** : X ∈ R L × d model X \\in \\mathbb{R}\^{L \\times d_{\\text{model}}} X∈RL×dmodel **逐行** RMSNorm,输出仍为 **L × d model L \\times d_{\\text{model}} L×dmodel**。 > 💡 **理解要点** :RMSNorm 像「只按长度把向量拉到相似尺度,不管重心在哪」,配合 Pre-Norm,让后面的注意力与 FFN 输入分布更稳定。**Qwen 1 / 2 / 3 在这一点上是一致的。** *** ** * ** *** ### 5. 分组查询注意力(GQA):MHA、GQA、MQA 与 Qwen 三代 本节三个缩写对应的全称如下(后文仍多用缩写书写): | 缩写 | 英文全称 | 中文常称 | |---------|-----------------------------|---------| | **MHA** | **Multi-Head Attention** | 多头注意力 | | **GQA** | **Grouped-Query Attention** | 分组查询注意力 | | **MQA** | **Multi-Query Attention** | 多查询注意力 | **GQA** 作为 MHA 与 MQA 之间的折中,由 Ainslie et al.(2023)系统讨论;直观上:**MHA** 每头自有 K/V,**MQA** 全头共享一套 K/V,**GQA** 则是多组 Q 头分组共用较少的 K/V 头。 #### 5.1 为什么需要「分组」 自回归推理每一步都要缓存历史位置的 **K、V** (KV Cache)。**多头注意力** 若让每个 Query 头各自对应一套 K、V(**MHA** ),缓存随 **头数** 线性涨。**GQA** 让 **多个 Q 头共用同一组 K、V** ,在 **输出形状仍是 L × d model L \\times d_{\\text{model}} L×dmodel** 的前提下,**减少 KV 参数量与缓存体积**。 * **MHA** : h q = h kv = h h_q = h_{\\text{kv}} = h hq=hkv=h,每个 Q 头有自己的 K ( t ) , V ( t ) K\^{(t)}, V\^{(t)} K(t),V(t)。 * **GQA** : h q \> h kv h_q \> h_{\\text{kv}} hq\>hkv,常令 g = h q / h kv g = h_q / h_{\\text{kv}} g=hq/hkv 为整数;**连续 g g g 个 Q 头** 共用 **一组** K ( u ) , V ( u ) K\^{(u)}, V\^{(u)} K(u),V(u)。 * **MQA** : h kv = 1 h_{\\text{kv}}=1 hkv=1,所有 Q 头共用 **一套** K、V(最省缓存,容量最紧)。 | 项目 | MHA | GQA | |--------------|----------------------------------------------------------------|-------------------------------------------| | Q 头 / KV 头 | h q = h kv h_q = h_{\\text{kv}} hq=hkv | h q \> h kv h_q \> h_{\\text{kv}} hq\>hkv | | 约束 | d model = h q   d k d_{\\text{model}} = h_q\\, d_k dmodel=hqdk | 同左 | | 单层 Attn 输出形状 | L × d model L \\times d_{\\text{model}} L×dmodel | 同左 | | KV Cache(粗) | ∝ h q \\propto h_q ∝hq | ∝ h kv \\propto h_{\\text{kv}} ∝hkv | **Qwen 三代** :Qwen1 报告基线以 **MHA** 为主;Qwen1.5 起部分规格引入 GQA;**Qwen2 稠密全系 GQA** ;**Qwen3 稠密全系仍为 GQA** (报告表 1:如 8B 为 **32 Q / 8 KV**)。 #### 5.2 分组规则 记 t = 1 , ... , h q t = 1,\\ldots,h_q t=1,...,hq 为 Query 头下标, u = 1 , ... , h kv u = 1,\\ldots,h_{\\text{kv}} u=1,...,hkv 为 KV 组下标, g = h q / h kv g = h_q / h_{\\text{kv}} g=hq/hkv,则 u = ⌊ t − 1 g ⌋ + 1. u = \\left\\lfloor \\frac{t - 1}{g} \\right\\rfloor + 1. u=⌊gt−1⌋+1. 例如 **h q = 32 ,   h kv = 8 ,   g = 4 h_q=32,\\,h_{\\text{kv}}=8,\\,g=4 hq=32,hkv=8,g=4** :头 1--4 共用 K ( 1 ) , V ( 1 ) K\^{(1)},V\^{(1)} K(1),V(1),头 5--8 共用 K ( 2 ) , V ( 2 ) K\^{(2)},V\^{(2)} K(2),V(2),依此类推。 #### 5.3 线性投影:Qwen3 **无** QKV bias 子层入口: X \~ 1 = R M S N o r m ( X in ) \\tilde{X}_1 = \\mathrm{RMSNorm}(X_{\\text{in}}) X\~1=RMSNorm(Xin),下文简记为 X ∈ R L × d model X \\in \\mathbb{R}\^{L \\times d_{\\text{model}}} X∈RL×dmodel。 **什么叫「有 QKV bias」** :全连接 / 线性投影一般写为 **y = x W + b y = x W + b y=xW+b** 。其中 **W W W** 把 d model d_{\\text{model}} dmodel 维映到输出维;**b b b** (**bias,偏置** )是与当前输入 x x x **无关** 的可学习向量,给输出的每一维加一个**常数平移** 。若没有 bias,则 y = x W y = x W y=xW,相当于变换**必过原点** ;加上 bias 后,超平面可以**整体平移** ,表达更灵活。在注意力里,bias 会进入 Q K ⊤ QK\^\\top QK⊤ 前的 logits,相当于在「各键方向有多容易被 attend」上增加一层**与 token 内容无关的基线偏移**。 **Qwen 1 / Qwen 2** :Q、K、V 三个线性层**都带** 各自的 bias。以第 t t t 个 Q 头为例,可写成( 1 L \\mathbf{1}_L 1L 为长度 L L L 的全 1 **列** 向量, ( b Q ( t ) ) ⊤ (b_Q\^{(t)})\^\\top (bQ(t))⊤ 按行广播到 L × d k L \\times d_k L×dk 的每一行): Q ( t ) = X W Q ( t ) + 1 L ( b Q ( t ) ) ⊤ , K ( u ) = X W K ( u ) + 1 L ( b K ( u ) ) ⊤ , V ( u ) = X W V ( u ) + 1 L ( b V ( u ) ) ⊤ . Q\^{(t)} = X W_Q\^{(t)} + \\mathbf{1}_L (b_Q\^{(t)})\^\\top, \\quad K\^{(u)} = X W_K\^{(u)} + \\mathbf{1}_L (b_K\^{(u)})\^\\top, \\quad V\^{(u)} = X W_V\^{(u)} + \\mathbf{1}_L (b_V\^{(u)})\^\\top. Q(t)=XWQ(t)+1L(bQ(t))⊤,K(u)=XWK(u)+1L(bK(u))⊤,V(u)=XWV(u)+1L(bV(u))⊤. **Qwen 3** :报告写明 **remove QKV-bias** ,即**去掉** 上述三项中的 1 L b ⊤ \\mathbf{1}_L \\mathbf{b}\^\\top 1Lb⊤,只保留: Q ( t ) = X W Q ( t ) , K ( u ) = X W K ( u ) , V ( u ) = X W V ( u ) , Q\^{(t)} = X W_Q\^{(t)}, \\quad K\^{(u)} = X W_K\^{(u)}, \\quad V\^{(u)} = X W_V\^{(u)}, Q(t)=XWQ(t),K(u)=XWK(u),V(u)=XWV(u), 其中 Q ( t ) ∈ R L × d k Q\^{(t)} \\in \\mathbb{R}\^{L \\times d_k} Q(t)∈RL×dk, K ( u ) , V ( u ) ∈ R L × d k K\^{(u)}, V\^{(u)} \\in \\mathbb{R}\^{L \\times d_k} K(u),V(u)∈RL×dk。 #### 5.4 RoPE 与 QK-Norm 的顺序(Qwen3 关键) 对 Q ( t ) Q\^{(t)} Q(t)、 K ( u ) K\^{(u)} K(u) 的 **每一行** (每个位置)在 d k d_k dk 维内做 **RoPE** ;**形状不变**。 随后在算点积 **之前** 做 **QK-Norm** (常用 **RMSNorm** ,作用在 **每个 head 的 d k d_k dk 维** 上): Q \~ ( t ) = N o r m ( Q ( t ) ) , K \~ ( u ) = N o r m ( K ( u ) ) , S ( t ) = Q \~ ( t ) ( K \~ ( u ) ) ⊤ d k ∈ R L × L . \\tilde{Q}\^{(t)} = \\mathrm{Norm}\\big(Q\^{(t)}\\big), \\quad \\tilde{K}\^{(u)} = \\mathrm{Norm}\\big(K\^{(u)}\\big), \\quad S\^{(t)} = \\frac{\\tilde{Q}\^{(t)} (\\tilde{K}\^{(u)})\^\\top}{\\sqrt{d_k}} \\in \\mathbb{R}\^{L \\times L}. Q\~(t)=Norm(Q(t)),K\~(u)=Norm(K(u)),S(t)=dk Q\~(t)(K\~(u))⊤∈RL×L. > 💡 **直觉** :去掉 bias 后,深层里 Q、K 范数容易漂,点积 logits 会过大或过小;**在 head 维上把 Q、K 拉回稳定尺度** ,Softmax 更不容易塌成 one-hot 或过于均匀。**V 通常不做与 Q、K 对称的 QK-Norm**(以官方实现为准)。 **实现顺序** (Hugging Face `transformers` 中 **Qwen3** ):**线性 → RoPE → `q_norm` / `k_norm` → Q K ⊤ / d k QK\^\\top/\\sqrt{d_k} QK⊤/dk** 。这与「先 Norm 再 RoPE」在数值上 **不等价**,移植代码时要对齐顺序。 **与 Qwen 2 对比** :Qwen2 **无** 这一显式 QK-Norm,而用 **QKV bias** 等稳定训练;Qwen3 **去掉 bias** ,用 **QK-Norm** 接棒。 #### 5.5 因果掩码、Softmax、输出头 W O W_O WO 对 S ( t ) S\^{(t)} S(t) 加上 **因果掩码** (位置 i i i 不能看 j \> i j\>i j\>i,上三角为 − ∞ -\\infty −∞),行内 **softmax** 得 A ( t ) A\^{(t)} A(t),再 h e a d ( t ) = A ( t ) V ( u ) ∈ R L × d k . \\mathrm{head}\^{(t)} = A\^{(t)} V\^{(u)} \\in \\mathbb{R}\^{L \\times d_k}. head(t)=A(t)V(u)∈RL×dk. 拼接与输出投影: C o n c a t = \[ h e a d ( 1 )   ∥   ⋯   ∥   h e a d ( h q ) \] ∈ R L × d model , A t t n O u t = C o n c a t   W O , W O ∈ R d model × d model . \\mathrm{Concat} = \\big\[\\mathrm{head}\^{(1)} \\,\\\|\\, \\cdots \\,\\\|\\, \\mathrm{head}\^{(h_q)}\\big\] \\in \\mathbb{R}\^{L \\times d_{\\text{model}}}, \\quad \\mathrm{AttnOut} = \\mathrm{Concat}\\, W_O, \\quad W_O \\in \\mathbb{R}\^{d_{\\text{model}} \\times d_{\\text{model}}}. Concat=\[head(1)∥⋯∥head(hq)\]∈RL×dmodel,AttnOut=ConcatWO,WO∈Rdmodel×dmodel. 残差: X mid = X in + A t t n O u t X_{\\text{mid}} = X_{\\text{in}} + \\mathrm{AttnOut} Xmid=Xin+AttnOut。 训练/推理可用 **Flash Attention** 在 **不显式存满 L × L L \\times L L×L** 的情况下等价完成上述计算。 #### 5.6 注意力子层维度小结(Qwen3) | 步骤 | 张量 | 形状 | |----------------------------|-----------------------------------------------|--------------------------------------------------------| | Pre-Norm 后 | X X X | L × d model L \\times d_{\\text{model}} L×dmodel | | 每 Q 头(RoPE + QK-Norm 后仍同形) | Q ( t ) Q\^{(t)} Q(t) 等 | L × d k L \\times d_k L×dk,共 h q h_q hq 份 | | 每 K/V 组 | K ( u ) , V ( u ) K\^{(u)},V\^{(u)} K(u),V(u) | L × d k L \\times d_k L×dk,共 h kv h_{\\text{kv}} hkv 份 | | 每头分数 | S ( t ) S\^{(t)} S(t) | L × L L \\times L L×L | | 子层输出 | A t t n O u t \\mathrm{AttnOut} AttnOut | L × d model L \\times d_{\\text{model}} L×dmodel | *** ** * ** *** ### 6. 前馈网络:SwiGLU(Qwen 1 / 2 / 3 同型,宽度按代际变) 第二子层: X \~ 2 = R M S N o r m ( X mid ) \\tilde{X}_2 = \\mathrm{RMSNorm}(X_{\\text{mid}}) X\~2=RMSNorm(Xmid),再 **SwiGLU FFN** ,最后残差 X out = X mid + F F N O u t X_{\\text{out}} = X_{\\text{mid}} + \\mathrm{FFNOut} Xout=Xmid+FFNOut。 **SwiGLU** 形式(与 LLaMA / Qwen2 同族): S w i G L U ( X \~ ) = ( σ swish ( X \~ W 1 ) ⊙ ( X \~ W 3 ) ) W 2 , \\mathrm{SwiGLU}(\\tilde{X}) = \\big(\\sigma_{\\text{swish}}(\\tilde{X} W_1) \\odot (\\tilde{X} W_3)\\big) W_2, SwiGLU(X\~)=(σswish(X\~W1)⊙(X\~W3))W2, 其中 σ swish ( z ) = z ⋅ σ ( z ) \\sigma_{\\text{swish}}(z)=z\\cdot\\sigma(z) σswish(z)=z⋅σ(z), ⊙ \\odot ⊙ 为逐元素乘; W 1 , W 3 ∈ R d model × d ff W_1,W_3 \\in \\mathbb{R}\^{d_{\\text{model}} \\times d_{\\text{ff}}} W1,W3∈Rdmodel×dff, W 2 ∈ R d ff × d model W_2 \\in \\mathbb{R}\^{d_{\\text{ff}} \\times d_{\\text{model}}} W2∈Rdff×dmodel, d ff d_{\\text{ff}} dff 为 **intermediate_size**。 **三代中间维对照**: * **Qwen 1** (报告):常写 **d ff = 8 3 d model d_{\\text{ff}} = \\frac{8}{3} d_{\\text{model}} dff=38dmodel** (约 2.67 d 2.67d 2.67d),与 LLaMA 常见 **4 d 4d 4d** 不同。 * **Qwen 2 / Qwen 3** :**不再** 用单一比例概括,**各尺寸以配置表 / `config.json` 为准** (例如公开 **Qwen3-8B** 的 `intermediate_size` 为 **12288** ,约 3 d 3d 3d 当 d = 4096 d=4096 d=4096)。 > 🔍 **数值例子(Qwen3-8B,HF `config.json`)** : d model = 4096 d_{\\text{model}}=4096 dmodel=4096, d ff = 12288 d_{\\text{ff}}=12288 dff=12288,36 层;单序列 L = 4096 L=4096 L=4096 时每层主路径 **4096 × 4096 4096 \\times 4096 4096×4096**。 *** ** * ** *** ### 7. 长上下文:Qwen3 的三阶段预训练与 YARN、DCA #### 7.1 三阶段在做什么(报告 §3.2) 1. **General(S1)** :约 **30T+** tokens,序列长度 **4,096**------广谱学语言与世界知识。 2. **Reasoning(S2)** :约 **5T** 高质量数据(STEM、代码、推理、合成数据比例升高),仍 **4,096** ,并 **加快学习率衰减**------强化推理相关分布。 3. **Long Context** :**数百 B** tokens,序列 **32,768** ;长文样本约 **75%** 落在 **16K~32K** ,**25%** 在 **4K~16K** ------让优化目标直接覆盖 **万级 token 的因果依赖**。 **与 Qwen 1 对比** :Qwen1 长文多靠 **推理期技巧** 「补」上去;Qwen2/Qwen3 把 **32K 级长阶段训练**写进主线,根分布就更「见过长距离」。 #### 7.2 RoPE 基频 ABF( 10 4 → 10 6 10\^4 \\to 10\^6 104→106) RoPE 用一组与维度相关的频率决定「转多快」。把 **底数 / base frequency** 从常见的 **10 4 10\^4 104** 提到 **10 6 10\^6 106** (报告称 **ABF** 路径),相邻 token 在多数频率上相位差更小,**极长距离** 上相对位置仍可比区分,减轻「超出训练长度后位置编码失效」一类问题。**Qwen 2 与 Qwen 3 的长线叙述都包含这一取向**。 #### 7.3 YARN:给注意力做「随长度缩放」的外推修正 **YARN** (YaRN;Peng et al., 2023)在需要 **超过训练所见长度** 或平滑拉长有效窗口时,对注意力里的 **权重 / logits 尺度** 做 **与目标长度相关的重缩放** ,缓解外推时注意力过度集中或涣散。报告表述为 *rescaling the attention weights for better length extrapolation* 。它属于 **前向路径上的修改** ,可与 **换数据再训** 正交使用。 #### 7.4 DCA:分块利用「块内 + 块间」关系 **Dual Chunk Attention(DCA)** (An et al., 2024)把超长序列划成多个 **chunk**: * 若 **整条序列能放进一个 chunk** ,DCA **与标准全序列自注意力结果相同**(便于兼容短上下文行为)。 * 若 **超过单块容量** ,则在 **块内** 保持常规 token--token 注意力,并 **额外** 利用 **跨 chunk** 的相对位置信息,减轻 **块边界** 上的信息断裂。 **与 YARN 分工** :**DCA** 偏 **结构上分块 + 位置关系** ;**YARN** 偏 **注意力尺度上的外推修正**。二者可与 GQA、RoPE、QK-Norm 同栈。 #### 7.5 Qwen3 报告中的组合效果 在长阶段 **32K** 训练基础上,配合 **ABF、YARN、DCA** ,报告称推理时可获得相对训练窗口约 **four-fold** 的序列容量(机制上限;产品默认上下文仍以各型号说明与推理框架为准)。 *** ** * ** *** ### 8. 单层数据流汇总(Qwen3 稠密) 1. X \~ 1 = R M S N o r m ( X in ) \\tilde{X}_1 = \\mathrm{RMSNorm}(X_{\\text{in}}) X\~1=RMSNorm(Xin) 2. 线性投影得 Q ( t ) Q\^{(t)} Q(t)、 K ( u ) K\^{(u)} K(u)、 V ( u ) V\^{(u)} V(u)(**无 bias**) 3. 对 Q、K 做 **RoPE** ,再做 **QK-Norm** 得 Q \~ ( t ) \\tilde{Q}\^{(t)} Q\~(t)、 K \~ ( u ) \\tilde{K}\^{(u)} K\~(u) 4. 因果 GQA: S ( t ) = Q \~ ( t ) ( K \~ ( u ) ) ⊤ / d k S\^{(t)}=\\tilde{Q}\^{(t)}(\\tilde{K}\^{(u)})\^\\top/\\sqrt{d_k} S(t)=Q\~(t)(K\~(u))⊤/dk → mask → softmax → 乘 V ( u ) V\^{(u)} V(u) → 拼接 → W O W_O WO 5. X mid = X in + A t t n O u t X_{\\text{mid}} = X_{\\text{in}} + \\mathrm{AttnOut} Xmid=Xin+AttnOut 6. X \~ 2 = R M S N o r m ( X mid ) \\tilde{X}_2 = \\mathrm{RMSNorm}(X_{\\text{mid}}) X\~2=RMSNorm(Xmid) 7. F F N O u t = S w i G L U ( X \~ 2 ) \\mathrm{FFNOut} = \\mathrm{SwiGLU}(\\tilde{X}_2) FFNOut=SwiGLU(X\~2) 8. X out = X mid + F F N O u t X_{\\text{out}} = X_{\\text{mid}} + \\mathrm{FFNOut} Xout=Xmid+FFNOut 主路径形状恒为 **L × d model L \\times d_{\\text{model}} L×dmodel**。 #### 8.1 稠密规格速查(报告表 1) | 模型 | Layers | Heads (Q / KV) | Tie Embedding | Context Length | |------------|--------|----------------|---------------|----------------| | Qwen3-0.6B | 28 | 16 / 8 | Yes | 32K | | Qwen3-1.7B | 28 | 16 / 8 | Yes | 32K | | Qwen3-4B | 36 | 32 / 8 | Yes | 128K | | Qwen3-8B | 36 | 32 / 8 | No | 128K | | Qwen3-14B | 40 | 40 / 8 | No | 128K | | Qwen3-32B | 64 | 64 / 8 | No | 128K | *** ** * ** *** ### 9. MoE:仅替换 FFN;Qwen3 相对 Qwen2 的路由差异 **MoE 层只替换每个 Decoder 块里的 FFN** ;**注意力子层** (GQA、RoPE、QK-Norm、无 QKV bias)与稠密 **同型**。 #### 9.1 门控与 top- k k k(与 Qwen2 数学骨架相同) 单 token 向量 x ∈ R d model x \\in \\mathbb{R}\^{d_{\\text{model}}} x∈Rdmodel(批上即 L × d model L \\times d_{\\text{model}} L×dmodel 逐行)。门控网络输出 logits ℓ = G ( x ) \\boldsymbol{\\ell} = G(x) ℓ=G(x), p = s o f t m a x ( ℓ ) p = \\mathrm{softmax}(\\boldsymbol{\\ell}) p=softmax(ℓ)。设共有 n n n 个 **路由专家** R i R_i Ri(结构与 SwiGLU FFN 同类),**top- k k k** 选指数集合 t o p k ( p ) \\mathrm{topk}(p) topk(p),则路由支路常写为 y route = ∑ i   ∈   t o p k ( p ) p i   R i ( x ) . y_{\\text{route}} = \\sum_{i\\,\\in\\,\\mathrm{topk}(p)} p_i\\, R_i(x). yroute=i∈topk(p)∑piRi(x). (具体是否对 top- k k k 内 p i p_i pi 再归一化,以 **官方实现** 为准。) #### 9.2 Qwen2 MoE vs Qwen3 MoE(报告) | 项目 | Qwen2-57B-A14B(典型叙述) | Qwen3 MoE(报告) | |--------------------|--------------------------------|--------------------------------------| | 路由专家数 / 每 token 激活 | 64,**top-8** | **128** ,**top-8** | | 共享专家 | **有**(如 8 个 shared,每 token 必算) | **无** | | 负载均衡 | 报告未细述 | **global-batch load balancing loss** | **去掉共享专家** 后,一层 MoE FFN 输出可 **仅** 由路由支路组成: y = ∑ i   ∈   t o p k ( p ) p i   R i ( x ) . y = \\sum_{i\\,\\in\\,\\mathrm{topk}(p)} p_i\\, R_i(x). y=i∈topk(p)∑piRi(x). #### 9.3 MoE 规格(报告表 2) | 模型 | Layers | Heads (Q / KV) | # Experts (Total / Activated) | Context Length | |-----------------|--------|----------------|-------------------------------|----------------| | Qwen3-30B-A3B | 48 | 32 / 4 | 128 / 8 | 128K | | Qwen3-235B-A22B | 94 | 64 / 4 | 128 / 8 | 128K | **命名** :**30B-A3B** = 总参约 30B,**每 token 激活约 3B** ;**235B-A22B** 同理。 *** ** * ** *** ### 10. 输出层(LM Head) 堆叠 N N N 层后 H ∈ R L × d model H \\in \\mathbb{R}\^{L \\times d_{\\text{model}}} H∈RL×dmodel,自回归取 h = H \[ L − 1 , : \] ⊤ \\mathbf{h} = H\[L-1,:\]\^\\top h=H\[L−1,:\]⊤。 * **untied** : s = W out ⊤ h + b out \\mathbf{s} = W_{\\text{out}}\^\\top \\mathbf{h} + \\mathbf{b}_{\\text{out}} s=Wout⊤h+bout, P = s o f t m a x ( s ) P=\\mathrm{softmax}(\\mathbf{s}) P=softmax(s)。 * **tied** : W out = E ⊤ W_{\\text{out}}=E\^\\top Wout=E⊤, s w = h ⊤ e w + ( b out ) w s_w = \\mathbf{h}\^\\top \\mathbf{e}_w + (b_{\\text{out}})_w sw=h⊤ew+(bout)w。 MoE **不改变** LM Head 形状;词表维 V V V 以报告 **151669** 与实现 **`vocab_size`** 共同为准。 *** ** * ** *** ### 11. 思考模式、非思考模式与思考预算(后训练与模板) **不改变** 上文任何矩阵维数:同一套权重可通过 **SFT / RL** 与 **chat template** 学会:有时先输出长 **思维链** ,有时直接答;用户可用 **`/think`、`/no_think`** 等开关(默认与细节见报告表 9 与 [tokenizer_config 示例](https://huggingface.co/Qwen/Qwen3-32B/blob/main/tokenizer_config.json))。 **思考预算** :思考 token 达到阈值时可插入提示,让模型结束思考段、续写最终答案;报告称部分能力来自 **融合训练后的涌现**,未必单独设计 loss。 **强到弱蒸馏** :小模型可用旗舰 **logits 蒸馏** ,报告给出约 **1/10 GPU hours** 量级的经验节省。 **与 Qwen 1 / 2 对比** :Qwen1/2 后训练以 **SFT、DPO** 等为主叙述;Qwen3 额外强调 **thinking + non-thinking 统一** 与 **预算** 、**蒸馏流水线**。 *** ** * ** *** ### 12. 总览:Qwen 1 / Qwen 2 / Qwen 3 架构对照表 | 维度 | Qwen 1 | Qwen 2 | Qwen 3 | |-------------|-------------------------------------------|------------------------------------------|--------------------------------------| | 骨干 | Decoder-only,Pre-Norm,RMSNorm,RoPE,SwiGLU | 同左 | 同左 | | 稠密注意力 | 报告基线 **MHA** | **全系 GQA** | **全系 GQA** | | QKV bias | **有** | **有** | **无** | | Q/K 稳定化 | bias + RoPE 等 | 同左 | **QK-Norm**(RoPE 后、点积前) | | FFN 中间维 | 报告常 **8 3 d \\frac{8}{3}d 38d** | 表列 **Intermediate Size** | 同 Qwen2(按配置) | | 词表(报告) | \~152K | **151,646** | **151,669** | | Embedding | **untied**(报告) | 小 tied / 大 untied | 小多款 **tied** ,8B+ 多 **untied**(表 1) | | 长上下文 | 推理技巧 + 1.5 产品 32K 等 | **训练 32K** + 10 6 10\^6 106 + YARN + DCA | **三阶段** + 长阶段 32K + ABF + YARN + DCA | | MoE | --- | 共享专家 + 路由,64/8 等 | **128/8** ,**无共享专家**,global-batch 均衡 | | 预训练规模(报告量级) | 较低代数据量 | \~7T 量级 | **\~36T** | | 对齐亮点 | --- | SFT + DPO 等 | **思考/非思考统一 + 预算 + 蒸馏** | *** ** * ** *** ### 13. 各环节参数量(粗算思路,与 Qwen 1 / 2 一致) 记 d = d model d = d_{\\text{model}} d=dmodel, N N N 为层数, V V V 为嵌入行数(实现上可能等于 `vocab_size`)。 | 模块 | 数量级要点 | |------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Embedding | V ⋅ d V \\cdot d V⋅d;若 **untied** ,另加约 d ⋅ V d \\cdot V d⋅V 的 W out W_{\\text{out}} Wout | | 每层注意力 | W Q W_Q WQ 约 d × ( h q d k ) d \\times (h_q d_k) d×(hqdk); W K , W V W_K,W_V WK,WV 各 d × ( h kv d k ) d \\times (h_{\\text{kv}} d_k) d×(hkvdk); W O W_O WO 约 d × d d \\times d d×d;Qwen3 **无** QKV bias 的三项小向量 | | 每层 RMSNorm | 子层前各一处 γ \\boldsymbol{\\gamma} γ,约 **2 d 2d 2d** / 层(Pre-Norm 两处) | | 每层 SwiGLU | 约 **4   d   d ff 4\\, d\\, d_{\\text{ff}} 4ddff** 量级(两路上升 + 一下降) | | MoE | 总参随专家数累加;**每 token 激活** 只算 top- k k k 个专家(+ Qwen2 若有 shared 则再加共享支路) | *** ** * ** *** ### 14. 参考文献与链接汇总 | 主题 | 链接 | |-----------------------------|----------------------------------------------------------------------------------| | Qwen3 Technical Report | https://arxiv.org/pdf/2505.09388 | | Qwen2 Technical Report | https://arxiv.org/pdf/2407.10671 | | Qwen(Qwen1)Technical Report | https://arxiv.org/pdf/2309.16609 | | 同系列:Qwen 1 / Qwen 1.5 | https://blog.csdn.net/zyctimes/article/details/159692526 | | 同系列:Qwen 2 | https://blog.csdn.net/zyctimes/article/details/159762115?spm=1001.2014.3001.5501 | | Decoder Only Transformer | https://blog.csdn.net/zyctimes/article/details/158771582?spm=1001.2014.3001.5501 | | LLaMA 架构 | https://blog.csdn.net/zyctimes/article/details/158923114?spm=1001.2014.3001.5501 | | DeepWiki:Qwen3 核心概念 | https://deepwiki.com/QwenLM/Qwen3/3-model-architecture-and-core-concepts | | 社区导读(Cialtion) | https://haxxorcialtion.github.io/papers/qwen3_architecture_guide.html | | Qwen3 从零实现(Ahead of AI;付费) | https://magazine.sebastianraschka.com/p/qwen3-from-scratch |

相关推荐
Alvin千里无风5 小时前
在 Ubuntu 上从源码安装 Nanobot:轻量级 AI 助手完整指南
linux·人工智能·ubuntu
环黄金线HHJX.5 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
Omics Pro5 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
悦来客栈的老板5 小时前
AI逆向|猿人学逆向反混淆练习平台第七题加密分析
人工智能
KOYUELEC光与电子努力加油5 小时前
JAE日本航空端子推出支持自走式机器人的自主充电功能浮动式连接器“DW15系列“方案与应用
服务器·人工智能·机器人·无人机
萤火阳光6 小时前
13|自定义 Skill 创作:打造专属自动化利器
人工智能
我哪会这个啊6 小时前
SpringAlibaba Ai基础入门
人工智能
掘根6 小时前
【微服务即时通讯项目】系统联调
微服务·云原生·架构
tianbaolc6 小时前
Claude Code 源码剖析 模块一 · 第六节:autoDream 自动记忆整合
人工智能·ai·架构·claude code
蓝色的杯子7 小时前
从 LLM 到 Agent Skill,龙虾的技术基础 · ② Token
人工智能