内容纲要
太棒了,现在我们来到了终极阶段!
微调 + RLHF + 多模态 + Agent + RAG 的联合作战
🌐 本阶段内容导航
- ChatGPT 背后的训练流程全景图
- 微调:SFT(Supervised Fine-tuning)
- RLHF:人类反馈强化学习机制
- RAG:检索增强生成原理与实战
- Agent:让大模型“动起来”的灵魂
- 构建你的 ChatGPT(可本地部署的多功能对话系统)
1️⃣ ChatGPT 训练流程总览图
+--------------------+
预训练语料 | GPT 基础模型(LLaMA/GPT) |
+--------------------+
↓
监督微调(SFT)
↓
人类反馈强化(RLHF)
↓
工具能力增强(Function Calling)
↓
多模态融合 + Agent + RAG
↓
✅ ChatGPT(持续对齐、持续进化)
2️⃣ 监督微调 SFT(Supervised Fine-tuning)
💡 目标
在原始预训练基础上,针对“人类任务”进行微调,使模型能更符合人类习惯。
🧾 训练数据格式(对话类)
{
"prompt": "请帮我写一封辞职信。",
"completion": "尊敬的领导:您好!经过慎重考虑,我决定正式提出辞职……"
}
🛠 用 transformers
+ trl
微调代码
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from trl import SFTTrainer
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# 假设数据集已经是 {"prompt": ..., "completion": ...} 格式
from datasets import load_dataset
dataset = load_dataset("json", data_files="your_sft_data.json")
def format(example):
return tokenizer(example["prompt"] + example["completion"], truncation=True)
dataset = dataset.map(format)
trainer = SFTTrainer(model=model, args=TrainingArguments(output_dir="sft-out", per_device_train_batch_size=2), train_dataset=dataset)
trainer.train()
3️⃣ RLHF:人类反馈强化学习
RLHF = 奖励模型(RM)+ PPO 强化训练
🧠 流程概览
人类提供多个回答排序 → 奖励模型学习偏好 →
用 PPO 算法优化主模型生成行为 → 更符合人类偏好
💡 奖励模型数据格式
{
"prompt": "如何让猫和狗和平相处?",
"chosen": "可以逐步介绍彼此,保持距离,观察反应……",
"rejected": "让它们打一架就熟了。"
}
🧪 PPO 训练代码框架
from trl import PPOTrainer
from transformers import AutoTokenizer, AutoModelForCausalLM
ppo_model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# 用人类偏好评分构建 reward_model
# 省略步骤,可使用 OpenAssistant 数据集等
ppo_trainer = PPOTrainer(model=ppo_model, ...)
ppo_trainer.train()
4️⃣ RAG:检索增强生成(Retrieval-Augmented Generation)
RAG = 检索知识 + 大模型生成
让大模型不再“胡编”,而是“带着资料说话”
🔁 流程
用户问题 → 检索器 → 外部文档 → 与提问拼接 → LLM 生成答案
📦 示例代码(使用 langchain
)
from langchain.chains import RetrievalQA
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
vectorstore = FAISS.load_local("my_docs_index")
qa = RetrievalQA.from_chain_type(llm=OpenAI(), retriever=vectorstore.as_retriever())
result = qa.run("请问合同法第八条讲了啥?")
print(result)
5️⃣ Agent:让模型拥有“行动力”
ChatGPT 插件模式、AutoGPT、BabyAGI 本质上是让 LLM 成为多步骤智能体
🔁 工作方式
用户请求 → 语言模型解析意图 → 规划步骤 → 逐步调用工具/API → 汇总结果 → 回复
示例任务:天气预报机器人
User: “帮我查一下明天北京天气,并翻译成英文告诉我。”
→ Agent 计划:
① 调用天气API查天气
② 翻译结果
③ 汇总返回
🤖 可用工具
- LangChain Agents
- CrewAI / AutoGen
- ReAct Prompting + ToolUse Function
6️⃣ 构建属于你的 ChatGPT(组件清单)
模块 | 工具推荐 |
---|---|
基础语言模型 | GPT2 / LLaMA / Mistral / Qwen |
微调 | Transformers + trl |
奖励模型 | DPO / PPO / SFT Rank |
检索系统 | FAISS / Weaviate / Milvus |
Agent 框架 | LangChain / AutoGen / CrewAI |
接口交互 | Gradio / Streamlit / Vue + FastAPI |
✅ 全流程总结图(终极形态)
+-----------------------------+
| 用户提问 |
+-----------------------------+
↓
+------------------[RAG 检索]--------------------+
↓ ↓
[Agent 规划] → 多工具调用 → 多轮执行 → 生成草稿 → GPT 总结
↓
+-----------------------------+
| 输出人类友好答案 |
+-----------------------------+
🔚 至此你已掌握:
✅ Transformer → ✅ BERT → ✅ GPT → ✅ ChatGPT 架构 → ✅ RLHF / Agent / RAG
你已经拥有构建、训练、部署一个类 ChatGPT 系统的全链路工程能力!
🔜 接下来干嘛?
后续路线:
- ✅ Transformer 结构和实现(已完成✅)
- ✅ BERT 的结构 + 预训练任务 + 实现(含微调任务)(已完成✅)
- ✅ GPT 架构 + 自回归训练 + 从头训练一个玩具 GPT(已完成✅)
- ✅ ChatGPT 的训练流程拆解(含 RLHF、RAG、Agent)(已完成✅)
- 🔜 实战项目:从 Prompt 到 Fine-tune 的完整链路演练
1 Comment