阿里 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面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

03-27 11:20
东南大学 C++
暑期面了腾子五次后台开发岗,不出意外是全都挂了,主要原因我总结下来大概是:1. 首先当然是自己学的背的还是不够多不够深,没有某一场面试能跟说答的上八九不离十,自己还是有很多知识盲区,感觉还是要先沉淀一下。2. 对于后台开发来说大多数是以golang和java为主要开发语言,虽然也面到过cpp但也是属于音视频领域了。自己做的cpp客户端实习和偏向于AI应用的项目整体和传统后端偏差可能比较大(仔细想了想简历匹配度上确实不太好,之前把时间放在学ai上就没有重新弄传统后端框架的项目),这我感觉也是很大的问题3. 环境问题,感觉暑期前期时间点的横向竞争比较大(全是大佬争offer),对比其他面试者如果有后端实习和对应的后端项目确实难以竞争。现在打算做个抉择(也希望佬给点建议):1. 暂时先将投递岗位转到移动客户端,虽然知道客户端前景没有后端好,但鉴于现在的大环境,转到后端也不能说无忧无虑(没有拉踩,之前相较于后端客户端就是💩),还是认为要向AI赋能方向上靠。2. 在这段时间将原本的项目重构出golang后端框架,加入主流技术栈,背八股,然后继续投后端后台岗位。自己是想同步进行换岗位面试和重构项目(利用ai整体速度还是很快的,主要强化自己的理解和八股会花很多时间),等雏形出来了就换简历上去(当然如果期间oc了可能也就考虑直接接了,有鹅选鹅,不想想那么多了,我做这行也就是想赚个年轻钱,能干几年十几年吧),还要准备学AI应用的进阶知识,还是有很多知识盲区(面试中有些问题会问的更深)自己的回顾和反思大概是这样,发这里记录和分享一下。
芒果椰冰:感觉三月份超级难。我也0-offer
点赞 评论 收藏
分享
03-25 13:39
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4406次浏览 77人参与
# 找AI工作可以去哪些公司? #
9672次浏览 276人参与
# 米连集团26产品管培生项目 #
13434次浏览 285人参与
# 你的实习产出是真实的还是包装的? #
20556次浏览 343人参与
# AI面会问哪些问题? #
28645次浏览 594人参与
# 春招至今,你的战绩如何? #
67068次浏览 591人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15543次浏览 225人参与
# 从事AI岗需要掌握哪些技术栈? #
9508次浏览 350人参与
# 中国电信笔试 #
32190次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
34977次浏览 275人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
341104次浏览 2175人参与
# 金三银四,你的春招进行到哪个阶段了? #
22439次浏览 284人参与
# 同bg的你秋招战况如何? #
212258次浏览 1121人参与
# 哪些公司真双非友好? #
69774次浏览 289人参与
# 如何准备秋招 #
78321次浏览 868人参与
# 阿里笔试 #
179204次浏览 1321人参与
# 机械人避雷的岗位/公司 #
62719次浏览 393人参与
# 小马智行求职进展汇总 #
25149次浏览 80人参与
# 第一份工作一定要去大厂吗 #
15043次浏览 122人参与
# 担心入职之后被发现很菜怎么办 #
291412次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26306次浏览 310人参与
# 应届生第一份工资要多少合适 #
20712次浏览 86人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务