懂车帝 AI Agent开发 二面

1. 模型训练里你怎么在全参微调和 LoRA 之间做选择

这个问题我一般不会只从显存够不够来答,而是会结合任务复杂度、分布偏移程度和上线方式来讲。全参微调的优点是表达空间更大,适合任务分布和原模型差异比较大的场景,比如领域知识很重、输出风格和推理路径都要明显改造的时候,它更容易学到深层适配;LoRA 这类 PEFT 方法更适合成本敏感、实验迭代快、模型版本频繁切换的场景,特别是多任务并行或者多租户配置时,管理上会轻很多。

如果任务本质上是在原模型能力基础上做轻量偏移,比如格式约束、领域术语补强、特定工具调用习惯,LoRA 往往就够了。反过来,如果发现训练后模型虽然会答,但深层行为模式改不动,比如推理链路还是旧习惯、拒答风格很顽固、领域事实老是浅层匹配,那我会考虑更激进的微调方式,甚至分阶段做 SFT + 局部全参。真正的选择逻辑不是“哪种先进”,而是“你想改动模型的哪一层能力”。

2. 说一下 LoRA 的原理,以及你还了解哪些 PEFT 方法

LoRA 的核心思路是把原本大的权重更新矩阵拆成两个低秩矩阵的乘积,只训练这两个小矩阵,而冻结原始大权重。这样做的好处是显存和参数更新量都能大幅下降,同时保留原模型主体能力。它本质上是在假设很多任务适配所需要的权重变化,其实落在一个低秩子空间里,不需要把整个参数空间都重新学一遍。

除了 LoRA,我还会提到 Prefix Tuning、Prompt Tuning、P-Tuning v2、Adapter、QLoRA 这些。Prefix Tuning 更像在注意力层前面插一段可训练前缀;Adapter 是在层间插小模块;QLoRA 则是在低比特量化基础上再做 LoRA,进一步压资源。实际工程里,LoRA 和 QLoRA 最常见,因为它们在效果、成本和工程成熟度之间平衡得比较好。

import torch

W = torch.randn(8, 8)
A = torch.randn(8, 2)
B = torch.randn(2, 8)

# LoRA后的等效权重
W_new = W + A @ B
print(W_new.shape)

3. 模型训练过程中的调参思路一般是什么

我调参不会一开始就铺很大搜索空间,那样效率太低。通常会先固定住大方向,比如数据配比、训练目标、模板格式和评测集,再优先调最影响稳定性的参数,像 learning rate、warmup ratio、batch size、max length、梯度裁剪和权重衰减。因为这些参数往往决定模型是不是先能正常学起来,后面再去看更细的超参才有意义。

另一个重点是调参不能只盯 loss。我会把调参拆成三类指标一起看:训练稳定性指标、离线任务指标、生成质量指标。很多模型 loss 下得很漂亮,但生成出来套话变多、格式更脆、工具调用更激进,这种就是目标对齐出了问题。调参本质上不是把曲线调好看,而是让行为往正确方向收敛。

4. 训练里如果用了 GRPO,你怎么理解它和 PPO 这类方法的差异,奖励怎么设

GRPO 可以理解成不依赖显式 value model 的一类相对偏好优化思路,它更多是基于同一问题下多个采样结果之间的相对比较来更新策略,而不是像 PPO 那样强依赖 advantage 估计和 value 网络拟合。这样做的一个好处是训练链路会更简洁,尤其在大模型场景里,少一套 value model 往往意味着更低的复杂度和更少的不稳定因素。

奖励设计上我更倾向做分解式,不会只给一个总分。比如对话或 Agent 场景里,可以把奖励拆成任务完成度、工具路径合理性、结果可验证性、格式合法性和安全性惩罚几部分。因为单一奖励很容易被模型钻空子,尤其只要“答得像”就给高分的话,模型很快就会学出一套讨巧风格,而不是学会真正解决问题。

def reward_fn(done, valid_tool_path, grounded, format_ok, unsafe):
    score = 0.0
    score += 2.0 if done else 0.0
    score += 1.0 if valid_tool_path else -1.0
    score += 1.5 if grounded else -1.5
    score += 0.5 if format_ok else -0.5
    score -= 3.0 if unsafe else 0.0
    return score

