阿里 AI Agent 开发一面
1. Agent 的架构设计
一个完整的 Agent,一般不是单独一个大模型就能跑起来,核心会拆成几层。最上面是任务入口,负责接收用户问题和上下文;中间是决策层,负责意图识别、任务拆解、规划和工具选择;下面是执行层,真正去调工具、查知识库、访问服务;最后是记忆和状态层,维护多轮上下文、历史执行结果和中间变量。
如果做得再工程化一点,通常还会加一个校验层。因为模型规划出来的步骤不一定总是对的,工具参数也可能填错,所以在执行前后都要做检查,比如参数合法性校验、工具返回结构校验、结果一致性校验。Agent 真正难的地方不是“能不能想”,而是“想完之后能不能稳定执行”。
2. RAG 的检索如何实现
RAG 检索一般分成离线和在线两部分。离线侧先做文档清洗、切块、去重、embedding 计算和向量入库;在线侧拿用户 query 编码成向量,去向量库做召回,再结合 BM25 或关键词检索做混合召回,接着用 rerank 模型重排,最后把最相关的证据拼接给大模型生成答案。
如果做得细一点,切块策略很重要。块太大,召回不准;块太小,上下文又容易断裂。通常会用滑窗切分,保留部分 overlap。对于长文档,还会给每个 chunk 带上标题、章节路径、来源等元信息,方便召回时提升相关性。最终效果不只是看向量检索本身,还取决于 chunk 设计、召回策略和重排质量。
# 一个简化版的 RAG 检索流程
query_vec = embed(query)
candidates = vector_db.search(query_vec, topk=20)
bm25_docs = bm25.search(query, topk=20)
merged = merge_and_dedup(candidates, bm25_docs)
reranked = reranker.rank(query, merged)
context = "\n".join([doc["text"] for doc in reranked[:5]])
answer = llm.generate(f"基于以下资料回答问题:\n{context}\n问题:{query}")
3. 预训练数据清洗方法
预训练数据清洗首先要解决脏数据、重复数据和低质量数据。脏数据包括乱码、HTML 残留、脚本片段、异常符号、错误编码;重复数据包括完全重复和近重复;低质量数据包括广告、无意义灌水、模板文、机器翻译残片、拼接错乱文本。
常见做法是先做规则清洗,比如去标签、过滤控制字符、长度约束、语言检测;再做质量过滤,比如困惑度过滤、分类器识别垃圾文本、关键词规则;然后做去重,常用 MinHash、SimHash、LSH 这类近重复方法。真正影响模型上限的,很多时候不是模型结构,而是预训练数据质量。
4. logistic 回归的模型原理和 loss
logistic 回归本质上是一个线性分类模型,只不过在线性输出后接了一个 sigmoid,把结果映射到 0 到 1 之间,表示样本属于正类的概率。对于输入特征 (x),模型输出是:

训练时一般不用均方误差,而是用交叉熵损失。对于二分类,单个样本的 loss 是:

