阿里 AI Agent 开发二面
1. 大语言模型的 RLHF 训练流程是什么,它存在哪些潜在风险
RLHF 一般分三步。第一步是 SFT,用高质量指令数据把基座模型调成能听懂任务、按格式回答的模型。第二步是训练奖励模型,把人工偏好数据整理成 chosen 和 rejected 形式,让奖励模型学会判断两个回答哪个更好。第三步是强化学习优化,最经典的是 PPO,让当前策略在奖励更高的方向上更新,同时用 KL 约束避免模型偏离初始策略太远。
它的风险主要在三个地方。第一,奖励模型可能学偏,模型最后学到的是“讨好奖励模型”而不是真正更有帮助。第二,强化学习阶段如果约束不够,模型容易出现 reward hacking,看起来分数高,但真实回答质量下降。第三,偏好数据本身带有标注员风格和主观倾向,容易把这种偏好固化到模型里,最后表现成过度拒答、过度保守或者风格单一。
2. 什么是 Embedding,词嵌入和句嵌入有什么不同
Embedding 就是把离散对象映射成连续向量,让模型能在向量空间里表示语义关系。对于大模型来说,token、词、句子、文档、图片区域都可以做 embedding。这个向量不是简单编号,而是会把相似语义映射到更接近的位置。
词嵌入关注的是局部粒度,通常表示一个 token 或一个词,比如“苹果”在不同上下文中可能对应不同语义,但静态词向量只有一个表示,现代模型更多用上下文化 embedding。句嵌入关注的是整个句子的语义压缩,常用于检索、聚类、匹配和排序。词嵌入更适合做序列建模里的底层输入,句嵌入更适合直接拿来做相似度计算。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
word_vec = model.encode(["苹果"])
sent_vec = model.encode(["这家餐厅的人均价格比较高,适合商务宴请"])
print(word_vec.shape)
print(sent_vec.shape)
3. 大语言模型中的 Tokenization 是如何工作的,不同模型的分词算法有什么差异
Tokenization 的目标是把原始文本切成模型可处理的离散单元,再映射到词表 id。这个单元不一定是一个完整词,可能是字、子词、词缀,甚至单个字节。模型训练和推理时真正看到的是 token id,不是原始字符串。
不同模型常见的分词算法有 BPE、WordPiece 和 Unigram。BPE 是从字符开始不断合并高频子串,优点是实现直观,词表构造稳定。WordPiece 也做子词划分,但更强调基于概率或似然收益选择合并单元。Unigram 的思路反过来,是先准备一个较大的候选词表,再通过概率模型删减出最优子词集合。中文模型有些会偏向字粒度,有些会混合中英子词;代码模型会保留更多符号和空格信息;多语种模型则更重视跨语言共享子词。
4. paged attention 和 continuous batching 是什么
paged attention 本质上是把 KV cache 的内存管理做成类似虚拟内存分页的方式。传统做法里,每个请求的 KV cache 通常要求一块连续显存,容易造成碎片和浪费。paged attention 把 cache 切成固定大小的 block,请求只需要维护 block 表,就像页表一样索引这些 block。这样能显著提高显存利用率,尤其在多请求、不同长度混跑时效果很明显。
continuous batching 指的是请求不是等一整批凑齐再统一执行,而是在解码过程中不断把新请求插进批次,把已结束请求移出去,让 GPU 始终尽量满载。它解决的是在线服务里请求到达时间不一致的问题。传统静态 batch 会让很多请求空等,continuous batching 则更像动态调度,把 prefill 和 decode 阶段的资源利用率做得更高。
5. 用了 vLLM 加速前后,推理一致性怎么样
理论上如果权重、采样参数、精度和算子实现完全一致,结果应该尽量保持一致,但工程上通常只能做到高一致而不是逐 token 完全一致。原因在于推理框架切换后,底层 kernel、并行归约顺序、浮点舍入误差、采样实现细节都可能变,尤其是 fp16、bf16 场景,小数值扰动会在自回归生成里逐步放大。
实际评估通常不会只看某一条样例完全一致,而是看多个维度。一个是 deterministic 条件下的输出差异率,比如 temperature=0 时是否大体稳定。另一个是概率分布层面的一致性,比如 top-k token 集合、logprob 差异。再往上线一点,要看任务指标是否变化,比如准确率、拒答率、工具调用正确率和长回答稳定性。如果功能指标基本一致,而吞吐和时延显著优化,通常就认为切换是成功的。
6. warmup 为什么是前 100 步损失变化更快,除了 loss 变化快还有什么变化
warmup 的核心是让学习率从较小值逐渐升到目标学习率,避免一开始梯度更新过猛导致训练不稳定。前 100 步损失看起来变化快,一方面是模型刚开始还在快速适应当前数据分布,另一方面是参数从随机初始化或迁移初始化状态进入有效优化区间,很多低级错误会很快被修正。
除了 loss 下降更快,warmup 期间通常还伴随梯度范数、激活分布、权重更新幅度和优化器动量统计的快速变化。尤其是 Adam 这类带一阶二阶矩估计的优化器,前期统计量本身也在建立,warmup 相当于给这些状态一个更平滑的启动阶段。工程上经常能看到前几百步 loss、grad norm、learning rate 三条曲线是耦合变化的。
7. 大模型是什么结构,看过源码吗
主流大语言模型大多还是基于 Transformer decoder-only。输入 token 先过 embedding,再叠加位置编码,然后进入多层 block。每个 block 通常包含 self-attention、MLP、残差连接和归一化。不同模型的差异主要体现在位置编码形式、归一化位置、激活函数、attention 变体、是否用 GQA 或 MQA、是否引入 MoE 之类的结构。
如果从源码层面看,一个完整推理过程通常包括 tokenizer、模型配置、权重加载、forw
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
