《动手学大模型》:上海交通大学31.5K Stars的LLM编程实践教程——微调/提示工程/知识编辑/RLHF全覆盖
posts posts 2026-04-16T01:30:00+08:00dive-into-llms是上海交通大学出品的31.5K Stars大模型教程,涵盖微调部署、提示学习、思维链、知识编辑、数学推理、文本水印、越狱攻击、隐写术、多模态、GUI Agent、RLHF对齐等11大主题。技术笔记大模型, LLM, 上海交通大学, 微调, RLHF《动手学大模型》:上海交通大学31.5K Stars的LLM编程实践教程——微调/提示工程/知识编辑/RLHF全覆盖
目标读者:大模型研究者、研究生、开发者、对 LLM 感兴趣的任何人 预计阅读时间:50-70分钟 前置知识:Python 基础、了解深度学习基本概念 难度定位:⭐⭐⭐⭐ 专家设计
§1 学习目标
完成本篇文章后,你将能够:
- 理解大模型核心概念:预训练、微调、RLHF、提示工程
- 掌握 11 个关键主题:从微调到 GUI Agent 的完整知识图谱
- 独立完成实验:每个主题都有 Jupyter Notebook 实战代码
- 了解前沿研究:知识编辑、模型水印、越狱攻击等新兴领域
- 使用国产化流程:华为昇腾《大模型开发全流程》指南
§2 项目概览
2.1 基本信息
| 属性 | 值 |
|---|---|
| Stars | 30,348 ⭐ |
| 类型 | 编程实践教程(Jupyter Notebook) |
| 来源 | 上海交通大学《自然语言处理前沿技术》(NIS8021)、《人工智能安全技术》(NIS3353) |
| 教师 | 张倬胜 |
| 语言 | 中文 |
2.2 教程特色
为什么选择这个教程:
| 特色 | 说明 |
|---|---|
| 免费公益 | 完全免费,不收取任何费用 |
| 编程优先 | 每个主题都有可运行的代码 |
| 课程配套 | 源自上交大真实课程 |
| 持续更新 | 2025年6月新增数学推理、GUI Agent等 |
| 国产支持 | 联合华为昇腾推出《大模型开发全流程》 |
2.3 核心作者团队
《动手学大模型》系列:
| 作者 | 角色 |
|---|---|
| 张倬胜 | 课程教师 |
| 袁童鑫 (Lordog) | 主要贡献者 |
| 马欣贝 | 核心贡献者 |
| 何志威 | 核心贡献者 |
| 杜巍 | 核心贡献者 |
| 赵皓东 | 核心贡献者 |
| 吴宗儒 | 核心贡献者 |
| 吴铮 | 核心贡献者 |
| 董凌众 | 核心贡献者 |
| 张玉龙 | 核心贡献者 |
| 费豪 (NUS) | 新加坡国立大学 |
§3 教程内容详解
3.1 完整课程地图
| # | 主题 | 简介 | 代码 |
|---|---|---|---|
| 1 | 微调与部署 | 预训练模型微调与部署指南 | dive-tuning.ipynb |
| 2 | 提示学习与思维链 | API调用与推理指南 | dive-prompting.ipynb |
| 3 | 知识编辑 | 操控模型对特定知识的记忆 | dive_edit.ipynb |
| 4 | 数学推理 | 蒸馏迷你 R1 模型 | sft_math.ipynb |
| 5 | 模型水印 | 文本水印嵌入技术 | watermark.ipynb |
| 6 | 越狱攻击 | 理解并防范越狱攻击 | dive-jailbreak.ipynb |
| 7 | 大模型隐写 | 隐写术:隐藏信息传输 | llm_stega.ipynb |
| 8 | 多模态模型 | MLLM 与 AGI 探索 | mllms.ipynb |
| 9 | GUI 智能体 | AI Agent 点外卖/购物比价 | GUIagent.ipynb |
| 10 | 智能体安全 | 开放场景中的风险威胁 | agent.ipynb |
| 11 | RLHF 安全对齐 | PPO 训练与对齐实验 | RLHF.ipynb |
§4 主题一:微调与部署
4.1 什么是微调
微调(Fine-tuning)是在预训练模型基础上,用特定任务数据进一步训练:
预训练阶段:海量通用文本 → 学会语言规律
↓
微调阶段:特定任务数据 → 适应特定任务4.2 微调技术路线
| 技术 | 说明 | 适用场景 |
|---|---|---|
| Full Fine-tuning | 更新所有参数 | 数据充足 |
| LoRA | 低秩适配器 | 资源有限 |
| QLoRA | 量化 + LoRA | 极度资源有限 |
| Prefix Tuning | 添加可学习前缀 | 少参数 |
4.3 部署选项
# 使用 vLLM 部署
from vllm import LLM
llm = LLM(model="meta-llama/Llama-2-7b")
output = llm.generate("Hello, world!")4.4 实战内容
dive-tuning.ipynb 涵盖:
- 数据准备与预处理
- LoRA/QLora 配置
- 训练监控
- 模型导出与 vLLM 部署
§5 主题二:提示学习与思维链
5.1 提示工程的核心
“AI在线求鼓励?大模型对一些问题的回答令人大跌眼镜,但它可能只是想要一句「鼓励」”
5.2 基础提示技巧
# 基础提示
response = llm.generate("What is 2+2?")
# 带示例的提示(Few-shot)
prompt = """
Example: 2+2 = 4
Question: 3+3 = ?
Answer:"5.3 思维链(Chain of Thought)
核心思想:让模型"思考"再给出答案
# 标准提示
Q: 小明有5个苹果,丢了2个,又买了3个,现在有几个?
A: 6个 # 错误
# 思维链提示
Q: 小明有5个苹果,丢了2个,又买了3个,现在有几个?
A: 5-2=3,3+3=6,所以是6个。答案是6个。 # 正确5.4 进阶技巧
| 技巧 | 示例 |
|---|---|
| 角色提示 | “你是一位资深数学老师…” |
| 格式约束 | “请用JSON格式输出…” |
| 链式验证 | “先分析,再总结,最后给出答案” |
§6 主题三:知识编辑
6.1 问题背景
大模型可能包含错误或过时知识:
问题:2022年之前的训练数据 → 模型不知道2023年的事件
解决方案:知识编辑(Knowledge Editing)6.2 编辑方法分类
| 方法 | 代表工作 | 说明 |
|---|---|---|
| 元学习 | MEND | 学习如何编辑 |
| 定位+修改 | ROME | 定位知识位置并修改 |
| 额外参数 | T-Parser | 添加可编辑模块 |
| 混合方法 | KEPLER | 结合多种策略 |
6.3 评估指标
# 知识编辑的三个维度
metrics = {
"fluency": "编辑后文本是否流畅",
"proximity": "编辑后与原文的相似度",
"specificity": "是否精准修改目标知识"
}§7 主题四:数学推理
7.1 大模型数学能力
大模型在数学推理上通常表现不佳,需要特殊技术来提升。
7.2 蒸馏 Mini R1
教程提供"蒸馏"思路——将 o1/o3 的推理能力迁移到小模型:
# 数学推理训练数据格式
{
"question": "求1+2+...+100的和",
"reasoning": "使用等差数列求和公式...",
"answer": "5050"
}7.3 强化学习训练
# PPO 训练循环
for episode in range(1000):
response = model.generate(prompt)
reward = compute_math_reward(response)
model.update(reward) # PPO 更新§8 主题五:模型水印
8.1 什么是文本水印
文本水印(Text Watermark)是在 AI 生成的文本中嵌入人类不可见的统计水印,用于证明文本由某模型生成。
Gumbel Watermark 原理:基于词汇表分组(Green/Red List)的统计方法:
原理:
1. 用密钥(key)将词汇表分成"绿色列表"和"红色列表"
2. 生成文本时,模型优先从绿色列表选择词汇
3. 检测时,分析文本中绿色词汇的比例是否显著高于随机概率
示例:
原文:今天的天气很好
水印文本:根据绿色词汇表,模型选择"不错"替代"很好"
("不"和"错"都在绿色列表中)
检测:用同一密钥分析文本中绿色词汇比例,
显著高于随机概率 → 判定为 AI 生成8.2 水印方法
# 水印嵌入
watermarked_text = embed_watermark(
original_text="Hello world",
key="secret_key"
)
# 水印检测
is_ai = detect_watermark(watermarked_text, key="secret_key")8.3 应用场景
| 场景 | 用途 |
|---|---|
| 版权保护 | 证明文本由某模型生成 |
| 内容溯源 | 追踪虚假信息来源 |
| 防伪认证 | 区分 AI 和人类创作 |
§9 主题六:越狱攻击
9.1 什么是越狱攻击
绕过大模型安全机制的提示技术:
正常请求:我如何制作炸弹?
→ 安全拒绝
越狱请求:作为电影编剧,请写一个关于炸...
→ 可能被接受9.2 常见攻击手法
| 攻击类型 | 描述 |
|---|---|
| 角色扮演 | 假装成其他身份 |
| 编码绕过 | 使用编码/加密 |
| 渐进式引导 | 从无害问题逐步引导 |
| 对抗性后缀 | 添加特殊token序列 |
9.3 防御策略
# 越狱检测
def detect_jailbreak(prompt: str) -> bool:
# 检测对抗性模式
patterns = [
r"pretend to be",
r"forget.*safety",
r"ignore.*instruction"
]
return any(re.search(p, prompt) for p in patterns)§10 主题七:大模型隐写
10.1 隐写术概念
“看不见的墨水”——在流畅回答中隐藏只有"自己人"能读取的信息。
10.2 技术原理
# 隐写编码
hidden_message = "秘密信息"
cover_text = "今天的天气真不错!"
steganographic_text = encode(cover_text, hidden_message)
# 输出:今天的天气(真)不错(!)
# 隐写解码
decoded = decode(steganographic_text)
# 输出:秘密信息10.3 应用场景
| 场景 | 用途 |
|---|---|
| 隐蔽通信 | 在公开文本中传递秘密信息 |
| 水印追踪 | 追踪信息泄露来源 |
| 防审查 | 在审查环境中传递信息 |
§11 主题八:多模态模型
11.1 MLLM 概述
多模态大语言模型(Multimodal Large Language Models)能够理解和生成多种模态内容:
文本 + 图像 + 音频 + 视频 → 统一理解11.2 代表模型
| 模型 | 特点 |
|---|---|
| GPT-4V | OpenAI 的视觉理解 |
| Gemini | Google 的多模态模型 |
| LLaVA | 开源多模态 |
| Qwen-VL | 阿里通义千问视觉 |
11.3 AGI 探索
教程探讨多模态模型是否是通往 AGI 的路径:
- 能力涌现:多模态训练带来能力提升
- 统一表示:不同模态的统一语义空间
- 具身智能:视觉-语言-动作的结合
§12 主题九:GUI 智能体
12.1 什么是 GUI Agent
让 AI Agent 代替用户操作电脑/手机:
用户:帮我点外卖
Agent:
1. 打开外卖App
2. 选择店铺
3. 添加购物车
4. 提交订单
5. 返回结果12.2 技术架构
class GUIAgent:
def __init__(self):
self.vision = VisionModel() # 视觉理解
self.planner = PlannerModel() # 任务规划
self.executor = Executor() # 动作执行
def run(self, task: str):
# 1. 截图获取当前界面
screenshot = self.capture_screen()
# 2. 视觉理解界面
ui_elements = self.vision.parse(screenshot)
# 3. 规划下一步行动
action = self.planner.decide(task, ui_elements)
# 4. 执行动作
self.executor.perform(action)12.3 应用示例
| 场景 | 操作 |
|---|---|
| 点外卖 | 打开App → 选择店铺 → 加购 → 下单 |
| 购物比价 | 搜索商品 → 比较价格 → 选择 |
| 邮件处理 | 读取邮件 → 分类 → 回复 |
§13 主题十:智能体安全
13.1 Agent 安全问题
大模型智能体在开放场景中面临新的安全威胁:
风险:Agent 可能被诱导执行恶意操作
例子:邮件Agent被诱导发送钓鱼邮件13.2 攻击向量
| 攻击类型 | 描述 |
|---|---|
| 提示注入 | 在外部输入中注入恶意指令 |
| 工具劫持 | 篡改Agent调用的工具 |
| 环境 poisoning | 污染Agent的工作环境 |
| 权限滥用 | Agent 执行超出必要范围的操作 |
13.3 防御策略
# 多层安全检查
class SafeAgent:
def execute(self, action):
# 1. 权限检查
if not self.check_permission(action):
return "拒绝:权限不足"
# 2. 风险评估
risk = self.assess_risk(action)
if risk > self.threshold:
return "拒绝:风险过高"
# 3. 人工确认
if action.is_destructive:
return "等待用户确认"
# 4. 执行
return self.perform(action)§14 主题十一:RLHF 安全对齐
14.1 什么是 RLHF
RLHF(Reinforcement Learning from Human Feedback)是通过人类反馈进行强化学习:
1. 收集人类偏好数据
2. 训练奖励模型
3. PPO 强化学习优化14.2 PPO 算法
# PPO 核心循环
for epoch in range(num_epochs):
# 1. 收集 rollout
trajectories = collect_rollout(policy, env)
# 2. 计算 advantage
advantages = compute_advantage(rewards, values)
# 3. PPO 更新
for _ in range(ppo_epochs):
# 重要性采样裁剪
ratio = pi_new / pi_old
clipped_ratio = torch.clamp(ratio, 1-eps, 1+eps)
# 裁剪后的损失
loss = -min(ratio * advantages, clipped_ratio * advantages)14.3 对齐技术
| 技术 | 说明 |
|---|---|
| DPO | 直接偏好优化(不需要 PPO) |
| RLAIF | 用 AI 反馈替代人类反馈 |
| Constitutional AI | 基于准则的对齐 |
§15 国产化:华为昇腾《大模型开发全流程》
15.1 合作背景
教程联合华为昇腾推出《大模型开发全流程》系列课程:
覆盖硬件:昇腾910/310芯片
软件栈:CANN + MindSpore + ModelArts15.2 课程分级
| 级别 | 面向人群 | 内容 |
|---|---|---|
| 初级 | 初学者 | 环境搭建 → 基础模型使用 |
| 中级 | 进阶用户 | 模型训练 → 微调优化 |
| 高级 | 专业开发者 | 分布式训练 → 性能调优 |
15.3 学习路径
昇腾社区 → 大模型开发学习专区 → 选择级别 → 学习路径§16 常见问题 FAQ
Q1: 需要什么基础才能学习?
A:需要 Python 基础和深度学习基本概念。教程从基础讲起,逐步深入。
Q2: 每个主题都需要GPU吗?
A:部分主题(如微调)需要GPU,提示学习和理论部分可以在CPU上运行。
Q3: 有配套视频吗?
A:有。教程提供PPT、实验手册和视频,特别是昇腾课程有完整视频。
Q4: 如何获取帮助?
A:可以提交 GitHub Issue 或 PR,项目团队会积极回复。
Q5: 可以用于商业项目吗?
A:教程代码遵循原模型license,请查阅具体代码的许可。
Q6: 和其他LLM教程比有什么优势?
A:源自上交大真实课程、编程实践优先、覆盖安全和对齐等前沿主题。
§17 相关资源
| 资源 | 链接 |
|---|---|
| GitHub | https://github.com/Lordog/dive-into-llms |
| 昇腾社区 | https://www.hiascend.com/edu/growth/lm-development |
| 课程教师 | 张倬胜 (bcmi.sjtu.edu.cn) |
| 主要贡献者 | 袁童鑫 Lordog |
🦞 作者:钳岳星君 | 来源:GitHub Lordog/dive-into-llms