小米 AI Agent 一面(暑期)

1. 自我介绍

2. 为什么要通过微调模型来做代码生成?为什么不用纯 prompt 或 spec coding?

答案:纯 prompt 和 spec coding 确实可以提升模型在单次任务上的表现,但它们更多是推理时约束,解决的是“让模型按要求做事”的问题。微调解决的是模型行为分布的问题,比如固定代码风格、内部框架 API 使用习惯、异常处理模式、日志规范、单测模板、目录结构约定,这些如果全部靠 prompt 塞进去,成本很高,也容易在长任务里被稀释。

在缺陷修复 Agent 里,我选择微调不是为了让模型记住业务代码,而是让它学习稳定的工程动作:先读测试,再定位调用链,再改最小范围,再补回归测试。prompt 可以告诉模型这套流程,但微调能让模型更自然地遵循这种模式,减少乱改文件、漏写测试和使用不存在 API 的概率。

train_sample = {
    "instruction": "根据缺陷描述修复代码,并补充回归测试",
    "input": {
        "bug": "当用户未配置 timeout 时接口抛出 NoneType 异常",
        "files": ["client.py", "test_client.py"],
        "style": "保持最小修改,不改变公开接口"
    },
    "output": {
        "plan": ["定位 timeout 默认值", "补充空值分支", "新增单测"],
        "patch": "diff --git ...",
        "tests": ["test_default_timeout"]
    }
}

3. 这个项目是什么时候开始、什么时候完成的?怎么证明不是临时包装的?

答案:这个项目可以按阶段讲。前期大概两周做原型,目标是验证模型能否基于 Issue 自动定位相关代码;中间一个月做工具链,包括仓库检索、AST 分析、测试执行、patch 生成和 CI 接入;后面两到三周做评测集、失败 case 复盘和链路优化。

证明项目真实性不能只说时间线,要能说清楚每个阶段遇到的问题和指标变化。比如一开始模型经常只改业务代码不补测试,后来把任务拆成“定位-计划-修改-测试-总结”,并把测试失败日志作为 observation 回灌给 Agent,修复成功率才明显提升。

阶段一:代码检索原型,验证 Issue -> 文件定位
阶段二:接入 AST、git diff、pytest、CI 日志
阶段三:构建缺陷样本集,评估修复成功率和测试通过率
阶段四:优化上下文压缩、失败重试、工具调用参数校验

4. spec coding / SDD 也能拆 task,为什么达不到你项目里的效果?

答案:spec coding 或 SDD 更像是把需求写清楚,让模型按规格逐步实现。它适合需求边界明确、上下文稳定、任务可以人工拆解的场景。但真实缺陷修复里,需求往往不完整,错误日志和代码实现之间存在间接关系,模型需要自己定位上下文、发现隐藏依赖、执行测试并根据失败结果继续修正。

我的项目里不是简单“把任务拆小”,而是让 Agent 在每一步都能读环境反馈。比如第一次 patch 后测试失败,Agent 需要理解失败栈、回到相关代码继续修改。SDD 的静态任务列表很难覆盖这种动态反馈,而 Agent 的重点是“状态驱动的下一步决策”。

state = {
    "issue": "接口偶发返回 500",
    "current_step": "run_tests",
    "last_observation": "test_user_api failed: KeyError('profile')",
    "changed_files": ["user_service.py"],
    "next_action": "inspect_profile_default_branch"
}

5. 你当时用 Qwen2.5,为什么没有用更新的模型?

答案:模型选型不是只看发布时间和榜单分数,还要看部署成本、推理延迟、私有化要求、工具调用稳定性和代码任务上的性价比。当时选择 Qwen2.5,主要是因为它在中文、代码理解、指令跟随和本地部署生态上比较均衡,vLLM、量化、LoRA 微调都比较成熟,方便做闭环实验。

更新模型可能参数更大、能力更强,但如果部署成本翻倍、响应延迟明显变高,Agent 多轮调用时整体成本会被放大。代码修复 Agent 不是只调用一次模型,一次任务可能涉及规划、检索、生成 patch、解释测试失败、再次修复等多次推理,所以稳定性和成本很关键。

model_choice = {
    "base_model": "Qwen2.5-Coder-14B",
    "reason": [
        "代码能力稳定",
        "支持本地部署",
        "LoRA 微调链路成熟",
        "vLLM 推理吞吐可接受",
        "多轮 Agent 成本可控"
    ]
}

6. 你用的是自己部署的模型吗?为什么不用外部大模型 API?

答案:是自己部署为主,外部 API 可以作为对照评测或兜底,但不能作为核心链路。原因有几个:第一,代码仓库、Issue、CI 日志都可能包含内部业务逻辑和敏感信息,直接传给外部 API 有合规风险;第二,Agent 任务调用频率高,用外部 API 成本不稳定;第三,内部模型可以做 LoRA 微调和推理优化,外部 API 很难控制模型版本和行为漂移。

另外,代码生成场景需要稳定复现。今天同一个 prompt 输出一种 patch,明天模型版本变了输出另一种 patch,会影响评测和上线。自己部署虽然运维成本更高,但能控制模型版本、采样参数、日志、审计和灰度策略。

