本文是《大模型基础》《LangChain 与 LangGraph》《AI Agent 原理与设计模式》《大模型微调精华总结》四篇文章的精华汇总版,按"基础认知 → 适配方法 → 框架编排 → 智能体 → 微调部署"的链路组织,适合快速复习与面试速查。
一、大模型基础认知
1.1 本质
大模型本质仍是语言模型,核心任务只有一件事:根据上文,预测下一个最可能出现的词——一个"判断一句话像不像人话"的概率模型。
工程视角:文本 → token → 矩阵运算 → 下一个 token 的概率分布 → 采样,循环生成。典型结构三层:输入层(文本转向量)→ Transformer Block 堆叠(注意力 + FFN)→ 输出层(词表概率分布)。主流模型(GPT、DeepSeek、Qwen)多为 Decoder-only 架构。
演进脉络:N-gram 词频统计 → 神经语言模型(语义向量)→ 预训练模型(先通学再专修)→ 大语言模型(Scaling Law 规模扩大涌现少样本学习、上下文学习)。
1.2 原生缺陷与工程化解法
| 缺陷 | 解法 |
|---|---|
| 幻觉、知识滞后 | RAG 检索增强 + 联网搜索 |
| 复杂推理不稳定 | Agent 架构 + 工具调用 |
| 安全与偏见 | 价值对齐(RLHF)+ 系统级护栏 |
结论:可靠落地 = 模型能力 + 工程化,不能只靠模型本身。
1.3 评估指标
- BLEU:n-gram 重合,偏精确率(“字词搭配有多像”)
- ROUGE:偏召回率(“关键信息覆盖了多少”);ROUGE-N 看 n-gram,ROUGE-L 看最长公共子序列
- PPL 困惑度:越小越好,模型对正常句子越"不惊讶"
- 通用大模型评的是综合智能:知识理解、推理、代码、指令跟随、安全性、多模态
1.4 模型压缩四种方式
| 方式 | 本质 |
|---|---|
| 剪枝 Pruning | 删除贡献不大的冗余参数 |
| 量化 Quantization | fp32 → fp16/int8/int4(GPTQ 4-bit 可从 24G 压到 6G) |
| 知识蒸馏 Distillation | 教师(大而准)教学生(小而快) |
| 低秩分解 Low-rank | 大矩阵拆成小矩阵 |
蒸馏要点:软标签(概率分布,能学到"思考过程")优于硬标签(非 0 即 1,只学最终答案);也可蒸馏中间层特征。KL 散度【面试】:衡量两个概率分布的差异,越小越好、最小为 0;硬标签场景下 KL 散度 = 交叉熵。
1.5 主流量化压缩方法详解
| 方法 | 全称 | 原理 | 精度损失 | 适用场景 |
|---|---|---|---|---|
| INT8/INT4 量化感知训练 | QAT (Quantization-Aware Training) | 训练中模拟量化效果,学习量化噪声 | 最小(≈0) | 可重训场景,追求极致精度 |
| GPTQ | GPT Quantization(论文缩写) | 逐层贪心优化,Hessian 矩阵判断权重重要性 | 小(≈0.5% PPL 升) | 推理部署首选,4-bit 成熟稳定 |
| LLM.int8() | 后训练量化 (PTQ) | K-means 聚类区分敏感/鲁棒权重,混合 16/8-bit | 中等 | CPU/GPU 混合计算,快速上线 |
| AWQ | Activation-aware Weight Quantization | 激活值感知:保护对输出影响大的权重通道 | 小(中文评测 GPTQ<AWQ<PTQ) | 消费级 GPU,7B-13B 模型 |
| FP8/E4M3 | 浮点量化 | fp16→fp8,指数/尾数比特重分配 | 较小 | NVIDIA H100+ 训练加速 |
| SMoE 稀疏 MoE | Mixture of Experts | 每 token 选 1-2 个专家,70B 参只用 14B | 可控(需调 top-k) | 大吞吐服务,长上下文 |
量化流程对比:
QAT: 预训练 → 量化模拟 → 微调适配 → 部署
PTQ (GPTQ/AWQ): 加载预训练 → 校准集统计统计量 → 量化权重 → 部署
生产建议【面试】:
- 优先 GPTQ 4-bit:精度高、工具成熟(
optimum-cli)、vLLM 原生支持 - 快速验证用 LLM.int8():HuggingFace
AutoModelForCausalLM直接加载 - 消费级 GPU 推荐 AWQ:CUDA 12+,显存占用降低 50%
- 注意:量化后需验证 PPL、ROUGE、人工抽检,避免"流畅但胡言"
# GPTQ 4-bit 推理示例(加载已量化的 GPTQ 模型,transformers 自动识别)
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "Qwen/Qwen2.5-7B-Instruct-GPTQ-Int4" # 任意 GPTQ 量化模型仓库
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
# 注意:load_in_4bit=True 是 BitsAndBytes NF4 量化,不是 GPTQ;
# GPTQ 模型由 config 中的量化配置自动识别(需安装 optimum + auto-gptq)
prompt = "大模型技术有哪些核心优势?\n"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to("cuda")
output = model.generate(input_ids, max_new_tokens=100)
print(tokenizer.decode(output[0]))
# AWQ 量化推理示例(AutoAWQ)
from awq import AutoAWQForCausalLM
model = AutoAWQForCausalLM.from_quantized(
"Qwen/Qwen2.5-7B-Instruct-AWQ", # 任意 AWQ 量化模型仓库
device_map="auto",
)
常用工具:Ollama 本地部署运行大模型,Streamlit 用 Python 快速搭 Web 界面。
二、三种适配方法:Prompt / RAG / 微调
| 方法 | 改参数 | 适用场景 | 局限 |
|---|---|---|---|
| 提示词工程 | 否 | 任务简单、迭代快、成本低(首选) | 受模型能力、上下文窗口限制 |
| RAG | 否 | 知识更新频繁、私有知识多 | 依赖知识库与检索质量 |
| 微调 | 是 | 稳定学习任务/格式/语气/业务风格 | 依赖高质量标注数据 |
决策原则:Prompt 打底 → 不满足再上 RAG → 仍不满足才微调。知识问题用 RAG,行为问题用微调,简单指令用 Prompt。
三、LangChain 六大组件
定位:LangChain 是大模型应用的"乐高积木"(组件化拼装),LangGraph 是"流程图编排器"(图控制流程);LangChain 1.0 后 LangGraph 成为生态底座。核心思想模块化:把 LLM 和外部资源封装成标准接口组件。
| 组件 | 作用 | 关键点 |
|---|---|---|
| Models | 统一模型接口 | LLM(文本生成)+ Embedding(向量化) |
| Prompts | 模板化提示词 | 变量动态注入 |
| Chains | 组件按顺序串联 | LCEL 管道符组装 |
| Agents | 让 LLM 自主选工具 | create_react_agent |
| Memory | 多轮对话上下文 | Checkpointer + thread_id |
| Indexes | 外部数据桥梁 | 加载 → 分割 → 向量库 → 检索器 |
# LCEL 管道符组装 RAG 链
rag_chain = (
RunnablePassthrough.assign(context=lambda x: "检索到的上下文")
| prompt | llm | StrOutputParser()
)
结构化输出:response_format=Pydantic 模型,把自由文本强制转为预定义结构(字段 + 描述),适合信息抽取。
四、RAG 检索增强生成
一句话:让大模型开卷考试。不改模型权重,从知识库检索相关文档喂给模型,解决知识滞后与私有知识缺失,比微调便宜、更新快。
[索引·离线] 加载文件 → 分块 → 向量化 → 存向量库
[检索·在线] query 向量化 → 匹配 top_k 文档
[生成·在线] 上下文+问题组装 → LLM 生成答案
两大核心优化点:知识库构建质量(分块策略)与检索策略(query 改写、混合检索、重排序)。
五、LangGraph 核心概念
设计一句话:用图组织工作流。节点 = 干什么,边 = 下一步去哪,状态 = 节点间传的纸条。
5.1 三步法(万能模板)
class State(TypedDict): ... # 1 建状态
def node(state): ... # 2 建节点
gb = StateGraph(State) # 3 串边
gb.add_node("n", node)
gb.add_edge(START, "n")
gb.add_edge("n", END)
graph = gb.compile()
所有高级特性都建立在这三步之上,只是在不同环节加料。
5.2 流程控制
| 能力 | 写法 | 说明 |
|---|---|---|
| 分支 | add_conditional_edges(src, fn, mapping) |
按返回值映射到不同分支 |
| 循环 | 条件边指回自身 | 未达标则重复执行 |
| 并行 | 一个节点连多个节点(fan-out) | 互不依赖同时执行 |
| 汇总 | add_edge([a, b], c)(fan-in) |
等全部完成再走 |
| 并行写冲突 | Annotated[list, operator.add] |
并行写同字段自动拼接(默认覆盖) |
5.3 人工介入(Human-in-the-loop)
三要素:interrupt 触发中断 + checkpointer 保存状态 + Command(resume=…) 恢复。
⚠️ 必须挂载 memory(checkpointer),否则暂停后状态丢失无法恢复。
5.4 memory + thread_id(核心中的核心)
- memory 决定"在哪存",thread_id 决定"存哪份",缺一不可
- 同一 thread_id 自动接续上下文,不同 thread_id 互不干扰
- InMemorySaver 重启即丢,生产环境换 SqliteSaver / PostgresSaver
- 生产三件套:astream 流式 + 持久化 Checkpointer + thread_id
5.5 四种调用方式
| 方法 | 同步/异步 | 流式 | 场景 |
|---|---|---|---|
invoke |
同步 | 否 | 命令行脚本、简单测试 |
stream |
同步 | 是 | 本地调试、看每步输出 |
ainvoke |
异步 | 否 | Web 服务单次返回 |
astream |
异步 | 是 | Web 服务流式响应(推荐) |
补充:RunnableConfig 注入运行时参数(tenant_id、language、trace_id),避免污染 state;子图把一组节点封装成可复用子流程;LangSmith 用 @traceable 追踪调用链路,覆盖开发、调试、回归测试与线上监控。
六、AI Agent 原理与设计模式
6.1 组成公式
AI Agent = LLM(大脑)+ 工具(手脚)+ Function Call(连接机制)
+ 状态记忆(上下文)+ 运行策略(做事方法)
运行闭环:感知 → 决策 → 行动 → 反馈 → 继续调整。三大特点:自主性、目标导向、反应性。
与 ChatBot(只会回答)、RPA(步骤提前固定)的本质区别:自主决策 + 动态调度工具。三者可组合:ChatBot 接需求 → Agent 规划任务 → RPA 执行规则明确的重复操作。
6.2 Function Call
模型不直接执行程序,而是输出"工具名 + 参数",由程序执行后把结果回传,模型再决定下一步。它是智能体的基础能力,不是一套完整的任务策略。
常用框架:LangGraph(精细控制每步状态)、CrewAI(角色分工多 Agent 协作)、AutoGen(多 Agent 对话)、Dify(低代码可视化)、Coze(拖拽式工作流 + 插件)。
6.3 三种运行策略
| 策略 | 节奏 | 适用 |
|---|---|---|
| ReAct | 边想边做,推理↔行动交替 | 步骤不确定、需实时探索 |
| Plan-and-Execute | 先整体规划再逐步执行 | 多步、依赖明确、需兼顾全局 |
| Reflection | 生成后自我检查、修正 | 高质量文本/代码,叠加在前两者之上 |
PDCA 是管理领域的持续改进循环(Plan→Do→Check→Act),与智能体闭环思想相通,但不是同一概念。
6.4 五种工作流模式(Anthropic)
| 模式 | 结构 | 适用 |
|---|---|---|
| 提示链 | 步骤串联,前一步输出作后一步输入 | 可稳定拆解的任务 |
| 路由 | 先分类再分发给不同处理器 | 输入类型多样 |
| 并行化 | 子任务同时执行再汇总 | 无依赖、降总耗时 |
| 编排器—工作器 | 动态拆分任务、分发、合并 | 子任务数量内容无法提前写死 |
| 评估器—优化器 | 生成 → 评估 → 带反馈重新生成 | 质量标准明确 |
工作流(代码预先编排路径,可控稳定)vs 智能体(模型动态决策,灵活但成本、延迟和不确定性更高)。
6.5 选择原则(由简到繁)
- 模型能直接完成 → 直接调用
- 步骤可提前确定 → 工作流(提示链/路由/并行)
- 需动态拆分任务 → 编排器—工作器
- 需反复优化质量 → 加评估器—优化器 / Reflection
- 必须按环境反馈自主决策 → ReAct 自主智能体
核心:架构目标不是"最智能",而是用足够简单、可靠的方式完成任务。
七、微调方法论
核心是冻结预训练模型权重,在 Transformer 的线性层注入可训练的低秩分解矩阵,只训练这个小矩阵。训练后再合并回原权重 或者 通过适配器外挂。
Rank (r):低秩矩阵的维度,决定可训练参数量和信息容量。r 越大,模型表达能力越强但显存占用越高;通常取 8~64。
Alpha (α):缩放系数,控制 LoRA 权重对基座模型的影响强度。实际生效的缩放因子为 α / r,增大 α 等效于提高 LoRA 的学习率或贡献度。
QLoRA 在 LoRA 基础上引入高精度量化(4bit 量化)、双重量化、分页优化器 优化降低显存。
通常微调注意力层的 q_proj、v_proj 等线性层。
查看详细
7.1 范式与选择
NLP 四范式:传统机器学习 → 深度学习 → 预训练 + Fine-Tuning → 预训练 + Prompt。现代大模型训练:预训练 → SFT → 对齐(RLHF/DPO 等) 三阶段。
全参数微调(效果最优但需分布式)vs PEFT(参数高效,单卡可跑,效果接近全参)。PEFT 中 LoRA 是当前主流;Prompt Tuning / P-tuning / Prefix-Tuning / Adapter 已基本被取代。
7.2 LoRA
微调要学的是权重增量 ΔW,利用其低秩特性(信息集中在少数维度)用两个小矩阵近似:W = W₀ + BA,只训练 A、B(约 0.4% 参数),基座 W₀ 冻结;B 初始化为 0,保证从原模型出发。
| 参数 | 含义 | 常用值 |
|---|---|---|
| r | 秩,决定表达能力上限 | 8 / 16 / 64 |
| alpha | 缩放系数,实际更新量 alpha/r × BA | 16 / 32 |
| target_modules | 注入位置 | Wq/Wv 或 all |
优势:参数极少、效果接近全参;推理时合并回基座零额外延迟;多任务各挂一个 LoRA 共享底座即插即用。
7.3 QLoRA(消费级 GPU 可跑)
4-bit 量化基座 + LoRA 微调,省显存三板斧:NF4 量化(按权重分布自适应分桶)、双重量化(缩放因子再压 8-bit)、分页优化器(显存吃紧暂存 CPU 防 OOM)。70B 模型单卡 24GB 即可微调。
显存实测(Qwen2.5-7B):全量 42GB / LoRA 20GB / QLoRA 11GB。
7.4 数据与模型选择
- 两种格式:指令式(Alpaca:instruction/input/output)、对话式(ShareGPT / OpenAI messages),多轮靠 Chat Template 拼接
- 优先 Instruct Model(已做指令微调 + 对齐);规模参考:意图分类 1B-7B、智能客服 7B-14B、RAG/NL2SQL 7B-14B 起复杂 14B-32B、边缘部署 0.5B-4B
- 训练技巧:context 部分 labels 设 -100 不计损,只对 target 计算损失
八、训练框架与推理部署
8.1 工具链
| 工具 | 定位 | 关键点 |
|---|---|---|
| LLaMA-Factory | 无代码微调平台 | WebUI/CLI;llamafactory-cli train 训练、export 合并 LoRA 权重 |
| DeepSpeed | 分布式训练 | 数据/流水线/张量三种并行;ZeRO-1/2/3 逐级分片(优化器状态 → +梯度 → +参数) |
| GPTQ | 后量化算法 (PTQ) | 4-bit,Hessian 矩阵判断权重重要性,无需重训 |
| vLLM | 推理加速 | PagedAttention(显存利用率 96%)+ 连续批处理 + 多 LoRA 热切换 |
vLLM 一条 vllm serve 命令启动,提供 OpenAI 兼容 API,LangChain 的 ChatOpenAI 可直连。
8.2 GPTQ 量化代码示例(AutoGPTQ / GPTQModel)
AutoGPTQ (auto-gptq 库) 是基于 GPTQ 算法的 Python 工具包,API 简洁;但其仓库已于 2025 年 4 月归档停止维护,新项目建议使用继任者 GPTQModel(API 高度兼容、量化更快、持续支持新模型)。
使用 AutoGPTQ 量化模型
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from transformers import AutoTokenizer
# 1. 准备量化配置
quantize_config = BaseQuantizeConfig(
bits=4, # 4-bit 量化
group_size=128, # 每组的权重数量(越小精度越高)
damp_percent=0.01, # 阻尼系数
desc_act=False, # 是否对激活值做动态排序
static_groups=False,
sym=False,
)
# 2. 加载原始模型
tokenizer = AutoTokenizer.from_pretrained("model_name_or_path")
model = AutoGPTQForCausalLM.from_pretrained(
"model_name_or_path",
quantize_config=quantize_config
)
# 3. 准备数据集(用于校准)
dataset = [
tokenizer("大模型技术在现代人工智能中发挥着重要作用。"),
tokenizer("量化技术可以显著降低模型的显存占用和推理延迟。"),
]
# 4. 执行量化
model.quantize(dataset)
# 5. 保存量化后的模型
model.save_quantized("output-path", use_safetensors=True)
tokenizer.save_pretrained("output-path")
print(f"✅ 4-bit 量化完成!模型大小从 XGB → YGB")加载并推理已量化的模型
from auto_gptq import AutoGPTQForCausalLM
from transformers import AutoTokenizer
# 加载量化后的模型
model = AutoGPTQForCausalLM.from_quantized(
"output-path",
device="cuda", # 或使用"auto"
use_triton=True, # 使用 Triton 加速(可选)
)
tokenizer = AutoTokenizer.from_pretrained("output-path")
# 生成响应
prompt = "大模型量化的主要目的是什么?\n\n"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))GPTQModel 量化示例(推荐,AutoGPTQ 继任者)
from gptqmodel import GPTQModel, QuantizeConfig
from transformers import AutoTokenizer
model_id = "model_name_or_path"
quantize_config = QuantizeConfig(
bits=4, # 4-bit 量化
group_size=128, # 每组的权重数量(越小精度越高)
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = GPTQModel.load(model_id, quantize_config)
# 校准数据(用于计算 Hessian 矩阵)
calib_data = [tokenizer("大模型技术在现代人工智能中发挥着重要作用。")]
model.quantize(calib_data)
model.save("output-path")
tokenizer.save_pretrained("output-path")安装命令:
pip install gptqmodel # 推荐:AutoGPTQ 继任者,持续维护
pip install auto-gptq # 旧项目兼容用(已停止维护)
生产建议:
- 首选 GPTQModel:AutoGPTQ 已停止维护;GPTQModel 量化更快、默认精度更高、持续支持新模型
- 组大小选择:group_size=128(平衡速度与精度)
- 评估指标:PPL、ROUGE-L、人工抽检,避免"流畅但胡言"
典型效果(7B 模型):4-bit 量化后显存约为 fp16 的 1/3~1/4,推理吞吐持平或有提升(Marlin 等优化 kernel 下提升明显),精度基本无损。
8.3 黄金组合(生产标配)
LoRA 微调专属技能 → 合并回基座(16 位)→ GPTQ 压成 4bit → vLLM 部署
一句话:训练阶段缺显存选 LoRA;部署阶段缺显存选 GPTQ;蒸馏追求极致性价比但成本高,普通开发者不建议碰。
实战效果(Qwen-7B):LoRA 微调 + GPTQ 4-bit 部署,显存约为原来的 1/3~1/4,精度基本无损。
九、技术全景一句话
预训练打基础 → SFT 学指令 → 对齐合偏好;知识问题用 RAG、行为问题用 LoRA/QLoRA 微调;LangChain 组件化拼装、LangGraph 图编排控流程;复杂任务上 Agent(ReAct + Function Call + 工具);GPTQ 量化 + vLLM 加速部署,LangSmith 全程监控——“模型 + 工程化"环环相扣,构成大模型落地的完整链路。