AI 大模型学习面试完整指南
从 TensorFlow 基础到 AI Agent 体系
全链路知识梳理
Part 1: 深度学习基础
Part 1: 深度学习基础
1.1 TensorFlow 简介
TensorFlow 是 Google 开发的开源深度学习框架,采用数据流图(Data Flow Graph)的方式执行计算。节点代表数学运算,边代表多维数据数组(张量)在节点之间流动。
TensorFlow vs PyTorch 对比
|
特性 |
TensorFlow |
PyTorch |
|
开发方 |
|
Meta(Facebook) |
|
计算图 |
静态图(2.x支持动态图) |
动态图(Eager Mode) |
|
部署 |
TF Serving / TF Lite / TF.js 生态完善 |
TorchServe |
|
调试 |
较难(2.x改善) |
原生Python调试 |
|
社区 |
工业界主流 |
学术界主流 |
|
入门 |
曲线较陡 |
更Pythonic |
1.2 张量(Tensor)概念
张量是 TensorFlow 中最核心的数据结构,可以理解为多维数组。标量是0维张量,向量是1维张量,矩阵是2维张量,更高维度统称张量。
张量维度对照表
|
维度 |
名称 |
例子 |
形状 |
|
0-D |
标量(scalar) |
温度值 36.5 |
() |
|
1-D |
向量(vector) |
[1, 2, 3] |
(3,) |
|
2-D |
矩阵(matrix) |
灰度图像 |
(28, 28) |
|
3-D |
3D张量 |
RGB图像 |
(28, 28, 3) |
|
4-D |
4D张量 |
批量图像 |
(32, 28, 28, 3) |
|
5-D |
5D张量 |
视频批量 |
(8, 30, 224, 224, 3) |
1.3 自动求导 GradientTape
tf.GradientTape 是 TensorFlow 2.x 的自动微分工具,用于记录运算并自动计算梯度。只有 tf.Variable 类型的张量才会被默认追踪梯度。
Variable vs Constant 对比
|
特性 |
tf.Variable |
tf.constant |
|
可变性 |
值可变(assign) |
不可变 |
|
梯度追踪 |
默认被追踪 |
需要watch() |
|
用途 |
模型参数(权重/偏置) |
超参数/常量 |
|
创建方式 |
tf.Variable() |
tf.constant() |
1.4 神经网络核心组件
1.4.1 激活函数
激活函数为神经网络引入非线性,使其能够学习复杂的映射关系。没有激活函数,多层网络退化为单层线性变换。
|
激活函数 |
公式(简) |
值域 |
特点 |
典型用途 |
|
ReLU |
max(0, x) |
[0, +inf) |
计算快,缓解梯度消失 |
隐藏层默认选择 |
|
Sigmoid |
1/(1+e^(-x)) |
(0, 1) |
输出概率,易梯度消失 |
二分类输出层 |
|
Tanh |
(e^x - e^(-x))/(e^x + e^(-x)) |
(-1, 1) |
零均值,梯度消失 |
RNN隐藏层 |
|
Softmax |
e^xi / sum(e^xj) |
(0, 1)总和为1 |
输出概率分布 |
多分类输出层 |
|
GELU |
x * Phi(x) |
约(-0.17, +inf) |
平滑,Transformer常用 |
BERT/GPT |
|
LeakyReLU |
max(ax, x) |
(-inf, +inf) |
解决神经元死亡 |
GAN |
1.4.2 梯度消失与梯度爆炸
深层网络训练中常见的问题。梯度消失使底层参数几乎不更新,梯度爆炸使参数更新过大导致训练不稳定。
|
问题 |
原因 |
解决方案 |
|
梯度消失 |
Sigmoid/Tanh导数小于1,多层连乘趋近于0 |
ReLU激活 / 残差连接 / 合理初始化(He/Xavier) |
|
梯度爆炸 |
权重初始化过大,梯度连乘指数增长 |
梯度裁剪(clip) / BatchNorm / 合理初始化 |
1.4.3 损失函数
损 学表达。
|
损失函数 |
公式(简) |
适用场景 |
特点 |
|
MSE(均方误差) |
mean((y-y_pred)^2) |
回归问题 |
对大误差惩罚大 |
|
Cross-Entropy(交叉熵) |
-sum(y * log(y_pred)) |
分类问题 |
衡量概率分布差异 |
[速记] 回归用MSE,分类用交叉熵 —— 回归看距离,分类看概率
1.4.4 优化器
优化器决定如何根据梯度更新模型参数,不同的优化策略影响收敛速度和最终效果。
|
优化器 |
核心思想 |
优点 |
缺点 |
推荐场景 |
|
SGD |
沿负梯度方向更新 |
简单稳定 |
收敛慢 |
小数据集 |
|
Momentum |
加入动量项 |
加速收敛 |
需调动量参数 |
CV任务 |
|
RMSprop |
自适应学习率(平方和) |
适合非平稳目标 |
可能学习率过低 |
RNN |
|
Adam |
动量+自适应学习率 |
快速收敛,少调参 |
可能不收敛 |
NLP/通用默认 |
|
AdamW |
Adam+解耦权重衰减 |
正则化更好 |
略复杂 |
Transformer/大模型 |
1.4.5 正则化
正则化技术用于防止模型过拟合,提升泛化能力。
|
方法 |
原理 |
使用方式 |
直观理解 |
|
Dropout |
训练时随机丢弃神经元 |
Dense后加Dropout层 |
团队不依赖单个人 |
|
BatchNorm |
对每批数据标准化 |
卷积/全连接后加BN层 |
统一考试标准 |
|
L2正则化 |
损失函数加权重平方和 |
kernel_regularizer |
不让权重太大 |
|
EarlyStopping |
验证集性能不提升时停止 |
callback设置patience |
见好就收 |
1.5 卷积神经网络(CNN)
为什么用CNN而不是全连接网络?
- 参数共享:同一个卷积核扫描整个图像,大幅减少参数
- 局部连接:每个神经元只关注局部区域,符合视觉感知特性
- 平移不变性:目标出现在任何位置都能被检测到
CNN核心组件
|
组件 |
作用 |
关键参数 |
|
卷积层(Conv) |
提取局部特征 |
kernel_size, filters, stride |
|
池化层(Pool) |
降维,增强鲁棒性 |
pool_size, stride |
|
全连接层(FC) |
整合特征做分类 |
units |
|
激活函数 |
引入非线性 |
ReLU |
特征层次结构
- 浅层卷积:提取边缘、纹理等低级特征
- 中层卷积:提取部件、形状等中级特征
- 深层卷积:提取对象、语义等高级特征
1.6 循环神经网络(RNN & LSTM)
为什么需要RNN?
传统神经网络假设输入之间相互独立,但序列数据(文本、语音、时间序列)中前后元素存在依赖关系。RNN通过隐藏状态在时间步之间传递信息,捕获序列中的时序依赖。
LSTM三大门控
|
门控 |
作用 |
类比理解 |
|
遗忘门(Forget Gate) |
决定丢弃哪些旧信息 |
整理书包:扔掉不用的旧笔记 |
|
输入门(Input Gate) |
决定存入哪些新信息 |
整理书包:放入新发的讲义 |
|
输出门(Output Gate) |
决定输出哪些信息 |
考试作答:从记忆中提取相关内容 |
LSTM vs GRU
|
特性 |
LSTM |
GRU |
|
门控数量 |
3个(遗忘+输入+输出) |
2个(重置+更新) |
|
参数量 |
较多 |
较少(约为LSTM的75%) |
|
性能 |
复杂任务表现略好 |
简单任务效率更高 |
|
训练速度 |
较慢 |
较快 |
|
适用场景 |
长序列、复杂依赖 |
中等序列、资源受限 |
1.7 词嵌入(Embedding)
什么是Embedding?
Embedding是将离散的符号(如单词、物品ID)映射到连续的低维向量空间的技术。在这个空间中,语义相近的词距离也近。
水果类比
想象每种水果用一个向量表示:[甜度, 大小, 颜色红度, 价格]
- 苹果 = [0.8, 0.5, 0.9, 0.4]
- 梨 = [0.7, 0.5, 0.3, 0.4]
- 苹果和梨的向量很接近,因为它们很相似
NLP例子
- "国王" - "男人" + "女人" = "女王"
- "巴黎" - "法国" + "中国" = "北京"
- 这种"词向量运算"能力是Embedding的核心魅力
One-Hot vs Embedding
|
特性 |
One-Hot |
Embedding |
|
维度 |
词典大小(几万维) |
固定低维(通常128-768) |
|
稀疏性 |
极度稀疏(只有一个1) |
稠密 |
|
语义信息 |
无(任意两词距离相同) |
有(相似词距离近) |
|
可扩展性 |
差(加词就变维度) |
好(固定维度) |
1.8 编码器-解码器(Encoder-Decoder)
翻译官类比
Encoder-Decoder 就像一个翻译官:先用Encoder(理解阶段)通读原句并理解其含义,将信息压缩成一个中间表示(context vector),然后用Decoder(表达阶段)逐词生成翻译结果。
典型应用
|
应用 |
Encoder输入 |
Decoder输出 |
|
机器翻译 |
源语言句子 |
目标语言句子 |
|
文本摘要 |
长文章 |
短摘要 |
|
图像描述 |
图像特征 |
描述文字 |
|
对话系统 |
用户输入 |
系统回复 |
瓶颈问题(Bottleneck)
传统Encoder-Decoder将整个输入序列压缩为一个固定长度的向量,信息容易丢失。Attention机制通过让Decoder在每一步都能"回看"Encoder的所有输出来解决这个问题,这也是Transformer的核心思想来源。
Part 2: Transformer
Part 2: Transformer 架构
2.1 一句话总结
Transformer 是一种基于自注意力(Self-Attention)机制的深度学习架构,完全抛弃了RNN的循环结构和CNN的局部感受野,实现了序列建模的并行化和长距离依赖捕获。它是 GPT、BERT 等大模型的基石。
2.2 架构概览
Transformer 由 Encoder(编码器) 和 Decoder(解码器) 两部分组成:
- Encoder:由N个相同的层堆叠,每层包含 Multi-Head Self-Attention + FFN,用于理解输入
- Decoder:由N个相同的层堆叠,比Encoder多一个 Cross-Attention 层,用于生成输出
三种变体
|
变体 |
使用组件 |
代表模型 |
适用任务 |
|
Encoder-Only |
仅Encoder |
BERT, RoBERTa |
理解类:分类、NER、问答 |
|
Decoder-Only |
仅Decoder |
GPT系列, LLaMA |
生成类:对话、续写 |
|
Encoder-Decoder |
完整架构 |
T5, BART |
序列转换:翻译、摘要 |
2.3 自注意力机制(Self-Attention)
Q/K/V 概念
|
符号 |
全称 |
含义 |
类比 |
|
Q(Query) |
查询 |
当前位置想了解什么 |
我在找什么信息 |
|
K(Key) |
键 |
每个位置提供什么线索 |
每本书的书名标签 |
|
V(Value) |
值 |
每个位置的实际内容 |
每本书的具体内容 |
Self-Attention 计算五步
- 1. 将输入分别乘以W_Q, W_K, W_V得到Q, K, V矩阵
- 2. 计算注意力分数: scores = Q * K^T
- 3. 缩放: scores = scores / sqrt(d_k)
- 4. Softmax归一化: weights = softmax(scores)
- 5. 加权求和: output = weights * V
核心公式
Attention(Q, K, V) = softmax(Q * K^T / sqrt(d_k)) * V
[速记] Self-Attention速记:Q问K答V得结果,除以根号d防极端,softmax归一做权重
2.4 为什么要除以 sqrt(d_k)?
当维度 d_k 较大时,Q*K^T 的点积结果数值也会很大,导致 softmax 函数进入梯度极小的饱和区。除以 sqrt(d_k) 相当于对点积做标准化,使 softmax 的梯度保持在合理范围,避免梯度消失导致注意力分布过于尖锐(one-hot)。
2.5 多头注意力(Multi-Head Attention)
将 Q, K, V 分别投影到 h 个不同的子空间,在每个子空间独立计算注意力,然后将结果拼接并线性变换。这使模型能同时关注不同位置的不同表示子空间的信息。
侦探类比
想象 h 个侦探,每个侦探有自己的调查角度:
- 侦探1关注语法关系(主谓宾)
- 侦探2关注语义关系(同义词)
- 侦探3关注位置关系(相邻词)
- 最后汇总所有侦探的发现,得到全面的理解
2.6 位置编码(Positional Encoding)
由于Transformer没有循环结构,无法天然感知序列中元素的位置顺序。位置编码为每个位置生成一个固定向量,与词嵌入相加,注入位置信息。
- 使用正弦/余弦函数: PE(pos, 2i) = sin(pos / 10000^(2i/d))
- 优势:可以推广到训练时未见过的序列长度
2.7 残差连接与层归一化
- 残差连接(Residual): output = LayerNorm(x + SubLayer(x)),解决深层网络退化问题
- 层归一化(LayerNorm): 对每个样本的所有特征做归一化,稳定训练过程
- 两者结合使得Transformer可以堆叠很深(如GPT-3有96层)
2.8 Transformer vs RNN
|
特性 |
Transformer |
RNN |
|
并行计算 |
完全并行 |
必须串行 |
|
长距离依赖 |
任意距离O(1) |
随距离衰减 |
|
计算复杂度 |
O(n^2 * d) |
O(n * d^2) |
|
训练速度 |
快(GPU友好) |
慢 |
|
内存 |
序列长时占用大 |
固定 |
|
位置信息 |
需要位置编码 |
天然有序 |
2.9 面试高频问题
Q: Transformer为什么比RNN更适合处理长序列?
A: Transformer通过Self-Attention可以直接计算序列中任意两个位置的关系,路径长度为O(1);而RNN需要逐步传递信息,路径长度为O(n),导致长距离依赖信息衰减。此外Transformer支持完全并行计算,训练效率更高。
Q: Self-Attention的计算复杂度是多少?有什么优化方法?
A: 标准Self-Attention复杂度为O(n^2 * d),其中n是序列长度。优化方法包括:(1)稀疏注意力(Sparse Attention)只关注部分位置;(2)线性注意力(Linear Attention)用核函数近似;(3)局部注意力(Sliding Window)限制感受野;(4)Flash Attention通过IO优化加速。
Q: Transformer中为什么用LayerNorm而不是BatchNorm?
A: (1)序列长度可变,BatchNorm难以处理;(2)BatchNorm依赖batch统计量,batch小时不稳定;(3)LayerNorm对每个样本独立归一化,不受batch影响;(4)RMSNorm是LayerNorm的简化版,在大模型中更常用。
Q: Multi-Head Attention中头数(head_num)如何选择?
A: 头数和模型维度需要配合:d_model / head_num = d_k,通常d_k=64。例如d_model=768时用12个头,d_model=1024时用16个头。头数越多,模型能捕获越多样化的注意力模式,但每个头的维度变小,表达力下降。
Q: Transformer的残差连接有什么作用?
A: 残差连接的作用:(1)缓解深层网络的梯度消失问题,提供梯度的直接传播路径;(2)使网络可以学习恒等映射,至少不比浅层网络差;(3)配合LayerNorm,使Transformer可以稳定堆叠很深(如96层)。
[速记] 不用循环不用卷,自注意力记心间;Q问K答V结果,多头并行真方便;位置编码加序列,残差归一稳训练
Part 3: BERT
Part 3: BERT 预训练语言模型
3.1 一句话总结
BERT(Bidirectional Encoder Representations from Transformers)是Google于2018年提出的基于Transformer Encoder的双向预训练语言模型,通过在大规模无标注语料上预训练,再微调到下游任务,刷新了11项NLP基准。
三大贡献
- 1. 证明了双向预训练的有效性:同时看前后文,理解更深刻
- 2. 统一了NLP任务范式:预训练+微调,一套架构搞定多种任务
- 3. 开启了大模型时代:规模越大、数据越多、效果越好
3.2 两个版本
|
版本 |
层数 |
隐藏维度 |
注意力头数 |
参数量 |
|
BERT-Base |
12 |
768 |
12 |
1.1亿 |
|
BERT-Large |
24 |
1024 |
16 |
3.4亿 |
3.3 MLM 掩码语言模型
MLM(Masked Language Model)是BERT的核心预训练任务:随机遮住输入中15%的token,然后让模型根据上下文预测被遮住的词。
80/10/10 规则
- 80%的选中token替换为[MASK]:直接遮住
- 10%替换为随机词:让模型学到纠错能力,避免只学[MASK]位置
- 10%保持不变:提供正确的输入表示,稳定训练
3.4 NSP 下一句预测
NSP(Next Sentence Prediction)判断两个句子是否为原文中的相邻句子,帮助模型理解句子间的关系。输入格式:[CLS] 句子A [SEP] 句子B [SEP]。
3.5 三种Embedding
- Token Embedding:词本身的向量表示(WordPiece分词)
- Segment Embedding:区分句子A和句子B(用于NSP任务)
- Position Embedding:位置信息(学习式,非正弦式)
3.6 BERT vs GPT
|
特性 |
BERT |
GPT |
|
架构 |
Encoder-Only |
Decoder-Only |
|
方向 |
双向(看全文) |
单向(只看前文) |
|
预训练 |
MLM + NSP |
自回归语言模型 |
|
擅长 |
理解类任务 |
生成类任务 |
|
类比 |
细心读者(先通读再答题) |
即兴演讲者(逐词往后说) |
3.7 四大微调任务
|
任务 |
输入 |
输出 |
示例 |
|
单句分类 |
[CLS] 句子 [SEP] |
CLS向量 -> 分类器 |
情感分析 |
|
句对分类 |
[CLS] 句A [SEP] 句B [SEP] |
CLS向量 -> 分类器 |
自然语言推理 |
|
问答 |
[CLS] 问题 [SEP] 文章 [SEP] |
起止位置预测 |
SQuAD |
|
NER |
[CLS] 句子 [SEP] |
每个token的标签 |
命名实体识别 |
3.8 BERT家族变体
|
模型 |
改进点 |
特点 |
|
RoBERTa |
更大数据+去掉NSP+动态Masking |
更鲁棒 |
|
ALBERT |
参数共享+嵌入分解 |
参数更少 |
|
DistilBERT |
知识蒸馏 |
更快更小 |
|
ELECTRA |
替换检测(非掩码预测) |
更高效预训练 |
|
SpanBERT |
遮住连续片段 |
更适合抽取任务 |
3.9 面试高频问题
Q: BERT为什么是双向的?双向有什么优势?
A: BERT使用Transformer Encoder,每个token的表示都融合了左右两侧的上下文信息,因此是双向的。优势:对于理解类任务(如阅读理解、情感分析),看到完整上下文比只看前文或后文能得到更准确的理解。例如"这个苹果很[好吃]"中的"苹果"需要看后面的"好吃"才能确认为水果而非手机品牌。
Q: BERT的MLM任务中为什么要用80/10/10规则?
A: 如果全部替换为[MASK],微调时没有[MASK]标记,会导致预训练和微调的输入不一致(gap)。80%用[MASK]保证预训练目标明确;10%用随机词引入噪声,迫使模型不只关注[MASK]位置;10%保持不变,让模型学习正确表示。三者结合使模型更鲁棒。
Q: BERT和GPT的核心区别是什么?各自适合什么任务?
A: 核心区别在于信息获取方向:BERT双向看全文,GPT单向只看前文。BERT适合理解类任务(分类、NER、问答),因为理解需要完整上下文;GPT适合生成类任务(对话、续写、翻译),因为生成必须按顺序逐词预测。
Q: 为什么现在很多大模型选择Decoder-Only架构(如GPT)而不是BERT的Encoder-Only?
A: (1)Decoder-Only统一了理解和生成:通过prompt可以将理解任务转化为生成任务;(2)扩展性更好:随着模型和数据的增大,生成式目标持续提升,没有饱和;(3)工程实现更简单:不需要Encoder-Decoder两套结构;(4)少样本学习能力更强:通过in-context learning完成任务。
[速记] BERT双向是读者,MLM遮盖猜猜猜;NSP判断上下句,三种嵌入要记牢
Part 4: RAG
Part 4: 检索增强生成(RAG)
4.1 一句话总结
RAG(Retrieval-Augmented Generation)是一种让大模型在回答问题时先从外部知识库检索相关信息,再将检索结果作为上下文提供给模型生成答案的技术。类比:开卷考试 —— 不是靠死记硬背(参数记忆),而是允许翻书(检索)后作答。
4.2 解决的三大问题
|
问题 |
说明 |
RAG如何解决 |
|
知识过时 |
模型参数是训练时的快照,无法获取最新信息 |
从实时更新的知识库检索 |
|
幻觉(Hallucination) |
模型可能编造看似合理但错误的内容 |
基于检索到的事实回答 |
|
领域知识不足 |
通用模型对垂直领域了解有限 |
接入领域专属知识库 |
4.3 RAG vs 微调(Fine-tuning)
|
维度 |
RAG |
Fine-tuning |
|
知识更新 |
实时更新知识库即可 |
需要重新训练 |
|
成本 |
较低(建索引) |
较高(GPU训练) |
|
适合场景 |
知识密集型问答 |
风格/格式适配 |
|
可解释性 |
高(可溯源到文档) |
低(黑盒) |
|
幻觉控制 |
好(有检索约束) |
一般 |
4.4 四大关键步骤
Step 1: 文档分块(Chunking)
将长文档切分成适当大小的片段,通常200-1000个token。
- 太小:语义不完整
- 太大:检索不精确,且浪费上下文窗口
- 策略:按段落/句子/固定长度切分,可加重叠(overlap)
Step 2: 向量化(Embedding)
将每个文档块用Embedding模型转换为向量表示。
Step 3: 向量数据库检索
将用户问题同样向量化,然后在向量数据库中找到最相似的文档块。
向量数据库对比
|
数据库 |
特点 |
适用场景 |
|
FAISS |
Meta开源,纯向量搜索,速度快 |
本地/单机 |
|
Milvus |
分布式,功能丰富 |
大规模生产 |
|
Pinecone |
全托管云服务 |
快速上线 |
|
Chroma |
轻量,Python友好 |
原型开发 |
|
Weaviate |
支持混合搜索(向量+关键词) |
需要混合检索 |
Step 4: Prompt组装
将检索到的文档块作为上下文,与用户问题一起组装成Prompt,送入LLM生成最终答案。
4.5 高级优化技术
四级优化体系
Level 1: 基础RAG
- 文档切分 -> 向量化 -> 相似度检索 -> Prompt + LLM
Level 2: 检索优化
- 混合检索(向量+BM25关键词)
- 重排序(Re-ranking):用Cross-Encoder对初步结果重新排序
- 查询重写(Query Rewriting):改写用户问题以更好匹配文档
Level 3: 知识管理优化
- 知识图谱增强(Knowledge Graph RAG)
- 分层索引:先检索文档摘要,再定位具体段落
- 元数据过滤:按时间、来源等属性过滤
Level 4: Agent增强RAG
- 自适应检索:让LLM自己决定是否需要检索
- 多跳推理(Multi-hop):复杂问题拆解为多次检索
- Self-RAG:模型自我评估检索结果和答案质量
4.6 关键技术对比
|
技术 |
原理 |
优势 |
劣势 |
|
朴素RAG |
直接检索+生成 |
简单 |
检索质量不稳定 |
|
HyDE |
用LLM生成假设文档再检索 |
提升召回 |
额外LLM调用 |
|
Re-ranking |
用Cross-Encoder重排序 |
提升精度 |
增加延迟 |
|
Self-RAG |
模型自评估检索+答案 |
质量高 |
复杂 |
|
Graph RAG |
结合知识图谱 |
推理能力强 |
构建图谱成本高 |
4.7 面试高频问题
Q: RAG和Fine-tuning分别适合什么场景?可以结合使用吗?
A: RAG适合:知识频繁更新、需要溯源、问答场景。Fine-tuning适合:调整模型风格/格式、领域术语适配、提升特定任务能力。两者可以结合:先用Fine-tuning让模型学习领域风格和术语,再用RAG提供最新的知识支撑。例如医疗场景中,先微调让模型学会医疗用语,再通过RAG检索最新医学文献。
Q: 如何评估RAG系统的效果?
A: 三个维度评估:(1)检索质量:召回率(Recall)、精确率(Precision)、MRR;(2)生成质量:Faithfulness(忠实度,答案是否基于检索内容)、Relevance(相关性);(3)端到端:答案准确率、用户满意度。常用框架:RAGAS、TruLens。
Q: RAG中chunk size如何选择?对效果有什么影响?
A: Chunk size直接影响检索质量:太小(如50 token)可能丢失上下文,检索到不完整的语义片段;太大(如2000 token)可能包含无关信息,稀释关键内容,且浪费上下文窗口。常见做法:300-500 token,配合50-100 token的overlap。实际项目中需要根据文档类型(FAQ vs 技术文档)通过实验调优。
[速记] RAG四步走:切块嵌入查库写提示,开卷考试不编造;检索要用混合法,重排优化提精度
Part 5: LangChain & LangGraph
Part 5: LangChain & LangGraph
5.1 LangChain 一句话总结
LangChain 是一个用于构建 LLM 应用的开发框架,类比 Spring Boot 之于 Java —— 它不是模型本身,而是帮你快速搭建基于 LLM 的应用的脚手架,提供了模型调用、提示管理、记忆、工具调用等标准化组件。
5.2 LangChain vs 直接调用API
|
维度 |
直接调API |
使用LangChain |
|
开发效率 |
需要自己实现所有逻辑 |
组件化,快速组装 |
|
可维护性 |
代码耦合度高 |
模块化设计,易维护 |
|
模型切换 |
需要改代码 |
改一行配置即可 |
|
复杂链路 |
手动编排 |
LCEL声明式编排 |
|
生态 |
自己造轮子 |
丰富的集成和工具 |
5.3 核心组件(六大模块)
- Model I/O:统一的模型调用接口,支持OpenAI/Anthropic/HuggingFace等
- Prompts:提示词模板管理,支持变量、Few-shot示例
- Chains:将多个组件串联成处理流水线
- Memory:对话记忆管理,支持短期/长期记忆
- Agents:让LLM自主决定调用哪些工具
- Retrieval:对接向量数据库,实现RAG
5.4 LCEL(LangChain Expression Language)
LCEL是LangChain的声明式编排语法,用 | (管道)操作符串联组件:
chain = prompt | model | output_parser
- 简洁:一行代码完成复杂链路
- 灵活:支持并行、分支、fallback
- 可观测:自动支持流式输出、 tracing
5.5 LangGraph
为什么需要LangGraph?
LangChain的Chain是线性的(A->B->C),但实际应用往往需要:
- 条件分支:根据中间结果走不同路径
- 循环:迭代优化、多轮对话
- 状态管理:维护复杂的对话/任务状态
- 人机协作:等待人工确认后继续
LangGraph将LLM应用建模为状态图(Stateful Graph),支持上述所有场景。
Chain vs Graph 对比
|
特性 |
LangChain Chain |
LangGraph |
|
拓扑 |
线性链(单向) |
任意有向图 |
|
循环 |
不支持 |
支持(核心特性) |
|
状态 |
隐式传递 |
显式State管理 |
|
条件分支 |
需要Router |
原生支持 |
|
人机交互 |
不原生支持 |
支持断点/恢复 |
|
适用场景 |
简单线性流程 |
复杂Agent/多Agent |
三大核心概念
|
概念 |
说明 |
类比 |
|
State(状态) |
在图中流转的数据对象 |
快递包裹上的物流单 |
|
Node(节点) |
执行具体操作的函数 |
快递中转站 |
|
Edge(边) |
定义节点之间的流转规则,支持条件路由 |
快递路由规划 |
5.6 面试高频问题
Q: LangChain的核心价值是什么?为什么不直接调API?
A: LangChain的核心价值是标准化和可组合性:(1)统一的模型接口,切换模型只需改一行配置;(2)丰富的预制组件(Prompt模板、Memory、Retriever等),避免重复造轮子;(3)LCEL声明式编排,复杂链路代码简洁;(4)完善的生态集成,对接100+工具和服务。简单场景直接调API没问题,但构建复杂LLM应用时LangChain能显著提升效率。
Q: LangGraph和LangChain是什么关系?什么时候用LangGraph?
A: LangGraph是LangChain生态的一部分,专注解决状态图编排问题。当应用涉及以下场景时使用LangGraph:(1)需要循环迭代(如Agent的思考-行动循环);(2)需要条件分支(根据不同情况走不同路径);(3)需要维护复杂状态(如多轮对话);(4)需要人机协作(等待用户确认)。简单线性流程用LangChain Chain即可。
Q: LCEL是什么?有什么优势?
A: LCEL(LangChain Expression Language)是LangChain的声明式编排语法,用管道符 | 串联组件(如 prompt | model | parser)。优势:(1)代码简洁,一行定义复杂链路;(2)自动支持流式输出、异步执行、tracing等高级功能;(3)组件可自由组合,复用性强。例如 RAG链: retriever | prompt | model | parser 只需一行。
[速记] LangChain像Spring,六大模块把活包;Chain线性Graph有环,LCEL管道一串通
Part 6: LlamaIndex
Part 6: LlamaIndex
6.1 一句话总结
LlamaIndex 是一个专注于数据索引和检索的LLM框架,类比"连接数据与LLM的桥梁" —— 它帮你把各种来源的数据(文档、数据库、网页等)高效地组织、索引,并在需要时精准地喂给LLM。如果说LangChain是全能脚手架,LlamaIndex就是数据专家。
6.2 五层架构
- 第1层 - 数据连接器(Data Connectors):对接各种数据源(PDF、SQL、Notion等)
- 第2层 - 数据索引(Data Indexes):构建向量索引、关键词索引、知识图谱索引
- 第3层 - 检索器(Retrievers):从索引中高效检索相关内容
- 第4层 - 查询引擎(Query Engines):检索 + LLM合成最终答案
- 第5层 - 数据代理(Data Agents):智能决定如何使用数据工具完成任务
6.3 核心概念
|
概念 |
说明 |
类比 |
|
Document |
数据的基本单元,包含文本和元数据 |
一本书 |
|
Node |
Document的子块,是索引和检索的最小单位 |
书中的一页 |
|
Index |
对Node构建的索引结构 |
图书馆的目录系统 |
|
QueryEngine |
封装检索+LLM的端到端查询接口 |
图书馆管理员 |
6.4 LlamaIndex vs LangChain
|
维度 |
LlamaIndex |
LangChain |
|
定位 |
数据索引与检索专家 |
通用LLM应用框架 |
|
核心优势 |
丰富的索引策略,检索质量高 |
组件全面,生态广泛 |
|
数据接入 |
100+数据连接器 |
通过Retrieval模块支持 |
|
适用场景 |
RAG、知识库问答 |
全场景(Agent、Chain、RAG等) |
|
灵活性 |
检索深度可定制 |
应用层面更灵活 |
|
选择建议 |
数据密集型项目首选 |
综合型LLM应用首选 |
6.5 面试高频问题
Q: LlamaIndex和LangChain有什么区别?如何选择?
A: LlamaIndex专注于数据索引和检索,提供更丰富的索引策略(向量、树形、关键词、知识图谱),在RAG场景下检索质量更高。LangChain是通用框架,覆盖更全面但不深入。选择建议:如果项目核心是RAG/知识库问答,首选LlamaIndex;如果涉及Agent、多工具调用、复杂编排,选LangChain;两者也可以组合使用(用LlamaIndex做检索,LangChain做编排)。
Q: LlamaIndex支持哪些索引类型?各有什么特点?
A: (1)VectorStoreIndex:最常用,向量相似度检索,适合语义搜索;(2)SummaryIndex:存储所有节点的摘要,适合需要全局理解的查询;(3)KeywordTableIndex:关键词倒排索引,适合精确匹配;(4)KnowledgeGraphIndex:基于知识图谱,支持多跳推理;(5)TreeIndex:层次化索引,先粗后细检索。实际项目常组合多种索引。
Q: 如何用LlamaIndex构建一个高质量的RAG系统?
A: 关键步骤:(1)数据预处理:清洗、分块策略(按语义边界切分);(2)选择合适的Embedding模型(如BGE、text-embedding-ada-002);(3)选择索引类型(通常VectorStoreIndex + KeywordTableIndex混合);(4)配置检索器(top-k、相似度阈值、重排序);(5)构建QueryEngine,设计回答合成Prompt;(6)评估与迭代(使用LlamaIndex的评估模块)。
[速记] LlamaIndex建索引,数据桥梁要记清;五层架构从底起,文档节点索引引擎
Part 7: AI Agent
Part 7: AI Agent 智能体
7.1 一句话总结
如果说LLM是一个拥有丰富知识但只能思考和说话的"大脑",那么Agent就是给这个大脑装上了"手"(工具)、"记忆"(Memory)和"规划能力"(Planning)的完整个体 —— 它不仅能想,还能行动。LLM = Brain, Agent = Person who can act.
7.2 Agent vs LLM
|
维度 |
LLM |
Agent |
|
能力 |
只能生成文本 |
能感知环境、使用工具、执行动作 |
|
记忆 |
仅上下文窗口内的对话 |
有短期+长期记忆系统 |
|
规划 |
无主动规划 |
能拆解任务、制定计划 |
|
行动 |
不能直接操作外部系统 |
可调用API、搜索、执行代码等 |
|
类比 |
大脑(Brain) |
完整的人(Person) |
7.3 四大核心组件
1. LLM(大脑)
作为Agent的核心推理引擎,负责理解指令、分析信息、做出决策。
- 选择标准:任务复杂度、推理能力、成本、延迟
2. Tools(工具)
Agent可以调用的外部能力,扩展Agent的行动范围。
- 搜索工具:Google/Bing搜索
- 代码执行:Python REPL、沙箱
- API调用:天气、数据库、邮件等
- 文件操作:读写文件
3. Memory(记忆)
让Agent能够记住过去的交互和获取的信息。
- 短期记忆:当前对话上下文(在LLM窗口内)
- 长期记忆:向量数据库存储历史信息
- 工作记忆:当前任务的中间结果
4. Planning(规划)
让Agent能够将复杂任务分解为可执行的步骤。
- 任务分解(Task Decomposition):大目标拆成小步骤
- 反思(Reflection):评估自己的输出并改进
- 多路径探索:Tree of Thoughts等方法
7.4 ReAct 循环
ReAct(Reasoning + Acting)是Agent最经典的工作模式:
- Step 1 - Thought(思考):LLM分析当前情况,决定下一步做什么
- Step 2 - Action(行动):调用相应的工具执行操作
- Step 3 - Observation(观察):获取工具返回的结果
- 重复以上步骤,直到任务完成
示例:用户问"北京今天天气适合出游吗?"
- Thought: 我需要先查北京今天的天气
- Action: 调用天气API查询北京天气
- Observation: 晴,25度,空气质量优
- Thought: 天气很好,可以给出建议了
- Answer: 北京今天天气很好,晴天25度,空气质量优,非常适合出游!
7.5 多智能体协作(Multi-Agent)
|
模式 |
说明 |
适用场景 |
类比 |
|
单Agent |
一个Agent完成所有任务 |
简单任务 |
单人完成作业 |
|
主从模式 |
主Agent分配任务给子Agent |
复杂但结构清晰的任务 |
经理分配工作给员工 |
|
协作模式 |
多个Agent平等讨论协作 |
需要多视角的任务 |
团队头脑风暴 |
|
辩论模式 |
Agent之间互相质疑和补充 |
需要高质量输出的任务 |
正反方辩论赛 |
|
流水线模式 |
Agent按顺序处理 |
有明确阶段的任务 |
工厂流水线 |
7.6 面试高频问题
Q: 什么是AI Agent?它和普通的LLM应用有什么区别?
A: AI Agent是一个能自主感知环境、做出决策并执行动作的智能体。与普通LLM应用的区别:(1)自主性:Agent能自己决定下一步做什么,不需要人类逐步指挥;(2)工具使用:能调用外部工具(API、搜索引擎、代码执行器等)获取信息和执行操作;(3)记忆:拥有跨对话的长期记忆;(4)规划:能将复杂任务分解为多个步骤并按计划执行。普通LLM应用是"你问我答",Agent是"你说目标,我来想办法完成"。
Q: ReAct模式是什么?为什么它是Agent的经典框架?
A: ReAct(Reasoning+Acting)模式让Agent交替进行推理(Thought)和行动(Action):先思考当前情况,再选择并执行一个工具,观察结果,继续思考。它是经典框架因为:(1)可解释性好 —— 每一步都有清晰的思考过程;(2)灵活性强 —— 可以处理各种类型的任务;(3)效率高 —— 只在需要时调用工具,不浪费资源。它本质上是将Chain-of-Thought推理与工具使用结合,是目前最主流的Agent设计模式。
Q: Agent的工具设计有哪些最佳实践?
A: (1)工具描述要清晰:LLM根据描述决定调用哪个工具,描述不清会导致错误调用;(2)参数设计要简单:参数越少越好,使用枚举而非自由文本;(3)工具数量要控制:通常5-20个,太多LLM难以选择;(4)提供错误处理:工具调用失败时返回有意义的错误信息;(5)幂等性设计:同一操作多次调用结果一致。
Q: 如何评估Agent的效果?
A: 四个维度:(1)任务完成率:能否正确完成给定任务;(2)效率:平均需要多少步/多长时间完成;(3)工具使用准确率:调用的工具和参数是否正确;(4)鲁棒性:面对异常情况(工具失败、信息缺失)的处理能力。常用基准:WebArena(网页操作)、HumanEval(代码生成)、ToolBench(工具调用)。
Q: Multi-Agent系统有什么优势?适用什么场景?
A: 优势:(1)专业化 —— 每个Agent专注于特定领域,表现更好;(2)并行性 —— 多个Agent可以同时工作,提高效率;(3)可靠性 —— 多个Agent交叉验证,减少错误;(4)可扩展 —— 新增能力只需增加新Agent。适用场景:复杂软件开发(需求Agent+开发Agent+测试Agent)、研究分析(搜索Agent+分析Agent+写作Agent)、客服系统(分类Agent+专业解答Agent)。
[速记] Agent四件套:大脑工具记忆规划,ReAct循环想看做;大脑负责想,工具负责干,记忆存历史,规划拆任务
附录一: 面试速查清单
附录一: 面试速查清单
深度学习基础
- TensorFlow vs PyTorch 核心区别(静态图/动态图、部署生态)
- 张量维度:0-D标量到5-D视频批量的对应关系
- GradientTape 自动求导原理,Variable vs constant
- 激活函数:ReLU/Sigmoid/Tanh/Softmax/GELU的特点和适用场景
- 梯度消失/爆炸的原因和解决方案
- 损失函数选择:回归用MSE,分类用交叉熵
- 优化器对比:SGD/Momentum/Adam/AdamW的适用场景
- 正则化四板斧:Dropout/BatchNorm/L2/EarlyStopping
CNN / RNN
- CNN三大优势:参数共享、局部连接、平移不变性
- CNN特征层次:浅层边缘 -> 中层部件 -> 深层语义
- RNN的局限:梯度消失、无法并行
- LSTM三大门控:遗忘门/输入门/输出门的作用
- LSTM vs GRU:门控数量、参数量、适用场景
Embedding
- One-Hot vs Embedding:维度、稀疏性、语义信息
- 词向量算术:国王-男人+女人=女王
- Embedding在NLP和推荐系统中的应用
Transformer
- Self-Attention公式:softmax(Q*K^T/sqrt(d_k))*V
- Q/K/V的含义和类比
- 为什么要除以sqrt(d_k)
- Multi-Head Attention的作用
- 位置编码的原理和必要性
- 残差连接+LayerNorm的作用
- 三种变体:Encoder-Only/Decoder-Only/Encoder-Decoder
BERT
- BERT的双向特性和三大贡献
- MLM的80/10/10规则及原因
- 三种Embedding:Token/Segment/Position
- BERT vs GPT:双向vs单向,理解vs生成
- 四大微调任务
- BERT家族变体:RoBERTa/ALBERT/DistilBERT/ELECTRA
RAG
- RAG解决的三大问题:知识过时/幻觉/领域知识不足
- RAG vs Fine-tuning的选择
- 四大步骤:分块/向量化/检索/Prompt组装
- 向量数据库对比:FAISS/Milvus/Chroma/Pinecone
- 高级优化:混合检索/Re-ranking/Self-RAG/Graph RAG
AI Agent
- Agent = LLM(大脑) + Tools(手) + Memory(记忆) + Planning(规划)
- ReAct循环:Thought -> Action -> Observation
- Multi-Agent协作模式:主从/协作/辩论/流水线
- 工具设计最佳实践
- Agent评估维度
附录二: 全部速记口诀
附录二: 全部速记口诀集锦
[速记] 1. 损失函数:回归用MSE,分类用交叉熵 —— 回归看距离,分类看概率
[速记] 2. 激活函数:隐藏层默认ReLU(快且好),二分类输出Sigmoid,多分类输出Softmax
[速记] 3. 正则化:Dropout随机扔,BatchNorm标准化,L2限制大小,EarlyStop见好就收
[速记] 4. LSTM门控:遗忘门丢旧笔记,输入门放新讲义,输出门提取答题
[速记] 5. Embedding:One-Hot稀疏无语义,Embedding稠密懂关系
[速记] 6. Encoder-Decoder:编码理解压缩,解码展开生成,瓶颈靠注意力解
[速记] 7. Transformer:不用循环不用卷,自注意力记心间;Q问K答V结果,多头并行真方便;位置编码加序列,残差归一稳训练
[速记] 8. BERT:BERT双向是读者,MLM遮盖猜猜猜;NSP判断上下句,三种嵌入要记牢
[速记] 9. RAG:RAG四步走,切块嵌入查库写提示,开卷考试不编造;检索要用混合法,重排优化提精度
[速记] 10. LangChain:LangChain像Spring,六大模块把活包;Chain线性Graph有环,LCEL管道一串通
[速记] 11. LlamaIndex:LlamaIndex建索引,数据桥梁要记清;五层架构从底起,文档节点索引引擎
[速记] 12. Agent:Agent四件套,大脑工具记忆规划;ReAct循环想看做,大脑负责想,工具负责干,记忆存历史,规划拆任务
更多推荐



所有评论(0)