阿里 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 残留、脚本片段、异常符号、错误编码;
- 重复数据:包括完全重复和近重复;
- 低质量数据:包括广告、无意义灌水、模板文、机器翻译残片、拼接错乱文本。
常见做法分三步:
- 规则清洗:比如去标签、过滤控制字符、长度约束、语言检测;
- 质量过滤:比如困惑度过滤、分类器识别垃圾文本、关键词规则;
- 去重:常用 MinHash、SimHash、LSH 这类近重复方法。
真正影响模型上限的,很多时候不是模型结构,而是预训练数据质量。
4. 给定一个时间序列,如何通过机器学习的方法建模筛选出重要特征,然后基于规则方法进行建模?
时间序列建模里,先要把原始序列变成可学习的特征,最常见的是:
- 统计特征:均值、方差、最大最小值;
- 趋势特征:移动平均、环比同比;
- 波动特征:波动率、极值;
- 周期特征:傅里叶周期特征;
- 滞后特征:lag 值、rolling window 特征等。
然后可以用 XGBoost、LightGBM、随机森林这类模型训练,输出特征重要性,把模型识别出的关键因子整理成多条规则做线上解释。
这样做的好处是:既保留了机器学习筛特征的能力,也兼顾了规则系统的稳定和可解释。
5. Agent 工具调用你知道怎么训练吗,训练集应该包含哪些,怎么得到训练的数据集?
训练 Agent 的工具调用能力,训练集里至少要覆盖三类样本:
- 该调用工具的
- 不该调用工具的
- 需要多工具串并联调用的
只教模型 “会调用” 是不够的,还得教它 “什么时候不要调”“参数怎么补齐”“失败后怎么处理”。
数据来源一般有四种:
- 人工标注轨迹:把问题、思考过程、工具选择、参数填写和结果整合成监督样本;
- 线上日志回放:把高质量人工操作或已有系统调用链抽出来;
- 规则合成数据:用模板生成标准调用样本;
- 模型自举:用强模型生成轨迹,再人工抽检修正。
真正关键的是负样本和边界样本,像参数缺失、工具返回空、多个工具都可用但优先级不同这些不补,模型上线很容易乱调。
6. 你构造数据集遇到过什么难点,怎么解决?
最大的问题一般不是数据不够,而是数据不真实:
人工造的数据常常太标准,用户表达很完整,参数给得很全,工具永远成功,结果上线之后用户一句话没说全,模型就不会了。
解决方式:
- 把真实线上 query 引进来,按意图、复杂度、缺参情况、歧义情况分桶,然后做针对性补齐;
- 解决标注一致性问题:同一种问题不同人可能给出不同工具路径,所以需要先统一 schema 和决策标准;
- 长尾样本太少:靠模板改写、对抗生成和人工补充边界案例,把最容易出事故的地方优先补上。
7. LoRA 和全参数微调的区别?
- LoRA:在原始权重旁边插入低秩矩阵,只训练少量新增参数,原模型参数通常冻结。优势:显存占用小、训练快、方便多任务切换,适合领域适配、指令跟随、工具调用格式对齐这类场景。
- 全参数微调:直接更新模型所有参数。优势:自由度更大,但代价也更高(显存、训练成本、部署成本都高)。
8. DPO、PPO、GRPO?
- PPO:强化学习式对齐方法,通常需要一个 reward model 对模型输出打分,再根据奖励做策略更新。特点:灵活,但训练链路长,超参数敏感,稳定性相对差。
- DPO:把偏好学习直接写成一个监督式目标,用 chosen 和 rejected 成对数据直接优化策略,不显式采样长期轨迹,也不显式训练 RL policy update,工程上更简单。
- GRPO:可以看成是把偏好从 pair 扩展到 group,不再只比较一对答案,而是利用一组候选之间的相对优劣关系来做优化。特点:能更充分利用多候选信息,在排序、多样本比较和组内奖励场景里更自然。
三者最大的区别不只是公式,而是它们依赖的数据形态、训练稳定性和适用任务范围不一样。
#Agent面试会问什么?#
查看3道真题和解析