大模型应用开发总结

大模型应用开发全栈精华:基础认知、Prompt/RAG/微调三种适配方法、LangChain 与 LangGraph、AI Agent 设计模式(含 AutoGPT)、LoRA 微调与量化部署(GPTQ/AWQ/QAT),一篇文章串起完整技术链路。

本文是《大模型基础》《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 选择原则(由简到繁)

  1. 模型能直接完成 → 直接调用
  2. 步骤可提前确定 → 工作流(提示链/路由/并行)
  3. 需动态拆分任务 → 编排器—工作器
  4. 需反复优化质量 → 加评估器—优化器 / Reflection
  5. 必须按环境反馈自主决策 → 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 全程监控——“模型 + 工程化"环环相扣,构成大模型落地的完整链路。