5. 你怎么理解 Agent 训练,和普通 SFT 最大区别是什么

普通 SFT 更多是在学“输入到输出”的映射,而 Agent 训练更像是在学“状态到动作”的策略。也就是说,模型不仅要会回答,还要会判断什么时候调用工具、什么时候追问、什么时候停止、什么时候回滚。训练目标从单纯的生成正确文本,变成了在多步交互环境里持续做对决策。

所以 Agent 训练最关键的不是把答案标出来,而是把过程监督做好。比如同一个任务,最终答案一样,但有的轨迹路径很脏、工具调用冗余、状态切换混乱,这种样本如果也被当成正例,模型就会学坏。Agent 的好坏往往不体现在最后一句话,而体现在中间每一步是否合理。

6. 在和用户对话的场景下,你会怎么挖掘用户消费兴趣并推荐产品

这个问题我不会把它答成一个纯推荐系统题,而是按对话 Agent 的方式来讲。核心是先把“挖兴趣”和“做推荐”拆开。前者要做的是动态画像构建,不是等用户明确说“我喜欢什么”,而是从语义偏好、预算敏感度、场景词、反复提到的约束条件里不断更新用户状态;后者则是在这个状态基础上做候选召回、过滤和解释生成。

对话里最麻烦的是兴趣往往不显式,而且会变化。所以我会做短期兴趣和长期兴趣分层。短期兴趣来自当前会话,比如用户最近在问露营装备、防水、轻量化,那当前推荐就应该偏户外;长期兴趣则来自历史偏好,比如一直偏高性价比或者偏品牌导向。系统层面最好把兴趣抽成结构化槽位,再驱动召回和排序,而不是每次全靠大模型现猜。

user_profile = {
    "short_term": ["露营", "轻量化", "防水"],
    "lon

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

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

全部评论
感觉写的很好
点赞 回复 分享
发布于 04-03 23:57 北京

相关推荐

昨天 11:16
已编辑
中山大学 算法工程师
一.实习 拷打28min二.项目12.1 现在有了Claude Code,为什么还要去重复的做一个类似的项目呢?2.2 这个项目和Claude Code相比,核心差异是什么?有什么比他做的好,什么不如他?2.3 分层上下文管理,每一层管的是什么?2.4 摘要生成器使用什么模型做的?这个摘要质量要如何保证?2.5 有没有尝试一下关于subagent的探索?启动多个agent的作用是什么?2.6 主agent和子agent的通信是怎么实现的?2.7 有没有遇到过agent陷入死循环的情况?有什么解决方案?三.项目23.1 GRPO和PPO的区别?3.2 KL散度,具体是怎么加入的?这个值太大或者太小有什么问题?3.3 Qlora的rank怎么设置的?3.4 训练参数是怎么选的?有没有调参测试?3.5 lora和qlora的区别是什么?3.6 量化之后对训练的效果影响是怎么样的?3.7 梯度检查点的原理。它对训练速度大概减缓多少?四.随机提问4.1 平时用过哪些Ai agent的工具?4.2 你觉得Ai工具,最大的帮助场景是什么?4.3 有没有遇到过Ai应用或者工具无法解决的场景?4.4 平时写的代码或者实习写的代码有多少是Ai生成的?4.5 openclaw有没有实际使用过?有没有做相关的了解?比如它的架构设计上的优势是什么?4.6 你觉得类似于openclaw或者Claude code,它现在还有哪些地方是可以改进的?4.7 Claude code源码泄露,有没有去了解它,有什么比较创新的东西?4.8 从开发者的角度,做agent最难的部分是什么?4.9 自己做agent的时候,踩过最大的坑是什么?4.10 一个好的prompt和一个差的prompt的区别?4.11 除了Qwen3VL,还有没有使用过其他的多模态大模型?4.12 有没有了解一些端侧部署的模型?五.python八股5.1 python中的深拷贝和浅拷贝的区别?5.2 python中的修饰器知道吗?5.3 python中的字典的底层原理?5.4 死锁的条件是什么?5.5 哈希表的原理?六.Code无code
点赞 评论 收藏
分享
04-03 16:08
四川大学 Java
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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