inference_config = {
    "deployment": "self_hosted",
    "engine": "vllm",
    "max_model_len": 32768,
    "temperature": 0.2,
    "top_p": 0.9,
    "version": "coder-agent-lora-v3"
}

7. 外部模型参数更大,14B 在 Agent 层面会不会不够?

答案:14B 的确不如更大模型在复杂推理上稳,但 Agent 系统不能只依赖模型裸能力。工程上可以通过工具、检索、结构化状态、约束解码、测试反馈和评审器补足模型能力。很多代码修复任务失败不是因为模型不知道语法,而是因为上下文没给对、任务边界不清、测试反馈没利用好。

如果出现指令遵循问题,我会先区分原因。如果是模型理解能力不足,可以换更大模型或蒸馏更强模型的数据;如果是上下文污染,就要做上下文裁剪;如果是任务太长,就拆成状态机;如果是工具结果不可靠,就先修工具链。模型参数大小只是一个因素,不是唯一瓶颈。

def route_model(task):
    if task["risk"] == "high" or task["files_changed"] > 5:
        return "larger_model_review"
    if task["type"] in ["simple_bugfix", "unit_test"]:
        return "local_14b_agent"
    return "local_14b_with_rerank"

8. memory 的持久化是怎么做的?

答案:memory 我分成会话级、任务级和项目级。会话级保存用户当前交互,生命周期较短;任务级保存一次缺陷修复过程中的目标、计划、文件、测试结果和失败原因;项目级保存仓库编码规范、常见模块说明、

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

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

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

全部评论
小米agent面爱问微调vsprompt,蹲二面
点赞 回复 分享
发布于 06-04 17:19 北京

相关推荐

面试官人很好!!!刚开始面试的时候其实超级超级紧张,但是面试官会诱导我回答,越聊越轻松。无算法无手撕。无自我介绍1. 面试官自我介绍,给我介绍团队部门和业务(一个偏ToD基础设施,一个类claude)2. 日常开发中你是怎么用ai的?3. 你是怎么进行测试的?(tips:其实面试官从这里开始就想问我workflow,一直在诱导我回答)我:就是让ai编写一些测试脚本去处理正常情况和边界情况面:那你这样子每次手动让ai去编写测试代码不会很繁琐嘛?那如果现在已经有了一个相关的Skill你会怎么用他?我:(叽里呱啦一大堆,我大概讲了一下这个skill应该做什么事情,讲了讲渐进式加载skill)面:那你能确保这个skill一定能执行嘛?我:我们可以用workflow,主流程固定,节点任务交给agent或者llm面:我想听的就是这个,那workflow怎么用呢?我:这确实不知道面:我们可以把workflow写到system prompt中4. 你用ai到现在花了多少钱?(一分钱没花,这里还唠了一会)5. 项目中的打字机效果是怎么实现的?6. 打字机的帧率是多少,是怎么计算的?7. markdown渲染你有没有什么安全措施?怎么防XSS(gfm白名单)8. CSFR攻击9. 为什么要用SSE做ai输出,不用websocket?10. 项目:ai生成歌曲肯定需要一定的事件,你怎么让用户等待更加舒畅?11. 等待进度条的当前task是怎么做的?(SSE 自定义事件)12. 为什么播放器要全局状态管理?13. 假设我现在要做一个效果,就是根据音乐有音波的震动感,你会怎么做,谈谈思路就可以。我:1.用现成的库。2.每隔0.5s或者固定时间对某个节点进行分析音乐特征作为主波频,小波频可以用噪声模拟。面:音乐文件是可以解析成数组的,里面有音乐相关的特征信息(感觉运气很好啊,因为面试官也做过类似的项目所以比较感兴趣)14. 为什么你的项目要用Next.js,这里我吐槽了一波SSR很恶心,很多浏览器的api都不能用,面试官告诉我那就是SSR用的地方不对,确实醍醐灌顶了,有高交互的地方确实不应该也不适合使用SSR15. 你知道哪些性能指标呢?你是怎么监测的呢?16.  我看你简历上写了擅长性能优化,跟我说说你怎么做的吧。(因为我们的服务器很差,我做了超级多的性能优化,我个人觉得这里答得蛮不错的,面试官说很少人会写这个,答出来会很加分)17. 还有一些个别问题吧,刚开始的时候太紧张了,确实不记得了录音了。。。18. 你觉得ai会取代前端嘛?19. 你说你更喜欢美学和设计之类的,你了解过哪些动画库或者UI库嘛?20. 通知一面过了(真的开心坏了哈哈哈哈哈哈哈)反问:1. 如果能顺利通过面试的话,老师您更推荐我去哪个部门?2. 大厂的开发流程协作模式是怎么样的?3. 我现在用ai有个问题,日常开发中使用ai,如果代码是ai写的我会有深深的愧疚感,但是又不能不用。用了ai写代码,代码能力就慢慢地下降了,导致进一步使用ai,形成恶性循环,不知道老师您是怎么看的?(随个简历和下一场面试邀请)
晨时念:羡慕期待明天我也是这样
点赞 评论 收藏
分享
给个offer吧😭...:agent开发据我所知好点的厂子都是要9的吧,毕竟人多。另外很混乱,好多厂是还要你懂深度学习的知识虽然可能他们也不用,谁让人多呢
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

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