作者: Sebastian Raschka (MEAP V01, 2025)
页数: 94 (早期版本, Ch1-2 + 附录)
对应课程: course_B W1-4 (推理模型与优化)
难度: ★★★ (L3 进阶)
> 这是第一本书的"续集" — 讲的是LLM的下一个前沿: 推理模型
对应 StarTalent 架构 Layer 3 (Intelligence Engine) 和 Layer 4 (Course Generator) 的推理需求
不修改模型权重,只在生成时花更多计算量。
| 技术 | 描述 | 复杂度 |
|------|------|--------|
| Chain-of-Thought (CoT) | 提示词加"Let's think step by step" | ★☆☆ |
| Self-Consistency | 多次采样 + 投票选最佳 | ★★☆ |
| Tree-of-Thoughts | 搜索多条推理路径 | ★★★ |
| CoT-SC (Self-Consistency) | CoT + 投票 | ★★☆ |
更新模型权重,用奖励信号训练推理能力。DeepSeek-R1 使用的方案。
用强推理模型 (如 o1/R1) 生成训练数据 → 微调小模型。
> L4/StarTalent 映射: 推理模型生成的课程大纲质量远高于普通 LLM——这是 StarTalent Engine 的核心竞争力
对本地 Qwen3.5-9B 推理的直接优化。
问题: GPT 每生成一个 token 都要重新计算所有之前 token 的 K 和 V
解决: 把之前算好的 K 和 V 缓存起来,避免重复计算
class KVCache:
"""键值缓存—推理加速的核心"""
def __init__(self):
self.cache = {} # {layer_id: (keys, values)}
def get(self, layer_id):
return self.cache.get(layer_id)
def update(self, layer_id, keys, values):
if layer_id in self.cache:
old_k, old_v = self.cache[layer_id]
self.cache[layer_id] = (torch.cat([old_k, keys], dim=2),
torch.cat([old_v, values], dim=2))
else:
self.cache[layer_id] = (keys, values)
加速效果: 生成 1000 tokens 时 → 从 O(n²) 降到 O(n),约 5-10x 加速
本书附录 C 包含完整的 Qwen3 LLM 源码——这是极其难得的资源,因为 Qwen 的官方实现通常分散在 HuggingFace transformers 中。
| 组件 | 位置 | 技术点 | 与本地Qwen3.5-9B的关系 |
|------|------|--------|---------------------|
| RMSNorm | C.1 | 简化 LayerNorm,去均值 | Qwen3.5 使用的标准化方法 |
| FeedForward | C.2 | SwiGLU 激活 (GPT 的 GELU 进化版) | 我们的模型使用这个 |
| RoPE | C.3 | 旋转位置编码 (绝对位置编码的替代) | 支持长上下文 (8192) 的关键 |
| GQA | C.4 | 分组查询注意力 (标准多头注意力的优化) | 推理速度更快,内存更少 |
| TransformerBlock | C.5 | Pre-RMSNorm + Attention + FFN | 和我们 Ch4 实现的区别 |
| KV Cache | C.7 | 推理时缓存 K 和 V | 我们正在使用的加速技术 |
核心架构对比:
| 组件 | GPT-2 (124M) | GPT-3 (175B) | Qwen3.5-9B |
|------|-------------|-------------|-----------|
| 归一化 | Post-LayerNorm | Pre-LayerNorm | Pre-RMSNorm |
| 激活 | GELU | GELU | SwiGLU |
| 位置编码 | 可学习绝对 | 可学习绝对 | RoPE |
| 注意力 | 多头 (MHA) | 多头 (MHA) | 分组查询 (GQA) |
| 词表大小 | 50,257 | ~100k | 152,064 |
| StarTalent 组件 | 需要推理能力的地方 | 实现方式 |
|----------------|-----------------|---------|
| Layer 3: LLM Insight Pipeline | 从 1043 条 JD 提取技能/痛点/趋势 | CoT + 结构化输出 |
| Layer 4: Course Generator | 从分析表生成课程大纲 | 推理 + 多步规划 |
| Layer 4: Market Report | 六维市场分析报告 | 推理 + Self-Consistency |
| Layer 5: Auto-Loop | 判断何时扩展新领域 | Tree-of-Thoughts |
| Governance Engine | 数据合规检查、偏见检测 | CoT + 确定性规则 |
> 实战价值: 把推理技术应用到 StarTalent 的课程生成管道中——让大纲质量从"LLM 写作"升级到"LLM 推理"
# 在你的本地 Qwen3.5-9B 上测试推理能力
import httpx, json
client = httpx.Client(base_url="http://localhost:8080/v1", timeout=60)
model = "Qwen3.5-9B-Q4_K_M.gguf"
# 测试: 标准回答 vs CoT 回答
prompt = "一个水池有一个进水管和一个出水管。单独开进水管5小时灌满,单独开出水管8小时排空。如果同时开两个管,多久能灌满?"
r1 = client.post("/chat/completions", json={
"model": model,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.3, "max_tokens": 512
})
print("=== 标准回答 ===")
print(r1.json()["choices"][0]["message"]["content"][:300])# CoT 提示词
r2 = client.post("/chat/completions", json={
"model": model,
"messages": [{"role": "user", "content": prompt + "\n请一步步推理,最后给出答案。"}],
"temperature": 0.3, "max_tokens": 1024
})
print("=== CoT 回答 ===")
print(r2.json()["choices"][0]["message"]["content"])| 知识源 | 核心内容 | StarTalent 课程输出 |
|-------|---------|------------------|
| 书1: Build LLM from Scratch | 从零搭建 GPT (分词→注意力→训练→微调) | 模块一: AI 模型基础 (理解你在治理什么) |
| 书2: Build Reasoning Model | 推理 + KV Cache + Qwen3 源码 | 模块三: 推理优化与模型部署 |
| L4 治理体系 (M4.1) | 算法备案、模型审计 | 模块二: AI 治理与合规 |
| L4 数据合规 (M4.2) | 个保法、PIA、数据脱敏 | 模块二: 数据合规实战 |
| StarTalent 架构 | 5 层 SaaS + 治理贯穿 | 模块四: SaaS 产品设计与部署 |
| 产品经理大纲 | 市场分析、技能图谱 | 模块五: AI 产品管理与市场 |
> 下一步: 打开 12_StarTalent_Architecture.ipynb 理解完整的 SaaS 系统架构和部署方案