这个损失的意义是让真实标签对应的概率尽可能高。logistic 回归虽然简单,但在结构化特征、基线建模和可解释性要求高的场景里仍然非常常用。
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def binary_cross_entropy(y, p, eps=1e-12):
p = np.clip(p, eps, 1 - eps)
return -(y * np.log(p) + (1 - y) * np.log(1 - p))
x = np.array([0.3, 1.2, -0.7])
w = np.array([0.5, -0.2, 0.8])
b = 0.1
z = x @ w + b
p = sigmoid(z)
loss = binary_cross_entropy(1, p)
print(p, loss)
5. 给定一个时间序列,如何通过机器学习的方法建模筛选出重要特征,然后基于规则方法进行建模
时间序列建模里,先要把原始序列变成可学习的特征。最常见的是统计特征、趋势特征、波动特征、周期特征和滞后特征,比如均值、方差、最大最小值、移动平均、环比同比、lag 值、rolling window 特征、傅里叶周期特征等。然后可以用 XGBoost、LightGBM、随机森林这类模型训练,输出 feature importance 或 SHAP 值,筛出对目标最重要的特征。
筛出重要特征后,再做规则建模,通常不是替代机器学习,而是把它变成更稳定的上线逻辑。比如某些特征在过去 7 天持续上升且波动超过阈值,就触发告警;或者把模型识别出的关键因子整理成多条规则做线上解释。这样做的好处是既保留了机器学习筛特征的能力,也兼顾了规则系统的稳定和可解释。
6. Agent 工具调用你知道怎么训练吗,训练集应该包含哪些,怎么得到训练的数据集
训练 Agent 的工具调用能力,训练集里至少要覆盖三类样本:该调用工具的、不该调用工具的、需要多工具串并联调用的。只教模型“会调用”是不够的,还得教它“什么时候不要调”“参数怎么补齐”“失败后怎么处理”。
数据来源一般有四种。第一种是人工标注轨迹,把问题、思考过程、工具选择、参数填写和结果整合成监督样本;第二种是线上日志回放,把高质量人工操作或已有系统调用链抽出来;第三种是规则合成数据,用模板生成标准调用样本;第四种是模型自举,用强模型生成轨迹,再人工抽检修正。真正关键的是负样本和边界样本,像参数缺失、工具返回空、多个工具都可用但优先级不同,这些不补,模型上线很容易乱调。
7. 假如一个 query 有两个工具都可以调用,训练集应该怎么设计
如果一个 query 有两个工具都能答,训练集不能简单只保留一个标准答案,否则模型会被训成单一路径。更合理的做法是把不同场景拆开:有的场景优先选低成本工具,有的优先选高精度工具,有的先调粗粒度工具做判断,再调细粒度工具补充结果。
训练样本里最好显式体现选择依据,比如同一个 query 配两条轨迹,一条说明为什么工具 A 更快,一条说明为什么工具 B 更准。再进一步,可以把环境特征也带进去,比如工具实时状态、超时概率、返回字段丰富度。这样模型学到的不是机械映射,而是真正的调度策略。
8. 你构造数据集遇到过什么难点,怎么解决
最大的问题一般不是数据不够,而是数据不真实。人工造的数据常常太标准,用户表达很完整,参数给得很全,工具永远成功,结果上线之后用户一句话没说全,模型就不会了。
解决方式通常是把真实线上 query 引进来,按意图、复杂度、缺参情况、歧义情况分桶,然后做针对性补齐。另一个难点是标注一致性,同一种问题不同人可能给出不同工具路径,所以需要先统一 schema 和决策标准。还有一个常见问题是长尾样本太少,这时就要靠模板改写、对抗生成和人工补充边界案例,把最容易出事故的地方优先补上。
9. LoRA 和全参数微调的区别
LoRA 是在原始权重旁边插入低秩矩阵,只训练少量新增参数,原模型参数通常冻结。全参数微调则是直接更新模型所有参数。LoRA 的优势是显存占用小、训练快、方便多任务切换,适合领域适配、指令跟随、工具调用格式对齐这类场景;全参数微调自由度更大,但代价也更高。
本质上,LoRA 假设任务迁移需要的参数更新分布在一个低秩子空间里,所以不用修改全部权重也能适配。如果任务只是在现有能力上做局部偏移,LoRA 往往足够;如果任务导致表示空间整体变化很大,LoRA 可能会不够,尤其 rank 太低的时候更明显。
10. DPO、PPO、GRPO
PPO 是强化学习式对齐方法,通常需要一个 reward model 对模型输出打分,再根据奖励做策略更新。它灵活,但训练链路长,超参数敏感,稳定性相对差。DPO 是把偏好学习直接写成一个监督式目标,用 chosen 和 rejected 成对数据直接优化策略,不显式采样长期轨迹,也不显式训练 RL policy update,工程上更简单。
GRPO 可以看成是把偏好从 pair 扩展到 group,不再只比较一对答案,而是利用一组候选之间的相对优劣关系来做优化。这样能更充分利用多候选信息,在排序、多样本比较和组内奖励场景里更自然。三者最大的区别不只是公式,而是它们依赖的数据形态、训练稳定性和适用任务范围不一样。
11. kernel 级别的优化,比如用 CUTE DSL 或者手写 CUDA 做 fusion,这类算子融合优化
kernel 级别优化的核心目标是减少访存开销、减少 kernel launch 次数、提高并行利用率。很多模型推理慢,不一定是算力不够,更多是 memory boun
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
