阿里 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)
bm25_docs = bm25.search(query)
merged = merge_and_dedup(candidates + bm25_docs)
reranked = reranker.rank(query, merged)
context = "\n".join([doc["text"] for doc in reranked[:top_k]])

3. 预训练数据清洗方法?

预训练数据清洗首先要解决脏数据、重复数据和低质量数据

  • 脏数据:包括乱码、HTML 残留、脚本片段、异常符号、错误编码;
  • 重复数据:包括完全重复和近重复;
  • 低质量数据:包括广告、无意义灌水、模板文、机器翻译残片、拼接错乱文本。

常见做法分三步:

  1. 规则清洗:比如去标签、过滤控制字符、长度约束、语言检测;
  2. 质量过滤:比如困惑度过滤、分类器识别垃圾文本、关键词规则;
  3. 去重:常用 MinHash、SimHash、LSH 这类近重复方法。

真正影响模型上限的,很多时候不是模型结构,而是预训练数据质量。

4. 给定一个时间序列,如何通过机器学习的方法建模筛选出重要特征,然后基于规则方法进行建模?

时间序列建模里,先要把原始序列变成可学习的特征,最常见的是:

  • 统计特征:均值、方差、最大最小值;
  • 趋势特征:移动平均、环比同比;
  • 波动特征:波动率、极值;
  • 周期特征:傅里叶周期特征;
  • 滞后特征:lag 值、rolling window 特征等。

然后可以用 XGBoost、LightGBM、随机森林这类模型训练,输出特征重要性,把模型识别出的关键因子整理成多条规则做线上解释。

这样做的好处是:既保留了机器学习筛特征的能力,也兼顾了规则系统的稳定和可解释。

5. Agent 工具调用你知道怎么训练吗,训练集应该包含哪些,怎么得到训练的数据集?

训练 Agent 的工具调用能力,训练集里至少要覆盖三类样本:

  • 该调用工具的
  • 不该调用工具的
  • 需要多工具串并联调用的

只教模型 “会调用” 是不够的,还得教它 “什么时候不要调”“参数怎么补齐”“失败后怎么处理”。

数据来源一般有四种:

  1. 人工标注轨迹:把问题、思考过程、工具选择、参数填写和结果整合成监督样本;
  2. 线上日志回放:把高质量人工操作或已有系统调用链抽出来;
  3. 规则合成数据:用模板生成标准调用样本;
  4. 模型自举:用强模型生成轨迹,再人工抽检修正。

真正关键的是负样本和边界样本,像参数缺失、工具返回空、多个工具都可用但优先级不同这些不补,模型上线很容易乱调。

6. 你构造数据集遇到过什么难点,怎么解决?

最大的问题一般不是数据不够,而是数据不真实

人工造的数据常常太标准,用户表达很完整,参数给得很全,工具永远成功,结果上线之后用户一句话没说全,模型就不会了。

解决方式:

  • 把真实线上 query 引进来,按意图、复杂度、缺参情况、歧义情况分桶,然后做针对性补齐;
  • 解决标注一致性问题:同一种问题不同人可能给出不同工具路径,所以需要先统一 schema 和决策标准;
  • 长尾样本太少:靠模板改写、对抗生成和人工补充边界案例,把最容易出事故的地方优先补上。

7. LoRA 和全参数微调的区别?

  • LoRA:在原始权重旁边插入低秩矩阵,只训练少量新增参数,原模型参数通常冻结。优势:显存占用小、训练快、方便多任务切换,适合领域适配、指令跟随、工具调用格式对齐这类场景。
  • 全参数微调:直接更新模型所有参数。优势:自由度更大,但代价也更高(显存、训练成本、部署成本都高)。

8. DPO、PPO、GRPO?

  • PPO:强化学习式对齐方法,通常需要一个 reward model 对模型输出打分,再根据奖励做策略更新。特点:灵活,但训练链路长,超参数敏感,稳定性相对差。
  • DPO:把偏好学习直接写成一个监督式目标,用 chosen 和 rejected 成对数据直接优化策略,不显式采样长期轨迹,也不显式训练 RL policy update,工程上更简单。
  • GRPO:可以看成是把偏好从 pair 扩展到 group,不再只比较一对答案,而是利用一组候选之间的相对优劣关系来做优化。特点:能更充分利用多候选信息,在排序、多样本比较和组内奖励场景里更自然。

三者最大的区别不只是公式,而是它们依赖的数据形态、训练稳定性和适用任务范围不一样。

#Agent面试会问什么?#
全部评论

相关推荐

04-08 23:14
已编辑
南阳理工学院 算法工程师
本人情况:26届双非本科,两段实习经历,目前拿到的都是实习的offer,一个校招的都没有,他们都说先实习,然后等拿到毕业证了直接转正,我又害怕干三个月给我叉出去面试题也发一下吧### 杭州问尔信息技术后端登录你是怎么做的?JWT令牌你了解过吗?他虽然是一段字符串,他表达了什么东西?怎么解析出来信息和过期时间?JWT令牌怎么续期?如果我拉黑一个账号,要怎么做?两种方案(有无redis)mongodb和mysql的区别?mongodb和mysql分别实用于什么项目?选型你会怎么选?数据库的事务,那些地方需要使用,那些地方不需要使用?他会影响什么性能?mysql和pgsql有什么差异你知道吗?消息队列 redis也有,为什么要用mq?前后端会部署吗?docker会用吗?内部通信前端 async和 await你知道吗?异步编程的原理是什么?vue3 为什么你改变一个字符串 前端会跟着改动AI工具会用什么?你会怎么用?### 仲财通常用的锁有哪些synchronize和ReentrantLock的区别分布式锁了解吗?分布式事务mysql表字段sql优化什么时候用索引索引什么时候会失效mysql事务ioc一些项目应用问题### 观妙科技项目问题...zset的架构是什么样子的线程池突然队列被打满了怎么办?如果上游和下游都无法控制,该怎么维护select * from user where age>20 order by update_time 索引设计检索过程是什么样的冒泡排序和快排,有什么区别怎么判断链表有没有环### 观妙科技-二面项目部分...线程池的核心参数有哪些你是怎么用线程池的JMMG1模型跳表介绍一下平衡二叉树TCP为什么要三次握手?说一下hashmap红黑树的特征你有什么学习的方法
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务